var tween = null;
var x = 0;
var o = 180;
var easing = 0.2;
var index = 1;

var EVENTS = new Array();
var numEvents;
var numDisplay 	= 5;
var imageObj 		= new Image(170, 170);

function initCarousel() {
	var eventsRequest = new XMLDoc();
	eventsRequest.loadXMLDoc("events.php", initEvents);
}

function initEvents(req) {
	req = req.request;
	if (req.readyState == 4 && req.status == 200) {
		var data = req.responseXML.getElementsByTagName("events")[0];
		var caption;
		var url;
		var id;
		
		for (var i = 0; i < data.childNodes.length; i++) {
			if (data.childNodes[i].nodeType == 1) {
				id 			= data.childNodes[i].getAttribute("id");
				url 		= data.childNodes[i].getAttribute("url");
				if (data.childNodes[i].hasChildNodes) {
					for (var j = 0; j < data.childNodes[i].childNodes.length; j++) {
						if (data.childNodes[i].childNodes[j].nodeType == 4)
						caption	= data.childNodes[i].childNodes[j].nodeValue;
					}
				}
				EVENTS.push({ image: 'image.php?id=' + id, caption: caption, url: url});
			}
		}
		
		numEvents = EVENTS.length;
	
		if (document.images) {
			for (var i = 0; i < numEvents; i++) {
				imageObj.src = EVENTS[i]["image"];
			}
		}
	
		var html 		= new Array();
		var tempPos;
		
		for (var pos = 0; pos <= (numDisplay + 1); pos++) {
			if (pos == 0) {
				caption = EVENTS[numEvents - 1]["caption"];
				url 		= EVENTS[numEvents - 1]["url"];
				image		= EVENTS[numEvents - 1]["image"];
			} else {
				tempPos	= pos - (numEvents * (Math.ceil(pos / numEvents) - 1));
				caption = EVENTS[tempPos - 1]["caption"];
				url 		= EVENTS[tempPos - 1]["url"];
				image 	= EVENTS[tempPos - 1]["image"];
			}
			html.push('<div id="event' + pos + '" class="event">');
			html.push('<h4>');
			html.push('<a href="' + url + '"  onclick="window.open(this.getAttribute(\'href\'), \'_blank\'); return false;">' + caption + '</a>');
			html.push('</h4>');
			html.push('<a href="' + url + '"  onclick="window.open(this.getAttribute(\'href\'), \'_blank\'); return false;"><img src="' + image + '" alt="' + url + '" /></a>');
			html.push('</div>');
		}
			
		document.getElementById("carousel-content").innerHTML = html.join('');
	}
}

function doTween(d) {
	var vx = (d - x) * easing;
	if (Math.abs(d - x) < 1) {
		clearInterval(tween);
		tween = null;
		x = 0;
		var tempPos;

		for (var pos = 0; pos < document.getElementById("carousel-content").getElementsByTagName("div").length; pos++) {
			e = document.getElementById("carousel-content").getElementsByTagName("div")[pos];
			id = parseInt(e.id.substring(5));
			
			if (d > 0) {
				if (id == numDisplay + 1) {
					e.id = "event0";

					if (index > 1) {
						e.getElementsByTagName("img")[0].src = EVENTS[index - 2]["image"];
						e.getElementsByTagName("img")[0].alt = EVENTS[index - 2]["url"];
						e.getElementsByTagName("a")[0].innerHTML = EVENTS[index - 2]["caption"];
						for (var i = 0; i < e.getElementsByTagName("a").length; i++) {
							e.getElementsByTagName("a")[i].href = EVENTS[index - 2]["url"];
						}
					} else {
						e.getElementsByTagName("img")[0].src = EVENTS[numEvents - 1]["image"];
						e.getElementsByTagName("img")[0].alt = EVENTS[numEvents - 1]["url"];
						e.getElementsByTagName("a")[0].innerHTML = EVENTS[numEvents - 1]["caption"];
						for (var i = 0; i < e.getElementsByTagName("a").length; i++) {
							e.getElementsByTagName("a")[i].href = EVENTS[numEvents - 1]["url"];
						}
					}
					
				} else {
					e.id = "event" + (id + 1);
				}
				e.style.left = null;
			} else {
				if (id == 0) {
					e.id = "event" + (numDisplay + 1);

					tempPos = (index + numDisplay) - (numEvents * (Math.ceil((index + numDisplay) / numEvents) - 1));
					e.getElementsByTagName("img")[0].src = EVENTS[tempPos - 1]["image"];
					e.getElementsByTagName("img")[0].alt = EVENTS[tempPos - 1]["url"];
					e.getElementsByTagName("a")[0].innerHTML = EVENTS[tempPos - 1]["caption"];
					for (var i = 0; i < e.getElementsByTagName("a").length; i++) {
						e.getElementsByTagName("a")[i].href = EVENTS[tempPos - 1]["url"];
					}					

				} else {
					e.id = "event" + (id - 1);
				}
				e.style.left = null;	
			}	
		}
	} else {
		x += vx;
		xr = Math.round(x);
		for (var i = 0; i <= (numDisplay + 1); i++) {
			document.getElementById("event" + i).style.left = ((i - 1) * o) + xr + "px";
		}
	}
};

