function gel(n, d) { //v4.0

var p,i,x; if(!d) d=document;

if((p=n.indexOf("?"))>0&&parent.frames.length) {

d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}

if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++)

x=d.forms[i][n];

for(i=0;!x&&d.layers&&i<d.layers.length;i++)

x=gel(n,d.layers[i].document);

if(!x && document.getElementById) x=document.getElementById(n); return x;

}


function createXMLHttpRequest() {
  var types = [
    'Microsoft.XMLHTTP',
    'MSXML2.XMLHTTP.5.0',
    'MSXML2.XMLHTTP.4.0',
    'MSXML2.XMLHTTP.3.0',
    'MSXML2.XMLHTTP'
   ];

  for (var i = 0; i < types.length; i++) {
    try {
      return new ActiveXObject(types[i]);
    } catch(e) {}
  }

  try {
    return new XMLHttpRequest();
  } catch(e) { }

  return false; // XMLHttpRequest not supported
}



function $() {

	var elements = new Array();

	for (var i = 0; i < arguments.length; i++) {

		var element = arguments[i];

			if (typeof element == 'string')
	
				element = gel(element);
	
			if (arguments.length == 1)
	
				return element;
	
			elements.push(element);

	}

	return elements;

}



function addLoadEvent(func) {

  var oldonload = window.onload;

  if (typeof window.onload != 'function') {

    window.onload = func;

  } else {

    window.onload = function() {

      if (oldonload) {

        oldonload();

      }

      func();

    }

  }

}



function tagShow()

{

  for( var i = 0; i < arguments.length; i++ ) {

    var element = $(arguments[i]);

    if (element && element.style) element.style.display = '';

  }

  return false;

}





/*

    Copyright Robert Nyman, http://www.robertnyman.com

    Free to use if this text is included

*/

function getElementsByAttribute(oElm, strTagName, strAttributeName, strAttributeValue){

    var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);

    var arrReturnElements = new Array();

    var oAttributeValue = (typeof strAttributeValue != "undefined")? new RegExp("(^|\\s)" + strAttributeValue + "(\\s|$)") : null;

    var oCurrent;

    var oAttribute;

    for(var i=0; i<arrElements.length; i++){

        oCurrent = arrElements[i];

        oAttribute = oCurrent.getAttribute && oCurrent.getAttribute(strAttributeName);

        if(typeof oAttribute == "string" && oAttribute.length > 0){

            if(typeof strAttributeValue == "undefined" || (oAttributeValue && oAttributeValue.test(oAttribute))){

                arrReturnElements.push(oCurrent);

            }

        }

    }

    return arrReturnElements;

}



function eventAddHandler(eventSourceId, eventType, func)
{
	var eventSource = $(eventSourceId);
	var eventRef = eventSourceId + "." + eventType;
	var eventHandlers = eval(eventRef);

	if (typeof eventHandlers == 'function') { // not first handler
		eval(eventRef + " = function() {eventHandlers(); func();}");	
	} else { // first handler
		eval(eventRef + " = func;");
	}
}



Array.prototype.inArray = function (value) {
	var i;
	for (i=0; i < this.length; i++) {
		if (this[i] === value) {
			return true;
		}
	}
	return false;
};

function addEvent( obj, type, fn ) {
	if (obj.addEventListener) {
		obj.addEventListener( type, fn, false );
		EventCache.add(obj, type, fn);
	}
	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] );
		EventCache.add(obj, type, fn);
	}
	else {
		obj["on"+type] = obj["e"+type+fn];
	}
}
	
var EventCache = function(){
	var listEvents = [];
	return {
		listEvents : listEvents,
		add : function(node, sEventName, fHandler){
			listEvents.push(arguments);
		},
		flush : function(){
			var i, item;
			for(i = listEvents.length - 1; i >= 0; i = i - 1){
				item = listEvents[i];
				if(item[0].removeEventListener){
					item[0].removeEventListener(item[1], item[2], item[3]);
				};
				if(item[1].substring(0, 2) != "on"){
					item[1] = "on" + item[1];
				};
				if(item[0].detachEvent){
					item[0].detachEvent(item[1], item[2]);
				};
				item[0][item[1]] = null;
			};
		}
	};
}();
addEvent(window,'unload',EventCache.flush);


function tagHide()

{

  for( var i = 0; i < arguments.length; i++ ) {

    var element = $(arguments[i]);

    if (element && element.style) element.style.display = 'none';

  }

  return false;

}



function text(field) {

	maxlimit=field.getAttribute('max');

	if (field.value.length > maxlimit) { // if too long...trim it! 

		field.value = field.value.substring(0, maxlimit);

		// otherwise, update 'characters left' counter

	} else {
	
		percentage=Math.round(field.value.length/maxlimit*100);
			
		$(field.name+"_count").innerHTML = "<div style='width:"+percentage+"%; display:block; background: #ccc; height: 5px; overflow:hidden;'></div>" ;

	}
}





function verify(field) {
	elements = getElementsByAttribute(document.body, "input", "max");
	elements = elements.concat(getElementsByAttribute(document.body, "textarea", "max"));
	for(var i=0, len=elements.length; i<len; i++) {
		$(elements[i].name+"_count").style.width="95%";
		text(elements[i]);
	}
}


/* this variable is used to tell whether forms have been modified since loading */

var vflag_onchange=0;

function flag_onchange() {
	vflag_onchange+=1;
}

function is_onchange() {
	return vflag_onchange;
}

function getElementsByClass(node,searchClass,tag) {
  var classElements = new Array();
  var els = node.getElementsByTagName(tag);
  var elsLen = els.length;
  var pattern = new RegExp("(^|\\s)" + searchClass + "(\\s|$)");
  for (i = 0, j = 0; i < elsLen; i++) {
    if ( pattern.test(els[i].className) ) {
      classElements[j] = els[i];
      j++;
    }
  }
return classElements;
}