var form_controls = new Array(11);

form_controls[0] = new Array('answerMatrix', null, null, myMatrixValidation);

form_controls[1] = new Array('Salutation', null, null, myDropDown);	
form_controls[2] = new Array('First Name', null, null, string);
form_controls[3] = new Array('Last Name', null, null, string);
form_controls[4] = new Array('Day', null, null, myDropDown);
form_controls[5] = new Array('Month', null, null, myDropDown);
form_controls[6] = new Array('Year', null, null, myDropDown);
//form_controls[7] = new Array('Address', null, null, myDropDown);
form_controls[8] = new Array('Postcode', null, ajaxPaf, myPostcode);
form_controls[9] = new Array('Email', null, impound, myEmail);
form_controls[10] = new Array('Terms and conditions', null, null, myCheckbox);

function outputHTML(html, axArea)
{
	var dropHTML = html;
	x = document.getElementById(axArea);
	x.innerHTML = '';
	x.innerHTML = dropHTML;		
}

/*
 * Sub-Domain Input Validation - wfp_makeup_validation.js
 * 
 * Author:		Richard Stelling <richard(at)echo-data.co.uk>
 * 
 * Created: 	Thursday 31st January, 2008
 * Modified:	
 *
 * Notes:		See end of file for change log.
 *
 */

var pester = 0;

/*function myPreSubmit()
{
	var a = document.getElementById('Address');
	
//	return a.value == '-1'?"- Please select up to 5 make up brands\n":"";
	return "- Please select up to 5 make up brands\n";

}*/

function myOnFocus()
{
	//alert('Focus');
}
	
function myOnBlur()
{
	//alert('Blur');
}

function ajaxPaf()
{
	//alert('ajaxPaf()');
	//alert(document.reg.Postcode.value);
	createPAFValidationControl(document.reg.Postcode.value, 'dropdown_area', 1, 'form_select address', 'Address');
}	

function myDropDown(g, name)
{
	//alert("string");
	var e = gControls[g][0];
	//alert(e.value);
	return e.value == '-1'?"- Please pick an option from the menu "+name+"\n":"";
}

function myCheckbox(g, name)
{
	var e = gControls[g][0];
	
	//alert("> "+e.checked);
	
	return e.checked?"":"- You must accept the terms before continuing\n";
}

