//Globaalit hiiren sijaintitiedot
var mouseX;
var mouseY;
var documentWidth;
var documentHeight;
var windowHeight;

//Ajaxille 1 sec max hakuaika
 
function onLoad() {	
  x = getDocumentXDimension();
  y = getDocumentYDimension();	
	windowHeight = screen.availHeight;
	writeError(x + " " + windowHeight + " " + y);
	
	$('.lisaKuvaus').hide();
	$('div.kommentit').hide();
	
	//Tekee yhden aikojentasaajan listauksista yhtä korkeita
	/*jQuery(document).ready(function(){
		$(".aikojentasaaja").each(function() {
			$(this).children(".ohjelmalista").height($(this).height());
			writeError($(this).height().toString() + "<br />", true);
		});
		$(".ohjelmalista").css("border-left", "1px solid gray");
		
	});*/
	//$(".ohjelmalista:even").css("background-color", "#f5f5f5");
	
	documentWidth = getDocumentXDimension();
	documentHeight = getDocumentYDimension();
	
	if (gup('open')) {
		vaihdaOhjelmaKuvausAjax(gup('open'));
	}
	
	jQuery(document).ready(function(){
		
		//Päivitetään hiiren paikkatiedot aina klikattaessa
		$().mousemove(function(e){
			mouseX = e.pageX
			mouseY = e.pageY
		});
		
		//Piilotetaan turhat "Näkyy nyt"/"Korostetut" yms. linkit
		if ($(".nakyynyt").length == 0) {
			$("#naytaNyt").hide();
			$("#naytaNyt").next().hide();
		}
		if ($(".highlight").length == 0) {
			$("#naytaKorostetut").hide();
			$("#naytaKorostetut").next().hide();
		} else {
			$("#naytaKorostetut").append(" ("+$(".highlight").length.toString() + ")");
		}
		
		if ($(".himmennys").length == 0) {
			$("#naytaHimmennetyt").hide();
			$("#naytaHimmennetyt").next().hide();
		}
		if ($(".kommentoitu").length == 0) {
			$("#naytaKommentoidut").hide();
			$("#naytaKommentoidut").next().hide();
		} else {
			$("#naytaKommentoidut").append(" ("+$(".kommentoitu").length.toString() + ")");
		}
		
		//Experimental 23.05
		$().mousedown(function(e){
			if ($(e.target).parents("#kuvaus").length == 0 && e.target.className != "kuvaus") {
				$("#kuvaus").hide();
				//TODO fiksuntaa tätä, nyt ei sulje samasta mistä avautuukin
				//jos tämän rivin poistaa, toimii muuten ok, mutta jos avaa, ja sulkee "sulje" napista, ei ko. ohjelma avaudu kunnolla heti sen jälkeen
				edellinenKuvaus = false;
			}
			if ($(e.target).parents("#navPpopupInfo").length == 0 && e.target.id != "navPpopupInfo" && $(e.target).parents("#vainKorostetutP").length == 0) {
				$("#navPpopupInfo").hide();
			}
		});		
		// </Experimental 23.05		
		
		$(".katJSlinkki").each(function(i) {
			var count = $("." + $(this).attr("id")).length;
			if (count > 0) {
				$(this).append(" (" + count.toString() + ")");
			}	else {
				//Muuten piilotetaan kategoria jossa ei ole ohjelmia, sekä tyhjänpäiväinen <br/> tagi
				$(this).hide();
				$(this).next().hide();
			}
		});
		$.ajaxTimeout( 5000 );
	});
}

//pääsivun onload
function onLoadIndexPage() {
	//Näytetään JS toiminnot vain JS-enabloiduille
  //document.getElementById("vainKorostetut").style.display = 'inline';
  document.getElementById("naytaHimmennetyt").style.display = 'inline';
  document.getElementById("naytaKorostetut").style.display = 'inline';  
  document.getElementById("naytaKommentoidut").style.display = 'inline';
  document.getElementById("naytaNyt").style.display = 'inline';
}

