var firstTime = false;
var doingXMLTV = false;
var hash;
var oldhash;

var ua = navigator.userAgent.toLowerCase();
var opera = (ua.indexOf("opera") != -1);

function Query() {
	this.keyValuePairs = new Array();

	this.parse = function(q) {
		this.keyValuePairs = new Array();
		for(var i=0; i < q.split("&").length; i++) {
			this.keyValuePairs[i] = q.split("&")[i];
		}
	}

	this.create = function() {
		ret = '';
		for(var i=0; i < this.keyValuePairs.length; i++) {
			if (i!=0) ret+='&';
			ret+=this.keyValuePairs[i];
		}
		return ret;
	}

	this.get = function(s) {
		for(var i=0; i < this.keyValuePairs.length; i++) {
			if(unescape(this.keyValuePairs[i].split("=")[0]) == s)
				return unescape(this.keyValuePairs[i].split("=")[1]);
		}
		return false;
	}

	this.set = function(name, value) {
		for(var i=0; i < this.keyValuePairs.length; i++) {
			if(unescape(this.keyValuePairs[i].split("=")[0]) == name) {
				this.keyValuePairs[i] = escape(name) + "=" + escape(value);
				return;
			}
		}
		this.keyValuePairs[this.keyValuePairs.length] = escape(name) + "=" + escape(value);
	}

	this.length = function() { return this.keyValuePairs.length; }
}

function initialize() {
 if (doingXMLTV) return;
 
 hash = self.location.hash
 oldhash = hash;
 if (hash) hash = hash.substring(1);
 
 if (hash) {
	q = new Query();
	q.parse(hash);

	xmltv(q.get('page'), q.get('channel'), q.get('day_id'), q.get('date'), q.get('time'), q.get('search'));
 } else {
	firstTime = true;
	xmltv('0','','0','0','0','');
	firstTime = false;
 }
 setInterval(function() { checkHash(); }, 100);
}

function checkHash() {
	var newhash = self.location.hash
	if (doingXMLTV) return;
	
	if (oldhash != newhash) {
		oldhash = newhash;
		if (newhash) {
			hash = newhash.substring(1);
			q = new Query();
			q.parse(hash);
			xmltv(q.get('page'), q.get('channel'), q.get('day_id'), q.get('date'), q.get('time'), q.get('search'));
		} else {
			firstTime = true;
			xmltv('0','','0','0','0','');
			firstTime = false;
		}
	}
}

