
//-----------------------------------------------
//-----------------------------------------------
//----    Zayda DYNamic lib v1.0 (c) 2002    ----
//-----------------------------------------------
//-----------------------------------------------

var dom = document.getElementById;
var ie = document.all;
var ie4 = document.all&&!document.getElementById;
var ns4 = document.layers;
var ns6 = !document.all&&document.getElementById;
var opera = navigator.userAgent.indexOf("Opera")>-1;


function getWindowWidth() { return ns4||ns6?window.innerWidth:document.body.clientWidth; }
function getWindowHeight() { return ns4||ns6?window.innerHeight:document.body.clientHeight; }
function inspectObj(obj) { var str = ""; for (var key in obj) str += "["+typeof(obj[key])+"] "+key+"="+obj[key]+"\n"; alert(str); }
function splitParams(str)
{
	var arr = str.split(" "), pars = new Array(), str2 = "";
	for (var i=0; i<arr.length; i++) str2 += arr[i];
	arr = str2.split(",");
	for (var i=0; i<arr.length; i++)
	{
		var item = arr[i].split("=");
		pars[item[0]] = isNaN(item[1]-0)?item[1]:item[1]-0;
	}
	return pars;
}

function scrollbox(name, params, content_params, content) { new Layer(name, params, new Layer(name+"_content", content_params, content)).draw(); }

function scrollbar(name, params, content, partner)
{
	var sbar = new Layer(name, params);
	var sbar_content = new Layer(name+"_content", "left=0, top=0, min_left=0, max_left="+(sbar.width>sbar.height?sbar.width-sbar.params.size:0)+", min_top=0, max_top="+(sbar.height>sbar.width?sbar.height-sbar.params.size:0), content);
	sbar.addChild(sbar_content);
	sbar_content.join(partner);
	dragEvents.add(name+"_float", sbar_content);
	sbar.draw();
}

