function statusFeedback(mode){
	try{
		if (mode=="run"){
			if (!originaltitle) originaltitle = top.document.title;
			top.document.title = "Loading"+pistejono;
			pistejono = pistejono + ".";
		}
		if (mode=="stop"){
			top.document.title = originaltitle;
			pistejono = ".";
			originaltitle = "";
		}
	}catch(e){}
}

function DynLoaderObj(){
	var thissi= this;
	this.charset = "UTF-8";

	this.loadXMLDoc = function(url,handler){
		var req = Stato.GetRequest();
		req.onreadystatechange = function(){ handler(req) };
		req.open("GET", url, true);
		req.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset="+this.charset);
		req.send(null);
	};

	this.postXMLDoc = function(url,query,handler) {
		//var loader = new Stato.AjaxLoader();
		//loader.postXMLDoc(url,query,handler);
		var req = Stato.GetRequest();
		req.onreadystatechange = function(){ handler(req) };
		req.open("POST", url, true);
		req.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset="+this.charset);
		req.send(query);
	};

	this.setQueryString = function(element){
		var queryString="";
		var root = document.getElementById(element);
		var inputs = root.getElementsByTagName("INPUT");
		var textareas = root.getElementsByTagName("TEXTAREA");
		var selects = root.getElementsByTagName("SELECT");
		for(var i = 0; i <  inputs.length; i++) {
				if (inputs[i].type == "text" | inputs[i].type == "hidden") {
               queryString += inputs[i].name + "=" + this.encodeValue(inputs[i].value) + "&";
            }
        if (inputs[i].type == "checkbox") {
            if (inputs[i].checked) {
                  queryString += inputs[i].name + "=" + this.encodeValue(inputs[i].value) + "&";
               } else {
                  queryString += inputs[i].name + "=&";
               }
            }
        if (inputs[i].type == "radio") {
            if (inputs[i].checked) {
               queryString += inputs[i].name + "=" + this.encodeValue(inputs[i].value) + "&";
            }
       }
			// vanha - queryString += inputs[i].name+"="+encodeURIComponent(inputs[i].value)+"&";
		}
		for(var i = 0; i <  textareas.length; i++){
			if(textareas[i].getAttribute("cmstextarea")=="true"){
				kentat[textareas[i].id.replace("source_","")].tallenna();
			}
			queryString += textareas[i].name+"="+this.encodeValue(textareas[i].value)+"&";
		}
		for(var i = 0; i <  selects.length; i++)
			queryString += selects[i].name+"="+this.encodeValue(selects[i].options[selects[i].selectedIndex].value)+"&";
		return queryString;
	};

	this.encodeValue = function(value){
		return (this.charset == "UTF-8")?encodeURIComponent(value):escape(value);
	};

	this.InitReq = function(){
    	try {
    	  req = new XMLHttpRequest;
    	    this.InitReq = function() {
    	      req = new XMLHttpRequest;
    	    };
    	}
    	catch(e) {
    	  var msxml = [
    	    'MSXML2.XMLHTTP.3.0',
    	    'MSXML2.XMLHTTP',
    	    'Microsoft.XMLHTTP'
    	  ];
    	  for (var i=0, len = msxml.length; i < len; ++i) {
    	    try {
    	      req = new ActiveXObject(msxml[i]);
    	      this.InitReq = function() {
    	        req =  new ActiveXObject(msxml[i]);
    	      };
    	      break;
    	    }
    	    catch(e) {}
    	  }
    	}
	};
	
	this.GetRequest = function(){
		if(window.XMLHttpRequest) {
   		    this.GetRequest = function(){
   		      return new XMLHttpRequest();
   		    };
   		   return new XMLHttpRequest();
   		} else if(window.ActiveXObject) {
   		  var msxml = ['MSXML2.XMLHTTP.3.0','MSXML2.XMLHTTP','Microsoft.XMLHTTP'];
   		  for (var i=0, len = msxml.length; i < len; ++i) {
   		    try {
   		      this.GetRequest = function() {
   		       	return new ActiveXObject(msxml[i]);
   		      };
   		      return new ActiveXObject(msxml[i]);
   		    }
   		    catch(e) {}
   		  }
   		}
   		return null;
	};
	

	this.loadContent = function(element,url,pool){
		rootNodeObj = document.getElementById(element);
		//jkluuppi = setTimeout("jkloop()",1000);
		this.loadXMLDoc(url,function(req){Stato.processReqChange(req,element,pool)});
	};

	this.postContent = function(element,url,datasource){
		var query ="";
		query = this.setQueryString(element);
		if(arguments.length==3)
			query += this.setQueryString(datasource);
		query += this.ReadGetParamsToPost(url);
		//query = query.replace("uid=","UID=");
		url = url.replace(/\?.*$/,'');
		this.postXMLDoc(url,query,function(req){Stato.processReqChange(req,element)});
	};

	this.showElement = function(element){
		document.getElementById(element).style.display = "";
	};

	this.hideElement = function(element){
		document.getElementById(element).style.display = "none";
	};

	this.openElement = function(element){
		this.refreshContent(element);
		document.getElementById(element).style.display = "";
	};

	this.closeElement = function(element){
		document.getElementById(element).style.display = "none";
		document.getElementById(element).innerHTML = "";
	};

	this.refreshElement = function(element){
		if(document.getElementById(element).getAttribute("element")){
			this.loadContent(element,this.elementlinkURL+"?element="+element+"&path="+document.getElementById(element).getAttribute("element"));
		}
		else if(document.getElementById(element).getAttribute("url")){
			this.loadContent(element,document.getElementById(element).getAttribute("url"));
		}
	};

	this.editElement = function(element){
		if(document.getElementById(element).getAttribute("element")){
			this.loadContent(element,this.elementeditURL+"?path="+document.getElementById(element).getAttribute("element"));
		}
		else if(document.getElementById(element).getAttribute("url")){
			this.loadContent(element,document.getElementById(element).getAttribute("url"));
		}
	};


	this.postElement = function(element){
		if(document.getElementById(element).getAttribute("element")){
			this.postContent(element,this.elementeditURL+"?path="+document.getElementById(element).getAttribute("element"));
		}
		else if(document.getElementById(element).getAttribute("url")){
			this.postContent(element,document.getElementById(element).getAttribute("url"));
		}
	};


	this.processReqChange = function(req,elemString,pool) {
		pReq = req;
		try{
			//Stato.statusFeedback("run",elemString);
			if (req.readyState == 4) {
				if (req.status == 200) {				
					document.getElementById(elemString).innerHTML = req.responseText;
					var tmp_divi = document.createElement("DIV");
					tmp_divi.innerHTML = "&nbsp;"+req.responseText;
					var scriptit = tmp_divi.getElementsByTagName("script");
					
					for(var eval_i=0;eval_i<scriptit.length;eval_i++){
						try {
						eval(scriptit[eval_i].innerHTML);
						}catch(e){
						Stato.Debug("Stato.js: content js eval: " + document.getElementById(elemString) + e +" "+ scriptit[eval_i].innerHTML);
						}
					}
					if (document.getElementById(elemString).parentNode.getAttribute("dragable"))
						initBoxHeader(document.getElementById(elemString));
					if(document.getElementById(elemString).getAttribute("onrefresh")){
						thissi.refreshElement(document.getElementById(elemString).getAttribute("onrefresh"));
					}
					if(pool==true){
						Stato.RequestPoolPop();
					}
				} else {
					alert("There was a problem retrieving the XML data:\n" + req.statusText);
				}
				clearTimeout(Stato.jkloops[elemString]);
				//Stato.statusFeedback("stop",elemString);
			}
		}catch(e){
			//Stato.Debug("Stato.js: processReqChange: element: " +elemString["node"].id );			 
			//Stato.Debug("Stato.js: processReqChange: " + elemString+" "+ document.getElementById(elemString)+" "+ e);
			//Stato.statusFeedback("stop",document.getElementById(elemString));
			//alert(rootNodeObj.id+e.message);
		}
	};
	
	this.SetCookie = function(name,value){
		var exp = new Date();
		exp.setYear(exp.getFullYear()+1);
		document.cookie = name + "=" + value + ";path=/;expires=" + exp.toGMTString();
	};

	this.GetCookie = function(name){
		var dc = document.cookie;
		var prefix = name + "=";
		var begin = dc.indexOf("; " + prefix);
		if (begin == -1) {
			begin = dc.indexOf(prefix);
			if (begin != 0) return null;
		} else {
			begin += 2;
		}
		var end = document.cookie.indexOf(";", begin);
		if (end == -1) {end = dc.length;}
		return unescape(dc.substring(begin + prefix.length, end));
	};
		
	

}

var rootNodeObj = null;
var Stato = new DynLoaderObj();

function getOffsetTop(elm) {
	var mOffsetTop = elm.offsetTop;
	var mOffsetParent = elm.offsetParent;
	while(mOffsetParent){
		mOffsetTop += mOffsetParent.offsetTop;
		mOffsetParent = mOffsetParent.offsetParent;
	}
	return mOffsetTop;
}

function getOffsetLeft(elm) {
	var mOffsetLeft = elm.offsetLeft;
	var mOffsetParent = elm.offsetParent;
	while(mOffsetParent) {
		mOffsetLeft += mOffsetParent.offsetLeft;
		mOffsetParent = mOffsetParent.offsetParent;
	}
	return mOffsetLeft;
}