//parsii urlista get-muuttujat
function gup( name )
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}

function getScrollY() {
  var scrOfY = 0;
  if( typeof( window.pageYOffset ) == 'number' ) {
    //Netscape compliant
    scrOfY = window.pageYOffset;
  } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
    //DOM compliant
    scrOfY = document.body.scrollTop;
  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
    //IE6 standards compliant mode
    scrOfY = document.documentElement.scrollTop;
  }
  return scrOfY;
}

function getDocumentXDimension() {
	var x;
	var test1 = document.body.scrollHeight;
	var test2 = document.body.offsetHeight;
	if (test1 > test2) // all but Explorer Mac
	{
		x = document.body.scrollWidth;
	}
	else // Explorer Mac;
	     //would also work in Explorer 6 Strict, Mozilla and Safari
	{
		x = document.body.offsetWidth;
	}
	return x;
}

function getDocumentYDimension() {
	var y;
	var test1 = document.body.scrollHeight;
	var test2 = document.body.offsetHeight
	if (test1 > test2) // all but Explorer Mac
	{
		y = document.body.scrollHeight;
	}
	else // Explorer Mac;
	     //would also work in Explorer 6 Strict, Mozilla and Safari
	{
		y = document.body.offsetHeight;
	}
	return y;
}

function writeError(str, append)
{
  var dbgObj = document.getElementById("debug");
  dbgObj.innerHTML = append? (dbgObj.innerHTML + str): str;
}



function toggleLayer(theDiv) {
  //document.getElementById(theDiv).innerHTML = document.getElementById(theDiv).style.display;
	if(document.getElementById(theDiv).style.display == 'block'){
		document.getElementById(theDiv).style.display = 'none';
	}
	else {
	 document.getElementById(theDiv).style.display = 'block';
	}
}

function ohjelmaAuki(theDiv, noBorder) {
  var noBorder = (noBorder == null) ? false : noBorder;
  var kuvausDiv = 'kuvaus' + theDiv.toString();
  var oBoxDiv = 'oBox' + theDiv.toString();
  //document.getElementById(theDiv).innerHTML = document.getElementById(theDiv).style.display;
	if(document.getElementById(kuvausDiv).style.display == 'block') {
	  if (noBorder == true) {
		document.getElementById(oBoxDiv).style.border = '0px dotted black';
	  }
	  document.getElementById(oBoxDiv).style.top = '1px dotted black';
	  //Opera käyttää #f5f5f5 muotoa, firefox rgb...
	  //writeError(document.defaultView.getComputedStyle(document.getElementById(oBoxDiv), null).getPropertyValue("background-color"));
	  if (document.defaultView.getComputedStyle(document.getElementById(oBoxDiv), null).getPropertyValue("background-color") != 'rgb(230, 230, 230)' && document.defaultView.getComputedStyle(document.getElementById(oBoxDiv), null).getPropertyValue("background-color") != '#e6e6e6') {
	 		document.getElementById(oBoxDiv).style.backgroundColor = '#F5F5F5';
	 	}
	}
	else {
	 	document.getElementById(oBoxDiv).style.border = 'none';
	 	if (document.defaultView.getComputedStyle(document.getElementById(oBoxDiv), null).getPropertyValue("background-color") == 'rgb(245, 245, 245)' || document.defaultView.getComputedStyle(document.getElementById(oBoxDiv), null).getPropertyValue("background-color") == '#f5f5f5') {
			document.getElementById(oBoxDiv).style.backgroundColor= '';
			//writeError("Väri poistettu");
		}
		//writeError(document.getElementById(oBoxDiv).style.backgroundColor);
	}
}



