var workingForm;

/*
 *	General HTML Object Functions
 */
 function getObj(objID) {
	if (isObject(objID)) return objID;
	return document.getElementById(objID) ? document.getElementById(objID) : (isObject(workingForm) ? workingForm.elements[objID] : null);
}

function getObjValue(objID) {

	if (getObjTagName(objID) == 'SELECT') return getSelectValue(objID);
	
	return (arguments.length == 2 ? getObj(objID)[arguments[1]].value : getObj(objID).value);	
	
}

function setObjValue(objID, val) {
	getObj(objID).value = val;	
}

function objExists(objID) {
	return getObj(objID) ? true : false;
}

function getObjStrLength(objID) {
	return getObjValue(objID).length;
}

function giveFocus(objID) {
	getObj(objID).focus();
}

function enableObj(objID) {
	getObj(objID).disabled = false;
}

function disableObj(objID) {
	getObj(objID).disabled = true;	
}

function getObjTagName(obj) {
	return isObject(obj) ? obj.tagName : getObj(obj).tagName;
}

function getObjClassName(objID) {
	return getObj(objID).className;	
}

function setObjClassName(objID, className) {
	getObj(objID).className = className;
}

/*
 *	Drop Downs
 */
function numOptions(objID) {
	if (getObjTagName(objID) != 'SELECT') return 0;
	return getObj(objID).options.length;
}

function getSelectValue(objID) {
	
	if (getObjTagName(objID) != 'SELECT') return getObjValue(objID);
	
	return getObj(objID).options[getObj(objID).selectedIndex].value;
	
}

function getSelectOptionValue(objID, idx) {
	
	if (getObjTagName(objID) != 'SELECT') return false;	
	
	return getObj(objID).options[idx].value;
	
}

function setSelectedOption(objID, idx) {
	getObj(objID).selectedIndex = idx;
}

function setSelectedValue(objID, val) {
	
	for (var i = 0; i < numOptions(objID); i++) {
		if (getSelectOptionValue(objID, i)	== val) {
			setSelectedOption(objID, i);
			return true;
		}
	}
	
	return false;
	
}

function clearSelect(objID) {
	getObj(objID).options.length = 0;
}

function addOption(objID, value) {
	getObj(objID).options[numOptions(objID)] = new Option((arguments.length == 3 ? arguments[2] : arguments[1]), value);	
}

/*
 *	Checkboxes
 */
function numCheckboxes(objID) {
	return getObj(objID).length;	
}

function isObjChecked(objID) {
	return (arguments.length == 2 ? getObj(objID)[arguments[1]].checked : getObj(objID).checked);
}

function uncheckAll(objID) {
	for (i = 0; i < numCheckboxes(objID); i++) getObj(objID).checked = false;
}

/*
 *	Type Functions
 */
function isArray(a) {
    return isObject(a) && a.constructor == Array;
}

function isObject(a) {
    return (a && typeof a == 'object') || isFunction(a);
}

function isFunction(a) {
    return typeof a == 'function';
}

function isNumeric(a) {
	
   var validChars = "0123456789.";

   for (var i = 0; i < a.length; i++) {
	   if (validChars.indexOf(a[i]) < 0) return false;
   }

   return true;
   
  }

// Array Functions

function inArray(array, val) {

	for (var i = 0; i < array.length; i++) {
		if (array[i] == val) return true;
	}

	return false;

}

/*
 *	Dynamic HTML
 */
function getInnerHTML(objID) {
	return getObj(objID).innerHTML;	
}
 
function setInnerHTML(objID, html) {
	getObj(objID).innerHTML = html;
}

function setOuterHTML(objID, html) {
	getObj(objID).outerHTML = html;	
}

function hideElement(objID) {
	setObjStyle(objID, 'display', 'none');	
}

function unhideElement(obj) {

	switch (getObjTagName(obj)) {
			
			case 'TR':
				setObjStyle(obj, 'display', isIE() ? 'inline' : 'table-row');
				break;
				
			case 'TD':
				setObjStyle(obj, 'display', isIE() ? 'inline' : 'table-cell');
				break;
				
			default:
				setObjStyle(obj, 'display', isIE() ? 'inline' : 'block');
				break;
	}
	
}

function isObjHidden(objID) {
	return getObj(objID).display == 'none' ? true : false;
}

function clearObj(obj) {

	if (getObj(obj).hasChildNodes()) {
		
		for (var i = getObj(obj).childNodes.length; i > 0; i--) {
			getObj(obj).removeChild(getObj(obj).childNodes[0]);	
		}
		
	}

}

