﻿if (!(document.createElement && document.getElementsByTagName)) {
  alert("This application requires a browser which supports modern JavaScript.");
}

/*        *        *        *        *        *        *        *         */

/*        Utility functions.                                              */

/*        *        *        *        *        *        *        *         */

function $(ctrlID) {
  var ctrl = document.getElementById(ctrlID);
  if (!ctrl) alert("Unexpected Error: Unable to locate control " + ctrlID);
  return ctrl;
}

//function ClassExists(ctrl, name) {
//  return new RegExp("\\b" + name + "\\b").test(ctrl.className);
//}
function ClassExists(obj, name) {
  if (typeof obj == 'undefined' || obj == null || !RegExp) return false;
  var re = new RegExp("(^|\\s)" + name + "(\\s|$)");
  if (typeof(obj) == "string") return re.test(obj);
  else if (typeof(obj) == "object" && obj.className) return re.test(obj.className);
  return false;
}
function ClassAdd(ctrl, name) {
	if (!ClassExists(ctrl,name)) {
	  if ("" == ctrl.className) ctrl.className = name;
    else ctrl.className += " " + name;
	}
}
function ClassRemove(ctrl, name) {
	var rep = ctrl.className.match(" " + name) ? " " + name : name;
	ctrl.className = ctrl.className.replace(rep, "");
}

function GetUrlParam(name) {
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if (!results) return "";
  else return results[1];
}

function SetOptionByValue(ctrl, objTemp) {
  var ctrlOption, i;
  var intIndex = 0;
  if (ctrl) {
    for (i = 0; i < ctrl.options.length; ++i) {
      ctrlOption = ctrl.options[i];
      if (objTemp == ctrlOption.value) break;
    }
    if (i < ctrl.options.length) ctrl.selectedIndex = i;
    else ctrl.selectedIndex = 0;
  }
  ctrl = null;
  ctrlOption = null;
}
function GetSelectedOptionValue(ctrl) {
  return (-1 == ctrl.selectedIndex) ? "": ctrl.options[ctrl.selectedIndex].value;
}
function SetOptionByText(ctrl, objTemp) {
  var ctrlOption, i;
  var intIndex = 0;
  if (ctrl) {
    for (i = 0; i < ctrl.options.length; ++i) {
      ctrlOption = ctrl.options[i];
      if (objTemp == ctrlOption.innerHTML) {
        break;
      }
    }
    if (i < ctrl.options.length) ctrl.selectedIndex = i;
    else ctrl.selectedIndex = 0;
  }
  ctrl = null;
  ctrlOption = null;
}
function GetSelectedOptionText(ctrl) {
  return (-1 == ctrl.selectedIndex) ? "": ctrl.options[ctrl.selectedIndex].innerHTML;
}

function replaceTextNode(ctrlParent, value) {
  var ctrl;
  ctrl = ctrlParent.childNodes[0];
  while ( ctrl && (3 != ctrl.nodeType) ) ctrl = ctrl.nextSibling;
  if (ctrl) ctrl.nodeValue = value;
  ctrl = null;
}

/*
function GetQuery(value) {
  var query = window.location.search.substr(1);
  var vars = query.split("&");
  for (var i = 0; i < vars.length; i++) {
    var pair = vars[i].split("=");
    if (pair[0] == value) {
      return pair[1];
    }
  } 
  return null;
}
*/
function isEnabledCookie() {
  if (typeof window.navigator.cookieEnabled == "undefined") {
    document.cookie = "testcookie=val";
    return (document.cookie.indexOf("testcookie=") != -1);
  } else {
    return window.navigator.cookieEnabled;
  }
}

function createCookie(name, value, days) {
  var cookie_string = name + "=" + escape(value);
  if (days) {
    date = new Date();
    date.setTime(date.getTime() + (days*24*60*60*1000));
    cookie_string += "; expires=" + date.toGMTString();
  }
//  cookie_string += "; domain=";
//  cookie_string += document.domain;
  cookie_string += "; path=/";
  document.cookie = cookie_string;
}

function createCookie2(name, value, days) {
  var date, expires = "";
  if (days) {
    date = new Date();
    date.setTime(date.getTime() + (days*24*60*60*1000));
    expires = "; expires=" + date.toGMTString();
  }
  document.cookie = name + "=" + escape(value) + expires;
}

function readCookie(name) {
  var results = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)');
  if (results)
    return (unescape(results[2]));
  else
    return null;
}
function readCookie3(name) {
  var chip, cook = document.cookie.split("; ");
  for (var i = 0; i < cook.length; i++) {
    chip = cook[i].split("=");
    if (chip[0] == name) {
      return unescape(chip[1]);
    }
  }
  return "";
}