function myEmail(g, name)
{
	var e = gControls[g][0];

	var email_regexp = /[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/i;
	
	if(e.value == '')
	{
		return "- The field Email cannot be empty\n";
	}
	else if(!email_regexp.test(e.value))
	{
		return "- The field Email must contain a valid email address\n";
	}
	else
	{
		return "";
	}
}

function myPostcode(g, name)
{
	var e = gControls[g][0];

	var postcode_regexp =/[A-PR-UWYZ0-9][A-HK-Y0-9][AEHMNPRTVXY0-9]?[ABEHMNPRVWXY0-9]? {0,2}[0-9][ABD-HJLN-UW-Z]{2}|GIR 0AA/i;
	
	if(e.value == '')
	{
		return "- The field Postcode cannot be empty\n";
	}
	else if(!postcode_regexp.test(e.value))
	{
		return "- The field Postcode must contain a valid UK postcode\n";
	}
	else
	{
		return "";
	}
}

/*
 * axpaf.js
 * Author: Richard Stelling
 *
 * Created: July 2007
 * Modified July 16, 2007
 *
 * NOTES: 
 *
 */

/* Globals */
var gRequest = undefined;
var gAjaxArea = undefined;

/* Settings */
var controlSize = 1;
var controlClass = undefined;
var controlID = undefined;

function writeIntoAjaxArea()
{
	var pafXML = gRequest.responseXML;
/*	var dropHTML = "<select class=\"form_select address\" id=\"Address\" name=\"Address\" size=\""+controlSize+"\"><option label=\"Select one...\" value=\"-1\">Select one...";
	
	for(var i = 0; i < pafXML.getElementsByTagName('AddressListItem').length; i++)
	{
		//alert('['+i+']'+pafXML.getElementsByTagName('AddressListItem')[i].childNodes[0].firstChild.nodeValue);
		//alert('['+i+']'+pafXML.getElementsByTagName('AddressListItem')[i].childNodes[1].firstChild.nodeValue);
		
		dropHTML += "<option label=\""+pafXML.getElementsByTagName('AddressListItem')[i].childNodes[0].firstChild.nodeValue.substr(9)+"\" value=\""+pafXML.getElementsByTagName('AddressListItem')[i].childNodes[1].firstChild.nodeValue+"\">"+pafXML.getElementsByTagName('AddressListItem')[i].childNodes[0].firstChild.nodeValue.substr(9)+""; 
		
	}
	dropHTML += "<\/select>";
	
	//example - http://www.quirksmode.org/js/layerwrite.html
	//x = document.getElementById(gAjaxArea);
	//x.innerHTML = '';
	//x.innerHTML = dropHTML;
	outputHTML(dropHTML, gAjaxArea); //implimented on page
	
	return true;
*/
	//var dropHTML = '<select class="form_select address" name="Address" size="1">	<option value="-2">Select one...2 	</select>';
	//outputHTML(dropHTML, gAjaxArea); //implimented on page
	
	//clear old item if any
	document.forms[0].elements["Address"].options.length = 0;
	
	option = document.createElement("OPTION");
	option.text = 'Select one...';
	option.value = '-1';
	
	try
	{
		document.forms[0].elements["Address"].add(option, null);
	}
	catch(ex)
	{
		// For IE.
		document.forms[0].elements["Address"].add(option);
	}
	
	for(var i = 0; i < pafXML.getElementsByTagName('AddressListItem').length; i++)
	{
		option = document.createElement("OPTION");
		option.text = pafXML.getElementsByTagName('AddressListItem')[i].childNodes[0].firstChild.nodeValue.substr(9);
		option.value = pafXML.getElementsByTagName('AddressListItem')[i].childNodes[1].firstChild.nodeValue;
		
		try
		{
			document.forms[0].elements["Address"].add(option, null);
		}
		catch(ex)
		{
			// For IE.
			document.forms[0].elements["Address"].add(option);
		}
	}
	
}

function createPAFValidationControl(postcode, divy, cSz, cCl, cId)
// postcode : String
// divy : String - div id
// cSz : Integer - control size
// cCl : String - control class
// cId : String - control ID
{
	gRequest = getHTTPObject();
	gAjaxArea = divy;
	
	/* Set Settings */
	controlSize = cSz?cSz:controlSize; 
	controlClass = cCl?cCl:controlClass;
	controlID = cId?cId:controlID;
	
	var regexpPC = /[A-PR-UWYZ0-9][A-HK-Y0-9][AEHMNPRTVXY0-9]?[ABEHMNPRVWXY0-9]? {0,2}[0-9][ABD-HJLN-UW-Z]{2}|GIR 0AA/i;
	
	if (gRequest && regexpPC.test(postcode)) 
	// only send if a valid request is available
	{ 
		gRequest.onreadystatechange = checkXMLHttpState;
		
		var reqStr = "postcode="+postcode+"&";
		//request.open("POST", "http://89.234.22.180/paf/addresslist.pce", true); 
		gRequest.open("POST", "/paf/addresslist.pce", true); 
  		gRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
		//alert(request.status);
		gRequest.send(reqStr);
 	 		
 	 }
 	 else if(!postcode)
 	 {
 	 	alert("Please enter a valid postcode.");
 	 }
 	 else
 	 {
 		 alert("'"+postcode+"' is not a valid postcode.")
 	 }
}
 
 /* Helper Functions */
 
function getHTTPObject()
// Create a cross platform XMLHttp Object
// Returns an object on success and false on failure
{ 
	// cross browser XMLHttpRequest Object
	var xhr = false; 
	if (window.XMLHttpRequest) { 
		xhr = new XMLHttpRequest(); 
	} else if (window.ActiveXObject) { 
		try { 
			xhr = new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) { 
			try { 
				xhr = new ActiveXObject("Microsoft.XMLHTTP"); 
			} catch(e) { 
				xhr = false; 
			} 
		} 
	}
	
	return xhr; 
} 

function checkXMLHttpState(state)
{
	if(gRequest.readyState == 4)
	{
		writeIntoAjaxArea();
	}
}

function SetImageData(pos, impObj, imageObj)
{	
	//Debug
//	alert('DEBUG: pos:'+pos+', impObj value:'+impObj.value+', new value: '+buttonData[pos][2]);
//	alert(pos);
//	alert(impObj.value);
	
//	alert(imageObj.src.indexOf(buttonData[pos][0]));
//	alert(imageObj.src);
//	alert(buttonData[pos][0]);
	
	//Set value	
	impObj.value = (imageObj.src.indexOf(buttonData[pos][0]) >= 0)?buttonData[pos][2]:'';
	
//	alert(impObj.value);
	
	//Change image
	imageObj.src = (imageObj.src.indexOf(buttonData[pos][0]) >= 0)?buttonData[pos][1]:buttonData[pos][0];
	
// 	if(debug == 'on')
// 	{
// 		document.aForm.debug.value = 'Debug: ';
// 		document.aForm.debug.value += document.aForm.answer_0.value+', ';
// 		document.aForm.debug.value += document.aForm.answer_1.value+', ';
// 		document.aForm.debug.value += document.aForm.answer_2.value+', ';
// 		document.aForm.debug.value += document.aForm.answer_3.value+', ';
// 		document.aForm.debug.value += document.aForm.answer_4.value+', ';
// 		document.aForm.debug.value += document.aForm.answer_5.value+', ';
// 		document.aForm.debug.value += document.aForm.answer_6.value+', ';
// 		document.aForm.debug.value += document.aForm.answer_7.value+', ';
// 		document.aForm.debug.value += document.aForm.answer_8.value;
// 	}
	
	return 0;	
}



/*
 * Input Validation - validate.js
 * 
 * Author:		Richard Stelling <richard(at)echo-data.co.uk>
 * 
 * Created: 	Tuesday 22nd January, 2008
 * Modified:	
 *
 * Notes:		See end of file for change log.
 *
 */
 
 /* Globals */
 var gControls = new Array();
 var preSubmitFunc = null;
 
 /* Functions */
 function initialize_page(form, controls, presubmit)
 /* IN:	form - form object to override submit etc
 		controls - 2d array of `form` controls with focus/blur funtions to attatch
 	OUT: n/a
 	SET: internal arrays, events
 */
 {
 	//controls = new Array('firstname');
 
 	//alert("init()");
 	
 	//alert("Paramiters: "+form);
 	
 	//get object ref
 	var f = document.getElementById(form);
 	f.onsubmit = formSubmit;

	//preSubmitFunc = presubmit;

	//for (var i in f.elements[0]) 
	for (var i = 0; i < f.elements.length; i++) 
	{
		for(var c in controls)
		{
			//alert(controls[c]+" --- "+f.elements.length+" : ("+i+") "+f.elements[i].name);
			//alert(form+" ("+f.elements.length+"/"+i+") "+f.elements[i].name);
			
			if(f.elements[i].name == controls[c][0]) //add to array
			{
				if(controls[c][1])
				{
					f.elements[i].onfocus = controls[c][1]; //set onfocus event
				}
				
				if(controls[c][2])
				{
					f.elements[i].onblur = controls[c][2]; //set onblur event
				}
				
				gControls[gControls.length] = new Array(f.elements[i], controls[c][3]);
				
				//alert("gControls.length: "+gControls.length);
				//alert("gControls.name: "+gControls[i].name);
				//alert("controls.length: "+controls.length);
			}
		}
	}
}
 
/* Type Functions */ 

function string(g, name)
{
	//alert("string");
	var e = gControls[g][0];
	
	return e.value.length > 0?"":"- "+name+" field must not be empty\n";
}

function number(g)
{
	alert("number");
}

function bool(g)
{
	alert("bool");
}

function spanish_dni(g)
{
	var f = gControls[g][0];
	var e = new String;
	e = f.value;
	
//	e = e.toLowerCase();
//	alert(e); return;
	
	var checksum = ['T', //0
					'R',
					'W',
					'A',
					'G',
					'M',
					'Y',
					'F',
					'P',
					'D',
					'X',
					'B',
					'N',
					'J',
					'Z',
					'S',
					'Q',
					'V',
					'H',
					'L',
					'C',
					'K',
					'E']; //22
					
	if(e.match(/^X\-*[0-9]{7,7}\-*[RWAGMYFPDXBNJZSQVHLCKE]{1,1}$|^[0-9]{8,8}\-*[RWAGMYFPDXBNJZSQVHLCKE]{1,1}$/i))
	//if(!validateObject.val.match(/[^X\-*[0-9]{7,7}|^[0-9]{8,8}]\-*[RWAGMYFPDXBNJZSQVHLCKE]{1,1}$/i))
	{
		var str1 = e.replace(/\-/g,""); //remove hyphens
		var str2 = "";
		var str3 = "";
		
		str1 = str1.toUpperCase();
		
		//alert("REMOVED: "+str1);
		
		switch (str1.charAt(0))
		{
			case 'X':
			case 'x': //immigrant
				str2 = str1.substring(1,8);
				str3 = str1.substring(8,9);
			break;
			
			default: 
				str2 = str1.substring(0,8);
				str3 = str1.substring(8,9);
		}
		
		//Cast to number divide by 23
		var myNumber = Number(str2)%23;
		
		//alert("Number: "+myNumber+", Letter: "+checksum[myNumber]+", Entered Letter: "+str3);
		
		//var myNumber = str1.charAt(1)
		if(checksum[myNumber] != str3)
		{
			return "bad check sum";
		}
		else
		{
			return "";
		}
	}
	else
	{
		return "other error";
	}			
}

function impound()
{
	var impoundRequest = getHTTPObject();
	var requestStr = "";
	
	for(var i = 0; i < document.forms[0].elements.length; i++)
	{
		//alert("Name: "+document.forms[0].elements[i].name+", Value: "+document.forms[0].elements[i].value);
		requestStr += document.forms[0].elements[i].name+"="+document.forms[0].elements[i].value+"&";
	}
		
	impoundRequest.open("POST", "/impound.cgi", true); 
  	impoundRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
	impoundRequest.send(requestStr);
}

/* Helper */
 
function formSubmit()
{
	//alert("formSubmit()");

	var errStr = new String('');
	var anchor = '';
	
	for(var g in gControls)
	{
		errStr += gControls[g][1](g,gControls[g][0].name);
		anchor = '#registration';
	}
	
 	if(errStr.match(/forget/ig)) //hack
 	{
		anchor = '#brands';
 	}
	
	if(errStr.length > 2)
	{
		if(anchor)
		{
			document.location.href = anchor;
		}
		
		alert(errStr);
		return false;
	}
	else
	{
		if(pester >= 1)
		{
			return true;
		}
		else
		{
			pester++;
			
			anchor = '#surveys';
			
			if(anchor)
			{
				document.location.href = anchor;
			}
			
			alert('Be sure to fill in all boxes that interest you (click SUBMIT again to proceed).');
			return false;
		}
	}
}