function createObj(tagName) {
	
	
	if (arguments.length == 1) {
		var obj = document.createElement(tagName);
	} else if (arguments.length == 2) {
		
		switch (tagName) {
			
			case 'select':
			case 'input':
			case 'textarea':
			case 'form':
				var obj = isIE() ? document.createElement('<' + tagName + ' name="' + arguments[1] + '">') : document.createElement(tagName);
				obj.setAttribute('name', arguments[1]);
				obj.id = arguments[1];
				break;
				
			default:
				var obj = document.createElement(tagName);	
				obj.appendChild(document.createTextNode(arguments[1]));
				break;
				
		}
	}
	
	return obj;
	
}

function createText(str) {
	return document.createTextNode(str);
}

function setAttr(obj, attr, val) {
	obj.setAttribute(attr, val);	
}

function getAttr(obj, attr) {
	return obj.getAttribute(attr);
}

function getEventObj(e) {
	return isIE() ? window.event : e;
}

function getEventTarget(e) {
	return isIE() ? window.event.srcElement : (e == null? event.target : e.target);
}

/*
 *	CSS Functions
 */
function setObjStyle(obj, style, value) {
	var obj = isObject(obj) ? obj : getObj(obj);
	if (obj) eval('obj.style.' + style + ' = \'' + value + '\'');	
}

function getObjStyle(objID, style) {
	eval('return getObj(\'' + objID+ '\').style.' + style);
}

function setClassName(obj, className) {
	obj.className = className;	
}

/*
 *	Misc Functions
 */
function formatNumber(number) {
	
	number = number.toString();
	
	if (number.length < 3) return number;
	
	var newNumber = number.substring(0, number.length % 3);
	
	for (var i = 3; i < number.length; i += 3)
		newNumber += ',' + number.substr(newNumber.length > 3 ? newNumber.length - floor(newNumber / 3) : newNumber.length, 3);
	
	return newNumber;
	
}

function formatPhoneNumber(number) {

	var reg = /^(\d{3})(\d{3})(\d{4})$/;

	return number.replace(reg, '($1) $2-$3');

}
			
function combineDate(objID) {

	if (getObjValue(objID + '_year') == '' || getObjValue(objID + '_month') == '' || getObjValue(objID + '_mday') == '') return '';

	return '' + getObjValue(objID + '_month') + '/' + getObjValue(objID + '_mday') + '/' + getObjValue(objID + '_year');

}

function inString(haystack, needle) {
	return (needle.indexOf(haystack) > -1 ? true : false);	
}

function parseQueryString() {

	if (!location.search.length) return;

	var items = location.search.substr(1, location.search.length).split('&');

	var qrys = new Object();
	
	for (i = 0; i < items.length; i++) {
		var tmp = items[i].split('=');
		qrys[tmp[0]] = tmp[1];
	}
	
	return qrys;

}

function getQueryStringValue(valName) {
	qrys = parseQueryString();
	return qrys[valName];
}
		
function updateDays(monthObj, objID) {

	obj = document.getElementById(objID);

	switch (monthObj.options[monthObj.selectedIndex].value) {
	
		case '1':
		case '3':
		case '5':
		case '7':
		case '8':
		case '10':
		case '12':
		
			if (obj.options.length < 32) {
				
				for (i = obj.options.length; i < 33; i++) {
					obj.options[i] = new Option(i - 1, i - 1);
				}
				
			}
		
			break;
			
		case '2':

			if (obj.options.length > 28) {

				for (i = obj.options.length; i > 28; i--) {
					obj.options[i] = null;
				}
				
			}
		
			break;
			
		case '4':
		case '6':
		case '9':
		case '11':
		
			if (obj.options.length < 31) {
				
				for (i = obj.options.length; i < 32; i++) {
					obj.options[i] = new Option(i - 1, i - 1);
				}
				
			} else if (obj.options.length > 30) {
			
				for (i = obj.options.length; i > 30; i--) {
					obj.options[i] = null;
				}
			
			}
		
			break;
			
		default:
			alert(monthObj.options[monthObj.selectedIndex].value);
			break;
	
	}

}

/*
 *	User Agent Functions
 */
function isIE() {
	return (navigator.userAgent.indexOf('MSIE') > -1);	
}

/*
 *	Ajax Functions
 */

function ajaxValueExists(nodeName, xml) {
	return (ajaxValueCount(nodeName, xml) > 0);
}

function ajaxValueCount(nodeName, xml) {
	return ajaxObject(nodeName, xml).length;
}

function ajaxValue(nodeName, xml) {
	
	var obj = (arguments.length == 3 ? ajaxObject(nodeName, xml)[arguments[2]] : ajaxObject(nodeName, xml)[0]);

	if (obj.childNodes && obj.childNodes.length) {
		return obj.firstChild.nodeValue;
	} else {
		return '';
	}
	
}