var dragObj = null;
var startY 	= 0;
var offsetY	= 0;

function startDrag(evt) {
	evt = (evt) ? evt : window.event;
	var obj = (evt.target) ? evt.target : evt.srcElement;
		
	dragObj = obj;
	
	var scrollContent = dragObj.parentNode.parentNode.parentNode.getElementsByTagName("div")[2];
	var scrollHeight = parseInt(scrollContent.offsetHeight, 10);

	if (scrollHeight > 150) {
		dragObj.className = "bar drag";
		
		if (evt.pageY) {
			startY = evt.pageY;
		}
		else if (evt.clientY) {
			startY = evt.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
		}
		
		offsetY = obj.offsetTop;
		
		document.onmousemove = moveDrag;
		document.onmouseup = function() { 
			document.onmousemove = null;
			dragObj.className = "bar";
		};
		
		document.body.focus();
		document.onselectstart = function () { return false; };
		obj.ondragstart = function() { return false; };
	}
	return false;
};

function moveDrag(evt) {
	evt = (evt) ? evt : window.event;
	
	var evtY;

	if (evt.pageY) {
		evtY = evt.pageY;
	}
	else if (evt.clientY) {
		evtY = evt.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
	}
	
	var posY = offsetY + evtY - startY;
	
	dragObj.style.top = posY + "px";
	
	if (parseInt(dragObj.style.top, 10) < 27) {
		dragObj.style.top = "27px";
	} else if (parseInt(dragObj.style.top, 10) > 94) {
		dragObj.style.top = "94px";
	}
	
	updateScroll();
};

function updateScroll() {
	var barY = parseInt(dragObj.style.top, 10);
	
	var scrollContent = dragObj.parentNode.parentNode.parentNode.getElementsByTagName("div")[2];
	var scrollHeight = parseInt(scrollContent.offsetHeight, 10);
	
	var percent = (barY - 27) / 67;
	
	scrollContent.style.top = Math.floor(-percent * (scrollHeight - 150)) + "px";
};

var scrolling = null;
var speed = 5;

function scrollUp(evt) {
	evt = (evt) ? evt : window.event;
	var obj = (evt.target) ? evt.target : evt.srcElement;
	makeScroll(obj, speed);
};

function scrollDown(evt) {
	evt = (evt) ? evt : window.event;
	var obj = (evt.target) ? evt.target : evt.srcElement;
	makeScroll(obj, -speed);
};

function makeScroll(obj, speed) {
	e = obj.parentNode.parentNode.getElementsByTagName("div")[1];

	if (e.offsetHeight > 150) {
		var y;
		y = getElementStyle(e, "top");
		y = parseInt(y, 10);
		if (y + speed < -(e.offsetHeight - 150)) {
			e.style.top = -(e.offsetHeight - 150) + "px";
			stopScroll();
		} else if (y + speed > 0) {
			e.style.top = "0px";
			stopScroll();
		} else {
			e.style.top = (y + speed) + "px";
			updateScrollBar(obj);
		}
		scrolling = setTimeout(function() { makeScroll(obj, speed); }, 5);
	} else if (scrolling) {
		stopScroll();
	}
}

function stopScroll() {
	clearTimeout(scrolling);
	scrolling = null;
};

