var ValidationErrors=new Array();
var ValidationGroups=new Array();

function print_r(theObj){
  if(theObj.constructor == Array ||
     theObj.constructor == Object){
    document.write("<ul>")
    for(var p in theObj){
      if(theObj[p].constructor == Array||
         theObj[p].constructor == Object){
document.write("<li>["+p+"] => "+typeof(theObj)+"</li>");
        document.write("<ul>")
        print_r(theObj[p]);
        document.write("</ul>")
      } else {
document.write("<li>["+p+"] => "+theObj[p]+"</li>");
      }
    }
    document.write("</ul>")
  }
}

function makeHttpRequest(url, callback_function, return_xml)
{
   var http_request = false;

   if (window.XMLHttpRequest) { // Mozilla, Safari,...
       http_request = new XMLHttpRequest();
       if (http_request.overrideMimeType) {
           http_request.overrideMimeType('text/xml');
       }
   } else if (window.ActiveXObject) { // IE
       try {
           http_request = new ActiveXObject("Msxml2.XMLHTTP");
       } catch (e) {
           try {
               http_request = new ActiveXObject("Microsoft.XMLHTTP");
           } catch (e) {}
       }
   }

   if (!http_request) {
       alert('Unfortunatelly you browser doesn\'t support this feature.');
       return false;
   }
   http_request.onreadystatechange = function() {
       if (http_request.readyState == 4) {
           if (http_request.status == 200) {
               if (return_xml) {
                   eval(callback_function + '(http_request.responseXML)');
               } else {
                   eval(callback_function + '(http_request.responseText)');
               }
           } else {
               alert('There was a problem with the request.(Code: ' + http_request.status + ')');
           }
       }
   }
   http_request.open('GET', url, true);
   http_request.send(null);
}

function validationResult(xmldoc)
{

var xml_results_items = xmldoc.getElementsByTagName('verification'); 		  		  
var exists=xml_results_items[0].getElementsByTagName('exists')[0].firstChild.nodeValue;	
var errfieldId=xml_results_items[0].getElementsByTagName('fieldid')[0].firstChild.nodeValue;
var field_name=xml_results_items[0].getElementsByTagName('field_name')[0].firstChild.nodeValue;
var form_name=xml_results_items[0].getElementsByTagName('form_name')[0].firstChild.nodeValue;
var val_type=xml_results_items[0].getElementsByTagName('type')[0].firstChild.nodeValue;

var valWarning=document.getElementById(errfieldId);	
var validated_field=document[form_name][field_name];


	if(exists=='1') 
	{
	validated_field.validationResult=false;				
	valWarning.innerHTML= '<a href="#" class="tt"><img src="/gfx/'+(valWarning.innerHTML.length==0?'que':'wrong')+'.gif" alt="" class="form" width="20" height="20"/><span class="tooltip"><span class="top"></span><span class="middle">This '+val_type+' exists in database <br /> Please input other one.</span><span class="bottom"></span></span></a>';
	}
	else
	{
	validated_field.validationResult=true;	
	valWarning.innerHTML="<img src='/gfx/ok.gif' alt='ok' class='form' /> ";		  		  		  
	}  		  
}
				
function checkField(type,value,idOfwarningField,field_name,form_name) {
request_string="inc/verification.php?"+type+"="+value+"&errorfieldId="+idOfwarningField+"&field_name="+field_name+"&form_name="+form_name;	
makeHttpRequest(request_string, 'validationResult',true);
}

