<!-- // hide from old browsers
function detectPopupBlocker() {
  var myTest = window.open("about:blank","","left=2000,top=2000,directories=no,height=1,width=1,menubar=no,resizable=no,scrollbars=no,status=no,titlebar=no,location=no");
  if (!myTest) {
		document.getElementById("tblPopup").style.display = "";
  } else {
	try {
		myTest.close();
    }
    catch (e) {
		document.getElementById("tblPopup").style.display = "";
    }
  }
}

function focusField(element, text) { //removes default text in search field
  if (element.value == text) {
 element.value = "";
  }
}

function blurField(element, text) { //removes default text in search field if left empty
  if (element.value == "") {
 element.value = text;
  }
}


/*
The following script will change the background colour of the table cell containing a checkbox
Need to call the initCheckBoxes() function when page loads.
Styles are in the style sheet:
    checkSelected
    checkNotSelected
    checkMouseOver
*/
function setCheckBackground () {
	if (this.checked) {
		this.parentNode.className="checkSelected"
	}
	else {
		this.parentNode.className = "checkNotSelected";
	}
	showEdit();
}

function setCheckMouseOver () {
	if (!this.getElementsByTagName("INPUT")[0].checked) {
		this.className="checkMouseOver"
	}
}

function setCheckMouseOut () {
	if (!this.getElementsByTagName("INPUT")[0].checked) {
		this.className = "checkNotSelected";
	}
}

var p_doInit = true;
function initCheckBoxes() {
    if (p_doInit) {
	    p_checked = document.getElementsByTagName("INPUT");
	    for (i=0; i<p_checked.length; i++) {
		    if (p_checked[i].type == "checkbox" || p_checked[i].type =="radio") {
    		    if (p_checked[i].checked) {
			        p_checked[i].parentNode.className = "checkSelected";
		        } else {
			        p_checked[i].parentNode.className = "checkNotSelected";
		        }
		        //so as not to override any existing fuction on click
		        if (!p_checked[i].onclick) {
    		        p_checked[i].onclick = setCheckBackground;
    	        }
		        p_checked[i].parentNode.onmouseover = setCheckMouseOver;
		        p_checked[i].parentNode.onmouseout = setCheckMouseOut;
		        p_checked[i].parentNode.onclick = checkInput;
		    }
	    }
	    adjustAllTextAreas();
	    adjustAllTextInputs();
        adjustAllSelects();
        try{
	    if (!document.getElementById("editMessageLayer")) {
	        editMessageLayer = document.createElement("div");
	        editMessageText = document.createTextNode("Changes to this page will not be saved until you hit the \"Save\" button.")
	        editMessageLayer.appendChild(editMessageText);
	        editMessageLayer.id = "editMessageLayer";
	        editMessageLayer.className = "editedPage";
    	    document.getElementById(p_tabContainerID).insertBefore(editMessageLayer,document.getElementById(p_tabContainerID).firstChild);
	    }
	    }catch(e){}
	}
}

function prepend_messageLayer(containerId){
    if (!document.getElementById("editMessageLayer")) {
	        editMessageLayer = document.createElement("div");
	        editMessageText = document.createTextNode("Changes to this page will not be saved until you hit the \"Save\" button.")
	        editMessageLayer.appendChild(editMessageText);
	        editMessageLayer.id = "editMessageLayer";
	        editMessageLayer.className = "editedPage";
    	    document.getElementById(containerId).insertBefore(editMessageLayer,document.getElementById(containerId).firstChild);
	}
}

function showEdit() {
    hideSaveSuccess();
    if (document.getElementById("editMessageLayer")) {
    if (document.getElementById("editMessageLayer").style.display != "block") {
        document.getElementById("editMessageLayer").style.display = "block";
        document.getElementById("editMessageLayer").style.overflow = "hidden";
        document.getElementById("editMessageLayer").style.visibility = "visible";
        document.getElementById("editMessageLayer").style.height = "1px";
        setTimeout("showEdit()",15);
    } else {
        if (parseInt(document.getElementById("editMessageLayer").style.height) < 24) {
            document.getElementById("editMessageLayer").style.height = parseInt(document.getElementById("editMessageLayer").style.height) + 4 + "px";
            //alert(parseInt(document.getElementById("editMessageLayer").style.height));
            setTimeout("showEdit()",15);
        } 
    }
    }
}

function prepend_success_message_layer(containerId){
      if (!document.getElementById("saveSuccessMsgLayer")) {
	        saveSuccessMessageLayer = document.createElement("div");
	        saveSuccessMessageText = document.createTextNode("Changed has been saved successfully.")
	        saveSuccessMessageLayer.appendChild(saveSuccessMessageText);
	        saveSuccessMessageLayer.id = "saveSuccessMsgLayer";
	        saveSuccessMessageLayer.style.display='none';
	        saveSuccessMessageLayer.className = "saveSuccessMessageClass";	        
    	    document.getElementById(containerId).insertBefore(saveSuccessMessageLayer,document.getElementById(containerId).firstChild);
	 }
}

