var reqArray;
var winRef;
function XMLHttpReq(areqType, aparamArray)
{
	var reqType = areqType;
	var paramArray = aparamArray;
	var running = false;
	var xmlHttp;
	
	this.reqType = reqType;
	this.start = _start();
	this.running = running;
	//createModalDivTag('modaldiv');
	function _start()
	{
	    //alert('start_handler');
		running = true;
		sendRequest();
	}
	
    function createModalDivTag(aTagName) {
       // jos tagi jo lisätty -> pois
       if(document.getElementById(aTagName) != null){return false;}

       //alert('lisataan tagi');
       var bodyTag = document.getElementsByTagName('body')[0];

       if(bodyTag != null) {
          //alert('lisataan bodyyn');
          var overlay = document.createElement('div');
          overlay.id = aTagName;
          var overlayDiv = document.createElement('div');
          overlayDiv.innerHTML = "";
          overlay.appendChild(overlayDiv);
          bodyTag.appendChild(overlay);

       }
       //alert(document.getElementsByTagName('head')[0].innerHTML);
       //alert(document.getElementsByTagName('body')[0].innerHTML);
    }	
	function sendRequest()
	{
	    try {
		    // Firefox, Opera 8.0+, Safari, IE7+
		    xmlHttp = new XMLHttpRequest();
		 } catch (e) {
		    // Internet Explorer
		    try {
		       xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		    } catch (e) {
		       xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
		    }
		 } 
		 var url = '';
		 if(reqType == 'WEEK_CHANGE'){
		    //alert('weekchange');
			url = 'requesthandler.php?action=show_calendar&timestamp='+paramArray[1];
		 }
		 else if(reqType == 'RELOAD') {
			//alert('reload ');
			url = 'requesthandler.php?action=reload';
		 }
		 else if(reqType == 'TEE_VARAUS') {
			//alert('tee varaus');
			url = 'requesthandler.php?action=tee_varaus&id_kentta='+paramArray[0];
		 }
		 else if(reqType == 'TEE_AJANKOHTA_VARAUS') {
			 // TODO: MAhdollista toteutus jossa istuntoon tallentuu tieto varausikkunan id:stä
			 // voidaan hakea tarviittavat arvot lomakkeelta requesthandler.php:ssä
			 url = 'requesthandler.php?action=tee_ajankohta_varaus&id_kentta='+paramArray[0];
		 }
		 else if(reqType == 'GET_TIME') {
			 url = 'requesthandler.php?action=get_time';
		 }
		 else if(reqType == 'FILL_FIELD_SELECT') {
			//alert('id_halli:'+paramArray[0]);
			url = 'requesthandler.php?action=fill_field_select&id_halli='+paramArray[0];
		 }
		 else if(reqType == 'VAHVISTA_VARAUS') {
			 setCounterStatus('stopped','counter_div');
			//alert('vahvista varaus');
			var select = document.getElementById('valinta');
			if(select != null) {
				var value = '';
				var kiintea_hinta = '';
				var varausteksti = '';
				// Haetaan vuorotyyppi
				for(var i=0;i<select.options.length;i++)
				{
					if(select.options[i].selected == true) {
						value = select.options[i].value;
					}
				}
				url = 'requesthandler.php?action=vahvista_varaus&vuorotyyppi='+value+'&id_kentta='+paramArray[0];

				// Haetaan kiinteä hinta
				element = document.getElementById('kiintea_hinta');
				if(element != null){
					kiintea_hinta = element.value;
					url+='&kiintea_hinta='+kiintea_hinta;
				}
				// Haetaan varausteksti
				element2 = document.getElementById('varausteksti');
				if(element2 != null) {
					varausteksti = element2.value;
					url+='&varausteksti='+varausteksti;
				}
				//alert(url);
			}
		 }
		 else if(reqType == 'PERUUTA_VARAUS') {
			 setCounterStatus('stopped', 'counter_div');
			//alert('peruuta varaus');
			url = 'requesthandler.php?action=peruuta_varaus&id_kentta='+paramArray[0];
			//alert('peruutaurl:'+url);
		 }
		 else if(reqType == 'PERU_VUORO') {
			//alert('Vuoron peruminen');
			url = 'requesthandler.php?action=cancel&id='+paramArray[0];
		 }
		 else if(reqType == 'PERUUTA_KESTO_VUORO') {
			//var aradio= ('kesto');
			var selection = null;
			for(var i=0;i<document.forms[0].kesto.length;i++)
			{
				if(document.forms[0].kesto[i].checked == true) {
					//alert('val:'+document.forms[0].kesto[i].value);
					selection = document.forms[0].kesto[i].value; 
					break;
				}
				
			}
			if(selection != null) {
				//alert('Kestovuoron peruminen:'+selection);
				url = 'requesthandler.php?action=cancel_permanent&id='+paramArray[0]+'&selection='+selection;
			}
			
		 }
		 else if(reqType == 'SELECT_COL') {
			//alert('sarakevalinta');
			if(paramArray[0] != null && paramArray[1] != null) {
				url = 'requesthandler.php?action=select_col&id='+paramArray[0]+'&id_kentta='+paramArray[1];
			}
			//alert('sarakevalinta:'+url);
		 }
		 else if(reqType == 'UNSELECT_COL') {
			//alert('sarakevalinta');
			if(paramArray[0] != null && paramArray[1] != null) {
				url = 'requesthandler.php?action=unselect_col&id='+paramArray[0]+'&id_kentta='+paramArray[1];
			}
		 }
		 //alert(url);
		 if(url != '')
		 {
			 xmlHttp.open("GET",url);
			 xmlHttp.onreadystatechange = handleResponse;
			 xmlHttp.send(null); 
		 }
		 else { alert('url is empty');}
	}

	function handleResponse()
	{
	    if (xmlHttp.readyState == 4)
		{
	       try { 
	          if (xmlHttp.status == 200) {
				 //if(xmlHttp.esponseXML == null) { return false;}
				 //alert(xmlHttp.responseText+', type:'+reqType);
			     var xmlDoc = xmlHttp.responseXML;
			     var element = xmlDoc.getElementsByTagName('response')[0];
				 if(element == null){
					alert('response element is null');
					return false;
				 }
				 if(reqType =='PERU_VUORO')
				 {
					var ok = element.getAttribute('ok');
					if(ok != null && ok == 'true') {
						var vuorotyyppi = element.getAttribute('vuorotyyppi');
						if(vuorotyyppi == '1') {
							//alert('kestovuoro');
							if(window.showModalDialog('modal.php', window, 'Vuoron peruminen','dialogWidth:550px;dialogHeight:150px')) {
								var url =unescape(window.location.pathname);
								window.location.replace(url);									
							}
						}
					}
					//alert('näih');
					//modal(element.xml, true);
				 }
				 else if(reqType == 'PERUUTA_KESTO_VUORO')
				 {
					alert('kestovuoron peruminen');
					window.returnValue = true;
					window.close();
				 }
				 else if(reqType == 'SELECT_COL') {
				    //alert('valitaan:'+paramArray[0]+', '+paramArray[1]);
					if(paramArray[0] != null & paramArray[0] != '') {
						var col = document.getElementById(paramArray[0]);
						if(col != null) {
							if(element.getAttribute('selected') == 'true') {
							   kalenteri_select(paramArray[0], 'Valittu', 'red');
							}
							else {
							   kalenteri_select(paramArray[0], 'Vapaa', 'lime');
							}
						}
					}
				 }
				 else if(reqType == 'FILL_FIELD_SELECT')
				 {
					//alert('fill select');
					
					var options = element.getElementsByTagName('options')[0];
					var field_select = document.getElementById(paramArray[1]);
					var select_btn = document.getElementById(paramArray[2]);
					if(field_select == null || select_btn == null) {
						alert('select-kontrolli määrittämättä');
						return false;
					}
					field_select.options.length = 0;
					select_btn.disabled = true;
					field_select.disabled = true;
					if(options.childNodes.length >0)
					{
						select_btn.disabled = false;
						field_select.disabled = false;
						
					}
					for(i=0;i<options.childNodes.length;i++) {
						//alert('option:'+ i);
						var option = document.createElement('option');
						option.value = options.childNodes[i].getAttribute('value');
						option.text = options.childNodes[i].getAttribute('text');
						option.innerText = options.childNodes[i].getAttribute('text');
						field_select.appendChild(option);
						
					}
				 }
				 else if(reqType == 'TEE_VARAUS') {
					//alert('tee varaus');
					var ok = element.getAttribute('ok');
					if(ok == 'true'){
					   var path = window.location.href;
					   var url = unescape(path);
					   if(showModalDialog('modal.php',window, 'Vahvista varaus','dialogWidth:550px;dialogHeight:550px;help: no; status: no') != null) {
						 
						 //alert('vahvista');
					   }
					   else{
					    //alert('peruuta');
						startHandler('PERUUTA_VARAUS', new Array(paramArray[0]));
					   }
					   //alert('url:'+url);
					   
					   //window.location.replace(url);
					}
				    //modalform(element.xml, true);
				 }
				 else if(reqType == 'PERUUTA_VARAUS') {

					var path = window.location.href;
					var url = unescape(path);

				    //alert('peruutus');
					var ok = element.getAttribute('ok');
					if(ok == 'true') {
						//alert('Vuorot peruttu...');
						//window.close();
						window.location.replace(url);
						//window.location.reload(true);
					}
					else {
						alert('Vuorojen peruminen epäonnistui');
					}
				 }
				 else if(reqType == 'VAHVISTA_VARAUS') {
					var ok = element.getAttribute('ok');
					if(ok == 'true') {
						//alert('Vuorot vahvistettu...');
						window.returnValue = true;
						window.close();
					}
					else {
						alert('Vuorojen vahvistaminen epäonnistui');
					}
				 }
			     //document.getElementById('div_oikea').innerHTML = xmlHttp.responseXML.getElementsByTagName('response')[0];
	             //document.getElementById("ajax_output").innerHTML = xmlHttp.responseText;
				 //running = false;
	          }
	       } catch (e) {
	          document.getElementById("ajax_output").innerHTML = "Error on Ajax return call : " + e.description;
			  //running = false;
	       }
		}
	}
}
function makeXMLMarks(astring)
{
   //alert('str:'+astring);
   var value = '';
   if(astring != null && astring != '') {
      value = astring.replace(/&/g,"&amp;");
      value = value.replace(/</g,"&lt;");
      value = value.replace(/>/g,"&gt;");
      value = value.replace(/"/g, '&quot;');
      value = value.replace(/'/g,"&apos;");
   }
   return value;
}

function replaceXMLMarks(astring)
{
   alert('str:'+astring);
   var value = '';
   if(astring != null && astring != '') {
      value = astring.replace("&amp;","&");
      value = value.replace("&lt;","<");
      value = value.replace("&gt;",">");
      value = value.replace("&quot;", '"');
      value = value.replace("&apos;","''");
	  value = value.replace("", "&nbsp;");
   }
   //alert(value);
   return value;
}
function startHandler(reqType, paramArray)
{
   //alert("start");
   var handler = new XMLHttpReq(reqType, paramArray);  
   //handler.paramArray = params;
   handler.start;
   return false;
}

function kalenteri_select(colId, text, color)
{
	if(colId != null && colId != '') {
		el = document.getElementById(colId);
		if(el != null) {
			el.innerHTML = text;
			el.style.backgroundColor = color;
		}
	}
}
function modal(aVisible) {
    var el = document.getElementById("modaldiv");
	if(el == null) {
		el = document.getElementById("modaldivIE");
	}
    if(el !=null){
		alert('jees');
        if(aVisible) {el.style.visibility = "visible";}
        else{el.style.visibility = "hidden";}
    }
}
/*************************************/
/* Lisää eventin haluttuun objektiin */
/*************************************/
function addEvent(obj,type,fn)
{
  //alert('addevent, obj:'+obj+', type:'+type+', fn:'+fn);
  if (obj.attachEvent) {
    //alert('attach');
    obj['e'+type+fn] = fn;
    obj[type+fn] = function(){obj['e'+type+fn]( window.event );}
    obj.attachEvent( 'on'+type, obj[type+fn] );
  }
  else {
     //alert('eventlistener');
     obj.addEventListener( type, fn, false );
  }
}
function setCounterStatus(status, parent) {
	var counter_status = document.getElementById('counter_status');
	var parent = document.getElementById(parent);
	if(parent == null ){return false;}
	
	if(counter_status == null) {
		//alert('nulli');
		counter_status = window.document.createElement('input');
		counter_status.type = "hidden";
		counter_status.id = "counter_status";
		parent.appendChild(counter_status);
	}
	counter_status.value = status;
}
function counter(aparent, startvalue, id_kentta)
{	
	var status = document.getElementById('counter_status');
	if (status != null && status.value == 'stopped') {return true;}
	//alert('counter');
	var parent = document.getElementById(aparent);
	var counter = document.getElementById('counter');
	if(counter == null)
	{
		counter = window.document.createElement('div');
		counter.id = 'counter';
		parent.appendChild(counter);
	}
	var minutes= Math.floor(startvalue/60);
	var seconds =startvalue % 60;
	counter.innerHTML = 'Varausaikaa jäljellä: '+minutes + " min "+ seconds + " sek";
	if(startvalue == 0) {
		var btn_peruuta = document.getElementById('btn_peruuta_varaus');
		if(btn_peruuta != null) {
			//alert('painike löytyi:'+id_kentta);
			//window.close();
			window.returnValue = true;
			setCounterStatus('stopped', parent);
			startHandler('PERUUTA_VARAUS', new Array(''+id_kentta+''));
			//alert('Aika loppui, varaus perutaan');
			return true;
			//eval(endscript);
			//btn_peruuta.click();
		}
	}	
	startvalue -= 1;

	window.setTimeout('counter("'+parent+'", '+startvalue+', '+id_kentta+')', 1000);
}
function goto_selected_week(root_url, id, id_kentta, id_halli)
{
	var select = document.getElementById(id);
	if(select == null){return false;}
	var selection = null;
	for(var i=0;i<select.options.length;i++) {
		if(select.options[i].selected) {
		   selection = select.options[i].value;
		   break;	
		}
	}
	if(selection != null) {
		window.location.replace(root_url+'&id='+selection+'&id_kentta='+id_kentta+'&id_halli='+id_halli);
	}
}
function checkIsWinOpen(ikkuna)
{
	if(ikkuna != null){
	  winRef = ikkuna;
	}
	if(winRef != null && winRef.closed)
	{
		alert('suljettu');
		winRef = null;

	}
}
function searchFieldChange(klo_array)
{
	/* klo_array - parametrissa kaikkien kenttien vuoroalku ja vuoroloppu-arvot */
}
