/*
Created by DL - 01/03/2007
intended to be used to set up vars and functions used throughout project
referenced from template.htm and paymenttemplate.htm so available from every page
*/




/* IMAGES */


/* census image that appears on all census results pages */

var censusImg = document.createElement("img");
censusImg.src = "image/icon-vieworiginal.gif";
censusImg.width=28;
censusImg.height=33;
//censusImg.src = "image/census_image.gif";

/* searching image with spinning dots (animated gif) */

var loadImg = document.createElement("img");
loadImg.src = "image/timer.gif";


var bmdImg = document.createElement("img");
bmdImg.src = "image/icon-bmd.gif";
bmdImg.width=38;
bmdImg.height=43;

var overseasbmdImg = document.createElement("img");
overseasbmdImg.src = "image/icon-bmdoverseas.gif";
overseasbmdImg.width=38;
overseasbmdImg.height=43;


/* FUNCTIONS */


/* adds the specified function to the load event of the page */

function addLoadEvent(func){
	var oldonload = window.onload;
	if(typeof window.onload != 'function'){
		window.onload = func;
	}else{
		window.onload = function(){
			oldonload();
			func();
		}
	}
}

/* adds the specified function to the unload event of the page */

function addUnloadEvent(func){
	var oldonunload = window.onunload;
	if(typeof window.onunload != 'function'){
		window.onunload = func;
	}else{
		window.onunload = function(){
			oldonunload();
			func();
		}
	}
}

/* if the page has a form on it called "contents" then this adds 
showSubmitMsg() to the submit event */

function setupSubmitMsg(){
	if(!document.getElementById) return true;
	for(var i = 0;i<document.forms.length;i++){
		if(document.forms[i].name == "contents"){
			var oldonsubmit = document.forms[i].onsubmit;
			if(typeof document.forms[i].onsubmit != 'function'){
				document.forms[i].onsubmit = showSubmitMsg;
			}else{
				document.forms[i].onsubmit = function(){
					oldonsubmit();
					showSubmitMsg();
				}
			}
		}
	}
}


/* function turns off everything on the main and right divs and shows 
the "your search is being processed..." message */

function showSubmitMsg(){
	/* 
	if(!document.getElementById) return true;
	var main = document.getElementById('main');
	if(main){
		for(var i=0;i<main.childNodes.length;i++){
			//alert(main.childNodes[i].nodeType );
			layeroff(main.childNodes[i]);
		}
	}
	var right = document.getElementById('right');
	if(right){
		for(var i=0;i<right.childNodes.length;i++){
			layeroff(right.childNodes[i]);
		}
	}
	para = document.createElement("P");
	var d = document.createElement("div");
	d.id = "submitmsg";
	d.style.width = "600px";
	d.style.marginTop = "20px";
	d.style.marginLeft = "10px";
	var t = document.createTextNode('Your search is now being processed. This might take a short period of time to complete.');
	d.appendChild(para);
	d.appendChild(t);
	d.appendChild(para);
	d.appendChild(loadImg);
	main.appendChild(d);
	
	document.body.scrollTop = 0;
*/
	return true;
}

/* makes a layer/div visible */

function layeron(slayer) {
	if(slayer){
		if (document.layers) {
			slayer.visibility="visible"
		} else {
			if(slayer.style){
				slayer.style.visibility="visible"
				slayer.style.display="block"
			}
		}
	}
}

/* different versions of above */

function showdiv(divName) {
	targetDiv = document.getElementById(divName);
	if(targetDiv) {
		targetDiv.style.visibility="visible";
		targetDiv.style.display="block"
	}
}



/* makes a layer/div hidden */

function layeroff(slayer) {
	if(slayer){
		if (document.layers) {
			slayer.visibility="hide"
		} else {
			if(slayer.style){
				slayer.style.visibility="hidden";
				slayer.style.display="none"
			}
		}
	}
}

/* different versions of above */

function hidediv(divName) {
	targetDiv = document.getElementById(divName);
	if(targetDiv) {
		targetDiv.style.visibility="hidden";
		targetDiv.style.display="none"
	}
} 




/* gets the layer/div */

function getlayer(layername) {
	if (document.layers) {
		var theLayer=document.layers[layername]
	} else {
		if (document.getElementById) {
			var theLayer=document.getElementById(layername)
		} else {
			var theLayer=document.all[layername]
		}
	};

	return theLayer;
	
}


/* browser safe method of getting a node's class */