//----------------------------------
//----          Layer           ----
//----------------------------------
function Layer(name, params, content)
{
	if (!arguments.length) return;
	this.params = splitParams(params);
	this.name = name;
	this.left = this.params.left;
	this.top = this.params.top;
	this.width = this.params.width;
	this.height = this.params.height;
	this.min_left = typeof(this.params.min_left)!="undefined"?this.params.min_left:-9999;
	this.min_top = typeof(this.params.min_top)!="undefined"?this.params.min_top:-9999;
	this.max_left = typeof(this.params.max_left)!="undefined"?this.params.max_left:9999;
	this.max_top = typeof(this.params.max_top)!="undefined"?this.params.max_top:9999;
	this.z = this.params.zindex;
	this.bgcolor = this.params.bgcolor;
	this.background = this.params.background;
	this.alpha = this.params.alpha;
	this["class"] = this.params["class"];
	this.absolute = typeof(this.left)!="undefined"&&typeof(this.top)!="undefined";
	this.no_clip = this.params.no_clip;
	this.clip_padding = this.params.clip_padding?this.params.clip_padding:0;
	this.content = typeof(content)=="string"?content:"";
	this.parent = null;
	this.children = new Array();
	for (var i=2; i<arguments.length; i++) if (typeof(arguments[i])=="object") this.addChild(arguments[i]);
	window[name] = this;
}
Layer.prototype.getCode = function()
{
	var inner_code = this.content;
	for (var name in this.children) inner_code += this.children[name].getCode();
	if (dom||ie4) 
	{
		var code = "<div id=\"layer_"+this.name+"\" name=\"layer_"+this.name+"\" style=\"position:";
		code += !this.absolute?"relative":"absolute; left:"+this.left+"px; top:"+this.top+"px";
		code += this.width?"; width:"+this.width+"px":"";
		code += this.height?"; height:"+this.height+"px":"";
		code += this.zindex?"; z-index:"+this.zindex:"";
		code += this.bgcolor?"; background-color:"+this.bgcolor:"";
		code += this.background?"; background:url('"+this.background+"')":"";
		code += this.alpha?"; filter:alpha(opacity="+this.alpha+")":"";
		code += "; overflow:hidden\" class=\""+(this["class"]?this["class"]:"layer_"+this.name)+"\"";
		code += ">"+inner_code+"</div>";
	}
	else if (ns4)
	{	
		var code = "<"+(this.absolute?"layer":"ilayer")+" name=\"layer_"+this.name+"\"";
		code += this.absolute?" left="+this.left+" top="+this.top:"";
		code += this.width?" width="+this.width:"";
		code += this.height?" height="+this.height:"";
		code += this.zindex?" z-index="+this.zindex:"";
		code += this.bgcolor?" bgcolor="+this.bgcolor:"";
		code += this.background?" background="+this.background:"";
		if (!this.no_clip) code += this.width&&this.height?" clip=\""+this.clip_padding+","+this.clip_padding+","+(this.width-this.clip_padding)+","+(this.height-this.clip_padding)+"\"":"";
		code += " class=\""+(this["class"]?this["class"]:"layer_"+this.name)+"\">"+inner_code+"</"+(this.absolute?"layer":"ilayer")+">";
	}
	return code;
}
Layer.prototype.init = function(parent)
{
	this.parent = parent;
	if (dom)
	{
		this.obj = document.getElementById("layer_"+this.name);
		this.style = document.getElementById("layer_"+this.name).style;
	}
	else if (ie4)
	{
		this.obj = document.all["layer_"+this.name];
		this.style = document.all["layer_"+this.name].style;
	}
	else if (ns4)
	{
		this.obj = this.style = parent?parent.obj.document.layers["layer_"+this.name]:document.layers["layer_"+this.name];
		this.contentHeight = this.obj.clip.height;
	}
	if (dom||ie4) this.contentHeight = this.obj.offsetHeight;
	for (var name in this.children) this.children[name].init(this);
	if (ns4) this.obj.captureEvents(Event.MOUSEDOWN|Event.MOUSEUP);
	this.obj.zdyn = this;
	this.obj.onmousedown = function() { if (this.zdyn.onMouseDown) this.zdyn.onMouseDown(); }
	this.obj.onmouseup = function() { if (this.zdyn.onMouseUp) this.zdyn.onMouseUp(); }
	this.clipToParent();
}
Layer.prototype.draw = function(parent)
{
	if (!parent&&!this.absolute&&ns6) // mozilla rel2abs
	{
		document.write("<div id=\"dummy_"+this.name+"\" style=\"position:relative; width:"+this.width+"px; height:"+this.height+"px;\"></div>");
		var dummy = document.getElementById("dummy_"+this.name);
		this.left = dummy.offsetLeft+document.body.offsetLeft;
		this.top = dummy.offsetTop+document.body.offsetTop;
		this.absolute = true;
	}
	document.write(this.getCode());
	this.init(parent);
}
Layer.prototype.addChild = function(layer) { this.children[layer.name] = layer; }
Layer.prototype.setVisible = function (visible) { this.style.visibility = visible?(ns4?"show":"visible"):(ns4?"hide":"hidden"); }
Layer.prototype.getContentWidth = function() { return ns4?this.obj.clip.width:this.obj.offsetWidth; }
Layer.prototype.getContentHeight = function() { return ns4?this.obj.clip.height:this.obj.offsetHeight; }
Layer.prototype.setLeft = function (left) { this.style.left = this.left = left; }
Layer.prototype.setTop = function (top) { this.style.top = this.top = top; }
Layer.prototype.getLeft = function () { return this.left; }
Layer.prototype.getTop = function () { return this.top; }
Layer.prototype.moveTo = function (left, top)
{
	if (left<this.min_left) left = this.min_left;
	if (left>this.max_left) left = this.max_left;
	if (top<this.min_top) top = this.min_top;
	if (top>this.max_top) top = this.max_top;
	this.style.left = this.left = left;
	this.style.top = this.top = top;
	this.clipToParent();
	if (this.partner)
	{
		var w = this.partner.getContentWidth()-this.partner.parent.width;
		var h = this.partner.getContentHeight()-this.partner.parent.height;
		if (w>0||h>0) this.partner.moveTo(this.max_left&&w>0?-Math.floor(this.left*(w/this.max_left)):this.partner.left, this.max_top&&h>0?-Math.floor(this.top*(h/this.max_top)):this.partner.top);
	}
}
Layer.prototype.moveBy = function (dx, dy) { this.moveTo(this.left+dx, this.top+dy); }
Layer.prototype.setLimits = function(min_left, min_top, max_left, max_top) { this.min_left = min_left; this.min_top = min_top; this.max_left = max_left; this.max_top = max_top; }
Layer.prototype.setZindex = function (z) { this.style.zIndex = this.z = z; }
Layer.prototype.getZindex = function () { return this.z; }
Layer.prototype.setBgColor = function (color) { this.style.backgroundColor = color; }
Layer.prototype.getContent = function() { return this.content; }
Layer.prototype.setContent = function (content)
{
	if (ns4) 
	{
		this.obj.document.open();
		this.obj.document.write(content);
		this.obj.document.close();
	}
	else this.obj.innerHTML = content;
	this.content = content;
}
Layer.prototype.clip = function (x1, y1, x2, y2)
{
	if (dom||ie4) this.style.clip = "rect("+y1+"px "+x2+"px "+y2+"px "+x1+"px)";
	else if (ns4) 
	{
		this.style.clip.left = x1;
		this.style.clip.top = y1;
		this.style.clip.right = x2;
		this.style.clip.bottom = y2;
	}
}
Layer.prototype.clipToParent = function()
{
	if (!this.no_clip&&this.parent&&!ns4)
	{
		if (this.absolute) this.clip(-this.left+this.clip_padding, -this.top+this.clip_padding, -this.left+this.parent.width-this.clip_padding, -this.top+this.parent.height-this.clip_padding); else this.clip(0, 0, this.parent.width, this.parent.height);
	}
}
Layer.prototype.scrollStop = function()
{
	if (this.scrollId) clearTimeout(this.scrollId);
	this.scr_count = 0;
	this.scr_acc = 1;
}
Layer.prototype.scrollTo = function(left, top, steps, acc)
{
	this.scrollStop();
	if (!steps)
	{
		var w = this.max_left-this.min_left;
		var h = this.max_top-this.min_top;
		steps = Math.round((w+h)/4);
	}
	this.scr_x1 = this.left;
	this.scr_y1 = this.top;
	this.scr_x2 = left;
	this.scr_y2 = top;
	this.scr_dx = (this.scr_x2-this.scr_x1)/steps;
	this.scr_dy = (this.scr_y2-this.scr_y1)/steps;
	this.scr_steps = steps;
	this.scr_acc = acc?acc:1;
	this.scr_dacc = (1-this.scr_acc)/steps;
	this.scr_count = 1;
	this.scroll();
}
Layer.prototype.scrollBy = function(dx, dy, steps, acc) { this.scrollTo(this.left+dx, this.top+dy, steps, acc); }
Layer.prototype.scrollUp = function(steps) { this.scrollBy(0, this.min_top-this.max_top, steps); }
Layer.prototype.scrollDown = function(steps) { this.scrollBy(0, this.max_top-this.min_top, steps); }
Layer.prototype.scrollLeft = function(steps) { this.scrollBy(this.min_left-this.max_left, 0, steps); }
Layer.prototype.scrollRight = function(steps) { this.scrollBy(this.max_left-this.min_left, 0, steps); }
Layer.prototype.scroll = function()
{
	if (this.scr_count)
	{
		var left = this.scr_x1+Math.round(this.scr_count*this.scr_dx*this.scr_acc);
		var top = this.scr_y1+Math.round(this.scr_count*this.scr_dy*this.scr_acc);
		this.scr_acc += this.scr_dacc;
		this.scr_count++;
		this.moveTo(left, top);
		if (this.scr_count<=this.scr_steps) this.scrollId = setTimeout(this.name+".scroll()", 20);
	}
}
Layer.prototype.join = function(layer) { this.partner = layer; }

