	///////////////////////////
	///////////////////////////
	///////////////////////////
	///////////////////////////
	///////////////////////////
		
	var WCMasking_arrControlFields = new Array(new Array());
	
	function WCMasking_StartUp(formName, maskingArray) {
		setupMaskingControlArray(maskingArray);
		setupFormKeyPress(formName);
		resetMaskedFields("");
	}
	
	
	function setupMaskingControlArray(arr) {WCMasking_arrControlFields = arr;}
	function setupFormKeyPress(formName) {
	
		if (document.forms(formName).captureEvents) document.forms(formName).captureEvents(Event.KEYPRESS); 
		document.forms(formName).onkeypress = masking;
	
	}
	function strip_0_X(str) {
		var returnStr = "";
		for ( var x = 0 ; x < str.length ; x++ ) {
			var xChar = str.charAt(x);
			if ( xChar == "0" || xChar == "X" ) returnStr += " ";
			else returnStr += xChar;
		}
		return returnStr;
	}	
	
	function resetMaskedFields(Field) {
		var x, value;
		if ( Field == "" ) {
			for ( x = 0 ; x < WCMasking_arrControlFields.length ; x++ ) {
				value = strip_0_X(WCMasking_arrControlFields[x][1]);
				document.forms(WCMasking_arrControlFields[x][2]).item(WCMasking_arrControlFields[x][0]).value = value;
				document.forms(WCMasking_arrControlFields[x][2]).item(WCMasking_arrControlFields[x][0]).focus();
			}
		}
		else {
			for ( x = 0 ; x < WCMasking_arrControlFields.length ; x++ ) {
				if ( WCMasking_arrControlFields[x][0] == Field ) {
					value = strip_0_X(WCMasking_arrControlFields[x][1]);
					document.forms(WCMasking_arrControlFields[x][2]).item(WCMasking_arrControlFields[x][0]).value = value;
					document.forms(WCMasking_arrControlFields[x][2]).item(WCMasking_arrControlFields[x][0]).focus();
					break;
				}
			}
		}
	}	

	function storeCaret (textEl) {
       if (textEl.createTextRange) textEl.caretPos = document.selection.createRange().duplicate();
    }
	
	function insertAtCaret (textEl, text) {
       if (textEl.createTextRange && textEl.caretPos) {
         var caretPos = textEl.caretPos;
         caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? text + ' ' : text;
       }
       else textEl.value  = text;
    }
	
	function masking(){
					
		var theField=(window.event)?window.event.srcElement:arguments.callee.arguments[0].target;
		var fieldName = theField.name;
						
		var inArrayControlFields = false;
		for ( var y = 0 ; y < WCMasking_arrControlFields.length ; y++ ) {
			if (WCMasking_arrControlFields[y][0] == fieldName) {
				inArrayControlFields = true;
				ControlIndex = y;
				break;
			}
		}
		
		if (! inArrayControlFields) return true;
									
		storeCaret(theField);
		
		var keyValue = String.fromCharCode(event.keyCode);
		
		var globalRangeText = document.selection.createRange().text;
				
		for ( y = 0 ; y < globalRangeText.length - 1; y++) {
			keyValue = keyValue + " ";
		}
		var OldFieldValue = theField.value;
		
		insertAtCaret (theField,keyValue);
				
		var fieldValue = theField.value;
		
		if ( OldFieldValue == fieldValue ) return true;
		
		var moveForward = 0;
		for ( y = 0 ; y < fieldValue.length; y++) moveForward = moveForward + (-1 * theField.caretPos.moveStart("character", -1)); 
				
		var AdjustedMask = WCMasking_arrControlFields[ControlIndex][1];
		if (globalRangeText.length < 1 ) AdjustedMask = AdjustedMask.substring(0, moveForward-1) + "X" + AdjustedMask.substring(moveForward-1)
			
		var rawInput = "";
		var rawInputEnd = "";
		for ( y = 0 ; y < AdjustedMask.length; y++ ) {
			if ( moveForward == y && fieldValue.charAt(y) == " " ) rawInputEnd = rawInputEnd + " ";
			else if ( AdjustedMask.charAt(y) == "0" || AdjustedMask.charAt(y) == "X" ) {
				rawInput = rawInput + fieldValue.charAt(y);			
			}
		}
		rawInput = rawInput + rawInputEnd;
			
		var fullInput = "";
		var x = 0;
		for ( y = 0 ; y < WCMasking_arrControlFields[ControlIndex][1].length; y++ ) {
			if ( WCMasking_arrControlFields[ControlIndex][1].charAt(y) == "0" || WCMasking_arrControlFields[ControlIndex][1].charAt(y) == "X" ) {
				fullInput = fullInput + rawInput.charAt(x++);			
			}
			else {
				fullInput = fullInput + WCMasking_arrControlFields[ControlIndex][1].charAt(y);
			}
		}
		
		if ( validMask(fullInput,WCMasking_arrControlFields[ControlIndex][1]) ) {
		
			theField.value = fullInput;
			
			for ( y = moveForward ; y < WCMasking_arrControlFields[ControlIndex][1].length && globalRangeText.length <= 0; y++ ) {
				if ( WCMasking_arrControlFields[ControlIndex][1].charAt(y) == "0" || WCMasking_arrControlFields[ControlIndex][1].charAt(y) == "X") {
					break;
				}
			}
			moveForward = y;
			
			moveForward -= (globalRangeText.length == 0 ) ? 0 : (globalRangeText.length - 1);
			
		}
		else {
			theField.value = OldFieldValue;
			moveForward -= (globalRangeText.length == 0 ) ? 1 : (globalRangeText.length);
		}
				
		theField.caretPos.move("character", moveForward);
		theField.caretPos.select();
		
		return false;
		
	}
	
	function validMask(value, mask) {
		
		var re_0 = new RegExp("[0-9]", "i");
		var re_X = new RegExp("[a-zA-Z]", "i");
		
		for ( z = 0; z < mask.length; z++) {
			if (mask.charAt(z) == "0") {
				if ( (! re_0.test(value.charAt(z))) && value.charAt(z) != " ")  {
					return false;
				}
			}
			else if (mask.charAt(z) == "X") {
				if ( (! re_X.test(value.charAt(z))) && value.charAt(z) != " ") {
					return false;
				}
			}
			else if (value.charAt(z) != mask.charAt(z) ) {
				return false;
			}
		}
		return true;
	}
