iIgnoreGlobalMsg = false;
sInvalidFieldClassName = 'forminvalid'
aIndividualErrorActions = new Array();
iErrorsFound = false;

/* called in loop with all valid fields IDs */
function process_good_field(id){
     var oTmp = document.getElementById(id)
    
    var aFieldsToMark = Array();
    
    if(oTmp != null)aFieldsToMark.push(oTmp);
    else {
    		oTmp = getInputsByName(id);
    		for(var i=0;i<oTmp.length;i++)aFieldsToMark.push(oTmp[i]);
    }

	for(var i=0;i<aFieldsToMark.length;i++){
        if(aFieldsToMark[i].type=="checkbox")aFieldsToMark[i] = aFieldsToMark[i].parentNode
        if(typeof(aFieldsToMark[i].oldClassName)!='undefined'){
        	aFieldsToMark[i].className = oTmp.oldClassName
			
        	aFieldsToMark[i].style.borderColor='#bbbbbb';
        	aFieldsToMark[i].style.borderTopColor='#777777';
        	aFieldsToMark[i].style.borderBottomColor='#dddddd';
        }	
			
   }              
 
}
/* called in loop with all invalid fields IDs */
function process_bad_field(id){
		
    var oTmp = document.getElementById(id)
    
    var aFieldsToMark = Array();
    
    if(oTmp != null)aFieldsToMark.push(oTmp);
    else {
    		oTmp = getInputsByName(id);
    		for(var i=0;i<oTmp.length;i++)aFieldsToMark.push(oTmp[i]);
    }

	for(var i=0;i<aFieldsToMark.length;i++){
		if(aFieldsToMark[i].type=="checkbox")aFieldsToMark[i] = aFieldsToMark[i].parentNode
        if( aFieldsToMark[i].className != sInvalidFieldClassName){
        	aFieldsToMark[i].oldClassName=aFieldsToMark[i].className;
        	aFieldsToMark[i].className = sInvalidFieldClassName
        	
        	animateStyleColor(aFieldsToMark[i].id,'borderColor','#bbbbbb','#ff0000')
        	animateStyleColor(aFieldsToMark[i].id,'borderTopColor','#777777','#ff0000')
        	animateStyleColor(aFieldsToMark[i].id,'borderBottomColor','#dddddd','#ff0000')
       	    
        	
        	
        }	

   }
}

/* called on successfull validation */
function do_success(){

}
/* called on unsuccessfull validation */
function do_fail(){

}


function getInputsByName(checkedId){
	var aElemsToCheck;
	var aNamesToJoin = Array();
	
	aElemsToCheck = document.getElementsByTagName('input');
	for(i=0;i<aElemsToCheck.length;i++){
		if(aElemsToCheck[i].getAttribute("name")==checkedId)
			aNamesToJoin.push(aElemsToCheck[i])
	}
	return aNamesToJoin;
}


function check_form(rules,do_good,do_bad,on_success,on_fail){

      var aGoodFields = new Array();
      var aBadFields = new Array();
      var sTmpVal;
  
      if(typeof(do_good)=='undefined' || do_good=='')    do_good='process_good_field'
      if(typeof(do_bad)=='undefined' || do_bad=='')     do_bad='process_bad_field'
      if(typeof(on_success)=='undefined' || on_success=='') on_success='do_success'
      if(typeof(on_fail)=='undefined' || on_fail=='')    on_fail='do_fail'

      for(var i=0;i<rules.length;i++){
          var aTmp = rules[i].split("|")           
          var aFieldsToCheck = aTmp[0].split(',');

          

          
          for(var k=0;k<aFieldsToCheck.length;k++){
       
       
                   		var checkedId = aFieldsToCheck[k]  
                   	//	alert('checking: '+ aFieldsToCheck[k]);
                        
                        var oCheckedInput = document.getElementById(checkedId);

              if(oCheckedInput)
       			      if(oCheckedInput.disabled)continue;
       				//	alert(oCheckedInput);
       			
						//alert(checkedId+' name:'+oCheckedInput.name+' id:'+oCheckedInput.id);
          
			          for(var j=1;j<aTmp.length;j++){
			            var aFunc = aTmp[j].split(":");
			            var sFunc = aFunc[0]
			            
			            if(typeof aFunc[1]=='undefined')sParams = '';
			            else sParams = aFunc[1]

			            			sTmpVal = '';	
			         				if(oCheckedInput==null){
			         				//	alert('checking names for: '+checkedId);
			         				
			         						
			         						aNamesToJoin = getInputsByName(checkedId);
			         						

			         				//	alert('got array '+aNamesToJoin+' count: '+aNamesToJoin.length);
			         					
			         						for(var l=0;l<aNamesToJoin.length;l++){
	         						
			         							sTmpVal = sTmpVal + aNamesToJoin[l].value

			         						}		
			         				}
			            			else if (oCheckedInput.type=='select-one' && sFunc=='any_selected')sTmpVal = oCheckedInput.selectedIndex
			            			else if (oCheckedInput.type=='checkbox' && sFunc=='checked'){
			            					sTmpVal = oCheckedInput.checked
			            					
			                        } else sTmpVal = oCheckedInput.value;
			 						
			 						//alert(checkedId+':'+sTmpVal)			
			
			            			eval('var iValidationResult=is_'+sFunc+'(sTmpVal'+(sParams!=''?',"'+sParams+'"':'')+')')
										//alert(iValidationResult);
			            			if(iValidationResult)aGoodFields.push(checkedId)
			            			else aBadFields.push(checkedId)
			            		
			            	}
          }
      }
      
      for(var i=0;i<aGoodFields.length;i++)eval(do_good+'("'+aGoodFields[i]+'")');
      for(var i=aBadFields.length;i>0;i--){
      		//alert(aBadFields[i-1]+' '+aIndividualErrorActions[aBadFields[i-1]]+' '+typeof(aIndividualErrorActions[aBadFields[i-1]]))
      
      		if(typeof(aIndividualErrorActions[aBadFields[i-1]])=='string'){
      			
      			eval(aIndividualErrorActions[aBadFields[i-1]])
      		
      		} else {
      				iIgnoreGlobalMsg = false;		
      				eval(do_bad+'("'+aBadFields[i-1]+'")');
      		
      		}		
      		
      	}
      
      if(aBadFields.length==0)eval(on_success)
      else eval(on_fail)

      return(aBadFields.length==0)
}



function is_valid_email(value){
    var regxp =/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i

    return regxp.test(value)
}

function is_not_empty(value){
  return (trim(value)!='')
}


function is_cc_num(value){

  var oS = new String(trim(value));

  return (oS.length>=16)
}

function is_any_selected(value){
	return (value>0)
}

function is_checked(value){
	return value
}

function is_greater_than(value,val2){

    var iTmp = value.replace(/[^\d\.]/,"")
  //  alert(iTmp+' '+val2)
    return (parseInt(iTmp)>=val2)

}

function is_same_as(value,val2){
	//alert(value+' '+val2)
	return (value == document.getElementById(val2).value)
	return false;
}

/*
 *
 *
 * funkcje narzeędziowe
 *
 *
 */

 function trim(str) {
  
   var retStr = str;

   var ch = retStr.substring(0, 1);
   while (ch == " ") { 
      retValue = retStr.substring(1, retStr.length);
      ch = retStr.substring(0, 1);
   }

   ch = retStr.substring(retStr.length-1, retStr.length);
   while (ch == " ") { 
      retStr = retStr.substring(0, retStr.length-1);
      ch = retStr.substring(retStr.length-1, retStr.length);
   }
   
   return retStr;
} 

