<!-- ---------------------------------------------------------------------
//  File:         	keyCheck.htc
//	Author			Manglesh
//	Created On 		04-04-2006
//	Purpose			Parses behavior attributes supplied with input tag
//				to handle key restrictions.
//	Modification History:
* Revisions:
* Version	Date	Person		Comments 
*    1.1     10/09/2006    Manglesh Niranjan         Implementation of masking for percentage.
//-------------------------------------------------------------------- -->

<PROPERTY NAME="maskType"  />
<EVENT    NAME="onerror"  ID="error"  />
<ATTACH   EVENT="ondocumentready"  HANDLER="DoInit"       />

<script language="jscript">

//+----------------------------------------------------------------------------
//  Function:       DoInit
//  Description:    Attaches the proper formatting and events, depending on
//                  the type of tag the behavior is attached to.
//  Arguments:      none
//  Returns:        nothing
//-----------------------------------------------------------------------------

function DoInit()
{
    var sTag = tagName.toLowerCase();
    if (sTag == "input")
    { 
		attachEvent("onkeydown", checkMask);
		attachEvent("onkeypress", checkOtherKey);
		attachEvent("onfocus", showDefaultMask);
		attachEvent("onblur", clearDefaultMask);
		attachEvent("onblur", setMask);
    }
    else ReturnError("Cannot format this tag with the Mask Behavior");
}

//+----------------------------------------------------------------------------
//  Function:       clearDefaultMask
//  Description:    clears default mask when field loses focus
//  Arguments:      none
//  Returns:        none
//-----------------------------------------------------------------------------

function clearDefaultMask()
{
	if ((value == "MM/DD/YYYY") || (value == "#####-####") || (value == "### ###") || (value == "###-###-####") || (value == "##-####") || (value == "#####") || (value == "NN-NNNNNNN")|| (value == "N.NNNNNN")|| (value=="###-##-####")||(value=="+###.###")) {
         value = "";
        }
           
}

//+----------------------------------------------------------------------------
//  Function:       showDefaultMask
//  Description:    displays default mask when focus comes on field
//  Arguments:      none
//  Returns:        nothing
//-----------------------------------------------------------------------------

function showDefaultMask()
{
if(readOnly)
{
    return;
}

    switch(maskType)
    {
        case "float" :
            if (value=="")
            {
                value = "###########.##";
                select();
            }
            break;
            
         case "amount" :
            if (value=="")
            {
                value = "";
                select();
            }
            break;   

         case "TaxAmount" :
            if (value=="")
            {
                value = "";
                select();
            }
            break;   

//        case "date" :
//            if (value=="")
//            {
//                value = "MM/DD/YYYY";
//                select();
//            }
//            break;

        case "time" :
            if (value=="")
            {
                value = "hh:mm";
                select();
            }
            break;
        case "phone" :
            if (value=="")
            {
                value = "###-###-####";
               select();
            }
            break;
        case "ssn" :
            if (value=="")
            {
                value = "###-##-####";
                select();
            }
            break;
        case "zipUs" :
            if (value=="")
            {
                value = "#####-####";
                select();
            }
            break;
        case "zipCanada" :
            if (value=="")
            {
                value = "### ###";
                select();
            }
            break;
            case "Percentage" :
            if (value=="")
            {
                value = "+###.###";
                select();
            }
            break;
        case "fein" :
            if (value=="")
            {
                value = "NN-NNNNNNN";
                select();
            }
            break;    
        case "OrderNumber" :
            if (value=="")
            {
                value = "##-####";
                select();
            }
            break;    
        case "RegFactor" :
            if (value=="")
            {
                value = "N.NNNNNN";
                select();
            }
            break;     
    }
}

//+----------------------------------------------------------------------------
//  Function:       checkMask
//  Description:    restricts the keys, depending on type of input field
//  Arguments:      none
//  Returns:        boolean
//-----------------------------------------------------------------------------