function validateFormField()
{
fields=this.inputValidaionData;
form_name=this.formValidaionName;

var idOfwarningField="val_error_"+form_name+'_'+fields[0];

var field_value=document[form_name][fields[0]].value;
if(this.lastValue!=field_value||field_value==''||this.forceValidation==true)
{
this.forceValidation=false;	
this.lastValue=field_value;

var current_validation=true;
var current_length=0;

//field validation
//check if empty
if(fields[3]=='false'&&field_value=='')
{
		current_validation=false;
}
var skip_validation=false;
if(fields[3]=='true'&&field_value=='')
 	skip_validation=true;
 	
//check types
if(current_validation&&!skip_validation) 
switch(fields[1])
{
	case 'number_type': if(!IsNumeric(field_value)||field_value.length!=11||field_value.charAt(0)!='0') current_validation=false; break;
	case 'numeric_type': if(!IsNumeric(field_value)) current_validation=false; break;
	case 'email_type': if(!echeck(field_value)) current_validation=false; break;
	 
}

//check str restrictions (length)
if(current_validation&&!skip_validation) 
if(fields[4]!=0&&field_value!='')
{
	var current_length=field_value.length;
	
	if(field_value.length>fields[4])
	current_validation=false;	
}	

//check str restrictions (characters)
if(current_validation&&!skip_validation) 
if(fields[6]!=''&&field_value!='')
{
	var restrictionStr=fields[6];
	for(i=0;i<field_value.length;i++)
	{	
		chrToCheck=field_value.charAt(i);
	if(restrictionStr.indexOf(chrToCheck)=='-1')
		{		
		current_validation=false;
		break;
		}
	}
}

//check if the same in groups 
var run_group_next=false;
if(fields[5]!=0)
{
		
	if(ValidationGroups[form_name][fields[5]].length)
	{
	
	groupArray=ValidationGroups[form_name][fields[5]];			
	arraylength=groupArray.length;
		for(i=0;i<arraylength;i++)
		{
		var current_examing_field=groupArray[i];	
		
		if(i==0&&groupArray[i]==this)
			{
			groupArray[1].value='';	
			run_group_next=groupArray[1];	
			}
		
		if(i==1&&groupArray[i]==this&&groupArray[1].value!=groupArray[0].value)
			{
			//	alert(groupArray[1].value+' '+groupArray[0].value);
			current_validation=false;	
			}	
					
		
		}
	
	}

}

//ajax validation
if(current_validation&&!skip_validation)
{
var ajax_validation=false;	 
	if(fields[7]!=''&&field_value!='')
	{
		checkField(fields[7],field_value,idOfwarningField,fields[0],form_name);
		current_validation=false;
		ajax_validation=true;
	}
}


//get previous error info
//	obj.parentNode.removeChild(obj);
if(obj=document.getElementById(idOfwarningField))
var valWarning=obj;
else
{		
//generate warnings,ok  near fields
var warning_text='';
 var valWarning = document.createElement("span");
valWarning.className="val_error";
valWarning.id=idOfwarningField;

	//if validation failed generate warnings fields
	var txt;
	txt = '';
	
	var WarningText = document.createTextNode(txt);
	valWarning.appendChild(WarningText);
	var inputField = document[form_name][fields[0]];
	inputField.parentNode.insertBefore(valWarning,inputField.nextSibling);
}
	
	if(!current_validation) 
	{
	valWarning.innerHTML= '<a href="#" class="tt"><img src="/gfx/'+(ajax_validation?'bluethrobber':(valWarning.innerHTML.length==0||field_value==''?'que':'wrong'))+'.gif" alt="" class="form" width="20" height="20"/><span class="tooltip"><span class="top"></span><span class="middle">'+fields[2]+(ajax_validation?' <br />AJAX is Checking database ...<br /><b>Please wait</b>':'')+'</span><span class="bottom"></span></span></a>';
	this.validationResult=false;
	}
	else
	{
	this.validationResult=true;	
	valWarning.innerHTML="<img src='/gfx/ok.gif' alt='ok' class='form' /> ";
	}
	
	if(current_length!=0)
	valWarning.innerHTML='<span class="length">chars '+current_length+'</span>' + valWarning.innerHTML;

if(run_group_next!=false)
run_group_next.validate();

return true;
}
	
}

function validateForm(init,form_name,fields)
{
	if(init!==false) //validation init
	{
	var error_count=0;
	
		for(current_field=0;current_field<fields.length;current_field++) {
		
		if(!document[form_name][fields[current_field][0]])
		alert('error no field in form:'+form_name+', field:'+fields[current_field][0]);

		document[form_name][fields[current_field][0]].onkeyup = validateFormField;
		document[form_name][fields[current_field][0]].onblur = validateFormField;
		document[form_name][fields[current_field][0]].onchange = validateFormField;
		document[form_name][fields[current_field][0]].onpaste = validateFormField;
		
		document[form_name][fields[current_field][0]].validate = validateFormField;
		document[form_name][fields[current_field][0]].formValidaionName = form_name;
		document[form_name][fields[current_field][0]].lastValue = '';
		document[form_name][fields[current_field][0]].inputValidaionData = fields[current_field];
		document[form_name][fields[current_field][0]].validationResult=false;	
		document[form_name][fields[current_field][0]].forceValidation=false;
		
		
			//add to groups
			if(fields[current_field][5]!=0&&fields[current_field][5]!='')
			{
				
			if(!ValidationGroups[form_name]) ValidationGroups[form_name]= new Array();
			if(!ValidationGroups[form_name][fields[current_field][5]]) 
				ValidationGroups[form_name][fields[current_field][5]]= new Array();
			
			ValidationGroups[form_name][fields[current_field][5]].push(document[form_name][fields[current_field][0]]);
			
			}
		}
		
		
		for(current_field1=0;current_field1<fields.length;current_field1++) 
		{
			
		//alert(document[form_name][fields[current_field1][0]].name+ ' '+fields[current_field1][0]);	
		document[form_name][fields[current_field1][0]].validate();
				
		}
	
		
	return true;	
	}
	else			//check fields
	{
		
	//print_r(ValidationGroups);
	var form_validation=true;	
	for(current_field=0;current_field<fields.length;current_field++) {
		//alert(form_name+' '+fields[current_field][0]+' '+document[form_name][fields[current_field][0]].validationResult);
		if(!document[form_name][fields[current_field][0]].validationResult)
			{				
			form_validation=false;										
			}
	}
	
	//looking for submit
	if(form_validation)
		return true;
	else
		{
		var input_array=document[form_name].getElementsByTagName('input');
			for (i=0;i<input_array.length;i++)
			{			
			if(input_array[i].type=='image'||input_array[i].type=='submit')
				{
				var submit_field=input_array[i];	
				var txt = '';
				
				if(!document.getElementById(form_name+'errorid'))
				{
				var valWarning = document.createElement("span");
				valWarning.className="val_error";
				valWarning.id=form_name+'errorid';
				
				var WarningText = document.createTextNode(txt);
				valWarning.appendChild(WarningText);
				var inputField = submit_field;
				inputField.parentNode.insertBefore(valWarning,inputField.nextSibling);
				}
				else
				{
				var valWarning = document.getElementById(form_name+'errorid');	
				}
				
				valWarning.innerHTML= '<a href="#" class="tt"><img src="/gfx/que.gif" alt="" class="form" width="20" height="20"/><span class="tooltip"><span class="top"></span><span class="middle">There are still some <br /> errors, please <br />correct them</span><span class="bottom"></span></span></a>';			
				
				}
			}
				
		return false;
		}	
		
	}
}