function getElementsByClassName(oElm, strTagName, strClassName){
    var arrElements = (strTagName == "*" && document.all)? document.all : 
    oElm.getElementsByTagName(strTagName);
    var arrReturnElements = new Array();
    strClassName = strClassName.replace(/\-/g, "\\-");
    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
    var oElement;
    for(var i=0; i<arrElements.length; i++){
        oElement = arrElements[i];      
        if(oRegExp.test(oElement.className)){
            arrReturnElements.push(oElement);
        }   
    }
    return (arrReturnElements)
}

/* is var numeric? */

function isDigit(string) {
	var allowed = '0123456789';
	if(string.length==0) return false;
	return validated(string, allowed);
}

function IsNumeric(sText) {
	var ValidChars = "0123456789.";
	var IsNumber=true;
	var Char;
	for (i = 0; i < sText.length && IsNumber == true; i++) {
		Char = sText.charAt(i);
		if (ValidChars.indexOf(Char) == -1) {
			IsNumber = false;
		}
	}
	return IsNumber;
}

/* turn off main page elements */

function hidePageElements() {
	var main = document.getElementById('main');
	if(main){
		for(var i=0;i<main.childNodes.length;i++){
			//alert(main.childNodes[i].nodeType );
			layeroff(main.childNodes[i]);
		}
	}
	var right = document.getElementById('right');
	if(right){
		for(var i=0;i<right.childNodes.length;i++){
			layeroff(right.childNodes[i]);
		}
	}
}

/* turn on main page elements */

function showPageElements() {
	var main = document.getElementById('main');
	if(main){
		for(var i=0;i<main.childNodes.length;i++){
			layeron(main.childNodes[i]);
		}
	}
	var right = document.getElementById('right');
	if(right){
		for(var i=0;i<right.childNodes.length;i++){
			layeron(right.childNodes[i]);
		}
	}
}

/* get cookie */

function fetchNamedCookie( sName )
{
    return fetchDocumentCookie( document, sName );
}

function fetchDocumentCookie( oDoc, sName )
{
    var sValue = "";
    var index = 0;

    //  The "cookie" property on the document is actually a
    //  single string of the form "name=value; name2=value2; ..."
    //  As a result we must search through the cookie string
    //  to find the name=value pair that we are looking for.
    //
    if( oDoc.cookie )
        index = oDoc.cookie.indexOf( sName + "=" );
    else
        index = -1;

    if ( index < 0 )
    {
        sValue = "";
    }
    else
    {
        var countbegin = (oDoc.cookie.indexOf( "=", index ) + 1);
        if ( 0 < countbegin )
        {
            var countend = oDoc.cookie.indexOf( ";", countbegin );
            if ( countend < 0 )
                countend = oDoc.cookie.length;
            sValue = oDoc.cookie.substring( countbegin, countend );
        }
        else
        {
            sValue = "";
        }
    }
    return sValue;
}

function setDocumentCookie( oDoc, sName, sValue, bSessionCookie )
{

    /*
    dl 19/12/2007 
    if bSessionCookie is set and is true then this cookie will expire when the browser is closed
    if not the the cookie will last for a year
    */
    
    if(bSessionCookie) {
    	//alert('is');
    }

    if ( sName.length < 1 )
        return;

    if ( 0 < sValue.length )
    {
        // create a date for a year from now
        var expDate = new Date();
        expDate.setTime( expDate.getTime() + 365*24*60*60*1000 );

        // Notice that the cookie is actually two assignment strings.
        //  The first is "cookiename=value" and the second is
        //  "expires=date".  The two assignments are  separated by a
        //  semicolon.  If you do not have the "expires" assignment
        //  the cookie will disappear when the visitor's browser exits.
        //
        if(!bSessionCookie) {
        	oDoc.cookie = ""
                        + sName + "=" + sValue + "; "
        }else{
        	oDoc.cookie = ""
        		+ sName + "=" + sValue + "; "
                        + "expires=" + expDate.toGMTString();
        }
    }
    else
    {
        //  this will cause the named cookie to be deleted.
        oDoc.cookie = sName + "=";
    }
}

function setNamedCookie( sName, sValue )
{
    setDocumentCookie( document, sName, sValue );
}

function setBrowserSessionNamedCookie( sName, sValue )
{
    setDocumentCookie( document, sName, sValue, true );
}

function getClassName(node) {
	sClassName = node.getAttribute('className');
	if(sClassName) {
		return sClassName
	}else{
		sClassName = node.getAttribute('class');
		return sClassName
	}
}

