var formWasValidated = 0;
var formObjGlobal;
var timeoutId;

function isset(varname)
{
	return(typeof(varname)!='undefined');
}

function createXMLHttpRequest( ) 
{
	try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {}
	try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {}
	try { return new XMLHttpRequest( ); } catch(e) {}
	alert("XMLHttpRequest not supported");
	return null;
}


function eroare( input, error_id ) 
{
	document.getElementById( error_id ).innerHTML += "Nu ati completat campul " + input.title + " !<br>";
	//alert("Please correct the " + input.title + " field!<br>");
}

function validateForm ( formObj, rules )
{
	formObjGlobal = formObj;
	//displayLoadingDiv();	
	formWasValidated = rules.length;
	
	//document.getElementById( "errorDiv" ).innerHTML = "";
	
	formIsValid = true;
	
	for ( i=0; i < rules.length; i++ )
	{
		eval( 'input = formObj.' + rules[i][0] + ';');
		
		document.getElementById( rules[i][0] + "_error" ).innerHTML = "";
		
		if( !isset( input ) )
		{
			alert( "validatorError : the field " + rules[i][0] + " does not exist." );
			eroare("campu " + rules[i][0] + " nu e corect",rules[i][0] + "_error" );
			//hideLoadingDiv();
			clearTimeout( timeoutId );
		}
		
		validateField( input, rules[i][1], rules[i][2], rules[i][0] + "_error" );
		
	}	
	
	submitForm( );
	return false;
}


function submitForm(  )
{
	if( formWasValidated == 0 )
	{
		formObjGlobal.submit();
	}
	else
	{
		timeoutId = setTimeout(	"submitForm( )", 1000 ); 
	}
}


function setInvalid( input, error_id )
{
	eroare( input, error_id);
	//hideLoadingDiv();
	clearTimeout( timeoutId );
	document.getElementById(error_id).className = "errorBlock";
	input.className = inputErrorStyle;	
}	

function setValid( input, error_id )
{
	formWasValidated--;
	document.getElementById(error_id).className = "errorBlockHidden";
	input.className = inputNormalStyle;
}


function validateField( input, rule, length, error_id )
{
	
	switch( rule )
	{
		case 'a-z' :
					{
						if (length != "0," ){
							var rule1 = new RegExp("[a-z]{" + length + "}","g");
						}else{
							var rule1 = new RegExp("[a-z]+","g");
						}
						var rule2 = new RegExp("[0-9]{1,}","g");
						
						if( rule1.test(input.value) && !rule2.test(input.value) )
						{
							setValid( input, error_id );
						}
						else
						{
							setInvalid(	input, error_id );
						}
						break;
					}
		case '0-9' :
					{
						if (length != "0," ){
							var rule1 = new RegExp("[0-9]{" + length + "}","g");
						}else{
							var rule1 = new RegExp("[0-9]+","g");
						}
						var rule2 = new RegExp("[a-z]{1,}","g");
						
						
						if( rule1.test(input.value) && !rule2.test(input.value) )
						{
							setValid( input, error_id );
						}
						else
						{
							setInvalid( input, error_id );	
						}	
						break;
					}
		case 'a-z0-9' :
					{
						if (length != "0," ){
							var rule1 = new RegExp("[a-z0-9A-Z\ ]{" + length + "}","g");
						}else{
							var rule1 = new RegExp("[a-z0-9A-Z\ ]+","g");
						}
						
						if( rule1.test(input.value) )
						{
							setValid( input, error_id );
						}
						else
						{
							setInvalid( input, error_id );
						}
						break;
					}
		case 'a-z0-9orNull' :
					{
						var rule1 = new RegExp("([a-z0-9A-Z\ ]+)|()","g");
						
						if( rule1.test(input.value) )
						{
							setValid( input, error_id );
						}
						else
						{
							setInvalid( input, error_id );
						}
						break;
					}
		case 'email' :
					{
						var rule1 = new RegExp("^[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+$","g");
						
						if( rule1.test(input.value))
						{
							setValid( input, error_id );
						}
						else
						{
							setInvalid( input, error_id );	
						}	
						break;
					}
					
		case 'url' :
					{
						var exp ="^((http|https)\:\/\/)(www\.){0,1}[a-z0-9\_\-]+[\.a-z0-9\-\_]*\.[a-z]+$";
						var rule1 = new RegExp(exp,"g");
						
						if( rule1.test(input.value))
						{
							setValid( input, error_id );
						}
						else
						{
							setInvalid( input, error_id );	
						}	
						break;
					}
					
		case 'checkbox' :
					{
						if (input.checked == true){
							setValid( input, error_id );
						}else{
							setInvalid( input, error_id );
						}
						break;
					}
					
		case 'equals' :
					{
						if (document.getElementById(""+length).value == input.value){
							setValid( input, error_id );
						}else{
							setInvalid( input, error_id );
						}
						break;
					}
			
		case 'ii.ii' :
					{
						var rule1 = new RegExp("[0-9]{1,2}\.[0-9]{2}","g");
						
						if( rule1.test(input.value))
						{
							setValid( input, error_id );
						}
						else
						{
							setInvalid( input, error_id );	
						}	
						//setInvalid( input, error_id );
						break;
					}
					
		case 'date' :
					{
						var rule1 = new RegExp("^[0-9]{2}/[0-9]{2}/[0-9]{4}$","g");
						
						if( rule1.test(input.value))
						{
							setValid( input, error_id );
						}
						else
						{
							setInvalid( input, error_id );	
						}	
						//setInvalid( input, error_id );
						break;
					}
					
		case 'ajax' :
					{
							var aux = length.split("?");
							aux[1] = aux[1].replace( "|VALUE|", input.value );
							var params= aux[1];
							
							var xhr = createXMLHttpRequest( );
							xhr.open("POST", aux[0], true);
							xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
							xhr.setRequestHeader("Content-length", params.length);
							xhr.setRequestHeader("Connection", "close");
							
							var response;
							var noResponse = true;
							xhr.onreadystatechange = function( ) 
							{
								if (xhr.readyState==4) 
								{
									if (xhr.status==200) 
									{
										noResponse = false;	
										if( xhr.responseText == "1" )
										{
											setValid( input, error_id );
										}
										else
										{
											setInvalid( input, error_id );	
										}	
										
									}
								}
							}
							
							xhr.send(params);
							
							break;
					}			
		default    :	return false;	 			
		
	}
}

function displayLoadingDiv()
{
	document.getElementById( 'loadingDiv' ).style.display = 'block' ;
}

function hideLoadingDiv()
{
	document.getElementById( 'loadingDiv' ).style.display = 'none' ;		
}