////////////////////////////////////////////////////////////////////////////////////////////	
          function mascara_data(data){ 
              var mydata = ''; 
              mydata = mydata + data.value; 
              if (mydata.length == 2){ 
                  mydata = mydata + '/'; 
                  data.value = mydata; 
              } 
              if (mydata.length == 5){ 
                  mydata = mydata + '/'; 
                  data.value = mydata; 
              } 
              if (mydata.length == 10){ 
                  verifica_data(data); 
              } 
          } 
           
          function verifica_data (data) { 

            dia = (data.value.substring(0,2)); 
            mes = (data.value.substring(3,5)); 
            ano = (data.value.substring(6,10)); 

            situacao = ""; 
            // verifica o dia valido para cada mes 
            if ((dia < 01)||(dia < 01 || dia > 30) && (  mes == 04 || mes == 06 || mes == 09 || mes == 11 ) || dia > 31) { 
                situacao = "falsa"; 
            } 

            // verifica se o mes e valido 
            if (mes < 01 || mes > 12 ) { 
                situacao = "falsa"; 
            } 

            // verifica se e ano bissexto 
            if (mes == 2 && ( dia < 01 || dia > 29 || ( dia > 28 && (parseInt(ano / 4) != ano / 4)))) { 
                situacao = "falsa"; 
            } 
    
            if (data.value == "") { 
                situacao = "falsa"; 
            } 
    
            if (situacao == "falsa") { 
                alert("Data inválida!"); 
                data.focus(); 
            } 
          } 

          function mascara_hora(hora){ 
              var myhora = ''; 
              myhora = myhora + hora; 
              if (myhora.length == 2){ 
                  myhora = myhora + ':'; 
                  document.forms[0].hora.value = myhora; 
              } 
              if (myhora.length == 5){ 
                  verifica_hora(); 
              } 
          } 
           
          function verifica_hora(){ 
              hrs = (document.forms[0].hora.value.substring(0,2)); 
              min = (document.forms[0].hora.value.substring(3,5)); 
              
              alert('hrs '+ hrs); 
              alert('min '+ min); 
               
              situacao = ""; 
              // verifica data e hora 
              if ((hrs < 00 ) || (hrs > 23) || ( min < 00) ||( min > 59)){ 
                  situacao = "falsa"; 
              } 
               
              if (document.forms[0].hora.value == "") { 
                  situacao = "falsa"; 
              } 

              if (situacao == "falsa") { 
                  alert("Hora inválida!"); 
                  document.forms[0].hora.focus(); 
              } 
          } 
	
	