function readCookie2(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split("; ");
	for(var i = 0; i < ca.length; ++i) {
		var c = ca[i];
		while (c.charAt(0) == " ") c = c.substring(1, c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
	}
	return null;
}
function eraseCookie(name) {
	createCookie(name, "", -1);
}
var monthsList = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
function FormatDate(date) {
  return monthsList[date.getMonth()] + " " + date.getDate() + " " + date.getFullYear();
}
function FormatMoney(money) {
  money -= 0;
  money = (Math.round(money * 100)) / 100;
  if (money == Math.floor(money)) 
    return money + ".00";
  else
    return (money*10 == Math.floor(money*10)) ? money + "0" : money;
}

//This prototype is provided by the Mozilla foundation and
//is distributed under the MIT license.
//http://www.ibiblio.org/pub/Linux/LICENSES/mit.license
if (!Array.prototype.indexOf) {
  Array.prototype.indexOf = function(elt /*, from*/) {
    var len = this.length;
    var from = Number(arguments[1]) || 0;
    from = (from < 0) ? Math.ceil(from) : Math.floor(from);
    if (from < 0) from += len;
    for (; from < len; from++) {
      if (from in this && this[from] === elt)
        return from;
    }
    return -1;
  };
}

//This prototype is provided by the Mozilla foundation and
//is distributed under the MIT license.
//http://www.ibiblio.org/pub/Linux/LICENSES/mit.license
if (!Array.prototype.filter) {
  Array.prototype.filter = function(fun /*, thisp*/) {
    var len = this.length;
    if (typeof fun != "function") throw new TypeError();
    var res = [];
    var thisp = arguments[1];
    for (var i = 0; i < len; i++) {
      if (i in this) {
        var val = this[i]; // in case fun mutates this
        if (fun.call(thisp, val, i, this)) res.push(val);
      }
    }
    return res;
  };
}

/*
document.getElementsByClassName = function(clsName) {
  var retVal = [];
  var elements = document.getElementsByTagName("*");
  var classes, j;
  for (var i = 0; i < elements.length; i++) {
    if (elements[i].className.indexOf(" ") >= 0) {
      classes = elements[i].className.split(" ");
      for (j = 0; j < classes.length; j++) {
        if (classes[j] == clsName)
          retVal.push(elements[i]);
      }
    }
    else if (elements[i].className == clsName)
      retVal.push(elements[i]);
  }
  return retVal;
};
*/
/*
	Developed by Robert Nyman, http://www.robertnyman.com
	Code/licensing: http://code.google.com/p/getelementsbyclassname/
*/
if (!document.getElementsByClassName) {
  document.getElementsByClassName = function (className, tag, elm){
	  if (document.getElementsByClassName) {
		  getElementsByClassName = function (className, tag, elm) {
			  elm = elm || document;
			  var elements = elm.getElementsByClassName(className),
				  nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null,
				  returnElements = [],
				  current;
			  for(var i=0, il=elements.length; i<il; i+=1){
				  current = elements[i];
				  if(!nodeName || nodeName.test(current.nodeName)) {
					  returnElements.push(current);
				  }
			  }
			  return returnElements;
		  };
	  }
	  else if (document.evaluate) {
		  getElementsByClassName = function (className, tag, elm) {
			  tag = tag || "*";
			  elm = elm || document;
			  var classes = className.split(" "),
				  classesToCheck = "",
				  xhtmlNamespace = "http://www.w3.org/1999/xhtml",
				  namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null,
				  returnElements = [],
				  elements,
				  node;
			  for(var j=0, jl=classes.length; j<jl; j+=1){
				  classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
			  }
			  try	{
				  elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
			  }
			  catch (e) {
				  elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
			  }
			  while ((node = elements.iterateNext())) {
				  returnElements.push(node);
			  }
			  return returnElements;
		  };
	  }
	  else {
		  getElementsByClassName = function (className, tag, elm) {
			  tag = tag || "*";
			  elm = elm || document;
			  var classes = className.split(" "),
				  classesToCheck = [],
				  elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag),
				  current,
				  returnElements = [],
				  match;
			  for(var k=0, kl=classes.length; k<kl; k+=1){
				  classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
			  }
			  for(var l=0, ll=elements.length; l<ll; l+=1){
				  current = elements[l];
				  match = false;
				  for(var m=0, ml=classesToCheck.length; m<ml; m+=1){
					  match = classesToCheck[m].test(current.className);
					  if (!match) {
						  break;
					  }
				  }
				  if (match) {
					  returnElements.push(current);
				  }
			  }
			  return returnElements;
		  };
	  }
	  return getElementsByClassName(className, tag, elm);
  };
}