function checkMask()
{
    if(event.altKey)
		return false;
	
	if(event.ctrlKey)
    {
        return true;
    }
    var isShift = event.shiftKey;
	clearDefaultMask()
    if ((event.keyCode==8) || (event.keyCode==12)  || (event.keyCode==13)  || (event.keyCode==27) || (event.keyCode==45) ||(event.keyCode==46)  || (event.keyCode==9)  || (event.keyCode==16)  || (event.keyCode>=33 && event.keyCode<=40) || (event.keyCode>=112 && event.keyCode<=123))
	{
		event.returnValue=true;
	}
	else
	{ 
	   switch(maskType)
	    {


            case "number" :
				if ((event.keyCode>=48 && event.keyCode<=57 && !isShift)  || ((event.keyCode>=96 && event.keyCode<=105) && !event.shiftKey)) 
				{
					event.returnValue=true;
				}
				else
				{
					event.returnValue=false;
				}
				break;
            
            case "zipUs"  :
					
				if (((event.keyCode>=48 && event.keyCode<=57 &&  !isShift)  || (event.keyCode>=96 && event.keyCode<=105)) && !event.shiftKey ) 
				{
				  			
                     if (event.keyCode!=189 && value.length == 6 && value.indexOf("-") == -1 )
                     {
							 value = value.substring(0,5) + "-" + value.substring(value.length-1,value.length);
							 event.returnValue=true;
                     }
                     else
                     {
                        event.returnValue=true;
                     }
                     
				}
				else  if((event.keyCode==189)&& (value.length == 5) && value.indexOf("-") == -1)
                {
                             event.returnValue=true;
                
				}
				else
				{
					event.returnValue=false;
				}
				
				break;
               case "zipCanada" :
               if ((event.keyCode>=48 && event.keyCode<=57 && !isShift)   || (event.keyCode>=97 && event.keyCode<=122)  || (event.keyCode>=65 && event.keyCode<=90) || (event.keyCode==32))
				{
					if ((event.keyCode==32)&& (value.length < 3 || value.indexOf(" ") != -1))//For space
                     {
					    event.returnValue=false;
                     }
                     else if ((event.keyCode!=32)&& (value.length == 3))
					 {
						value += " ";
                        event.returnValue=true;
                     }
                     else
                     {
                          event.returnValue=true;
                     }
				}
				else
				{
					event.returnValue=false;
				}
				break;
               
				
              case "ssn"  :
				//if ((event.keyCode>=48 && event.keyCode<=57 && !isShift)  || ((event.keyCode>=96 && event.keyCode<=105) && !event.shiftKey) ) 
				if ((event.keyCode>=48 && event.keyCode<=57) || (event.keyCode>=96 && event.keyCode<=105) && !isShift)
				{
						if (value.length == 6 || value.length == 3)
								value += "-";
							 event.returnValue=true;
                                        
				}
				else if(event.keyCode==189 && (value.length == 3 || value.length == 6) )
				{
				    event.returnValue=true;
				}
				else
				{
			
					event.returnValue=false;
				}
				break;	
			
				
				
				case "fein"  :
				if ((event.keyCode>=48 && event.keyCode<=57) || (event.keyCode>=96 && event.keyCode<=105) && !isShift)
                //if ((event.keyCode>=48 && event.keyCode<=57 && !isShift)  || ((event.keyCode>=96 && event.keyCode<=105) && !event.shiftKey) || (event.keyCode==189 && !event.shiftKey)) 
				{
					if ( value.length == 2 )
						value += "-";
				
				event.returnValue=true;
				}
				else if(event.keyCode==189 && (value.length == 2) )
				{
				    event.returnValue=true;
				}
				else
				{
					event.returnValue=false;
				}
				break;
				
				case "Percentage"  :
                if (((event.keyCode>=48 && event.keyCode<=57 && !isShift) || ((event.keyCode==187 && event.shiftKey) || event.keyCode==189)) && value.length <8)
				{
				 
					if(value.length <1)
					{
					    if((event.keyCode==187 && event.shiftKey) || (event.keyCode==189))
					       event.returnValue=true;
					    else

					    {
					       value = "+" + String.fromCharCode(event.keyCode);
					        event.returnValue=false;
					    }
					}
				    else
					{
					    if (!(event.keyCode==187 && event.shiftKey) && (event.keyCode!=189))
				        {
					        if ( value.length == 4 )
						    value += ".";
						    value = value + String.fromCharCode(event.keyCode);
					    }
						  event.returnValue=false;
					}
				}
				else

					event.returnValue=false;

				break;

	        case "float"                 :
				if ((event.keyCode==190 || event.keyCode==110) && (value.indexOf('.') > -1))
                                    event.returnValue=false;
                else if ((((event.keyCode>=48 && event.keyCode<=57)|| event.keyCode==190 || event.keyCode==110 || (event.keyCode>=96 && event.keyCode<=105))&& !event.shiftKey))
				{
					if (value.length==11  && value.indexOf('.') == -1 && event.keyCode!=190 && event.keyCode!=110)
						value += ".";
					event.returnValue=true;
				}
				else
				{
					event.returnValue=false;
				}
				break;
				
			case "amount"   :
				if ((event.keyCode==190 || event.keyCode==110) && (value.indexOf('.') > -1))
				{
                    event.returnValue=false;
                }
                else if ((((event.keyCode>=48 && event.keyCode<=57)|| event.keyCode==190 || event.keyCode==110 || (event.keyCode>=96 && event.keyCode<=105))&& !event.shiftKey))
				{
					if (value.length==9  && value.indexOf('.') == -1 && event.keyCode!=190 && event.keyCode!=110)
						value += ".";
					event.returnValue=true;
				}
				else
				{
					event.returnValue=false;
				}
				break;	
	        
	        case "date"  :
				if (( event.keyCode>=48 && event.keyCode<=57 && !isShift) || event.keyCode==189  || event.keyCode==109  || event.keyCode==191   || event.keyCode==111   || ((event.keyCode>=96 && event.keyCode<=105)&& !event.shiftKey))
				{
					if ( ((value.length==0 || value.length==3) && (event.keyCode==189  || event.keyCode==191 || event.keyCode==111 || event.keyCode==109)) || ( (value.length==4 || value.length==5) && ((value.indexOf('/') == 2 && (event.keyCode==189 || event.keyCode==109)) || (value.indexOf('-') == 2 && (event.keyCode==191 || event.keyCode==111))) )     )
					{
						event.returnValue=false;
					}
					else if  (value.length > 5)
                                        {
                                            if (event.keyCode==189 || event.keyCode==109)
                                            {
                                                if ((value.indexOf("-") == 2 && value.substring(3,value.length).indexOf("-") == 2) || (value.indexOf("/") == 2 && value.substring(3,value.length).indexOf("/") == 2))
                                                {
                                                    event.returnValue=false;
                                                }
                                                else
                                                {
                                                    //additional checks...
                                                }
                                            }
                                            else if (event.keyCode==191 || event.keyCode==111)
                                                if ((value.indexOf("-") == 2 && value.substring(3,value.length).indexOf("-") == 2) || (value.indexOf("/") == 2 && value.substring(3,value.length).indexOf("/") == 2))
                                                {
                                                    event.returnValue=false;
                                                }
                                                else
                                                {
                                                    //additional checks...
                                                }
                                        }
                                        else
					{
						if ((value.length==1) && (event.keyCode==189  || event.keyCode==191 || event.keyCode==111 || event.keyCode==109))
							value = "0" + value;
						else if (value.length==2 && value.indexOf('/') == -1 && value.indexOf('-') == -1 && (event.keyCode!=189 && event.keyCode!=109) && (event.keyCode!=191 && event.keyCode!=111))
							value += "/";
						else if ((value.length==4) && (event.keyCode==189  || event.keyCode==191  || event.keyCode==111 || event.keyCode==109))
							value = value.substring(0,3) + "0" + value.substring(3,4);
						else if (value.length==5  && (value.indexOf('/') == 2 || value.indexOf('-') == 2) && (event.keyCode!=189 && event.keyCode!=109) && (event.keyCode!=191 && event.keyCode!=111))
							value += value.substring(2,3);
						event.returnValue=true;
					}
				}
				else
				{
					event.returnValue=false;
				}
				break;
	            
	        case "time"             :
	           
	           	if ((event.keyCode>=48 && event.keyCode<=57 && !isShift) || (event.keyCode==186 && isShift) || event.keyCode==189  || event.keyCode==109  || event.keyCode==191   || event.keyCode==111   || ((event.keyCode>=96 && event.keyCode<=105)&& !event.shiftKey))
				{
					
					if ((value.length ==1) && (event.keyCode==186))
					{
						value = "0" + value + ":";
						event.returnValue=false;
					}
					if ((value.length ==2) && (event.keyCode==186))
					{
						value = value + ":";
						event.returnValue=false;
					}
					else if ((value.length!=2) && (event.keyCode==186))
					{
						event.returnValue=false;
					}
					else if (value.length==2 && event.keyCode!=186)
					{
						value += ":";
						event.returnValue=true;
					}
				}
				else
				{
					event.returnValue=false;
				}
				break;
				
	        case "phone" :
	           if ((event.keyCode>=48 && event.keyCode<=57) || (event.keyCode>=96 && event.keyCode<=105) && !isShift)
				{
						if (value.length == 7 || value.length == 3)
								value += "-";
							 event.returnValue=true;
                                        
				}
				else if(event.keyCode==189 && (value.length == 3 || value.length == 7) )
				{
				    event.returnValue=true;
				}
				else
				{
			
					event.returnValue=false;
				}
				break;	
				
			case "OrderNumber"  :
				if ((event.keyCode>=48 && event.keyCode<=57) || (event.keyCode>=96 && event.keyCode<=105) && !isShift)
                //if ((event.keyCode>=48 && event.keyCode<=57 && !isShift)  || ((event.keyCode>=96 && event.keyCode<=105) && !event.shiftKey) || (event.keyCode==189 && !event.shiftKey)) 
				{
					if ( value.length == 2 && value.indexOf("-") == -1 )
						value += "-";
				
				event.returnValue=true;
				}
				else if(event.keyCode==189 && (value.length == 2) )
				{
				    event.returnValue=true;
				}
				else
				{
					event.returnValue=false;
				}
				break;
				
			case "RegFactor"  :
				if (((event.keyCode>=48 && event.keyCode<=57) ||(event.keyCode>=96 && event.keyCode<=105)) && !isShift)
				{
					if ( value.length == 1 && value.indexOf(".") == -1 )
						value += ".";
				
				event.returnValue=true;
				}
				else if(event.keyCode==189 && (value.length == 2))
				{
				    event.returnValue=true;
				}
				else
				{
					event.returnValue=false;
				}
				break; 
				
			case "TaxAmount"  :
			    			    
				if ((event.keyCode==190 || event.keyCode==110) && (value.indexOf('.') > -1))
				{
                    event.returnValue=false;
                }
                else if ((((event.keyCode>=48 && event.keyCode<=57) || event.keyCode==109 || event.keyCode==189 || event.keyCode==45 || event.keyCode==110 || event.keyCode==190 || (event.keyCode>=96 && event.keyCode<=105))&& !event.shiftKey))
				{ 
				    if(value.indexOf("-") == -1)
				    {
					    if (value.length==11  && value.indexOf('.') == -1 && event.keyCode!=190 && event.keyCode!=110)
						    value += ".";
					}
					else
					{
					    if (value.length==12  && value.indexOf('.') == -1 && event.keyCode!=190 && event.keyCode!=110)
					        value += ".";    
					}
					event.returnValue=true;
				}
				else
				{
					event.returnValue=false;
				}
				break;	
		
	        
	    }
	}
}

