var savedStates=new Array();
var savedStateCount=0;

function saveBackgroundStyle(myElement) {
 saved=new Object();
 saved.element=myElement;
 saved.className=myElement.className;
 saved.backgroundColor=myElement.style["backgroundColor"];
 return saved;   
}

function restoreBackgroundStyle(savedState) {
 savedState.element.style["backgroundColor"]=savedState.backgroundColor;
 if (savedState.className)
  savedState.element.className=savedState.className;    
}

function findNode(startingNode,tagName) {
 myElement=startingNode;
 var i=0;
 while (myElement && (!myElement.tagName || (myElement.tagName && myElement.tagName!=tagName))) {
  myElement=startingNode.childNodes[i];
  i++;
 }  
 if (myElement && myElement.tagName && myElement.tagName==tagName)
  return myElement;
 else if (startingNode.firstChild)
  return findNode(startingNode.firstChild, tagName);
 return 0;
}

function highlight(myElement,highlightColor) {
 var i=0;
 for (i; i<savedStateCount; i++)
   restoreBackgroundStyle(savedStates[i]);          
 savedStateCount=0;
 if (!myElement || (myElement && myElement.id && myElement.id=="header"))
  return;
 if (myElement) {
  var tableRow=myElement;
  if (tableRow) {
   savedStates[savedStateCount]=saveBackgroundStyle(tableRow);
   savedStateCount++;
  }
  var tableCell=findNode(myElement, "TD");    
  var i=0;
  while (tableCell) {
   if (tableCell.tagName=="TD") {
    if (!tableCell.style) {
     tableCell.style={};
    } else {
     savedStates[savedStateCount]=saveBackgroundStyle(tableCell);        
     savedStateCount++;
    }
    if (tableCell.id!="nochange")
     tableCell.style["backgroundColor"]=highlightColor;
    tableCell.style.cursor='default';
    i++;
   }
   tableCell=tableCell.nextSibling;
  }
 }
}

function URLEncode(clearString) {
 var output = '';
 var x = 0;
 clearString = clearString.toString();
 var regex = /(^[a-zA-Z0-9_.]*)/;
 while (x < clearString.length) {
  var match = regex.exec(clearString.substr(x));
  if (match != null && match.length > 1 && match[1] != '') {
   output += match[1];
   x += match[1].length;
  } else {
   if (clearString[x] == ' ')
    output += '+';
   else {
    var charCode = clearString.charCodeAt(x);
    var hexVal = charCode.toString(16);
    if (hexVal == 20)
     output += '+';
    else
     output += '%' + ( hexVal.length < 2 ? '0' : '' ) + hexVal.toUpperCase();
   }
   x++;
  }
 }
 return output;
}

function URLDecode(str) {
 var histogram = {};
 var ret = str.toString();
 var replacer = function(search, replace, str) {
     var tmp_arr = [];
     tmp_arr = str.split(search);
     return tmp_arr.join(replace);
 };
 histogram["'"]   = '%27';
 histogram['(']   = '%28';
 histogram[')']   = '%29';
 histogram['*']   = '%2A';
 histogram['~']   = '%7E';
 histogram['!']   = '%21';
 histogram['%20'] = '+';
 histogram['\u00DC'] = '%DC';
 histogram['\u00FC'] = '%FC';
 histogram['\u00C4'] = '%D4';
 histogram['\u00E4'] = '%E4';
 histogram['\u00D6'] = '%D6';
 histogram['\u00F6'] = '%F6';
 histogram['\u00DF'] = '%DF'; 
 histogram['\u20AC'] = '%80';
 histogram['\u0081'] = '%81';
 histogram['\u201A'] = '%82';
 histogram['\u0192'] = '%83';
 histogram['\u201E'] = '%84';
 histogram['\u2026'] = '%85';
 histogram['\u2020'] = '%86';
 histogram['\u2021'] = '%87';
 histogram['\u02C6'] = '%88';
 histogram['\u2030'] = '%89';
 histogram['\u0160'] = '%8A';
 histogram['\u2039'] = '%8B';
 histogram['\u0152'] = '%8C';
 histogram['\u008D'] = '%8D';
 histogram['\u017D'] = '%8E';
 histogram['\u008F'] = '%8F';
 histogram['\u0090'] = '%90';
 histogram['\u2018'] = '%91';
 histogram['\u2019'] = '%92';
 histogram['\u201C'] = '%93';
 histogram['\u201D'] = '%94';
 histogram['\u2022'] = '%95';
 histogram['\u2013'] = '%96';
 histogram['\u2014'] = '%97';
 histogram['\u02DC'] = '%98';
 histogram['\u2122'] = '%99';
 histogram['\u0161'] = '%9A';
 histogram['\u203A'] = '%9B';
 histogram['\u0153'] = '%9C';
 histogram['\u009D'] = '%9D';
 histogram['\u017E'] = '%9E';
 histogram['\u0178'] = '%9F';
 for (replace in histogram) {
  search = histogram[replace]; // Switch order when decoding
  ret = replacer(search, replace, ret) // Custom replace. No regexing   
 }
 ret = decodeURIComponent(ret);
 return ret;
}


