// Add Events To Functions --------------------

var libJS = {
	addEvent: function(obj,type,fn) {
		if (obj.addEventListener) {
			obj.addEventListener(type,fn,false);
			return true;
		} else if (obj.attachEvent) {
			obj['e'+type+fn] = fn;
			obj[type+fn] = function() { obj['e'+type+fn](window.event);}
			var r = obj.attachEvent('on'+type, obj[type+fn]);
			return r;
		} else {
			obj['on'+type] = fn;
			return true;
		}
	}
}



// Find The Position Of An Element --------------------

function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		do {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);
	}
	return [curleft,curtop];
}



// Find Page Scroll Offset --------------------

function getPageScrollOffset(){
  var x,y;
  if (self.pageYOffset){
    // all except Explorer
    x = self.pageXOffset;
    y = self.pageYOffset;
  }else if (document.documentElement && document.documentElement.scrollTop){
    // Explorer 6 Strict
    x = document.documentElement.scrollLeft;
    y = document.documentElement.scrollTop;
  }else if (document.body){
    // all other Explorers
    x = document.body.scrollLeft;
    y = document.body.scrollTop;
  }
  return [x,y];
}



// Advanced getElement function --------------------

function getElementsByAttribute(oElm, strTagName, strAttributeName, strAttributeValue){
  if(strAttributeName=="class"){
    var classElements = new Array();
	if ( oElm == null )
		oElm = document;
	if ( strTagName == null )
		strTagName = '*';
	var els = oElm.getElementsByTagName(strTagName);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\\\\s)"+strAttributeValue+"(\\\\s|$)");
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
  }else{
    var arrElements = 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(strAttributeName);
        if(typeof oAttribute == "string" && oAttribute.length > 0){
            if(typeof strAttributeValue == "undefined" || (oAttributeValue && oAttributeValue.test(oAttribute))){
                arrReturnElements.push(oCurrent);
            }
        }
    }
    return arrReturnElements;
  }
}



// Value Validation --------------------

function checkValue(theValue,valueType){
	var result = theValue;
	switch (valueType){
		case "email":
			var pattern = /^[a-z0-9,!#\$%&'\*\+/=\?\^_`\{\|}~-]+(\.[a-z0-9,!#\$%&'\*\+/=\?\^_`\{\|}~-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*\.([a-z]{2,})$/;
			if(pattern.test(theValue.toLowerCase())){
				result = (theValue.toLowerCase());
			}else{
				result = false;
			}
			break;
		case "url":
			var pattern = /^((ftp|(http(s)?)):\/\/)?(\.?([a-zA-Z0-9-]+))+\.[a-zA-Z]{2,6}(:[0-9]{1,5})?(\/[a-zA-Z0-9.,;\?|\'+&%\$#=~_-]+)*$/;
			if (pattern.test(theValue)){
				if(theValue.substr(0,7)!="http://" && theValue.substr(0,8)!="https://" && theValue.substr(0,6)!="ftp://"){
					theValue = "http://" + theValue;
				}
				result = theValue;
			}else{
				result = false;
			}
			break;
	}
	return result;
}



// External Links: Open In New Window --------------------

function externalLinks() {
  if (!document.getElementsByTagName) return;
  var anchors = document.getElementsByTagName("a");
  for (var i=0; i<anchors.length; i++) {
    var anchor = anchors[i];
    if (anchor.getAttribute("href") &&  (anchor.getAttribute("rel") == "external" || anchor.getAttribute("rel") == "nofollow"))
      anchor.target = "_blank";
  }
}


// Set OnLoad Functions For ALL Pages --------------------

window.onload = function(){
  externalLinks();
}
