function format_Date(evt){
    var ele = _getElement(evt);    
    var result = _formatDate(ele.value);
    ele.value = result;
}

function format_Int(evt){
    var ele = _getElement(evt);    
    var result = _formatInt(ele.value);
    ele.value = result;
}

function format_Phone(evt){
    var ele = _getElement(evt);    
    var result = _formatPhone(ele.value);
    ele.value = result;
}

function format_Currency0(evt){
    var ele = _getElement(evt);
    var holder = ele.value.toString();
    var result = _formatCurrency(ele.value);
    ele.value = result;
    if((holder.indexOf(".") > -1) && (holder.indexOf(".") == holder.length - 1)){
        alert("Please use whole numbers only (no cents).");
    }
}

function format_Currency2(evt, bForceTwoDecimals){
    var ele = _getElement(evt);
    var holder = ele.value.toString();
    var result = _formatCurrencyWithCents(ele.value,bForceTwoDecimals);
    ele.value = result;
   // if((holder.indexOf(".") > -1) && (holder.indexOf(".") == holder.length - 1)){
    //    alert("Please use whole numbers only (no cents).");
   // }
}

function format_SSN(evt){
    var ele = _getElement(evt);    
    var result = _formatSSN(ele.value);
    ele.value = result;
}

function format_Percentage0(evt){
    var ele = _getElement(evt);
    var result = _formatPercent0(ele.value);
    ele.value = result;
    _restoreSelection(ele);
}

function format_Percentage2(evt){
    var ele = _getElement(evt);
    var result = _formatPercent2(ele.value);
    ele.value = result;
    _restoreSelection(ele);
}

function _restoreSelection(ele, pos){
    if(document.selection){
        //ie
        ele.focus();
        var rng = ele.createTextRange();
        if(!pos)
            pos = ele.value.toString().length;
        if(pos!=-1 && rng){
            rng.moveStart("character",pos-1);
            rng.collapse();
            rng.select();
        }
    }else{
        //firefox, netscape, et al.
        if(ele.value.toString().length > 0){
            ele.selectionStart = ele.value.toString().length-1;
            ele.selectionEnd = ele.value.toString().length-1;
        }
    }
}

function _getElement(evt){
    var ele = null;
    if(evt == null || evt.toString() == "[object KeyboardEvent]"){
        ele = EventSource(evt);
    }else{
        ele = evt;
    }
    if(ele == null) ele = evt;
    
    return ele;
}

function _formatCurrency(num) {
    num = num.toString().replace(/\$|\,/g,"");
    if(isNaN(num))
    num = "0";
    sign = (num == (num = Math.abs(num)));
    num = Math.floor(num*100+0.50000000001);
    cents = num%100;
    num = Math.floor(num/100).toString();
    
    if(cents<10) cents = "0" + cents;
    
    for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
        num = num.substring(0,num.length-(4*i+3))+','+ num.substring(num.length-(4*i+3));
    
    if(num == 0) return "$0";
    
    return (((sign)?"":"-") + "$" + num);// + '.' + cents); have to work on this one...
}

function _formatCurrencyWithCents(num, bForceTwoDecimals) {
	var orig = num.toString();
    num = num.toString().replace(/\$|\,/g,"");
    if(isNaN(num))
    num = "0";
    sign = (num == (num = Math.abs(num)));
    num = Math.floor(num*100+0.50000000001);
    cents = num%100;
    num = Math.floor(num/100).toString();
    
    if(cents<10) cents = "0" + cents;
    
    for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
        num = num.substring(0,num.length-(4*i+3))+','+ num.substring(num.length-(4*i+3));
    
    if(num == 0) return "";
   //if(!bForceTwoDecimals)
   // {
		//for keyboard events, we allow a bit more flexibility for decimal editing
		if(orig.lastIndexOf(".") == orig.length - 2)
			cents = cents.toString().substring(0,1);
		else if(orig.lastIndexOf(".") == orig.length - 1)
			cents = "";
		else if(orig.indexOf(".") == -1)
			cents = "";
			
		if(orig.indexOf(".") > -1) //user-added
			cents = "." + cents;
			//alert(num + " " + orig.lastIndexOf(".") + " " + cents);
			
	//}
//	else
	//{
		//blur events force to 2 decimals
//		cents = "." + cents;
//	}
	if(cents == "0")
	    cents = "";
        return (((sign)?"":"-") + "$" + num) + cents; //have to work on this one...
   // else
    //    return (((sign)?"":"-") + "$" + num);// + cents;
}

function _formatSSN(num){
    //num = num.toString().replace(/\D|\$|\,|-/g,'');
    num = num.toString().replace(/[^0-9]/g,'');
    
    if(num.length <= 3){
        return num;
    }else if(num.length > 3 && num.length < 5){
        return num.substring(0,3) + "-" + num.substring(3);
    }else if(num.length == 5){
        return num.substring(0,3) + "-" + num.substring(3)
    }else if(num.length > 5 && num.length < 9){
        return num.substring(0,3) + "-" + num.substring(3,5) + "-" + num.substring(5);
    }else if(num.length >= 9){
        return num.substring(0,3) + "-" + num.substring(3,5) + "-" + num.substring(5,9);
    }
}

