var fieldArray=''; 	//array of fields ids for validation;set field id as:id='first_name'
var out_single='out_single';
var message='';		//multiple message of validation
var output_type='';	//config type of output(single_alert,multiple_alert,single_message,multiple_message)
var output_field='';
var no_empty_field;
var out_fieldArray='';
var out_messageArray='';
var single_msg='';
var color='';
var stag='';
var etag='';
var current_field='';
//function to configure output
function config(out_type,out_field,color_out,class_out)
{
	clear();
	output_type=out_type;
	output_field=out_field;
	color_='color='+color_out;
	class_='class='+class_out;
}
function output(focus_field)
{
		var res='true';
		current_field = out_fieldArray.split(",");
		focus_field = focus_field.split(",");
		j=0;
		while(out_fieldArray.search(focus_field[j])<0){
			j++;
			if(focus_field.length==j) break;
		}
		focus_field=focus_field[j];	
		current_message= out_messageArray.split(",");		
		switch (output_type) {
			case 'multiple_alert':
				if (current_message.length >= 2) {
					alert(current_message[0]);
					document.getElementById(focus_field).focus();
					res='false';
				}
				break;
			case 'single_alert':
				for (i = 0; i < current_message.length; i++)
			    { 
					if (current_message.length >= 2) {
						single_msg += current_message[i] + '\n';
					}
		        }			
				if (single_msg != '') {
					alert(single_msg);
					document.getElementById(focus_field).focus();
					res='false';
				}				
				break;
			case 'multiple_message':
				for(e=0; e<=current_message.length-2; e++){
					if (current_message.length >= 2) {
						val=document.getElementById('out_'+current_field[e]).innerHTML;
						if(val.length==0){
							document.getElementById('out_'+current_field[e]).innerHTML =				
							current_message[e];	
						}
						document.getElementById(focus_field).focus();
						res='false';
					}
		        }					
				break;					
			case 'single_message':
				cu='';
				for (i = 0; i < current_message.length; i++)
			    { 
					if (current_message.length >= 2) {
						if(current_field[i]==focus_field) cu='>>';
						else cu='&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
						single_msg += cu+current_message[i] + '<br>';
						cu='';
					}
		        }			
				if (single_msg != '') {
					document.getElementById(out_single).innerHTML=single_msg;
					document.getElementById(focus_field).focus();
					res='false';
				}			
				break;									
		}
		return res;
}
//function to clear output field
function clear()
{
	if (output_type == 'multiple_message') {
		for (i = 0; i<=current_field.length-1; i++) {
			if(current_field[i]!=''){
				document.getElementById('out_' + current_field[i]).innerHTML = '';
			}
		}
	}
	if (output_type == 'single_message') {	
		document.getElementById(out_single).innerHTML = '';	
	}
	current_field='';
	single_msg='';
	fieldArray=''; 	
	out_fieldArray='';
	out_messageArray='';
	current_message="";
	stag='';
	etag='';
}
//set fields in array and go to validation function

