/**
 * @author Joseph Cutrono
 */
addEvent(window, "load", initFormats);

function initFormats(){
	var inputs = document.getElementsByTagName("input");

	addEventsFormats(inputs);
}

function addEventsFormats(inputs){
	for(var i = 0; i < inputs.length; i++){
		addEventFormats(inputs[i]);
	}
}

function addEventFormats(input){	
	if(input.id.match("num") == "num")
		addEvent(input, "keypress",numbers);
	if(input.id.match("phone") == "phone"){
		addEvent(input, "keypress",numbers);
		addEvent(input, "keypress",phonenum);
	}
	if(input.id.match("date") == "date"){
		addEvent(input, "keypress",numbers);
		addEvent(input, "keypress",dates);
	}	
	if(input.id.match("money") == "money"){
		addEvent(input, "keypress",numbers);
		addEvent(input, "blur",money);
		input.value = formatMoney(input);
		addEvent(getForm(), "submit", stripFormat);
	}
}

function numbers(e){
	var code = extractCodeFromEvent(e);

	if(!ignoredCodes(code)){
		var ichar = String.fromCharCode(code);
		ichar *= 0;
		if(ichar != 0){
			cancelE(e);
		}
	}
}

function phonenum(e){
	if(this.value.length == 3)
		this.value = "(" + this.value + ")";
	if(this.value.length == 8)
		this.value += "-";
}

function dates(e){
	if(!ignoredCodes(code) && (this.value.length == 2 || this.value.length == 5))
		this.value += "/";
}

function formatMoney(elem){
	var curValue = parseFloat(elem.value);
	curValue = isNaN(curValue) ? "$0.00" : "$" + CommaFormatted(curValue.toFixed(2));	
	return curValue;
}

function money(e){	
	this.value = formatMoney(this);
	//$ - 36
	//. - 46
}

function CommaFormatted(amount)
{
	var delimiter = ","; // replace comma if desired
	var a = amount.split('.',2)
	var d = a[1];
	var i = parseInt(a[0]);
	if(isNaN(i)) { return ''; }
	var minus = '';
	if(i < 0) { minus = '-'; }
	i = Math.abs(i);
	var n = new String(i);
	var a = [];
	while(n.length > 3)
	{
		var nn = n.substr(n.length-3);
		a.unshift(nn);
		n = n.substr(0,n.length-3);
	}
	if(n.length > 0) { a.unshift(n); }
	n = a.join(delimiter);
	if(d.length < 1) { amount = n; }
	else { amount = n + '.' + d; }
	amount = minus + amount;
	return amount;
}


function stripFormat(e){
	var inputs = document.getElementsByTagName("input");
	for(var i = 0; i < inputs.length; i++){
		if (inputs[i].id.match("money") == "money") {
			inputs[i].value = inputs[i].value.replace("$", "");
			inputs[i].value = inputs[i].value.replace(",", "");
		}
	}
}

function cancelE(e){
	if (e.preventDefault) 
		e.preventDefault();
	e.returnValue = false;   
}

function ignoredCodes(code){
	if(code == 37 || code == 39 || code == 8 || code == 46)
		return true;
	else
		return false;
}

function extractCodeFromEvent(eventE){
	if(!eventE) 
		var eventE = window.event;
	if(eventE.keyCode) 
		code = eventE.keyCode;
	else if(eventE.which) 
		code = eventE.which;
		
	return code;
}
