// AJAX page-loader

var timekeepalive;
function keepAlive(){
	rpc("index.php?session_keepalive=1");
	// pitää yhteyttä hennissä lähettämällä kutsun 20min välein
	timekeepalive = setTimeout('keepAlive()', 900000);
}

function createRequestObject() {
    var ro;
    var browser = navigator.appName;
    if(browser == "Microsoft Internet Explorer"){
        ro = new ActiveXObject("Microsoft.XMLHTTP");
    }else{
        ro = new XMLHttpRequest();
    }
    return ro;
}

var http = createRequestObject();
var iTimeoutId = null;

function rpc_post(target, str) {
	if(document.getElementById('status')){
		document.getElementById('status').innerHTML = '<img src="images/ajax-loader.gif" alt="loading" />';
	}
	http.open('POST', target, true);
	http.onreadystatechange = handleResponse;
    http.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    http.setRequestHeader("charset","utf-8");
	http.send(str);
    return false;
}

function rpc(target) {
	if(document.getElementById('status')){
		document.getElementById('status').innerHTML = '<img src="images/ajax-loader.gif" alt="loading" />';
	}
	http.open('GET', target, true);
    http.onreadystatechange = handleResponse;
    http.send(null);
	return false;
}

function getJsSource(src){
	
	var req = createRequestObject();
	
	var reqHandler = function reqHandler(){
		if(req.readyState == 4){
		  compileScript(req.responseText);
		}
	}
	
	http.open('GET', src, true);
    http.onreadystatechange = reqHandler;
    http.send(null);
	
}

function handleResponse(){
    if(http.readyState == 4){
        var xmlString = http.responseText;
		
		if(/AGILECMSLOGINSCREEN/.test(xmlString)){
			alert("Sessio on suljettu. Ole hyvä ja kirjaudu uudelleen.");
			window.location = 'index.php?logout=1';
			return;
		}
		
		if (document.implementation.createDocument){
          // Mozilla, create a new DOMParser
          var parser = new DOMParser();
          myDocument = parser.parseFromString(xmlString, "text/xml");
        } else if (window.ActiveXObject){
          // IE, create a new XML document using ActiveX
          // and use loadXML as a DOM parser.
          myDocument = new ActiveXObject("Microsoft.XMLDOM");
          myDocument.async = "false";
          myDocument.loadXML(xmlString);      
        } 
		updatePage(myDocument);
		if(document.getElementById('status')){
			document.getElementById('status').innerHTML = '<img src="images/loaded.gif" alt="loaded" />';
		}
    }
}

function custom_escape(string) {
   var result = "";
   return encodeURIComponent(string);
}


var submitbutton = null;

	function getFormInputValues(obj,valFunc)
    {
       var str = "";
       var valueArr = null;
       var val = "";
       var cmd = "";
	   var arr = obj.getElementsByTagName('input');

       for(var i = 0; i< arr.length; i++){
           switch(arr[i].type) {
               case "hidden":
               case "password":
               case "text":
                    if(valFunc) {
                        //use single quotes for argument so that the value of
                        //fobj.elements[i].value is treated as a string not a literal

                        cmd = valFunc + "(" + 'arr[i].value' + ")";
                        val = eval(cmd)
                    }
                    str += arr[i].name +
                     "=" + custom_escape(arr[i].value) + "&";
                     break;

              /* case "select-one":
                    str += fobj.elements[i].name +
                    "=" + fobj.elements[i].options[fobj.elements[i].selectedIndex].value + "&";
                    break;
				*/	
			  case "checkbox":
			  case "radio":
			   		if(arr[i].checked)
                    str += arr[i].name + "=" + arr[i].value + "&";
                    break;
			  //default:
			  	//alert(fobj.elements[i].type);
			}
       }
       
       var arr = obj.getElementsByTagName('textarea');
       for(var i = 0; i< arr.length; i++){
           str += arr[i].name + "=" + custom_escape(arr[i].value) + "&";       
       }

       str = str.substr(0,(str.length - 1));
	   //var e = prompt('str:', escape(str));
       return str;
    }


    function getFormValues(fobj,valFunc)
    {
       var str = "";
       var valueArr = null;
       var val = "";
       var cmd = "";

       for(var i = 0;i < fobj.elements.length;i++)
       {
           switch(fobj.elements[i].type) {
			   case "submit":
			   		if(submitbutton == fobj.elements[i]){
                    if(valFunc) {
                        //use single quotes for argument so that the value of
                        //fobj.elements[i].value is treated as a string not a literal

                        cmd = valFunc + "(" + 'fobj.elements[i].value' + ")";
                        val = eval(cmd)
                    }
                    str += fobj.elements[i].name +
                     "=" + custom_escape(fobj.elements[i].value) + "&";
					}
                     break;
               case "hidden":
               case "password":
               case "textarea":
               case "text":
                    if(valFunc) {
                        //use single quotes for argument so that the value of
                        //fobj.elements[i].value is treated as a string not a literal

                        cmd = valFunc + "(" + 'fobj.elements[i].value' + ")";
                        val = eval(cmd)
                    }
                    str += fobj.elements[i].name +
                     "=" + custom_escape(fobj.elements[i].value) + "&";
                     break;

               case "select-one":
                    if(fobj.elements[i].selectedIndex >= 0) {
                        str += fobj.elements[i].name +
                        "=" + fobj.elements[i].options[fobj.elements[i].selectedIndex].value + "&";
                    }
                    break;

               case "select-multiple":
			   		var len = str.length;
					for(var d = 0; d < fobj.elements[i].options.length; d++){  
						if(fobj.elements[i].options[d].selected){
							str += fobj.elements[i].name + "=" + fobj.elements[i].options[d].value + "&";	
						}
					}
					if(len == str.length)
						str += fobj.elements[i].name + "=undefined&";							
					
					break;
					
			  case "checkbox":
			  case "radio":
			   		if(fobj.elements[i].checked)
                    str += fobj.elements[i].name + "=" + fobj.elements[i].value + "&";
                    break;
			  //default:
			  	//alert(fobj.elements[i].type);
			}
       }

       str = str.substr(0,(str.length - 1));
	   //var e = prompt('str:', escape(str));
       return str;
    }