function xmltv(page,channel,day_id,date,time,search){
doingXMLTV = true;

	//if (search=='0') search = '';

	var xslStylesheet;
	var myDOM;
	var xmlDoc;

	if (document.implementation && document.implementation.createDocument) {
		var myXSLHTTPRequest = new XMLHttpRequest();
		var xsltProcessor = new XSLTProcessor();
		
	 	myXSLHTTPRequest.open("GET", "xmltv.xsl", false);
		myXSLHTTPRequest.send(null);

		xslStylesheet = myXSLHTTPRequest.responseXML;
 	} else if (window.ActiveXObject) {
		var myXSLHTTPRequest = new ActiveXObject("Msxml2.FreeThreadedDOMDocument.3.0");
		var xslTemplate = new ActiveXObject("MSXML2.XSLTemplate.3.0");
		
		myXSLHTTPRequest.async = false;
		myXSLHTTPRequest.load("xmltv.xsl");
		xslStylesheet = myXSLHTTPRequest;
 	}
	
	if (document.implementation && document.implementation.createDocument) {
		xsltProcessor.importStylesheet(xslStylesheet);
		myXMLHTTPRequest = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		xslTemplate.stylesheet = xslStylesheet;
		var xsltProcessor = xslTemplate.createProcessor();
		var myXMLHTTPRequest = new ActiveXObject("Microsoft.XMLHTTP");
	}

	// load the xml file
	myXMLHTTPRequest.open("GET", "/xmlall.php?gids[]=ct1.ceskatelevize.cz&gids[]=ct2.ceskatelevize.cz&gids[]=nova.nova.cz&gids[]=prima.iprima.cz&gids[]=cool.iprima.cz&gids[]=ct24.ct24.cz&gids[]=ct4sport.ct24.cz&gids[]=ocko.idnes.cz&gids[]=sport.nova.cz&gids[]=cinema.nova.cz&gids[]=mtv.nova.cz", false);
	myXMLHTTPRequest.send(null);
	xmlDoc = myXMLHTTPRequest.responseXML;

	
	cdate = new Date();
	cday = cdate.getDate()
	cmonth = (cdate.getMonth() + 1) * 100
	cyear = ( cdate.getYear() + 1900 ) * 10000
	chour = cdate.getHours() * 100
	cmin = cdate.getMinutes()

	cdate = cyear + cmonth + cday
	ctime = chour + cmin

	if (chour < 1000)	ctime = '0' + ctime;
	if (chour == 0)	ctime = '0' + ctime;


	if (page == 0) {
		date = cdate
		time = ctime
	}

	if (page == 4) {
		nday = date.substring(8,6);
		pday = nday.valueOf()-1;
		nday2 = nday.valueOf()-1+2;
		nmth = date.substring(6,4);
		nmth = nmth.valueOf()-1;
		nyr = date.substring(0,4);

		ndate = new Date(nyr,nmth,nday);
		ndate.setDate(nday2);
		nday2 = ndate.getDate();
		nmth2 = (ndate.getMonth() + 1) * 100;
		nyr2 = ( ndate.getYear() + 1900 ) * 10000;
		ndate2 = nyr2 + nmth2 + nday2;

		pdate = new Date(nyr,nmth,pday);
		pdate.setDate(pday);
		pday2 = pdate.getDate();
		pmth2 = (pdate.getMonth() + 1) * 100;
		pyr2 = ( pdate.getYear() + 1900 ) * 10000;
		pdate2 = pyr2 + pmth2 + pday2;

		if (document.implementation && document.implementation.createDocument) {
			xsltProcessor.setParameter(null,"ndate",ndate2);
			xsltProcessor.setParameter(null,"pdate",pdate2);
		} else if (window.ActiveXObject) {
			xsltProcessor.addParameter("ndate",ndate2);
			xsltProcessor.addParameter("pdate",pdate2);
		}
	}

	// set the parameter using the parameter passed to the outputgroup function
	if (document.implementation && document.implementation.createDocument) {
		xsltProcessor.setParameter(null,"page",page);
		xsltProcessor.setParameter(null,"channel",channel);
		xsltProcessor.setParameter(null,"day_id",day_id);
		xsltProcessor.setParameter(null,"date",date);
		xsltProcessor.setParameter(null,"time",time);
		xsltProcessor.setParameter(null,"cdate",cdate);
		xsltProcessor.setParameter(null,"ctime",ctime);
		xsltProcessor.setParameter(null,"search",search);
	} else if (window.ActiveXObject) {
		xsltProcessor.addParameter("page",page);
		xsltProcessor.addParameter("channel",channel);
		xsltProcessor.addParameter("day_id",day_id);
		xsltProcessor.addParameter("date",date);
		xsltProcessor.addParameter("time",time);
		xsltProcessor.addParameter("cdate",cdate);
		xsltProcessor.addParameter("ctime",ctime);
		xsltProcessor.addParameter("search",search);
	}
//	var fragment = xsltProcessor.transformToFragment(xmlDoc,document);
//	document.getElementById("answer").innerHTML = "";
//	 myDOM = fragment; 
//	document.getElementById("answer").appendChild(fragment);

	// document.write(myDOM);

	if (page == 2|page == 3) {
		if (!miniwindow) { 	
			var doc = open("about:blank","output","scrollbars=yes,width=400,height=300");
			doc.document.write("<HTML><HEAD><script src='xmltv.js' type='text/javascript'></script><script type='text/javascript'>var miniwindow=true;</script><base href='"+self.location.href+"'></base></HEAD><BODY><div id='answer'>");
			doc.document.write("</div></BODY></HTML>");
			doc.document.close();
		} else {
			var doc = self;
		}
		
		var f = function() {
			if (document.implementation && document.implementation.createDocument) {
				var fragment = xsltProcessor.transformToFragment(xmlDoc,document);
			} else if (window.ActiveXObject) {
				xsltProcessor.input = xmlDoc;
				var fragment = xsltProcessor.output;
			}
	
			doc.document.getElementById("answer").innerHTML = "";
	
			myDOM = fragment;
			if (document.implementation && document.implementation.createDocument) {
				var new_node = doc.document.importNode(fragment, true);
				doc.document.getElementById("answer").appendChild(new_node);
			} else if (window.ActiveXObject) {
				doc.document.getElementById("answer").innerHTML = fragment;
			}
			doc.focus();
		}
		if (!miniwindow) {
			doc.onload = f;
		} else {
			f();
		}

	} else {
		if (document.implementation && document.implementation.createDocument) {
			var fragment = xsltProcessor.transformToFragment(xmlDoc,document);
		} else if (window.ActiveXObject) {
			xsltProcessor.input = xmlDoc;
			var fragment = xsltProcessor.output;
		}

		document.getElementById("answer").innerHTML = "";
		myDOM = fragment;
		
		if (document.implementation && document.implementation.createDocument) {
			var new_node = document.importNode(fragment, true);
			document.getElementById("answer").appendChild(new_node);
		} else if (window.ActiveXObject) {
			document.getElementById("answer").innerHTML = fragment;
		}
		if (!firstTime) {
			var q = new Query();
			q.set('page', page);
			q.set('channel', channel);
			q.set('day_id', day_id);
			q.set('date', date);
			q.set('time', time);
			q.set('search', search);

			var key = q.create();
			if (!opera) self.location.hash='#'+key;
			//alert(self.location.hash);
		}
	}

doingXMLTV = false;
}