//----------------------------------
//----        DragEvents        ----
//----------------------------------
var event_x, event_y, event_target;
var dragging = false, dragEvents = new Array();

dragEvents.add = function(name, layer) { this[name] = layer; }

function mouseMove(e)
{
	if (dragging)
	{
		if (ns4)
		{
			var x = e.pageX;
			var y = e.pageY;
		}
		else 
		{
			var x = ns6?e.clientX:event.clientX;
			var y = ns6?e.clientY:event.clientY;
		}
		var dx = x-event_x;
		var dy = y-event_y;
		event_x = x;
		event_y = y;
		var left = dragEvents[event_target].getLeft()+dx;
		var top = dragEvents[event_target].getTop()+dy;	
		dragEvents[event_target].moveTo(left, top);
		return false;
	}
}

function mouseDown(e)
{
	if (ns4)
	{
		event_x = e.pageX; 
		event_y = e.pageY;
		event_target = e.target.name;
		if (dragEvents[event_target]) dragging = true;
	}
	else
	{
		event_x = ns6?e.clientX:event.clientX;
		event_y = ns6?e.clientY:event.clientY;
		event_target = ns6?e.target.name:event.srcElement.name;
		if (dragEvents[event_target]) dragging = true; 
	}
} 
function mouseUp() { dragging = false; }