function compileScript(script)
{
    if (window.execScript)
        window.execScript(script);
    else
        window.setTimeout(script,0);
}

function openPopup(url, id, opt){
	alert(url);
	h = window.open(url, id, opt);
}

function htmlentity_decode(s) {
	if(s-length <1)
		return '';
		var e = document.createElement("div");

		e.innerHTML = s;

		return e.firstChild.nodeValue;
}
	
	

function updatePage(xmlDoc){
  if(xmlDoc.getElementsByTagName("element")[0]){
    var i = 0;
    var xmlelem = null;
    var docelem = null;
    var id = 0;
    var htmlcontent = "";
    var htmlvalue = "";
	var elements = xmlDoc.getElementsByTagName("element");
	for(i = 0; i<elements.length; i++){
      xmlelem = elements[i];
	  if(!window.ActiveXObject)	
	  	xmlelem.normalize();
      id = xmlelem.getElementsByTagName("id")[0].childNodes[0].nodeValue;
	
	  docelem = document.getElementById(id);
      if(!docelem){
	  	if(window.opener){
			docelem = window.opener.document.getElementById(id);				
		}
		if(!docelem){
		continue;	
		}
	  }
	  
	  // pit�� tarkastaa ollaanko muuttamassa elementti� joka sis�lt�� tinymce:n
	  var textareas = docelem.getElementsByTagName("textarea");
	  if(textareas.length){
		  if("function" == typeof hideEditor){
			  for(var tiny=0; tiny<textareas.length; tiny++){
				hideEditor(textareas[tiny].id);
			  }
		  }
	  }
		
	  if(xmlelem.getElementsByTagName("content")[0]){
		
		  var str = "";
		  if(!window.ActiveXObject)	
			xmlelem.getElementsByTagName("content")[0].normalize();
		  htmlcontent = xmlelem.getElementsByTagName("content")[0];
		  if(htmlcontent.childNodes.length){
			str = htmlcontent.childNodes[0].nodeValue;
		  }
		  // str = str.replace(/\\'/g,'\'');
		  docelem.innerHTML = str;  
	  } 
	  if(xmlelem.getElementsByTagName("value")[0]){
		  var str = "";
		  if(!window.ActiveXObject)	
			xmlelem.getElementsByTagName("value")[0].normalize();
		  htmlvalue = xmlelem.getElementsByTagName("value")[0];
		  if(htmlvalue.childNodes.length){
			str = htmlvalue.childNodes[0].nodeValue;
		  }
		  // str = str.replace(/\\'/g,'\'');
		  docelem.value = str;  
	  }
	  
    } 
	
  }
  
  var scripts = xmlDoc.getElementsByTagName("script");
  for(var g=0; g<scripts.length; g++){
    var str = scripts[g].childNodes[0].nodeValue;
    eval(str);
  }
}


function custom_alert(str){
	alert(htmlentity_decode(str));
}


function customClick(url){
	iTimeoutId = window.setTimeout("rpc('"+url+"')", 300);
	return false;
}

function customDblClick(url){
	window.clearTimeout(iTimeoutId);
	rpc(url);
	return false;
}

/*

HTMLElement.prototype.innerHTML setter = function (str) {
   var r = this.ownerDocument.createRange();
   r.selectNodeContents(this);
   r.deleteContents();
   var df = r.createContextualFragment(str);
   this.appendChild(df);
   return str;
}

HTMLElement.prototype.outerHTML setter = function (str) {
   var r = this.ownerDocument.createRange();
   r.setStartBefore(this);
   var df = r.createContextualFragment(str);
   this.parentNode.replaceChild(df, this);
   return str;
}


HTMLElement.prototype.innerHTML getter = function () {
   return getInnerHTML(this);
}

HTMLElement.prototype.outerHTML getter = function () {
   return getOuterHTML(this)
}

*/