function setClassName(node, newClass) {
	sClassName = node.getAttribute('className');
	if(sClassName) {
		node.setAttribute('className',newClass);
	}else{
		sClassName = node.getAttribute('class');
		node.setAttribute('class',newClass);
	}
}

function setScriptable(link) {
	document.location.href=link.href+'&isscriptable=true';
	//return false;
}

function submitImage(row, imgQuery){
	box=eval("document.contents.chooser" + row );
	if(box.options[box.selectedIndex].value!="0"){
		// 31/01/06 dl trk 2668
		if (imgQuery.indexOf("key=&enc=&") != -1 ) {
			alert('Sorry that page type does not exist for this District');
		}else{
			//document.contents.action=imgQuery+box.options[box.selectedIndex].value;
			/*
			31/01/06 dl trk ? couldn't view different image types
			always showing desc of enum district
			*/
			document.contents.action=imgQuery+document.contents['chooser'+row].value
			//alert(document.contents.action);
			document.contents.submit();
		}
	}
	else{
		alert("That was not a valid entry");
	}

}


/* new method of making things invisible using LKs class-skip */
/* better becuase setting the class to nothing means the element will revert to 
whatever styles it had previously eg block OR inline */



function hideObj(sID) {
	//this function works in tandem with showObj
	//may need to alter it to preserve class?
	var elem=document.getElementById(sID);
	if(elem) {
		//store orig display property
		var currStyle=getStyle(elem,'display');
		//if we've previously set an origdisp then preserve that
		var origdisp=elem.getAttribute('origdisp');
		if(origdisp==null) {
			elem.setAttribute('origdisp',currStyle);
		}
		elem.style.visibility='hidden';
		elem.style.display='none'
	}
}

function showObj(sID) {
	var elem = document.getElementById(sID);
	if(elem) {
		var origDisp=elem.getAttribute('origdisp');
		
		elem.style.visibility='visible';
		if(origDisp!=null){
			//alert(sID+" was "+origDisp);
			elem.style.display=origDisp;
		}else{
			//leave as is?
		}
	}
}


function getStyle(oElm, strCssRule){
	var strValue = "";
	if(document.defaultView && document.defaultView.getComputedStyle){
		strValue = document.defaultView.getComputedStyle(oElm, "").getPropertyValue(strCssRule);
	}
	else if(oElm.currentStyle){
		strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1){
			return p1.toUpperCase();
		});
		strValue = oElm.currentStyle[strCssRule];
	}
	return strValue;
}

//qs funtions
function PageQuery(q) {
	if(q.length > 1) this.q = q.substring(1, q.length);
	else this.q = null;
	this.keyValuePairs = new Array();
	if(q) {
		for(var i=0; i < this.q.split("&").length; i++) {
			this.keyValuePairs[i] = this.q.split("&")[i];
		}
	}
	this.getKeyValuePairs = function() { return this.keyValuePairs; }
	this.getValue = function(s) {
		for(var j=0; j < this.keyValuePairs.length; j++) {
			if(this.keyValuePairs[j].split("=")[0] == s)
				return this.keyValuePairs[j].split("=")[1];
		}
		return false;
	}
	this.getParameters = function() {
		var a = new Array(this.getLength());
		for(var j=0; j < this.keyValuePairs.length; j++) {
			a[j] = this.keyValuePairs[j].split("=")[0];
		}
		return a;
	}
	this.getLength = function() { return this.keyValuePairs.length; }	
}

function queryString(key){
	var page = new PageQuery(window.location.search); 
	return unescape(page.getValue(key)); 
}

function loadjscssfile(filename, filetype){
 if (filetype=="js"){ //if filename is a external JavaScript file
  var fileref=document.createElement('script')
  fileref.setAttribute("type","text/javascript")
  fileref.setAttribute("src", filename)
 }
 else if (filetype=="css"){ //if filename is an external CSS file
  var fileref=document.createElement("link")
  fileref.setAttribute("rel", "stylesheet")
  fileref.setAttribute("type", "text/css")
  fileref.setAttribute("href", filename)
 }
 if (typeof fileref!="undefined")
  document.getElementsByTagName("head")[0].appendChild(fileref)
}


function clearTableRows(oTbl) {
	allRows=oTbl.rows.length;
	for(var i=1;i<allRows;i++) {
		oTbl.deleteRow(1);
	}
}