function validateField(fields, valide, msg){
	fieldArray = '';
	fieldArray = fields.split(",");
	message = msg;
	switch (valide) {
		case 'req':
			empty();
			break;
		case 'email':
			email();
			break;
		case 'phone':
			phone(value);
			break;
		case 'numaric':
			phone(value);
			break;
		case 'max':
			for (p = 0; p < fieldArray.length; p++) {
				maxim(fieldArray[p]);
			}	
			break;
		case 'min':
			for (p = 0; p < fieldArray.length; p++) {
				minim(fieldArray[p]);
			}		
			break;
		case 'comp':
			for (p = 0; p < fieldArray.length; p++) {
				compare(fieldArray[p]);
			}
			break;
		case 'available':
			field = fieldArray[i];
			avail(field);
			break;
	}
}
//function used for output validation message
function setOutPut(valideMsg,field1,field2)
{	
	   if (field1.indexOf('_') >= 0) {
			var field_msg1 = field1.replace("_", " ");
			focus_field1=field1;			
		}
		else{
			var field_msg1 = field1;
			focus_field1=field1;
		}
	   if (field2.indexOf('_') >= 0) {
			var field_msg2 = field2.replace("_", " ");
			focus_field2=field2;
		}
		else{
			var field_msg2 = field2;
			focus_field2=field2;
		}
		if(focus_field1=='') field=focus_field2;
		else field=focus_field1;
		if(output_type=="multiple_message" || output_type=="single_message")
		{
			stag='<font '+color_+' '+class_+'>';
			etag='</font>';
		}
		switch(valideMsg)
		{
			case 'req':
				message=stag+'Please enter '+field_msg1+etag;
				break;
			case 'valide':
				message=stag+field_msg1+' is not valide'+etag;
				break;
			case 'numaric':
				message=stag+'Please enter numaric value for '+field_msg1+etag;
				break;
			case 'max':
				message=stag+'Maximum '+field2+' charactors are allowed for '+field_msg1+etag;
				break;
			case 'min':
				message=stag+'Minimum '+field2+' charactors must enter for '+field_msg1+etag;
				break;										
			case 'comp':
				message=stag+field_msg2+' and '+field_msg1+' are not matching'+etag;
				break;
			case 'available':
				message=stag+field_msg1+' is not available'+etag;
				break;															
		}
		out_messageArray+=message+',';
		out_fieldArray+=field+',';	
}
function empty()
{
	for(i=0;i<fieldArray.length;i++)
	{
		//alert(fieldArray[i]);
		value=document.getElementById(fieldArray[i]).value;
		if(value=='')
		{
			setOutPut('req',fieldArray[i],'');
		}
 	}
}
function compare(comp_field)
{
		compval=comp_field;
		compArray=compval.split(":");
		value1=document.getElementById(compArray[0]).value;
		value2=document.getElementById(compArray[1]).value;
		if(value1!=value2)
		{
			setOutPut('comp',compArray[1],compArray[0]);
		}
}


function email()
{
	for (i = 0; i < fieldArray.length; i++) {
		email_valide = 'valide'
		str = document.getElementById(fieldArray[i]).value;
		var at = "@"
		var dot = "."
		var lat = str.indexOf(at)
		var lstr = str.length
		var ldot = str.indexOf(dot)
		if(str!='')
		{
				if (str.indexOf(at) == -1) {
					email_valide = 'invalide';
				}
				
				if (str.indexOf(at) == -1 || str.indexOf(at) == 0 || str.indexOf(at) == lstr) {
					email_valide = 'invalide';
				}
				
				if (str.indexOf(dot) == -1 || str.indexOf(dot) == 0 || str.indexOf(dot) == lstr) {
					email_valide = 'invalide';
				}
				
				if (str.indexOf(at, (lat + 1)) != -1) {
					email_valide = 'invalide';
				}
				
				if (str.substring(lat - 1, lat) == dot || str.substring(lat + 1, lat + 2) == dot) {
					email_valide = 'invalide';
				}
				
				if (str.indexOf(dot, (lat + 2)) == -1) {
					email_valide = 'invalide';
				}
				
				if (str.indexOf(" ") != -1) {
					email_valide = 'invalide';
				}
				
				if (email_valide == 'invalide') {
					setOutPut('valide', fieldArray[i],'');
				}
		}
	}
}	
function phone()
{
	for(i=0;i<fieldArray.length;i++)
	{
		value=document.getElementById(fieldArray[i]).value;
		if(value=='')
		{
			setOutPut('req',fieldArray[i],'');
		}
 	}
}
function numaric()
{
	for(i=0;i<fieldArray.length;i++)
	{
		value=document.getElementById(fieldArray[i]).value;
		if(value=='')
		{
			setOutPut('req',fieldArray[i],'');
		}
 	}
}
function avail()
{
	for(i=0;i<fieldArray.length;i++)
	{
		value=document.getElementById(fieldArray[i]).value;
		if(value=='')
		{
			setOutPut('req',fieldArray[i],'');
		}
 	}
}
function maxim(comp_field)
{
		compval=comp_field;
		compArray=compval.split(":");
		value=document.getElementById(compArray[0]).value;
		max_val=compArray[1];
		if(value.length>max_val)
		{
			setOutPut('max',compArray[0],max_val);
		}
}
function minim(comp_field)
{
{
		compval=comp_field;
		compArray=compval.split(":");
		value=document.getElementById(compArray[0]).value;
		min_val=compArray[1];
		if(value.length<min_val && value.length>0)
		{
			setOutPut('min',compArray[0],min_val);
		}
}
}