if (ns4)
{
	window.captureEvents(Event.MOUSEDOWN|Event.MOUSEUP|Event.MOUSEMOVE);
	window.onmousemove = mouseMove;
	window.onmousedown = mouseDown;
	window.onmouseup = mouseUp;
}
else
{
	document.onmousemove = mouseMove;
	document.onmousedown = mouseDown;
	document.onmouseup = mouseUp;
}

//----------------------------------
//----       bottomSlider       ----
//----------------------------------

function BottomSlider(name, params, content, speed)
{
	this.constructor(name, params, content);
	this.slide_speed = speed;
	this.draw();
	this.slide();
}
BottomSlider.prototype = new Layer;
BottomSlider.prototype.slide = function()
{
	var x = 0, y = getWindowHeight()+(ns4||ns6?window.pageYOffset:document.body.scrollTop)-this.height;
	var dx = this.left==x?0:(Math.floor(Math.abs(this.left-x)/this.slide_speed)+1)*(this.left>x?-1:1);
	var dy = this.top==y?0:(Math.floor(Math.abs(this.top-y)/this.slide_speed)+1)*(this.top>y?-1:1);		
	if (dx!=0||dy!=0) this.moveBy(dx, dy); 
	window.setTimeout(this.name+".slide()", 20);
}

//----------------------------------

function checkForm(form, params)
{
	var result = true;
	var errstr = "Chyba ve formuláři:\n";
	var pars = params.split(";");
	for (i=0; i<pars.length; i++) 
	{
		var par = pars[i].split(":");
		var val = parseInt(form[par[0]].value);
		if (!par[2]&&!form[par[0]].value)
		{
			form[par[0]].focus();
			alert(errstr+par[1]);
			result = false;
			break;
		}
		else if (par[2]&&!par[3]&&(isNaN(val)||(val<par[2])))
		{
			form[par[0]].focus();
			alert(errstr+par[1]);
			form[par[0]].value = "";
			result = false;
			break;
		}
		else if (par[3]&&(isNaN(val)||(val<par[2])||(val>par[3])))
		{
			form[par[0]].focus();	
			alert(errstr+par[1]);
			form[par[0]].value = "";			
			result = false;
			break;
		}
	}
	return result;
}