function changecss(theClass,element,value) {
//documentation for this script at http://www.shawnolson.net/a/503/
 var cssRules;
 /*if (document.all) {
  cssRules = 'rules';
 }*/
 if (navigator.appName == "Microsoft Internet Explorer") {
  cssRules = 'rules';
 }
 else if (document.getElementById) {
  cssRules = 'cssRules';
 }
 for (var S = 0; S < document.styleSheets.length; S++){
  for (var R = 0; R < document.styleSheets[S][cssRules].length; R++) {
   if (document.styleSheets[S][cssRules][R].selectorText.toUpperCase() == theClass.toUpperCase()) {
   //writeError(document.styleSheets[S][cssRules][R].style[element]+"Löydetty<br />", true);
    document.styleSheets[S][cssRules][R].style[element] = value;
   }
  }
 }
}

function getCssClassValue(theClass,element) {
//documentation for this script at http://www.shawnolson.net/a/503/
 var cssRules;
 if (navigator.appName == "Microsoft Internet Explorer") {
  cssRules = 'rules';
 }
 else if (document.getElementById) {
  cssRules = 'cssRules';
 }
  //writeError("Aloitetaan<br />", true);
 for (var S = 0; S < document.styleSheets.length; S++){
  for (var R = 0; R < document.styleSheets[S][cssRules].length; R++) {
    //writeError(document.styleSheets[S][cssRules][R].selectorText+"Löydetty<br />", true);
   if (document.styleSheets[S][cssRules][R].selectorText.toUpperCase() == theClass.toUpperCase()) {
	//writeError(document.styleSheets[S][cssRules][R].style[element]+"Löydetty<br />", true);
    return document.styleSheets[S][cssRules][R].style[element];
   }
  }
 }
 /*writeError("Ei ole olemassa :/", true);
 if (document.styleSheets[0].addRule) {              // Browser is IE?
	document.styleSheets[0].addRule(theClass, null,0);      // Yes, add IE style
  } else {                                            // Browser is IE?
	document.styleSheets[0].insertRule(theClass + ' { }', 0); // Yes, add Moz style.
  }*/
 return false; 
}

function piilotaEiKorostetut() {
  if (getCssClassValue("div.oBox", "visibility") != "hidden") {
	  changecss("div.oBox", "visibility", "hidden");
	  changecss("div.highlight", "visibility", "visible");
	  changecss("div.agentti", "visibility", "visible");
	  document.getElementById("vainKorostetut").innerHTML = "<u>N</u>äytä kaikki"
	  
	}
  else {
    changecss("div.oBox", "visibility", "visible");
    document.getElementById("vainKorostetut").innerHTML = "<u>N</u>äytä vain korostetut"
	  //writeError("Vaihdettu");
	}  
}
function toggleClassVisibility(classT) {
  if (getCssClassValue(classT, "visibility") != "hidden") {
	  changecss(classT, "visibility", "hidden");
	}
  else {
    changecss(classT, "visibility", "visible");
	}  
}
function toggleIdOverline(id) {
  if (document.getElementById(id).style.textDecoration != "line-through") {
	  document.getElementById(id).style.textDecoration = "line-through";
	}
  else {
    document.getElementById(id).style.textDecoration = "none";
	}  
}
function submitDateSelectorForm()
{
  document.dateselector.submit();
}

/*AJAX*/
function makeRequest(url, kohdeDivID) {
		var http_request = false;

		if (window.XMLHttpRequest) { // Mozilla, Safari,...
				http_request = new XMLHttpRequest();
				if (http_request.overrideMimeType) {
						http_request.overrideMimeType('text/xml');
						// See note below about this line
				}
		} else if (window.ActiveXObject) { // IE
				try {
						http_request = new ActiveXObject("Msxml2.XMLHTTP");
				} catch (e) {
						try {
								http_request = new ActiveXObject("Microsoft.XMLHTTP");
						} catch (e) {}
				}
		}

		if (!http_request) {
				alert('Giving up :( Cannot create an XMLHTTP instance');
				return false;
		}
		http_request.onreadystatechange = function() { alertContents(http_request, kohdeDivID); };
		http_request.open('GET', url, true);
		http_request.send(null);
}

