/* 
	Scripts to update html content		
*/

// G E T  F U N C T I O N S
// Builds the form params for the url for the request

onloadgethtmlupdate = false;
doHtmlUpdate = 1;

function gethtmlupdate(type,element,objectname,sid) {
	// onhtmlupdate is the name of a function that should run after the gethtmlupdate() is finished.
	// Just apply the name (without the brackets). The function will be called with no arguments.
	// The rendered call could look like this:
	// gethtmlupdate('htmlselect',this.value,'kommuneselect','555291506586444431360114321857867.0','onchange','getupdateprep','onhtmlupdate','getupdateprep');
	args = gethtmlupdate.arguments;
	object 		= objectname;
	curl = url 	+ "/get-"			+ type 
				+ "/" + element.name + "-" 			+ element.value
				+ "/object-" 		+ objectname
				+ "/_sid-" 			+ sid;
	onhtmlupdate = ''
	if (args.length > 4) for (i=4;i<args.length;i+=2) { 
		if (args[i] == 'onhtmlupdate') onhtmlupdate = args[i+1];
		else curl += '/'+args[i]+'-'+args[i+1];
		}
	doHtmlUpdate = 1;
	curl = encodeURI(curl);
	requestArticle(curl);
	}

function getform2htmlpageSetdata(url) {

	var fObj,separator,args=getform2htmlpageSetdata.arguments;
	objectname = false;
	if(args.length>1) fObj=args[1];
	if(args.length>2) {
		objectname=args[2];
		object = findobject(objectname);
		}
	onhtmlupdate = '';
	separator = url.indexOf('//');
	curl = url;
	if (separator<0) separator = curl.indexOf('/-/');
	if (separator>-1) {
		urlPath = curl.substring(0,separator);
		if (urlPath.substring(separator-4,separator)=='.xml') urlPath = urlPath.substring(0,separator-4);
		curl = urlPath + curl.substring(separator,curl.length);
		}
	else if (curl.substring(curl.length-4,curl.length)=='.xml') curl = curl.substring(curl.length,curl.length-4);
	var re=new RegExp('/',"g");
	if (fObj) for (n=0;n<fObj.elements.length;n++) {
		if (((fObj.elements[n].type=='checkbox')&&(fObj.elements[n].checked))||(fObj.elements[n].type!='checkbox')) {
			if (((fObj.elements[n].type=='radio')&&(fObj.elements[n].checked))||(fObj.elements[n].type!='radio')) {
				curl += '/' + fObj.elements[n].name + '-' + fObj.elements[n].value.replace(re,"%2F");
				}
			}
		}
	//alert(curl);
	doHtmlUpdate = objectname;
	curl = encodeURI(curl);
	//alert(curl);
	requestArticle(curl);
	return false;
	}