function prepend_fail_message_layer(containerId){
      if (!document.getElementById("saveFailMsgLayer")) {
	        saveFailMessageLayer = document.createElement("div");
	        saveFailMessageText = document.createTextNode("Fail to save changes, please check all errors shown in red.")
	        saveFailMessageLayer.appendChild(saveFailMessageText);
	        saveFailMessageLayer.id = "saveFailMsgLayer";
	        saveFailMessageLayer.style.display='none';
	        saveFailMessageLayer.className = "saveFailMessageClass";	        
    	    document.getElementById(containerId).insertBefore(saveFailMessageLayer,document.getElementById(containerId).firstChild);
	 }
}

function showSaveSuccess(containerID){
    try{
        document.getElementById('saveSuccessMsgLayer').style.display='block';
    }catch(e){}
}

function showSaveFail(containerID){
    try{
        document.getElementById('saveFailMsgLayer').style.display='block';
    }catch(e){}
}

function hideSaveSuccess(){
    try{
        document.getElementById('saveSuccessMsgLayer').style.display='none';
    }catch(e){}
}

/*
still haven't figured out a way to check checkboxes on click of parent node
tried this.getElementsByTagName("INPUT")[0].checked = true which works BUT
checking the actual checkbox doesn't work!!!!!
*/
function checkInput() {
	if (!this.getElementsByTagName("INPUT")[0].checked) {
	} else {
	}
}


/*
This function dynamically expands a textarea by adding
5 rows as the text exceeds the rows.
*/

function adjustBackground(element) {
    element.className = "editedTextArea";
    showEdit();
}

function adjustRows(textarea, isInit) {
	var maxChars = textarea.maxChars;
	var theRows = textarea.value.split("\n");
	var numNewRows = 5;  
	for ( var i = 0; i < theRows.length; i++ ) {
		numNewRows += ( Math.ceil( theRows[i].length / maxChars ) - 1 );
	}
	textarea.rows = numNewRows + theRows.length;
	if (!isInit) {
	    adjustBackground(textarea);
	}
}

function adjustAllTextAreas() {
    p_textAreas = document.getElementsByTagName("TEXTAREA")
	for (var i=0; i <p_textAreas.length; i++) {
		if (p_textAreas[i].rows > 1) {
			p_textAreas[i].maxChars = parseInt(p_textAreas[i].style.width)/8.5;
			adjustRows(p_textAreas[i], true);
			p_textAreas[i].onkeyup = adjustRowsEvent;
		}
	}
}

function adjustRowsEvent() {
    adjustRows(this, false);
}

function adjustAllTextInputs () {
    p_textInputs = document.getElementsByTagName("INPUT")
	for (var i=0; i <p_textInputs.length; i++) {
	    if (p_textInputs[i].type == "text" && p_textInputs[i].id != "searchtext") {
            //p_textInputs[i].onchange = adjustTextInputBackground
            p_textInputs[i].className = "defaultInput";
            addEvent(p_textInputs[i],"keyup",adjustTextInputBackground);
	    }
    }    
}

function adjustTextInputBackground() {
    this.className = "editedInput";
    showEdit();
}

function adjustAllSelects () {
    p_selects = document.getElementsByTagName("SELECT")
	for (var i=0; i <p_selects.length; i++) {
	    //if (!p_selects[i].onchange) {
        //    p_selects[i].onchange = adjustSelectBackground
            p_selects[i].className = "defaultSelect"
	    //} else {alert(p_selects[i].onchange);}
	   // if(p_selects[i].addEventListener) {
	   //     p_selects[i].addEventListener("change",adjustSelectBackground,false);
	   // } else {
	   //     p_selects[i].attachEvent("onchange",adjustSelectBackground);
	   // }
	   //if(p_selects[i].outerHTML.indexOf("__doPostBack")==-1){
	        addEvent(p_selects[i],"change",adjustSelectBackground);
	   //}	
	   
    }    
}

function adjustSelectBackground() {
    //alert(this.name);
    this.className = "editedSelect";
    showEdit();
}

/*
The following script inserts text into a text area where the cursor is located
*/

function insertAtCursor(myFieldName, myValue) {
    myField = document.getElementById(myFieldName);
	myValue += "\n";
	if (document.selection) { 
		myField.focus(); 
		sel = document.selection.createRange(); 
		sel.text = myValue; 
	}	 
	else if (myField.selectionStart || myField.selectionStart == '0') { 
		var startPos = myField.selectionStart; 
		var endPos = myField.selectionEnd; 
		myField.value = myField.value.substring(0, startPos)+ myValue+ myField.value.substring(endPos, myField.value.length); 
	} else { 
		myField.value += myValue; 
	} 
	myField.focus(); 
	adjustRows(myField,false);
} 