function launchJavaScript(responseText) {
 var script = '(?:<script.*?>)((\n|.)*?)(?:<\/script>)';
 var match    = new RegExp(script, 'img');
 var scripts  = responseText.match(match);
 if(scripts) {
  var js = '';
  for(var s = 0; s < scripts.length; s++) {
   var match = new RegExp(script, 'im');
   js += scripts[s].match(match)[1];
  }
  eval(js);
 }
}

function ajax(target,value,handler,options,loading,script) {
 var xmlHttp;
 try { xmlHttp=new XMLHttpRequest(); }
 catch (e) {
  try { xmlHttp=new ActiveXObject('Msxml2.XMLHTTP'); }
  catch (e) {
   try { xmlHttp=new ActiveXObject('Microsoft.XMLHTTP'); }
   catch (e) {
    alert('Your browser does not support AJAX!');
    return false;
   }
  }
 }
 xmlHttp.onreadystatechange = function() {
  if(xmlHttp.readyState == 1 || xmlHttp.readyState == 2 || xmlHttp.readyState == 3)
   document.getElementById(target).innerHTML = (loading?loading:'Loading...');
  else if(xmlHttp.readyState == 4) {
   document.getElementById(target).innerHTML = xmlHttp.responseText;
   if (script) launchJavaScript(xmlHttp.responseText);
  }
 }
 xmlHttp.open('GET',handler+'?q='+URLEncode(value)+(options?options:''),true);
 xmlHttp.send(null);
}

function replaceButtonText(buttonId,text) {
 if (document.getElementById) {
  var button = document.getElementById(buttonId);
  if (button) {
   if (button.childNodes[0])
    button.childNodes[0].nodeValue = text;
   else if (button.value)
    button.value = text;
   else
    button.innerHTML = text;
  }
 }
}

function onEnterClick(evt,btn) {
 var keyCode = null;
 if (evt.which)
  keyCode = evt.which;
 else if (evt.keyCode)
  keyCode = evt.keyCode;
 if (keyCode == 13) {
  document.getElementById(btn).click();
  return false;
 }
 return true;
}

function onEnterGoTo(evt,id) {
 var keyCode = null;
 if (evt.which)
  keyCode = evt.which;
 else if (evt.keyCode)
  keyCode = evt.keyCode;
 if (keyCode == 13) {
  document.getElementById(id).focus();
  document.getElementById(id).select();
  return false;
 }
 return true;
}

function onEnterDoNothing(evt) {
 var keyCode = null;
 if (evt.which)
  keyCode = evt.which;
 else if (evt.keyCode)
  keyCode = evt.keyCode;
 if (keyCode == 13)
  return false;
 return true;
}

function html_entity_decode(string) {
 var tmpTxtArea = document.createElement('textarea');
 tmpTxtArea.innerHTML = string;
 var decoded = tmpTxtArea.value;
 return decoded;
}

function openSpellChecker(e) {
 var speller = new spellChecker( e );
 speller.openChecker();
}

Array.prototype.in_array = function(p_val) {
 for(var i = 0, l = this.length; i < l; i++)
  if(this[i] == p_val)
   return true;
 return false;
}

String.prototype.trim = function() {
 return this.replace(/^\s+|\s+$/g,"");
}

String.prototype.ltrim = function() {
 return this.replace(/^\s+/,"");
}

String.prototype.rtrim = function() {
 return this.replace(/\s+$/,"");
}

function slideShow(dir,title) {
 var width = 815;
 var height = 615;
 var top = Math.floor(((screen.height/2)-(height/2)));
 var left = Math.floor(((screen.width/2)-(width/2)));
 w = window.open('/common/php/slideShow.php?dir='+dir+'&title='+title,'SlideShow','width='+width+',height='+height+',scrollbars=no,toolbar=no,directories=no,status=no,titlebar=no,menubar=no,resizable=no,top='+top+',left='+left);
 w.focus();
}