function getform2htmlpageupdate(url,objectname) {
	/*
	Function arguments: objectname,url - and optional: fObj,whileupdatetext,whileupdatetextDivClass.
	
	This function converts all elements of the form object fObj to xpyth style url params.
	If the argument 'whileupdatetext' is given, it is shown (briefly) while waiting for the html update.
	If the argument 'whileupdatetextDivClass' is given i.e. class name, this styling is used for the 'waiting text'.
	*/

	var fObj,whileupdatetext,whileupdatetextDivClass,separator,args=getform2htmlpageupdate.arguments;
	if(args.length>2) fObj=args[2];
	if(args.length>3) whileupdatetext=args[3];
	if(args.length>4) whileupdatetextDivClass=args[4];
	if(args.length>5) onhtmlupdate=args[5];
	else onhtmlupdate = '';
	if (objectname)	object = findobject(objectname);
	//objectname=(typeof(object)=='object')?((object.name)?object.name:object.id):'';

	separator = url.indexOf('//');
	if (separator<0) separator = url.indexOf('/-/');
	if (separator>-1) {
		urlPath = url.substring(0,separator);
		if (urlPath.substring(separator-4,separator)=='.xml') urlPath = urlPath.substring(0,separator-4);
		url = urlPath + url.substring(separator,url.length);
		}
	else if (url.substring(url.length-4,url.length)=='.xml') url = url.substring(url.length,url.length-4);
	curl = url + "/-/get-" + 'htmlpage';
	if (objectname) curl += ("/object-" + objectname);

	var re=new RegExp('/',"g");
	if (fObj) for (n=0;n<fObj.elements.length;n++) {
		if (((fObj.elements[n].type=='checkbox')&&(fObj.elements[n].checked))||(fObj.elements[n].type!='checkbox')) {
			if (((fObj.elements[n].type=='radio')&&(fObj.elements[n].checked))||(fObj.elements[n].type!='radio')) {
				curl += '/' + fObj.elements[n].name + '-' + fObj.elements[n].value;//.replace(re,"%2F");
				}
			}
		}
	if (typeof(_sid)!='undefined') curl += ('/_sid-'+_sid);
	if (whileupdatetextDivClass) whileupdatetexthtml= '<div class="' + whileupdatetextDivClass + '">' + whileupdatetext + '</div>';
	else whileupdatetexthtml = '<div class="note" style="letter-spacing:1em;font-size:10pt;font-variant:small-caps;font-weight:normal">' + whileupdatetext + '';
	whileupdatetexthtml += '<br/><img src="/_root/_lib2/images/icons/spinner/timer2_40.gif" width="36"/></div>';
	if (whileupdatetext) object.innerHTML = whileupdatetexthtml;
	//alert(whileupdatetexthtml)
	doHtmlUpdate = objectname
	curl = encodeURI(curl);
	//alert(curl);
	//alert(onhtmlupdate);
	requestArticle(curl);
	return false;
	}

// H T M L U P D A T E  F U N C T I O N S

function GetXmlHttpObject() {

	 // Firefox, Opera 8.0+, Safari
	try { return new XMLHttpRequest(); }
	catch (e){}

	// Internet Explorer
	try { return new ActiveXObject("Msxml2.XMLHTTP.6.0");}
	catch (e) {}
	try { return new ActiveXObject("Msxml2.XMLHTTP.3.0");}
	catch (e) {}
	try { return new ActiveXObject("Msxml2.XMLHTTP");}
	catch (e) {}
	try { return xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); }
	catch (e) {}
	return null;
	}

function requestArticle() {
	req = GetXmlHttpObject();
	if (!req) req = new activeXObject('Microsoft.XMLHTTP'); 
	if (req) {
		req.onreadystatechange = checkRequestResponse;
		req.open("GET", curl, true);
		req.send(null);
		}
	}

function checkRequestResponse() {
	if ((req.readyState == 4)&&(doHtmlUpdate)) {
		response = req.responseText;
		processRawHTML(response);
		}
	}

function processRawHTML(input, getoutput) {
	var start = '';
	var end = '';
	startstring = '<!--gethtmlupdatestart-->';
	resultsIndex = input.indexOf(startstring);
	if (resultsIndex > -1) {
		start = resultsIndex + startstring.length;
		end = input.indexOf("<!--gethtmlupdateend-->");
		}
	else {
		startstring = '<!-- gethtmlupdatestart -->';
		resultsIndex = input.indexOf(startstring);
		if (resultsIndex > -1) {
			start = resultsIndex + startstring.length;
			end = input.indexOf("<!-- gethtmlupdateend -->");
			}	
	}
	output = input.substring(start, end);
	if (getoutput) return output;
	else {
		//alert(start + ' ' + end + ' ' + output + ' ' + input);
		iobj = findobject(object);
		if (iobj) {
			if (output) {
				if ((iobj.type=='text')||(iobj.type=='textarea')) iobj.value = output;
				else iobj.innerHTML = output;
				}
			else {
				// output for debugging
				iobj.innerHTML = input;
				}
			oHUDate();
			}
		}
	}
function oHUDate() {
	if (onhtmlupdate) {
		temp = onhtmlupdate.split(';');
		onhtmlupdate = temp.join('');
		eval(onhtmlupdate + '()');
		}
	}

