
function gebi(i) {
  return document.getElementById(i);
}

// object declarations
function EventArray() {
	this.EventArray = new Array();
	this.Add = _AddEvent;
	this.Delete = _DeleteEvent;
	this.Count = _EventCount;
	this.Item = _ReturnEvent;
	this.AttachEvents = _AttachEvents;
	
	function _AddEvent(objEvent) {
		this.EventArray[this.EventArray.length] = objEvent;
	}
	
	function _DeleteEvent(varIndex) {
		if (this.EventArray.length == 0) {
			alert ("There are no objects in this collection.");
			return;
		}
		var varNewEventArray = new Array();
		var varCounter = 0;
		for (i = 0; i < varIndex; i++) {
			varNewEventArray[varCounter] = this.EventArray[i];
			varCounter += 1;
		}
		for (i = varIndex + 1; i < this.EventArray.length; i++) {
			varNewEventArray[varCounter] = this.EventArray[i];
			varCounter += 1;
		}
		this.EventArray = varNewEventArray;
	}
	
	function _EventCount() {
		return this.EventArray.length;
	}
	
	function _ReturnEvent(varIndex) {
		if (varIndex > (this.EventArray.length - 1)) {
			alert ("The requested object does not exist in the collection.");
			return;
		}
		return this.EventArray[varIndex];
	}
	
	function _AttachEvents() {
		try {
			for (i = 0; i < this.EventArray.length; i++) {
				_AttachEventByElement(this.EventArray[i].Element, this.EventArray[i].Event, this.EventArray[i].Function);
			}
		}
		catch (e) {
			//alert ("function AttachEvents : " + e.message);
		}
	}
	
	function _AttachEventByElement(varElement, varEvent, varFunction) {
		try {
			if (ReturnIE()) {
				if (varElement == "document") {
					document.detachEvent("on" + varEvent, varFunction);
					document.attachEvent("on" + varEvent, varFunction);
				}
				else {
					document.getElementById(varElement).detachEvent("on" + varEvent, varFunction);
					document.getElementById(varElement).attachEvent("on" + varEvent, varFunction);
				}
			}
			else {
			    if (varElement == "document") {
					document.removeEventListener("on" + varEvent, varFunction);
					document.addEventListener("on" + varEvent, varFunction);
				}
				else {
					document.getElementById(varElement).removeEventListener(varEvent, varFunction, false);
					document.getElementById(varElement).addEventListener(varEvent, varFunction, false);
				}
			}
			//alert (varElement + " attached");
		}
		catch (e) {
			//alert ("function AttachEventByElement : " + e.message);
		}
	}
}

function EventDetail(varID, varTagName, varType, varInnerText, varDisabled, varClientX, varClientY, objElement) {
	this.ID = varID;
	this.TagName = varTagName;
	if (varType != null) {
		this.Type = varType.toUpperCase();
	}
	this.InnerText = varInnerText;
	if ((varDisabled == undefined) || (varDisabled == null)) {
		this.Disabled = false;
	}
	else {
		this.Disabled = varDisabled;
	}
	this.ClientX = varClientX;
	this.ClientY = varClientY;
	this.Element = objElement;
}

function Event(varElement, varEvent, varFunction) {
	this.Element = varElement;
	this.Event = varEvent;
	this.Function = varFunction;
}

// utility functionality
function ReturnIE() {
	var varBrowser = navigator.appName + " " + navigator.appVersion;
	var varIE = false;
	if (varBrowser.substring(0, 9) == "Microsoft") {
		return (true);
	}
	else {
		return (false);
	}
}

function CancelEvent(evt) {
	if (evt != null) {
		if (evt.preventDefault) {
			evt.preventDefault();
		}
		evt.returnValue = false;
	}
	else {
		return (false);
	}
}

function ReturnEventDetail(evt) {
	var objSrcElement = null;
	var varInnerText = "";
	var varClientX = 0;
	var varClientY = 0;
	var varType = "";
	if (ReturnIE()) {
		objSrcElement = window.event.srcElement;
		varInnerText = objSrcElement.innerText;
		varClientX = window.event.clientX;
		varClientY = window.event.clientY;
	}
	else {
		objSrcElement = evt.target;
		varInnerText = objSrcElement.text
		varClientX = evt.pageX;
		varClientY = evt.pageY;
	}
	if (objSrcElement.type) {
		varType = objSrcElement.type;
	}
	return new EventDetail(objSrcElement.id, objSrcElement.tagName, varType, varInnerText, objSrcElement.disabled, varClientX, varClientY, objSrcElement);
}

function SubmitKey(evt) {
	var varKeyCode = null;
	if (ReturnIE()) {
		varKeyCode = window.event.keyCode;
	}
	else {
		varKeyCode = evt.keyCode;
	}
	if (varKeyCode == 13) {
		return CancelEvent(evt);
	}
	return (true);
}


function addInputSubmitEvent(form, input) {
    input.onkeydown = function(e) {
        e = e || window.event;
        if (e.keyCode == 13) {
            gebi('submitIntercept').click();
            return false;
        }
    };
}

function initEnterKey() {
    var forms = document.getElementsByTagName('form');
    for (var i=0;i < forms.length;i++) {
        var inputs = forms[i].getElementsByTagName('input');
        for (var j=0;j < inputs.length;j++) {
            addInputSubmitEvent(forms[i], inputs[j]);
        }
    }
}

function plcSearchElement_Validate() {
    if (gebi("plcSearchElement_txtSearchTerm").value == "") {
        alert ("Please enter a search term.");
        gebi("plcSearchElement_txtSearchTerm").focus();
        return false;
    }
    return true;
}

// page functionality
function SearchValidate(evt) {
    if (gebi("ctrlSearchControl_txtSearch").value == "") {
        alert ("Please enter a search term.");
        gebi("ctrlSearchControl_txtSearch").focus();
        return CancelEvent(evt);
    }
    return true;
}

// page load functionality
function SearchLoad() {
    initEnterKey();
    var objEvents = new EventArray();    
    // Handling "form submit" when user presses enter key.    
    // Should we submit against the "Go" search button?
    if (varSearchID != null && gebi(varSearchID + '_txtSearch') != null) {
        objEvents.Add(new Event(varSearchID + '_lnkSearch', 'click', SearchValidate));    
        objEvents.Add(new Event(varSearchID + '_txtSearch', 'focus', onFocusSearch));
    }
    objEvents.AttachEvents();
}

function SearchPageLoad() {
    var objEvents = new EventArray();
    // Or should we submit against the Search button on the actual search results page?
    if (varSearchPageID != null && gebi(varSearchPageID + '_txtSearchTerm') != null) {
        objEvents.Add(new Event(varSearchPageID + '_txtSearchTerm', 'focus', onFocusSearchPage));
    }
    objEvents.AttachEvents();    
}

var submitHref = null;
var submitID = null;

function onFocusSearch() {
  submitHref = gebi(varSearchID + '_lnkSearch').href;
  submitID = null;
}

function onFocusContactUs() {
  submitHref = null;
  submitID = 'btnSubmit';
}

function onFocusSearchPage() {
  submitHref = null;
  submitID = varSearchPageID + '_btnSearch';
}

function submitInterceptClick() {
  if (submitHref != null) {
    window.location=submitHref;
    return false;
  } else {
    var b = gebi(submitID);
    if (b != null) {
      b.click();
      return false;
    }
  }
  return true;  
}