var regEmail = new RegExp("\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*");

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~Created by : Sanjay Legha~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

//~~~~~~~~~~~~~~~~~~~~~~FUNCTIONS DEFINED~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /*
        LTrim(str);
        RTrim(str);
        Trim(str);
        isDigit(val);
        isAlphaNumeric(val);
        disableKey();
        FormatNumber(obj);
    */
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~RULES DEFINED~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    /*
        ruleNumberic(obj);
        ruleAlphaNumeric(obj);
    */
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    function LTrim(str)
    {
	    var tstr = new String();
	    tstr = str;
	    while (tstr.charAt(0)==' ')
		    tstr = tstr.substr(1, tstr.length);
            
	    return tstr;
    }

    function RTrim(str)
    {
	    var tstr = new String();
	    tstr = str;
	    var len = tstr.length-1;
        
	    while (tstr.charAt(len)==' ')
	    {
		    tstr = tstr.substr(0, len);
		    len -= 1;
	    }
        
	    return tstr;
    }

    function Trim(str)
    {
	    var tstr = new String();
	    tstr = str;
        
	    tstr=LTrim(tstr);
	    tstr=RTrim(tstr);
	    return tstr;
    }

    function isDigit(val)
    {
	    var str = new String();
	    str = val;
        
	    if (str.indexOf('.') != str.lastIndexOf("."))
		    return false;
            
	    var len = str.length;
	    for(i=0; i<len; i++)
	    {
		    if((str.charAt(i) >= '0' && str.charAt(i) <= '9') || str.charAt(i) == ',' || str.charAt(i) == '.')
			    continue;
		    else
			    return false;
	    }
	    return true;
    }


    function isAlphaNumeric(val)
    {
	    var len = val.length;
	    for(i=0; i<len; i++)
	    {
		    if((val.charAt(i) >= 'A' && val.charAt(i) <='Z') || (val.charAt(i) >= 'a' && val.charAt(i) <='z') || (val.charAt(i) >= '0' && val.charAt(i) <= '9'))
			    continue;
		    else
			    return false;
	    }
	    return true;
    }

    function isEmail(val)
    {
        if (Trim(val) == "") return false;
        if (regEmail.exec(val) == null) 
            return false;
        return true;
    }

    function ruleNumberic(obj)
    {	/*
	    35	: End
	    36	: Home
	    37	: Left Arrow
	    38	: Up Arrow
	    39	: Right Arrow
	    40	: Down Arrow
	    48, 96	: 0
	    57, 105	: 9
	    9   : Tab
	    190, 110: (.)Dot
	    */
        //alert(event.keyCode);
        
	    if((event.keyCode<48 || event.keyCode>57) && (event.keyCode<96 || event.keyCode>105) && event.keyCode != 190 && event.keyCode != 110 &&  event.keyCode != 8 && event.keyCode != 46 && (event.keyCode < 35 || event.keyCode > 40) && event.keyCode != 9)
	    {
		    event.returnValue=false;
	    }
	    if ((event.keyCode == 190) || (event.keyCode == 110))
	    {
		    if (obj.value.indexOf('.') > -1)
			    event.returnValue = 0;
	    }
    }


    function ruleAlphaNumeric(obj)
    {
	    if((event.keyCode<65 || event.keyCode>91) && (event.keyCode<48 || event.keyCode>57) && (event.keyCode<96 || event.keyCode>105) && event.keyCode != 190 &&  event.keyCode != 8 &&  event.keyCode != 9 && event.keyCode != 46 && (event.keyCode < 35 || event.keyCode > 40))
	    {
		    event.returnValue=false;
	    }
    }
    
    //No key will be acceted 
    function disableKey()
    {
    	if(event.keyCode != 8 && event.keyCode != 46 && (event.keyCode < 35 || event.keyCode > 40) && event.keyCode != 9)
	    {
		    event.returnValue=false;
	    }
    }
    
    //Blocks ',< and > to be printed.
    function blockHackKeys()
    {
        /*
        ~ :192      ! :49       # :51       $ :52       % :53       ^ :54       & :55
        * :56       ( :57       ) :48       _ :189      - :189      + :187      = :187
        [ :219      ] :221      { :219      } :221      : :186      ; :186      " :222
        ' :222      < :188      > :190      ? :191      / :191      | : 220

        number pad
        / :111      * :106      + :107      - :109

        */      
       
       if (event.shiftKey && 
                (   event.keyCode == 192
                 || event.keyCode == 49  || event.keyCode == 51  || event.keyCode == 52  || event.keyCode == 53
                 || event.keyCode == 54  || event.keyCode == 55  || event.keyCode == 56  || event.keyCode == 57
                 || event.keyCode == 48  || event.keyCode == 189 || event.keyCode == 187 || event.keyCode == 219 
                 || event.keyCode == 221 || event.keyCode == 186 || event.keyCode == 222 || event.keyCode == 188 
                 || event.keyCode == 190 || event.keyCode == 191 || event.keyCode == 220))
        {   
            event.returnValue = false;
        }
        else if (event.keyCode == 189    || event.keyCode == 187  || event.keyCode == 219  
                 || event.keyCode == 221 || event.keyCode == 186  || event.keyCode == 222  
                 || event.keyCode == 111  || event.keyCode == 106  
                 || event.keyCode == 109 || event.keyCode == 107 
                )
        {
            event.returnValue = false;
        }
    }
    
    //Cast functions
    function getInt(val){
        val = val.replace(",", "");
        if (isNaN(parseInt(val)))
            return 0
        return parseInt(val);
    }
    
    function getFloat(val){
            val = val.replace(",", "");
            if (isNaN(parseFloat(val)))
                return 0
                
            return parseFloat(val);
    }
        
    function FormatNumber(obj)
    {   if (Trim(obj.value) != '')
        {
            var num = new Number();
            num = getFloat(obj.value);
            obj.value = num.toFixed(2);
        }
    }
        
    document.onkeydown = blockHackKeys;


