function appendInputTypeClasses(){
	if(!document.getElementsByTagName){
		return;
	}
	var inputs=document.getElementsByTagName('input');
	var inputLen=inputs.length;
	for (i=0;i<inputLen;i++){
	if(inputs[i].getAttribute('type'))
		inputs[i].className += ' '+inputs[i].getAttribute('type');
	}
}

function get(elName){
	if(document.getElementById){
		if(temp=document.getElementById(elName)){
			return temp;
		}
		else{
			return false;
		}
	}
	else{
		throw new Error("This browser does not support the function document.getElementById()");
	}
}

String.prototype.trim = function(){
a = this.replace(/^\s+/, '');
return a.replace(/\s+$/, '');
};

String.prototype.reverse=function(str){
	var newStr="";
	for (i=0;i<=str.length;i++){
		newStr = str.charAt(i) + newStr;
	}
	return newStr;
}

String.prototype.replaceAll=function(haystack, needle, replacement){
	while(haystack.indexOf(needle)!=-1){
		haystack=haystack.replace(needle, " ");
	}
	return haystack;
}	

String.prototype.toProperCase = function(){
	return this.toLowerCase().replace(/^(.)|\s(.)/g, function($1) { return $1.toUpperCase(); });
};

document.getElementsByClassName = function(clsName,/*boolean*/names){
	if(typeof(clsName)=="string"){
		var retVal = new Array();
		var elements = document.getElementsByTagName("*");
		for(i = 0;i < elements.length;i++){
			if(names){
				if(elements[i].className.indexOf(" ") >= 0){
					var classes = elements[i].className.split(" ");
					for(var j = 0;j < classes.length;j++){
						if(classes[j] == clsName){
							retVal.push(elements[i].id);
						}
					}
				}
				else if(elements[i].className == clsName){
					retVal.push(elements[i].id);
				}
			}
			else{
				if(elements[i].className.indexOf(" ") >= 0){
					var classes = elements[i].className.split(" ");
					for(var j = 0;j < classes.length;j++){
						if(classes[j] == clsName){
							retVal.push(elements[i]);
						}
					}
				}
				else if(elements[i].className == clsName){
					retVal.push(elements[i]);
				}	
			}
		}
		return retVal;
	}
	else{
		throw new Error("document.getElementsByClassName() must be passed a string representation of a class name");	
	}
};

document.getElementsByAttribute=function(attribute,/*boolean*/names){
	if(typeof(attribute)=="string"){
		var retVal = new Array();
		var elements = document.getElementsByTagName("*");
		for(i = 0;i < elements.length;i++){
			if(names){
				if(elements[i].getAttribute(attribute)){
					retVal.push(elements[i].id+":"+elements[i].getAttribute(attribute));
				}
			}
			else{
				if(elements[i].getAttribute(attribute)){
					retVal.push(elements[i])
				}
			}
		}
		return retVal;
	}
	else{
		throw new Error("document.getElementsByAttribute() must be passed a string representation of an attribute name");	
	}
};

function formInit(/*hiddenClassField*/htf,/*required class name*/required,/*boolean*/returnClassNames,/*hiddenAttributeField*/haf,/*attributename*/attribute,/*boolean*/returnAttributeNames){
	if(arguments.length<6){
		throw new Error("Function formInit() called with missing parameters.");
	}
	else{
		if(document.getElementById(htf) && document.getElementsByClassName){
			document.getElementById(htf).value=document.getElementsByClassName(required,returnClassNames);
		}
		else{
			throw new Error("Unable to add values to form element" + htf);	
		}
		if(document.getElementById(haf) && document.getElementsByAttribute){
			document.getElementById(haf).value=document.getElementsByAttribute(attribute,returnAttributeNames);
		}
		else{
			
		}
	}
}

Array.prototype.inArray = function (value,caseSensitive){
	//**this** represents the array the function is called on.  does not need to be passed because this is prototype function.
	for (i=0; i < this.length; i++) {
		if(!caseSensitive){
			if (this[i].toLowerCase() == value.toLowerCase()) {
				return true;
			}
		}
		else{
			if (this[i] == value) {
				return true;
			}
		}
	}
	return false;
};

/*Pass enforceNumeric() the text field to verify, the event, and an optional array of additional allowable unicode value entries as strings.
This function requires the Array prototype inArray() 
Common exception codes:
36="$"
45="-"
40="("
41=")"
69="E"
84="T"
88="X"
101="e"
116="t"
120="x"
Example call: <input type="text" id="myField" name="myField" onkeypress="return enforceNumeric(this,event,new Array('120','36','88','45'));"/>
*/
function enforceNumeric(/*text field*/ field, /*event*/ e, /*optional array of allowable uncode keycodes*/ allowed){
	char=e.charCode ? e.charCode : e.keyCode;
	if (char!=8 && char!=46){ //8=backspace 46=period
		if (char<48||char>57){
			if(allowed && allowed.length>0){
				for(i=0; i<allowed.length; i++){
					if(allowed.inArray(char)){
						return true;
					}
					else{
						return false;	
					}
				}
			}
			else{
				return false;	
			}
		}
		else{
			return true;
		}
	}
	else if(char==46){
		if(field.value.indexOf(".")==-1){
			return true;
		}
		else{
			return false;	
		}
	}
}

function enforceAlphaNumeric(field,e){
	char=e.charCode? e.charCode : e.keyCode;
	if((char>=48 && char<=57) || (char>=65 && char<=90) || (char>=97 && char<=122)){
		return true;
	}
	else{
		return false;	
	}
}