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 $() {

	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();

    }

  }

}



// from: http://www.codepost.org/view/59
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 expand(header) {
	var element=header.parentNode.childNodes[1];
	if (element) {
		if (element.style.display != '') {
			element.style.display = '';
			header.className = "minimize pointer";
		} else  {
			element.style.display = 'none';
			header.className = "maximize pointer";
		}
	}
	return false;
}

function tagDisplay()

{

  for( var i = 0; i < arguments.length; i++ ) {

    var element = $(arguments[i]);

    if (element) {
    	if (element.style.display != '') element.style.display = '';
		else element.style.display = 'none';
	}
  }

  return false;

}

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;");

	}

}



function addEvent(obj,evType,fn,useCapture){

var ret=false;

if(obj!=null){

if(obj.addEventListener){

obj.addEventListener(evType,fn,useCapture);

ret=true;

}

else if(obj.attachEvent){

obj.attachEvent("on"+evType,fn);ret=true;

}

}

return ret;

}



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

		$(field.name+"_count").innerHTML = "<strong>" + (maxlimit - field.value.length) + "</strong> characters left to use." ;

}





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++) {

		text(elements[i]);

	}

}