function updateScrollBar(obj) {
	e = obj.parentNode.parentNode.getElementsByTagName("div")[1];
	
	var y;
	y = getElementStyle(e, "top");
	y = parseInt(y, 10);		
		
	var percent =  -y / (e.offsetHeight - 150);
	
	e = obj.parentNode.parentNode.getElementsByTagName("div")[4];
	
	e.style.top = Math.round(27 + (percent * 67)) + "px";
};

function init() {
	setCalendar();
	initCarousel();
	setInterval("moveLeft()", 5000);
}

function moveRight() {
	if (!tween) {
		index--;
		if (index == 0) index = numEvents;
		tween = setInterval("doTween(180)", 40);
	}
}

function moveLeft() {
	if (!tween) {
		index++;
		if (index > numEvents) index = 1;
		tween = setInterval("doTween(-180)", 40);
	}
}

var MONTHS = new Array('leden',
											 'únor',
											 'březen',
											 'duben',
											 'květen',
											 'červen',
											 'červenec',
											 'srpen',
											 'září',
											 'říjen',
											 'listopad',
											 'prosinec');

function getElementStyle(elem, CSSStyleProp) {
	var styleValue, camel;
	if (elem) {
		if (document.defaultView && document.defaultView.getComputedStyle) {
			var compStyle = document.defaultView.getComputedStyle(elem, "");
			styleValue = compStyle.getPropertyValue(CSSStyleProp);
		} else if (elem.currentStyle) {
			var IEStyleProp = CSSStyleProp;
			var re = /-\D/;
			while (re.test(IEStyleProp)) {
				camel = IEStyleProp.match(re)[0].charAt(1).toUpperCase();
				IEStyleProp = IEStyleProp.replace(re, camel);
			}
			styleValue = elem.currentStyle[IEStyleProp];
		}
	}
	return (styleValue) ? styleValue : null;
}

function displayDate(e) {
	var div = e.getElementsByTagName("div")[1];
	div.className != "bubble" ? div.className = "bubble" : div.className = "hidden";
}