//    var offsetx = 12;
//    var offsety = 8;

//    function newelement(newid) {
//        if (document.createElement) {
//            var el = document.createElement('div');
//            el.id = newid;
//            with (el.style) {
//                display = 'none';
//                position = 'absolute';
//            }
//            el.innerHTML = '&nbsp;';
//            document.body.appendChild(el);
//        }
//    }
//    var ie5 = (document.getElementById && document.all);
//    var ns6 = (document.getElementById && !document.all);
//    var ua = navigator.userAgent.toLowerCase();
//    var isapple = (ua.indexOf('applewebkit') != -1 ? 1 : 0);
//    function getmouseposition(e) {
//        if (document.getElementById) {
//            var iebody = (document.compatMode &&
//        	document.compatMode != 'BackCompat') ?
//        		document.documentElement : document.body;
//            pagex = (isapple == 1 ? 0 : (ie5) ? iebody.scrollLeft : window.pageXOffset);
//            pagey = (isapple == 1 ? 0 : (ie5) ? iebody.scrollTop : window.pageYOffset);
//            mousex = (ie5) ? event.x : (ns6) ? clientX = e.clientX : false;
//            mousey = (ie5) ? event.y : (ns6) ? clientY = e.clientY : false;

//            var lixlpixel_tooltip = document.getElementById('tooltip');
//            lixlpixel_tooltip.style.left = (mousex + pagex + offsetx) + 'px';
//            lixlpixel_tooltip.style.top = (mousey + pagey + offsety) + 'px';
//        }
//    }
//    function tooltip(tip) {
//        if (!document.getElementById('tooltip')) newelement('tooltip');
//        var lixlpixel_tooltip = document.getElementById('tooltip');
//        lixlpixel_tooltip.innerHTML = tip;
//        lixlpixel_tooltip.style.display = 'block';
//        document.onmousemove = getmouseposition;
//    }
//    function exit() {
//        document.getElementById('tooltip').style.display = 'none';
//    }