function alertContents(http_request, kohdeDivID) {
		if (http_request.readyState == 4) {
				if (http_request.status == 200) {
						ulostulos = http_request.responseText
						document.getElementById(kohdeDivID).innerHTML = ulostulos
						//alert(ulostulos);
				} else {
						document.getElementById(kohdeDivID).innerHTML = 'There was a problem with the request.'
				}
		}
}

function ohjelmaAvaus(kuvausID) {
	toggleLayer('kuvaus' + kuvausID);
	ohjelmaAuki(kuvausID, true);
}

var t;

//Pitäisi tehdä että hiiren tulisi olla 500ms samassa paikassa!
function timedVaihdaOhjelmaKuvausAjax(ID, kuvausID, kor, piil, pvm) {
	if (t) { clearTimeout(t); }
	t = setTimeout("vaihdaOhjelmaKuvausAjax("+ID+", "+kuvausID+", '"+kor+"', '"+piil+"', '"+pvm+"')",500)
}

var edellinenKuvaus = false;

function suljeOhjelmaKuvaus() {
	$("#kuvaus").hide();
	edellinenKuvaus = false;
}

function vaihdaOhjelmaKuvausAjax(ID, kuvausID, kor, piil, pvm) {
	$(document).ready(function(){
		var scrollTop = getScrollY();
		
		if (ID == edellinenKuvaus) {
			//writeError($("#kuvaus"+kuvausID).html("Foojaba"));
			//Experimental 23.05 THIS COMMENTED
			$("#kuvaus").hide();
			// </Experimental 23.05 THIS COMMENTED			
			edellinenKuvaus = false;			
		}
		else {
			//Jos jokin toinen kuvaus on auki
			if (edellinenKuvaus != false) {
				$("#kuvaus").hide();
			}
			
			//Jos kuvauksen vasen reuna menee yli dokumentin leveyden, laitetaan se nimen vasemmalle puolelle
			var kuvausWidth = $("div.kuvaus").width();
			var kuvausTotalWidth = $("div.kuvaus").width() + (parseInt($("div.kuvaus").css("padding-left")) * 2) + Math.abs(parseInt($("div.kuvaus").css("margin-left")));

			if ((mouseX - kuvausTotalWidth) < 1) {
				$("div.kuvaus").css("left", 
					(
						mouseX
					)
				);
			}
			//Normaalitila, näytetään kuvaus vasemmalla puolella
			else {
				$("div.kuvaus").css("left", 
					(						
						mouseX
						- kuvausTotalWidth
						- parseInt($("div.kuvaus").css("margin-left"))
					)
				);				
			}
			
			
			$("#oBox" + kuvausID + " a").css("cursor", "progress");
			if (pvm) {
				var hakuUrl = "korosta_ajax.php?id="+ID+"&kor=" + kor + "&piil=" + piil + "&pvm=" + pvm;
			}
			else {
				var hakuUrl = "korosta_ajax.php?id="+ID+"&kor=" + kor + "&piil=" + piil;
			}
			//$("#kuvaus").load(hakuUrl, '', function() {	
			$.ajax({
				dataType: "html",
				type: "GET",
				url: hakuUrl,
				timeout: 5000,
				success: function(msg){
					$("#kuvaus").html(msg);
					kuvausHeight = $("#kuvaus").height() + (parseInt($("#kuvaus").css("padding-top"))*2);
					
					if ((mouseY - scrollTop + kuvausHeight + 200) > windowHeight && mouseY - kuvausHeight > 0) {
						$("div.kuvaus").css("top", 
							(
								mouseY - kuvausHeight
							)
						);
					}
					else {					
						$("div.kuvaus").css("top", mouseY);
					}
					$("#kuvaus").show();
					//writeError(mouseY + " - " + windowHeight.toString() + " q " + scrollTop + " e " + kuvausHeight);
				},
				error: function() {
					alert("Ohjelman kuvauksen hakeminen epäonnistui. Palvelimella voi olla ruuhkaa: yritä myöhemmin uudestaan.");
				},
				complete: function(){
					//Piilotetaan nav-boxi (kategorialistaus ym.) jos näkyvillä
					/*if ($("#navPpopupInfo").css("display") == "block") {
						$("#navPpopupInfo").hide();
					}*/
					$("#oBox" + kuvausID + " a").css("cursor", "pointer");
				}
			});
			//writeError(parseInt($("div.kuvaus").css("margin-left")).toString());
			
			//$("#kuvaus").html("<img src=\"kuvat/loadingindicator.gif\"/>Ladataan kuvausta");
			
			edellinenKuvaus = ID;
		}
	});
}