function XMLDoc() {
	var me = this;
	var req = null;
	
	if (window.XMLHttpRequest) {
		try {
			req = new XMLHttpRequest();
		} catch(e) {
			req = null;
		}
	} else if (window.ActiveXObject) {
		try {
			req = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {
			try {
				req = new ActiveXObject("Microsoft.XMLHTTP");
			} catch(e) {
				req = null;
			}
		}
	} else {
		alert("Tento prohlížeč nepodporuje XML, některé funkce stránky budou nedostupné.");
	}
	
	this.request = req;
	
	this.loadXMLDoc = function(url, loadHandler) {
		if (this.request) {
			this.request.open("GET", url, true);
			this.request.onreadystatechange = function() {
				loadHandler(me);
			};
			this.request.setRequestHeader("Content-Type", "text/xml");
			this.request.send(null);
		}
	};
};

function setCalendar(year, month) {
	var calendarRequest = new XMLDoc();
	if (year && month) {
		calendarRequest.loadXMLDoc("calendar.php?Y=" + year + "&M=" + month, updateCalendar);
	} else {
		calendarRequest.loadXMLDoc("calendar.php", updateCalendar);
	}
};

function updateCalendar(req) {
	req = req.request;
	if (req.readyState == 4 && req.status == 200) {
		var year 		= req.responseXML.getElementsByTagName("calendar")[0].getAttribute("year");
		var month 	= req.responseXML.getElementsByTagName("calendar")[0].getAttribute("month");
		var Y				= parseInt(year, 10);
		var M				= parseInt(month, 10);
		var today 	= req.responseXML.getElementsByTagName("calendar")[0].getAttribute("today");
		var data 		= req.responseXML.getElementsByTagName("month")[0];
		var numdays = data.getAttribute("numdays");
		var begin		= data.getAttribute("begin");
		var events 	= new Array(numdays);
		var date;
		
		for (var i = 0; i < data.childNodes.length; i++) {
			if (data.childNodes[i].nodeType == 1) {
				date = data.childNodes[i].getAttribute("date");
				if (events[date] == undefined) {
					events[date] = new Array();
				}
				events[date].push(new Array(data.childNodes[i].firstChild.nodeValue, data.childNodes[i].getAttribute("url")));
			}
		}
		
		var html = new Array();
		var count;
		var day;
		var evts;
		
		html.push('<table border="0" cellpadding="0" cellspacing="1">');
		
		for (var y = 0; y < 6; y++) {
			html.push("<tr>");
			for (var x = 0; x < 7; x++) {
				count = (y * 7) + (x + 1);
				day 	= count - begin + 1;
				date	= year + "-" + month + "-" + (day < 9 ? "0" + day : day);
				
				html.push("<td ");
				if (count < begin || day > numdays) {
					html.push('class="empty">');
					html.push("&nbsp;");
				} else if (events[date] != undefined) {
					html.push('class="full" onmouseover="displayDate(this);" onmouseout="displayDate(this);">');
					html.push('<div style="position: relative;">');
					html.push('<img src="images/calendar/dt' + day + '.gif" alt="' + day + '" width="22" height="22" />');
					html.push('<div class="hidden">');
					
					evts = new Array();					
					for (var i = 0; i < events[date].length; i++) {
						events[date][i][1] != "" ? evts.push('<a href="' + events[date][i][1] + '" onclick="window.open(this.getAttribute(\'href\'), \'_blank\'); return false;">' + events[date][i][0] + '</a>') : evts.push(events[date][i][0]);
					}
					
					html.push(evts.join("<br /><br />"));
					html.push('</div>');
					html.push('</div>');					
				} else if (date == today) {
					html.push('class="today">');
					html.push('<img src="images/calendar/df' + day + '.gif" alt="' + day + '" width="22" height="22" />');
				} else {
					html.push('class="day">');
					html.push('<img src="images/calendar/d' + day + '.gif" alt="' + day + '" width="22" height="22" />');
				}
				html.push("</td>");
			}
			html.push("</tr>");
		}
		
		html.push("<tr>");
		
		if (M == 1) {
			html.push('<td><a href="javascript:void(0);" onclick="setCalendar(' + (Y - 1) + ', 12);" class="button"><img src="images/calendar/prev.gif" alt="předchozí" onmouseover="this.src=\'images/calendar/prev2.gif\';" onmouseout="this.src=\'images/calendar/prev.gif\';" /></a></td>');
		} else {
			html.push('<td><a href="javascript:void(0);" onclick="setCalendar(' + Y + ', ' + (M - 1) + ');" class="button"><img src="images/calendar/prev.gif" alt="předchozí" onmouseover="this.src=\'images/calendar/prev2.gif\';" onmouseout="this.src=\'images/calendar/prev.gif\';" /></a></td>');
		}
		
		html.push('<td colspan="5" class="period">');
		html.push('<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="114" height="22">');
		html.push('<param name="movie" value="swf/period.swf?period=' + MONTHS[M - 1] + '%20' + year.substring(2) + '" />');
		html.push('<param name="quality" value="high" />');
		html.push('<param name="wmode" value="transparent" />');
		html.push('<param name="menu" value="false" />');
		html.push('<!--[if !IE]>-->');
		html.push('<object type="application/x-shockwave-flash" data="swf/period.swf?period=' + MONTHS[M - 1] + '%20' + year.substring(2) + '" width="114" height="22">');
		html.push('<param name="quality" value="high" />');
		html.push('<param name="wmode" value="transparent" />');
		html.push('<param name="menu" value="false" />');
		html.push('<!--<![endif]-->');
		html.push(MONTHS[M - 1] + ' ' + year.substring(2));
		html.push('<!--[if !IE]>-->');
		html.push('</object>');
		html.push('<!--<![endif]-->');
		html.push('</object>');
		html.push('</td>');
		
		if (M == 12) {
			html.push('<td><a href="javascript:void(0);" onclick="setCalendar(' + (Y + 1) + ', 1);" class="button"><img src="images/calendar/next.gif" alt="následující" onmouseover="this.src=\'images/calendar/next2.gif\';" onmouseout="this.src=\'images/calendar/next.gif\';" /></a></td>');
		} else {
			html.push('<td><a href="javascript:void(0);" onclick="setCalendar(' + Y + ', ' + (M + 1) + ');" class="button"><img src="images/calendar/next.gif" alt="následující" onmouseover="this.src=\'images/calendar/next2.gif\';" onmouseout="this.src=\'images/calendar/next.gif\';" /></a></td>');
		}
		html.push("</tr>");
		html.push("</table>");
		
		document.getElementById("calendar-content").innerHTML = html.join("");
	}
};


