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) {
  		this.InitReq();
		req.onreadystatechange = handler;
		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) {
  		this.InitReq();
		req.onreadystatechange = handler;
		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.loadContent = function(element,url){
		rootNodeObj = document.getElementById(element);
		//jkluuppi = setTimeout("jkloop()",1000);
		this.loadXMLDoc(url,this.processReqChange);
	};

	this.postContent = function(element,url){
		var query = this.setQueryString(element);
		rootNodeObj = document.getElementById(element);
		this.postXMLDoc(url,query,this.processReqChange);
	};

	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() {
		try{
			statusFeedback("run");
			if (req.readyState == 4) {
				if (req.status == 200) {
					rootNodeObj.innerHTML = req.responseText;
					if(rootNodeObj.getAttribute("onrefresh")){
						thissi.refreshElement(rootNodeObj.getAttribute("onrefresh"));
					}
				} else {
					alert("There was a problem retrieving the XML data:\n" + req.statusText);
				}
			statusFeedback("stop");
			}
		}catch(e){
			//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 req = null;
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;
}