function insertAtCursorNoAdjust(myFieldName, myValue) {
    myField = document.getElementById(myFieldName);
	myValue += "\n";
	if (document.selection) { 
		myField.focus(); 
		sel = document.selection.createRange(); 
		sel.text = myValue; 
	}	 
	else if (myField.selectionStart || myField.selectionStart == '0') { 
		var startPos = myField.selectionStart; 
		var endPos = myField.selectionEnd; 
		myField.value = myField.value.substring(0, startPos)+ myValue+ myField.value.substring(endPos, myField.value.length); 
	} else { 
		myField.value += myValue; 
	} 
	myField.focus(); 
} 

/*
The following script returns a date formatting according to a specific string (same as in VS)
*/

// a global month names array
var gsMonthNames = new Array('January','February','March','April','May','June','July','August','September','October','November','December');
// a global day names array
var gsDayNames = new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');

// string fucntions to add leading 0's 
String.prototype.zf = function(l) { return '0'.string(l - this.length) + this; }
Number.prototype.zf = function(l) { return this.toString().zf(l); }
String.prototype.string = function(l) { var s = '', i = 0; while (i++ < l) { s += this; } return s; }

// the date format prototype
Date.prototype.format = function(f)
{
    if (!this.valueOf())
        return 'n.a.';

    var d = this;
    return f.replace(/(yyyy|yy|y|MMMM|MMM|MM|M|dddd|ddd|dd|d|HH|H|hh|h|mm|m|ss|s|t)/gi,
      function($1)
      {
          switch ($1)
          {
              case 'yyyy': return d.getFullYear();
              case 'yy':   return (d.getFullYear()%100).zf(2);
              case 'y':    return (d.getFullYear()%100);
              case 'MMMM': return gsMonthNames[d.getMonth()];
              case 'MMM':  return gsMonthNames[d.getMonth()].substr(0, 3);
              case 'MM':   return (d.getMonth() + 1).zf(2);
              case 'M':    return (d.getMonth() + 1);
              case 'dddd': return gsDayNames[d.getDay()];
              case 'ddd':  return gsDayNames[d.getDay()].substr(0, 3);
              case 'dd':   return d.getDate().zf(2);
              case 'd':     return d.getDate();
              case 'HH':   return d.getHours().zf(2);
              case 'H':    return d.getHours();
              case 'hh':   return ((h = d.getHours() % 12) ? h : 12).zf(2);
              case 'h':    return ((h = d.getHours() % 12) ? h : 12);
              case 'mm':   return d.getMinutes().zf(2);
              case 'm':    return d.getMinutes();
              case 'ss':   return d.getSeconds().zf(2);
              case 's':    return d.getSeconds();
              case 't':     return d.getHours() < 12 ? 'AM' : 'PM';         
            }            
        }
    );
}
Date.prototype.formatDefault = function() {
	return this.format('d MMM yyyy hh:mmt');
}


/***
Function to attach and detach event listeners
http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.html
***/

function addEvent( obj, type, fn )
{
	if (obj.addEventListener)
		obj.addEventListener( type, fn, false );
	else if (obj.attachEvent)
	{
		obj["e"+type+fn] = fn;
		obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
		obj.attachEvent( "on"+type, obj[type+fn] );
	}
}

function removeEvent( obj, type, fn )
{
	if (obj.removeEventListener)
		obj.removeEventListener( type, fn, false );
	else if (obj.detachEvent)
	{
		obj.detachEvent( "on"+type, obj[type+fn] );
		obj[type+fn] = null;
		obj["e"+type+fn] = null;
	}
}

// -->


function sendemail(x,y) { //email munger script
  void(top.location="\u006d\u0061\u0069\u006c\u0074\u006f\u003a"+x+"\u0040"+y);
  return false;
}


/*
The following scripts set a get cookies http://www.w3schools.com/JS/js_cookies.asp
*/
function setCookie(c_name, value, expiredays) {
    var exdate = new Date();
    exdate.setDate(exdate.getDate() + expiredays);
    document.cookie = c_name + "=" +escape(value) + ((expiredays == null) ? "" : ";expires=" + exdate.toGMTString());
}


function getCookie(c_name) {
    if (document.cookie.length > 0) {
        c_start=document.cookie.indexOf(c_name + "=");
        if (c_start != -1) {
            c_start = c_start + c_name.length+1;
            c_end = document.cookie.indexOf(";",c_start);
            if (c_end == -1) c_end = document.cookie.length;
            return unescape(document.cookie.substring(c_start,c_end));
        }
    }
    return "";
}