//+----------------------------------------------------------------------------
//  Function:       checkOtherKey
//  Description:    restricts the special character keys
//  Arguments:      none
//  Returns:        boolean
//-----------------------------------------------------------------------------

function checkOtherKey()
{
    event.returnValue=true;

}
//+----------------------------------------------------------------------------
//  Function:       ReturnError
//  Description:    Fires the error event, along with a descriptive text message
//  Arguments:      sMsg - descriptive text message
//  Returns:        nothing
//-----------------------------------------------------------------------------

function ReturnError(sMsg)
{
    var oEvent = createEventObject();
    oEvent.setAttribute("error", sMsg);
    error.fire(oEvent);
}


//+----------------------------------------------------------------------------
//  Function:       checkMask
//  Description:    restricts the keys, depending on type of input field
//  Arguments:      none
//  Returns:        boolean
//-----------------------------------------------------------------------------

function setMask()
{
 	if(event.altKey)
		return false;
	
	if(event.ctrlKey)
    {
        return true;
    }
    var isShift = event.shiftKey;
	clearDefaultMask()
    if ((event.keyCode==8) || (event.keyCode==12)  || (event.keyCode==13)  || (event.keyCode==27) || (event.keyCode==45) ||(event.keyCode==46)  || (event.keyCode==9)  || (event.keyCode==16)  || (event.keyCode>=33 && event.keyCode<=40) || (event.keyCode>=112 && event.keyCode<=123))
	{
		event.returnValue=true;
	}
	else
	{ 
	   switch(maskType)
	    {
	            case "amount"                 :
			    if((value!='') && (value.indexOf('.') == -1) && (value.length <= 8))
			    {
			        value += ".00";
			    }
			    else if((value.indexOf('.') == 0) && (value.length == 2))
			    {
			        value = "0"+ value + "0";
			    }
			    else if(((value.length) - (value.indexOf('.'))) == 2)
			    {
			        value = value + "0";
			    }
			    else if((value!='') && ((value.length) - (value.indexOf('.'))) == 1)
			    {
			        value = value + "00";
			    }
			    else if((value.indexOf('.') == 0) && (value.length == 1))
			    {
			        value = "0"+ value + "00";
			    }
			    else if((value.indexOf('.') == 0) && (value.length >= 1))
			    {
			        value = "0"+ value;
			    }
				break;	
				case "RegFactor"                 :
				var padedValue = "00000000";
			    if((value!='') && (value.indexOf('.') == -1) && (value.length == 1))
			    {
			        value += ".000000";
			    }			    
			    else if(value.indexOf('.') == 0)
			    {
			        value = "0"+ value + padedValue;
			        value = value.substring(0,8);
			    }
			    else if(value.indexOf('.') == 1)
			    {
			        value = value + padedValue;
			        value = value.substring(0,8);
			    }    
        		break;	
        		
//                case "TaxAmount"                 :
//	            if((value!='') && (value.indexOf('.') == -1) && (value.length <= 13))
//			    {
//			        value += ".00";
//			    }
//			    else if((value.indexOf('.') == 0) && (value.length == 2))
//			    {
//			        value = "0"+ value + "0";
//			    }
//			    else if(((value.length) - (value.indexOf('.'))) == 2)
//			    {
//			        value = value + "0";
//			    }
//			    else if((value!='') && ((value.length) - (value.indexOf('.'))) == 1)
//			    {
//			        value = value + "00";
//			    }
//			    else if((value.indexOf('.') == 0) && (value.length == 1))
//			    {
//			        value = "0"+ value + "00";
//			    }
//			    else if((value.indexOf('.') == 0) && (value.length >= 1))
//			    {
//			        value = "0"+ value;
//			    }
//				break;		
				
 		
	    }
	}
}
</script>