function setOpacity(ctrl, opacity) {
  opacity = (opacity == 100) ? 99.999 : opacity;
  ctrl.style.filter = "alpha(opacity:"+opacity+")";  // IE/Win
  ctrl.style.KHTMLOpacity = opacity/100;             // Safari<1.2, Konqueror
  ctrl.style.MozOpacity = opacity/100;               // Older Mozilla and Firefox
  ctrl.style.opacity = opacity/100;                  // Safari 1.2, newer Firefox and Mozilla, CSS3
}

function GetEventCtrl(e) {
  var ctrl;
  if (!e) var e = window.event;
  ctrl = e.target || e.srcElement;
  if (ctrl.nodeType == 3) ctrl = ctrl.parentNode;     // defeat Safari bug
  return ctrl;
}

//***Cross browser attach event function. For 'evt' pass a string value with the leading "on" omitted
//***e.g. AttachEvent(window,'load',MyFunctionNameWithoutParenthesis);
function AttachEvent(obj, evt, fnc){
	if (obj.addEventListener){
		obj.addEventListener(evt, fnc, false);
		return true;
	} else if (obj.attachEvent) return obj.attachEvent("on"+evt, fnc);
} 
function DetachEvent(obj, evt, fnc){
	if (obj.removeEventListener){
		obj.removeEventListener(evt, fnc, false);
		return true;
	} else if (obj.attachEvent) return obj.detachEvent("on"+evt, fnc);
} 

/*        *        *        *        *        *        *        *         */

/*        Menu support.                                                   */

/*        *        *        *        *        *        *        *         */

var _menuAllObjs = new Array();

var pullDownMenu = funcTemp2;
function funcTemp2(nameMenu, nameAnchor, dispX, dispY) {
  this.nameMenu = nameMenu;
  this.nameAnchor = nameAnchor;
  this.dispX = dispX;
  this.dispY = dispY;
  this.ctrlMenu = document.getElementById(nameMenu);
  this.ctrlAnchor = document.getElementById(nameAnchor);

  if (this.ctrlMenu.parentElement) {
    this.ctrlMenu.style.left = this.ctrlAnchor.offsetLeft + this.ctrlAnchor.offsetParent.offsetLeft + (dispX * this.ctrlAnchor.offsetWidth) - 10 + "px";
    this.ctrlMenu.style.top = this.ctrlAnchor.offsetTop + this.ctrlAnchor.offsetParent.offsetTop + (dispY * this.ctrlAnchor.offsetHeight) + "px";
  }
  else {
    this.ctrlMenu.style.left = this.ctrlAnchor.offsetLeft + (dispX * this.ctrlAnchor.offsetWidth) - 10 + "px";
    this.ctrlMenu.style.top = this.ctrlAnchor.offsetTop + (dispY * this.ctrlAnchor.offsetHeight) + "px";
  }

  _menuAllObjs[this.ctrlAnchor.id] = this;
  _menuAllObjs[this.ctrlMenu.id] = this;

  AttachEvent(this.ctrlAnchor, "mouseover", this.mouseOver);
}

pullDownMenu.prototype.mouseOver = function(e) {
  var ctrl = GetEventCtrl(e);
  var objMenu = GetMenu(ctrl);
//alert("over: " + objMenu.nameMenu + ",  " + ctrl.id);
  AttachEvent(objMenu.ctrlMenu, "mouseout", objMenu.mouseOut);
  objMenu.ctrlMenu.style.display = "block";
  ctrl = objMenu = null;
}
pullDownMenu.prototype.mouseOut = funcTemp;
function funcTemp(e) {
  if (!e) e = window.event;
  var ctrl = GetEventCtrl(e);
  var objMenu = GetMenu(ctrl);
//alert("out: " + objMenu.nameMenu + ",  " + ctrl.id);
	var reltg = (e.relatedTarget) ? e.relatedTarget : e.toElement;
	while (reltg != objMenu.ctrlMenu && reltg.nodeName != 'BODY') reltg = reltg.parentNode;
	if (reltg != objMenu.ctrlMenu) {
    DetachEvent(objMenu.ctrlMenu, "mouseout", objMenu.mouseOut);
    objMenu.ctrlMenu.style.display = "none";
  }
  ctrl = objMenu = null;
}

function GetMenu(ctrl) {
  while (ctrl && ("" == ctrl.id) && (!_menuAllObjs[ctrl.id])) ctrl = ctrl.parentNode;
  return (ctrl ? _menuAllObjs[ctrl.id] : null);
}

/*        *        *        *        *        *        *        *        */