function asetaPaikkaX(target) {
	var kuvausWidth = $(target).width();
	var kuvausTotalWidth = $(target).width() + (parseInt($(target).css("padding-left")) * 2) + Math.abs(parseInt($(target).css("margin-left")));
	if ((mouseX + kuvausTotalWidth) > documentWidth) {
			$(target).css("left", 
			(						
				mouseX
				- kuvausTotalWidth
				- parseInt($(target).css("margin-left"))
			)
		);
	}
	//Normaalitila, näytetään kuvaus oikealla puolella
	else {
		$(target).css("left", 
			(
				mouseX
			)
		);
	}
}

function asetaPaikkaY(target) {
	var scrollTop = getScrollY();
	kuvausHeight = $(target).height() + (parseInt($("#kuvaus").css("padding-top"))*2);
	
	if ((mouseY - scrollTop + kuvausHeight + 200) > windowHeight && mouseY - kuvausHeight > 0) {
		$(target).css("top", 
			(
				mouseY - kuvausHeight
			)
		);
	}
	else {					
		$(target).css("top", mouseY);
	}
}

function piilota(target) {
	$(target).hide();
}

//Muokkaa 12:50 ajan minuuteiksi ajasta 00:00, togglePopupboxVisibility käyttää
function parseTime(aika) {
	var tunti = 0;
	var min = 0;
	if (aika.substring(0, 2) < 6) {
		tunti = parseInt(aika.substring(0, 2)) + 24;
		//Jos luku alkaa 0:lla, tunnistaa parseInt sen oktaavi-luvuksi, mitä ei haluta
		if (aika.substring(3, 4) == "0") {
			min = parseInt(aika.substring(4, 5));
		}
		else {
			min = parseInt(aika.substring(3, 5));
		}
		
	}
	else {
		if (aika.substring(0, 1) == "0") {
			tunti = parseInt(aika.substring(1, 2));
		}
		else {
			tunti = parseInt(aika.substring(0, 2));
		}
		if (aika.substring(3, 4) == "0") {
			min = parseInt(aika.substring(4, 5));
		}
		else {
			min = parseInt(aika.substring(3, 5));
		}
	}
	
	aika = tunti*60 + min;
	return aika;
}


//http://www.w3schools.com/jsref/jsref_sort.asp, nerffattu multidimension arraylle!, togglePopupboxVisibility käyttää
function mySortNumber(a,b)
{
	return a[0] - b[0];
}

var edellinenKuvaus2;