function ajaxObject(nodeName, xml) {
	return (arguments.length == 3 ? xml.getElementsByTagName(nodeName)[arguments[2]] : xml.getElementsByTagName(nodeName));
}

function ajaxStatus(xml) {
	return (ajaxValue('Status', xml) > 0 ? true : false);	
}

function ajaxDisplayError(xml) {

	var str = '';
	
	for (i = 0; i < ajaxValueCount('Error', xml); i++) {
		str += '-' + ajaxValue('Error', xml, i) + "\n";
	}
	
	alert(str);
					
}


/*
 *	Error Checking Functions
 */
function setWorkingForm(objID) {
	workingForm = document.forms[objID];
}
 
 
function ecIsEmpty(objID) {
	
	if (isObject(objID)) {
		highlightID = arguments.length == 3 ? arguments[2] : objID.name;
	} else {
		highlightID = arguments.length == 3 ? arguments[2] : objID;
	}

	errorMsg = arguments.length > 1 ? arguments[1] : '';
	
	if (getObjValue(objID) == '') {
		
		if (errorMsg != '') {
			highlightElement(highlightID);
			giveFocus(objID);
			alert(errorMsg);
		}
		return true;
	} else {
		unhighlightElement(highlightID);
		return false;
	}

}

function ecSelectIsEmpty(objID) {

	errorMsg = arguments.length > 1 ? arguments[1] : '';
	highlightID = arguments.length == 3 ? arguments[2] : objID;

	if (getObj(objID).selectedIndex == -1 || getSelectValue(objID) == '') {
		
		if (errorMsg != '') {
			highlightElement(highlightID);
			giveFocus(objID);
			alert(errorMsg);
		}
		
		return true;
		
	} else {
		unhighlightElement(highlightID);
		return false;
	}

}

function ecStringLength(objID, min, max, minErrorMsg, maxErrorMsg) {

	highlightID = arguments.length == 6 ? arguments[5] : objID;

	maxErrorMsg = arguments[3] ? arguments[3] : minErrorMsg;

	if (getObjStrLength(objID) < min) {
		highlightElement(highlightID);
		giveFocus(objID);
		alert(errorMsg);
		return true;
	} else if (getObjStrLength > max) {
		highlightElement(highlightID);
		alert(errorMsg);
		return true;
	} else {
		unhighlightElement(highlightID);
		return false;
	}
	
}

function ecIsChecked(objID) {

	checked = false;

	for (i = 0; i < arguments.length - 1; i++) {

		if (isArray(arguments[i])) {
			
			for (j = 0; j < arguments[i].length; j++) {
				if (isObjChecked(arguments[i][j])) checked = true;
			}
			
		} else if (getObj(arguments[i]).length) {
			
			for (j = 0; j < getObj(arguments[i]).length; j++) {
				if (isObjChecked(arguments[i], j)) checked = true;	
			}
			
		} else {
			if (isObjChecked(arguments[i])) checked = true;
		}

	}
	
	
	if (!checked) {
		highlightElement(objID);
		alert(arguments[arguments.length - 1]);
		return true;
	} else {
		unhighlightElement(objID);
		return false;	
	}
	
}

function isValidEmail(objID, errorMsg) {

	var exp = /[\w\d_.-]+@[\w\d.-]+\.\w{2,3}/i;
	var reg = new RegExp(exp);
	
	if (!reg.exec(getObjValue(objID))) {
		highlightElement(arguments.length == 3 ? arguments[2] : objID);
		giveFocus(objID);
		alert(errorMsg);
		return false;
	} else {
		unhighlightElement(arguments.length == 3 ? arguments[2] : objID);
		return true;
	}
	
}

function highlightElement(objID) {

	if (getObj(objID + '_label')) {
		getObj(objID + '_label').className += ' errorHighlight';
	}

}

function unhighlightElement(objID) {

	if (getObj(objID + '_label')) {
		getObj(objID + '_label').className = getObj(objID + '_label').className.replace('errorHighlight', '');
	}

}

/*
 *	Rollover functions
 */
function initImages() {

	imgObjs = document.getElementsByTagName('img');
	
	for (i = 0; i < imgObjs.length; i++) {
	
		if (imgObjs[i].className.indexOf('imgHover') > -1 && imgObjs[i].src.indexOf('_current') == -1) {
		
			imgObjs[i].onmouseover = function() {
				this.src = this.src.substr(0, this.src.lastIndexOf('.')) + '_hover' + this.src.substr(this.src.lastIndexOf('.'), this.src.length);
			}
			
			imgObjs[i].onmouseout = function() {
				this.src = this.src.replace('_hover', '');
			}
		
		}
	
	}

}

if (window.addEventListener) {
	window.addEventListener('load', initImages, false);
} else if(window.attachEvent) {
	window.attachEvent('onload', initImages);
}