/*  $Id: keypress.js 4524 2007-04-23 04:56:13Z fpaz $
 *  Input constraint numeric,currency,datetime even
 *  locked input is supported.
 */

function KeypressThrow(e){
    if(window.event)
         window.event.returnValue = null;
    else
       if(e.preventDefault)
			e.preventDefault();
			e.returnValue = false;
    return false;    
}

function isLocked(e){
    KeypressThrow(e);
}

function isAlphaNumeric(e){
	var key =(window.event) ? window.event.keyCode:e.charCode;
    var nkey = String.fromCharCode(key);
    if(key !=0 && nkey.match(/[^a-zA-Z0-9\s]/)){
       KeypressThrow(e);
    }
}
 
function isNumeric(e){
    var key =(window.event) ? window.event.keyCode:e.charCode;
    var nkey = String.fromCharCode(key);
    if(key !=0 && nkey.match(/[^0-9]/)){
       KeypressThrow(e);
    }
}

function isCurrency(e){
    var key =(window.event) ? window.event.keyCode:e.charCode;
    var nkey = String.fromCharCode(key);
    if(key !=0 && nkey.match(/[^0-9.]/)){
       KeypressThrow(e);
    }
}

function getCaretPos(elm)
{
     var cpos = 0;
     if (document.selection) { 
         elm.focus ();
         var oSel = document.selection.createRange();
         oSel.moveStart ('character', -elm.value.length);
         cpos = oSel.text.length;
     }else if (elm.selectionStart || elm.selectionStart == '0'){
         cpos = elm.selectionStart;
     }    
     return (cpos);
}
   
function setCaretPos(elm, cpos)
{
     if (document.selection) { 
         elm.focus();
         var oSel = document.selection.createRange();
         oSel.moveStart ('character', -elm.value.length);
         oSel.moveStart ('character', cpos);
         oSel.moveEnd ('character', 0);
//         oSel.select ();
     }else if (elm.selectionStart || elm.selectionStart == '0') {
         elm.selectionStart = cpos;
         elm.selectionEnd = cpos;
         elm.focus();
     }
}

function CurFormat(e){
var el = getTarget(e);  
var tmp1 = '';
  var elm='';
  elm  = RemStr(el.value,',');
  if(el.maxLength<0){
     el.setAttribute('maxLength','15') 
  } 	
  if(el.maxLength > el.value.length -1){
    if(elm.indexOf('.') !=-1){
       caret = getCaretPos(el)	
       arr_val = elm.split(".");
       tmp1 = FormatCurrency(arr_val[0])+'.'+ ((arr_val[1].length>2) ? arr_val[1].substr(0,2):arr_val[1]);
       el.value = tmp1;
       setCaretPos(el,caret);   
    }else{
       var key =(window.event) ? window.event.keyCode:e.charCode;
       var caret = 0;
       caret = getCaretPos(el);      
       if(key ==0 || key == 46 || key==8){
           tmp1 = FormatCurrency(elm);
           el.value = tmp1; //.substring(0,tmp1.length -1);
       }   
       if(key > 48){
           tmp1 = FormatCurrency(elm);
           el.value = tmp1; //.substring(0,tmp1.length -1);
       }
       setCaretPos(el,caret);                  
    }
  }
}
    function RemStr(data,schar){
        var tmpStr='';
        if(data && data.indexOf(',')!=-1){
            tmpStr = data.replace(/,/g,'');
        }else{
            tmpStr = data;
        }
        return tmpStr;
    }
        function FormatCurrency(data){
            var tmp1='',num='';	
            tmp1 = insComma(data);
            for (i = tmp1.length-1; i >= 0; i--) 
                     num += tmp1.charAt(i);; 
            return num;
        }
            function insComma(data){
               var count = i = 0;
               var tmpStr = "";
               var comma = ",";
            
               for (i = data.length-1; i >= 0; i--) {
                  if (count == 3){
                     tmpStr += comma;
                     count = 1;
                  }else
                     count ++;
                  tmpStr += data.charAt(i); 
               }
               return (tmpStr);
            }

function DateFormat(e){
	var obj = getTarget(e);
 	var date = obj.value;
	var	dkey = (window.event) ? window.event.keyCode:e.charCode;
	if(dkey != 46){
    	if (/^\d{2}$/.test(date)){
    		obj.value=obj.value+'/'; return false; 
    	}
    	if (/^\d{2}\/\d{2}$/.test(date)){
    		obj.value=obj.value+'/'; return false; 
    	}
    	if (/^\d{1,2}\/\d{1,2}\/\d{4}$/.test(date)){
    		return false; 
    	}
	}
}

function getTarget(e){
    var target = window.event ? window.event.srcElement : e ? e.target : null;
    if (!target){
      return false;
    }else{
      return target;
    }
}

function addKeypressListener(){
  var el = document.getElementsByTagName('input');
  var elm = [];
  if(typeof el.length != 'number'){
      var count=0;
      while (typeof el[count] != 'undefined') {
         els = el[count]; 
         if(els.rel !=''){
             elm.push(els);
         }
         count++;
      }
      el = elm;
  }
  for(var i=0;i<el.length;i++){
   if(el[i].type == 'text'){   
	switch (el[i].getAttribute("rel")){
	case 'alp':
	    textAlign(el[i],'right');
	    addEvent(el[i],'keypress',isAlphaNumeric);
		break;	
	case 'num':
	    textAlign(el[i],'right');
	    addEvent(el[i],'keypress',isNumeric);
		break;
	case 'cal':
		el[i].style.textAlign='left';
		addEvent(el[i],'keypress',isNumeric);
		addEvent(el[i],'keyup',DateFormat);						
		break;
	case 'cur':
	    textAlign(el[i],'right');
		addEvent(el[i],'keypress',isCurrency);
		addEvent(el[i],'keyup',CurFormat);				
		break;
	case 'dis':
		addEvent(el[i],'keypress',isLocked);
		break;
	}          
   }	
  }
}

function textAlign(el,alignment){
    if(navigator.userAgent.indexOf("MSIE") == -1){
	   el.style.textAlign=alignment;
    }	
}

//addKeypressListener();
addEvent(window,'load',addKeypressListener);