function togglePopupboxVisibility(target, content, ID, url) {
	$(document).ready(function() {
		var scrollTop = getScrollY();
		
		if ($(target).css("display") == "block" && (ID == edellinenKuvaus2)) {
			$(target).hide();
			edellinenKuvaus2 = false;
		}
		else {
			//Jos jokin toinen kuvaus on auki
			if (edellinenKuvaus2 != false) {
				$(target).hide();
			}
			
			//Jos kuvauksen vasen reuna menee yli dokumentin leveyden, laitetaan se nimen vasemmalle puolelle
			asetaPaikkaX(target);
			
			$(target).empty();
			
			var contentTaulukko = new Array();
			$(content).clone().each(function(i) {			
			
				var aika = $(this).text().substring(0, 5);
				
				aika = parseTime(aika);
				
				contentTaulukko[i] = [aika, $(this).attr("id")];
			});
			
			if (url)
				$(target).append('<div class="topright"><a href="javascript:togglePopupboxVisibility(\''+target+'\', \''+content+'\', \''+ID+'\');" class="sulje">sulje</a></div>'+"<h4><a href='" + url + "'>"+ID+"</a></h4><br />");
			else
				$(target).append('<div class="topright"><a href="javascript:togglePopupboxVisibility(\''+target+'\', \''+content+'\', \''+ID+'\');" class="sulje">sulje</a></div>'+"<h4>"+ID+"</h4><br />");
				
			contentTaulukko.sort(mySortNumber);
						
			for (i in contentTaulukko) {
				$("#" + contentTaulukko[i][1]).clone().appendTo(target);
			}
			
			if (contentTaulukko.length == 0) {
				$(target).append("Ohjelmia ei löytynyt.");
			}
			
			asetaPaikkaY(target);			
			
			$(target).show();
			
		}
		edellinenKuvaus2 = ID;
	});
}

//Näyttää valinnaista lisätietoa kuvaukseen
var LisaKuvausOrigText = '';
function toggleLisaKuvaus() {
	if (LisaKuvausOrigText == '')
		LisaKuvausOrigText = $('.toggleLisaKuvaus').text();
	$('.lisaKuvaus').toggle();
	if ($('.lisaKuvaus').css("display") != "block") {
		$('a.toggleLisaKuvaus').text(LisaKuvausOrigText);
	} else {
		$('a.toggleLisaKuvaus').text('Piilota');
	}
}

function toggleLisaaKommentti() {
	$(".lisaaUusiKommentti").toggle();
}

//hakee pikahakuna näytetystä ohjelmataulukosta hakua vastaavat ohjelmat, suoritetaan kun hakua näpytellään
var t;
function quickSearch(searchString, latency) {
	var target = "div#quickSearchResults";
	//Nopeutetaan tyhjän haun kentän piilotusta
	if (searchString == "") { latency = 0; }
	else {
		$(target).empty();
		$(target).append("Etsitään \""+searchString+"\"...");
		$(target).show();
	}
	clearTimeout(t);
	t = setTimeout("filterQuickSearch('"+searchString+"')", latency);
	//onSubmit-eventille, jottei sivua ladattaisi uudestaan
	return false;
}

//hakee pikahakuna näytetystä ohjelmataulukosta hakua vastaavat ohjelmat
function filterQuickSearch(searchString) {
	//writeError("Searching " + searchString);
	var target = "div#quickSearchResults";
	var contentTaulukko = new Array();
	searchString = searchString.toLowerCase();
	
	if (searchString == '') {
		$(target).hide();
		return false;
	}
	writeError(" ::" + searchString + ":: ", true);
	
	//Vanhat pois
	$(target).empty();	
	
	
	$(".oBox").clone().each(function(i) {
		if ($(this).text().toLowerCase().indexOf(searchString) != -1) {
			var aika = $(this).text().substring(0, 5);
			aika = parseTime(aika);
			contentTaulukko[i] = [aika, $(this).attr("id")];
		}
	});
	
	$(target).append("<b>"+contentTaulukko.length.toString()+" osumaa<b>");
	
	//Ei toimi oikein, mutta miksi vittu ei?
	contentTaulukko.sort(mySortNumber);
	
	for (i in contentTaulukko) {	
		aika = $("#" + contentTaulukko[i][1]).text().substring(0, 5);
		aika = parseTime(aika);
		writeError(aika + "<br />", true);
		$("#" + contentTaulukko[i][1]).clone().appendTo(target);
	}
	
	$(target).show();
}