function _formatInt(num)
{
    num = num.toString().match(/[0-9]*/,'');

    if(num == 0) return "";
    
    return num.toString();
}

function _formatPhone(num)
{
    //num = num.toString().replace(/\D|\$|\,|-/g,'');
    num = num.toString().replace(/[^0-9]/g,'');
    if(num.length > 0 && num.charAt(0) == '1'){
        num = num.substring(1);
    }
    
    if(num.length <= 3){
        return num;
    }else if(num.length > 3 && num.length < 6){
        return num.substring(0,3) + "-" + num.substring(3);
    }else if(num.length == 6){
        return num.substring(0,3) + "-" + num.substring(3)
    }else if(num.length > 6 && num.length < 10){
        return num.substring(0,3) + "-" + num.substring(3,6) + "-" + num.substring(6);
    }else if(num.length >= 10){
        return num.substring(0,3) + "-" + num.substring(3,6) + "-" + num.substring(6,10);
    }
}
function _formatDate(s){
    if(s == "") return s;
    
    var result = '';
    for(var i = 0; i < s.length; i++){
        var c = s.charAt(i);
        if(isDigit(c) || c == '/' && i < 10){
            result += c;
        }
    }  
    
    //ok, we have something at least remotely like our date format
    //let's apply some real formatting.
    if(result.length <= 1) return result;

    //make sure double slashes go away. since we always call this function when
	//any character changes, we don't have to worry about > 2 slashes.
    result = result.replace("//","/");
    var parts = result.split("/");
				
	//figure out what parts we have in the date...
	var total = ''
	if(parts.length == 1)
	{
	    var mo = parts[0].replace("/","");
	    if(parseInt(mo) > 12 && parts[0].length <= 2)
	        total = result.substring(0,1) + "/" + result.substring(1,2);
	    else
	        total = result.substring(0,2) + "/" + result.substring(2,3);
	    
	    return total;
	}
	else if(parts.length == 2)
	{
	    var d = parts[1].replace("/","");
	    if(d.toString() != "")
	    {
	        if(parseInt(d) > 31 && parts[1].length <= 2)
	        {
	            parts[1] = parts[1].substring(0,1) + "/" + parts[1].substring(1,2);
	        }
	        else if(parts[1].length > 2)
	        {
	            parts[1] = parts[1].substring(0,2) + "/" + parts[1].substring(2,3);
	        }
	    }
	    return parts[0] + "/" + parts[1];
	}
	else if(parts.length == 3)
	{
	    var y = parts[2].replace("/","");
	    if(y.toString() != "")
	    {
	        if(y.length > 4)
	            parts[2] = parts[2].substring(0,3);
	    }
	    return parts[0] + "/" + parts[1] + "/" + parts[2];
	}
}
function isDigit(num) {
	if (num.length>1){return false;}
	var string="1234567890";
	if (string.indexOf(num)!=-1){return true;}
	return false;
	}
function _formatPercent0(num){
    num = num.toString().match(/[0-9]*/);

    if(num == 0) return "";
    
    return num.toString() + "%";
}

function _formatPercent2(num){
    num = num.toString().match(/[0-9]*[.]?[0-9]{0,2}/,'');

    if(num == 0) return "";
    
    return num.toString() + "%";
}

/*
    Helper functions. Jerod Venema, 9/26/2006
*/
function EventSource(evt){
    if( !evt ) {
      evt = window.event;
    }
    return evt.srcElement || evt.target;
}

function insertAtCursor(myField, myValue) {
    //IE support
    if (document.selection) {
        myField.focus();
        sel = document.selection.createRange();
        sel.text = myValue;
    }
    //MOZILLA/NETSCAPE support
    else if (myField.selectionStart || myField.selectionStart == "0") {
        var startPos = myField.selectionStart;
        var endPos = myField.selectionEnd;
        myField.value = myField.value.substring(0, startPos)
        + myValue
        + myField.value.substring(endPos, myField.value.length);
    } else {
        myField.value += myValue;
    }
}

function insertAtPosition(field, position){
    
}

var autoformat = function(formatNow){
        var textboxes = document.getElementsByTagName("input"); 
        for (var i = 0; i < textboxes.length; i++) { 
            var ele = textboxes[i];
            var format = ele.getAttribute("AutoFormat");
            if ( format != null) { 
                if(format == "c0"){
                    ele.onkeyup = format_Currency0;
                    if(formatNow) format_Currency0(ele);
                }else if(format == "ssn"){
                    ele.onkeyup = format_SSN;
                    format_SSN(ele);
                }else if(format == "p0"){
                    ele.onkeyup = format_Percentage0;
                    format_Percentage0(ele);
                }else if(format == "p2"){
                    ele.onkeyup = format_Percentage2;
                    format_Percentage2(ele);
                }else if(format == "phone"){
                    ele.onkeyup = format_Phone;
                    format_Phone(ele);
                }else if(format == "int"){
                    ele.onkeyup = format_Int;
                    format_Int(ele);
                }else if(format == "date"){
                    ele.onkeyup = format_Date;
                    format_Date(ele);
                }else if(format = "c2"){
                    ele.onkeyup = format_Currency2;
                    if(formatNow) format_Currency2(ele);
                }
            }
        }
}