function echeck(str) {

if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(str)){
return (true)
}
else
return (false)
		
}
	
function IsNumeric(sText)

{
   var ValidChars = "0123456789.";
   var IsNumber=true;
   var Char;

 
   for (i = 0; i < sText.length && IsNumber == true; i++) 
      { 
      Char = sText.charAt(i); 
      if (ValidChars.indexOf(Char) == -1) 
         {
         IsNumber = false;
         }
      }
   return IsNumber;
   
   }

var player_counter = 0;
function moreFields_player()
{

	player_counter++;
		
	var newFields = document.getElementById('readroot_player').cloneNode(true);
	newFields.id = '';
	newFields.style.display = 'block';
	var newField = newFields.childNodes;
	for (var i=0;i<newField.length;i++)
	{
		var theName = newField[i].name
		if (theName)
			newField[i].name = theName + player_counter;
	}
	var insertHere = document.getElementById('writeroot_player');
	insertHere.parentNode.insertBefore(newFields,insertHere);
	
	initFormValidation(true);
}

var error_additional_count=0;

function initFormValidation(init)
{

if(ValidationErrorsAdditional)
	if(ValidationErrorsAdditional.length)
	for(clean_count=0;clean_count<ValidationErrorsAdditional.length;clean_count++) {
		
		if(obj=document.getElementById(ValidationErrorsAdditional[clean_count]))
		obj.parentNode.removeChild(obj);
		if(obj=document.getElementById(ValidationErrorsAdditional[clean_count]))
		obj.parentNode.removeChild(obj);	
		
		}
		
	
	ValidationErrorsAdditional=new Array();
	//error_additional_count=0;
		
	var inputFields = document.getElementsByTagName('INPUT');
	var selectBoxes = document.getElementsByTagName('SELECT');
	
	var inputs = new Array();
	
	
	for(var no=0;no<inputFields.length;no++){
		inputs[inputs.length] = inputFields[no];
		
	}	
	error=0;
	
	for(var count=0;count<inputs.length;count++){
	if(inputFields[count].name=='contact_name[]')
		{
			if(!validate_field(inputFields[count],'','Player name here (forename, surname or both)'))
			error++;
			if(init==true)
			{	
			inputFields[count].onkeyup = initFormValidation;
			}		
		}

	if(inputFields[count].name=='contact_email[]')
		{
			if(!validate_field(inputFields[count],'email_type','Player correct email here'))
			error++;
			if(init==true)
			inputFields[count].onkeyup = initFormValidation;
		}
	if(inputFields[count].name=='contact_mobile[]')
		{
			if(!validate_field(inputFields[count],'number_type','Player mobile here<br/>(without spaces)<br/>i.e. 01111223344'))
			error++;
			if(init==true)
			inputFields[count].onkeyup = initFormValidation;
		}	

	}	
	return error;
}

var ValidationErrorsAdditional=new Array();

function validate_field(inputObject,type,message){

var current_validation=true;
var field_value=inputObject.value;

//field validation
//check if empty
if(field_value=='')
current_validation=false;

//check types
if(current_validation) 
switch(type)
{
	case 'number_type': if(!IsNumeric(field_value)) current_validation=false; break;
	
	case 'email_type': if(!echeck(field_value)) current_validation=false; break;
	 
}


//generate warnings,ok  near fields
error_additional_count++;
 var valWarning = document.createElement("span");
valWarning.className="val_error";
valWarning.id="val_error_add_"+error_additional_count;
ValidationErrorsAdditional.push("val_error_add_"+error_additional_count);

	//if validation failed generate warnings fields
	var txt;
	if(!current_validation) 
	{
	txt = 'wrong';
	}
	else
	txt = 'ok';
	
	var WarningText = document.createTextNode(txt);
	valWarning.appendChild(WarningText);
	var inputField = inputObject;
	inputField.parentNode.insertBefore(valWarning,inputField.nextSibling);

	if(txt=='ok')
	valWarning.innerHTML="<img src='/gfx/ok.gif' alt='ok' class='form' />";
	else		
	valWarning.innerHTML= '<a href="#" class="tt"><img src="/gfx/que.gif" alt="info" class="form" /><span class="tooltip"><span class="top"></span><span class="middle">'+message+'</span><span class="bottom"></span></span></a>';
return current_validation;		
}

