﻿function focusChangedTo(obj)
{
	focusedObj = obj;
}

function showHideErrorMsg(objID, boolHide)
{
	if (boolHide)
	{
		if (document.getElementById(objID))
		{
			document.getElementById(objID).style.display = 'none';
		}		
		return true;
	}
	else
	{
		if (document.getElementById(objID))
		{
			document.getElementById(objID).style.display = 'block';
		}		
		return false;
	}
}

function isDateSelect(obj)
{
	return ((obj.id.indexOf(DAY_ID) == 0) || (obj.id.indexOf(MONTH_ID) == 0) || (obj.id.indexOf(YEAR_ID) == 0))
		&& (obj.type.indexOf('select')>=0);
}

function testDateSelect(obj)
{
	var boolReturn = true;
	
	if (isDateSelect(obj))
	{
		var objBaseName = getDateSelectBaseName(obj);
		
		if (DAY_ID + objBaseName == focusedObj.id)
		{
			if (document.getElementById(MONTH_ID + objBaseName)) 
			{
				boolReturn =  boolReturn && getDateSelectValue(document.getElementById(MONTH_ID + objBaseName), null) > 0
			}
			if (document.getElementById(YEAR_ID + objBaseName))
			{
				boolReturn =  boolReturn && getDateSelectValue(document.getElementById(YEAR_ID + objBaseName), null) > 0
			}
		}
		else if (MONTH_ID + objBaseName == focusedObj.id)
		{
			if (document.getElementById(DAY_ID + objBaseName))
			{
				boolReturn = !(getDateSelectValue(document.getElementById(DAY_ID  + objBaseName), null) > 0)
			}
			
			if (!boolReturn)
			{
				if (document.getElementById(YEAR_ID + objBaseName))
				{
					boolReturn =  getDateSelectValue(document.getElementById(YEAR_ID + objBaseName), null) > 0
				}
			}
		}
		else
		{
			boolReturn = true;
		} 		
	}
	else
	{
		boolReturn = false;
	}
	return boolReturn;
}

function getDateSelectBaseName(obj)
{
	var objBaseName;
	
	switch(obj.id.substring(0,5))
	{
		case DAY_ID.substring(0,5):
			objBaseName = obj.id.substring(DAY_ID.length);
			break;    
		case MONTH_ID.substring(0,5):
			objBaseName = obj.id.substring(MONTH_ID.length);
			break;
		case YEAR_ID.substring(0,5):
			objBaseName = obj.id.substring(YEAR_ID.length);
			break;
		default:
			objBaseName = '';
	}
	
	return objBaseName;
}

function getDateSelectValue(obj, defVal)
{
	var locVal;
	if (obj)
	{
		locVal = obj.options[obj.selectedIndex].value;
		locVal = (parseInt(locVal)>0)?parseInt(locVal):null;
	}
	else
	{
		locVal = defVal;
	}	
	return locVal;
}

function objGetValue(obj)
{
	var objVal, localObj;
	var objPartName = '';
	var dd, mm, yyyy;
	
	if (isDateSelect(obj))
	{
		//select date		
		objPartName = getDateSelectBaseName(obj);
		
		dd = getDateSelectValue(document.getElementById(DAY_ID + objPartName), 1);
		mm = getDateSelectValue(document.getElementById(MONTH_ID + objPartName), 0);
		yyyy = getDateSelectValue(document.getElementById(YEAR_ID + objPartName), 1900);
		
		if ((dd>0) && (mm>0) && (yyyy>0))
		{
			objVal = new Date();
			objVal.setFullYear(yyyy, mm-1, dd);
		}
		else
		{
			objVal = '';
		}
		
	}
	else
	{
		objVal = '';	
		if (obj.type.indexOf('select')>=0)
		{
			// select type: select-one, select-multiple
			if (obj.type.indexOf('multiple')>=0)
			{
				for(var i=0; i<obj.length; i++)
				{
					if (obj.options[i].selected)
					{
						objVal = obj.options[i].value + ',';
					}				
				}
				if (objVal.length > 0)
				{
					objVal = objVal.substring(0,objVal.length-1);
				}
			}
			else
			{			
				objVal = obj.options[obj.selectedIndex].value;		
			}	
		}
		else
		{
			if ((obj.type == 'checkbox') || (obj.type == 'radio')) 
			{
				//input type: button, checkbox
				var i=0;
				while(document.getElementById(obj.name+i))
				{
					localObj = document.getElementById(obj.name+i);
					if (localObj.checked)
					{
						objVal = objVal + localObj.value + ',';
					}
					i++;
				}
				if (objVal.length > 0)
				{
					objVal = objVal.substring(0,objVal.length-1);
				}
			
			}
			else
			{
				/*
				input type: button, file, hidden, image, password, reset, submit, text
				button type: button, reset, submit
				textarea type: textarea
				*/
				objVal = obj.value;
			}
		}		
	}
	
	return objVal;
}

function objName(obj)
{	
	if (isDateSelect(obj))
	{
		return getDateSelectBaseName(obj);
	}
	else
	{
		return ((obj.name) && (obj.name.length>0))?obj.name:obj.id;
	}
}

function validationMandatory(obj)
{
	var objVal = String(objGetValue(obj));
	
	return showHideErrorMsg(objName(obj) + CHECK_MANDATORY, 
				((objVal.length>0) && (objVal.replace(/ /g, '') != '')));
}

function validationMin(obj, minVal)
{
	var objVal;
	
	if (isNaN(minVal))
	{
		objVal = objGetValue(obj);
		//alert(objVal);
	}
	else
	{
		objVal = Number(objGetValue(obj));
	}
	return showHideErrorMsg(objName(obj) + CHECK_MIN,
				(String(objVal).length == 0) || 
				(minVal <= objVal));
}

function validationMax(obj, maxVal)
{
	var objVal;
	
	if ((isNaN(maxVal)) || (isDateSelect(obj)))
	{
		objVal = objGetValue(obj);
	}
	else
	{
		objVal = Number(objGetValue(obj));
	}
	return showHideErrorMsg(objName(obj) + CHECK_MAX,
				(String(objVal).length == 0) || 
				(objVal <= maxVal));
}


function validationRegExp(obj, regExpStr)
{
	var objVal = String(objGetValue(obj));
	return showHideErrorMsg(objName(obj) + CHECK_REGEXP,
				(objVal.length == 0) ||
				objVal.toLowerCase().match(regExpStr));
}

function validationDate(obj)
{
	if (isDateSelect(obj))
	{
		var objVal = objGetValue(obj);
		var selMonth = getDateSelectValue(document.getElementById(MONTH_ID + getDateSelectBaseName(obj)), null);
		return showHideErrorMsg(objName(obj) + CHECK_DATE,
					(objVal.length == 0) ||
					(objVal.getMonth()+1 == selMonth));				
	}
}

function validationWidth(obj)
{
}

function validationWordCount(obj, maxWords)
{
	var objVal = String(objGetValue(obj));
	
	wordCount = (objVal.replace(/ /, '').length == 0)?0:objVal.replace(/[.!?]/, ' ').replace(/  /, ' ').replace(/  /, ' ').split(' ').length; 

	if (document.getElementById(objName(obj) + "CheckWords"))
	{
		document.getElementById(objName(obj) + "CheckWords").innerHTML = wordCount;
	}
	else
	{
		//alert('not found' + objName(obj) + "CheckWords");
	}
	return showHideErrorMsg(objName(obj) + CHECK_WORD_COUNT,
				(objVal.length == 0) ||				
				wordCount <= maxWords);	
}

function validationUKPostcode(obj)
{
	var objVal = String(objGetValue(obj)).toUpperCase();
	return showHideErrorMsg(objName(obj) + CHECK_UKPOSTCODE,
				(objVal.length == 0) ||
				objVal.match(REGEXP_UKPOSTCODE));
}

function validationUKMobile(obj)
{
	var objVal = String(objGetValue(obj));
	return showHideErrorMsg(objName(obj) + CHECK_UKMOBILE,
				(objVal.length == 0) ||
				objVal.replace(/[ \-\(\)]/g, '').replace(/\+44([0]?)/, '0').match(REGEXP_UKMOBILE));	
}

function validationUKPhone(obj)
{
	var objVal = String(objGetValue(obj));
	return showHideErrorMsg(objName(obj) + CHECK_UKPHONE,
				(objVal.length == 0) ||
				objVal.replace(/[ \-\(\)]/g, '').replace(/^\+44([0]?)/, '0').match(REGEXP_UKPHONE));
}

function validationEmail(obj)
{
	var objVal = String(objGetValue(obj));
	return showHideErrorMsg(objName(obj) + CHECK_EMAIL,
				(objVal.length == 0) ||
				objVal.match(REGEXP_EMAIL));
}

var validForm = true;
var focusedObj;
var CHECK_MANDATORY = 'validationMandatory';
var CHECK_MIN = 'validationMin';
var CHECK_MAX = 'validationMax';
var CHECK_REGEXP = 'validationRegExp';
var CHECK_DATE = 'validationDate';
var CHECK_WIDTH = 'validationWidth';
var CHECK_WORD_COUNT = 'validationWordCount';
var CHECK_UKPOSTCODE = 'validationUKPostcode';
var CHECK_UKPHONE = 'validationUKPhone';
var CHECK_UKMOBILE = 'validationUKMobile';
var CHECK_EMAIL = 'validationEmail';

var DAY_ID = 'dayOf';
var MONTH_ID = 'monthOf';
var YEAR_ID = 'yearOf';
var REGEXP_UKPOSTCODE = /(((^[BEGLMNS][1-9]\d?)|(^W[2-9])|(^(A[BL]|B[ABDHLNRST]|C[ABFHMORTVW]|D[ADEGHLNTY]|E[HNX]|F[KY]|G[LUY]|H[ADGPRSUX]|I[GMPV]|JE|K[ATWY]|L[ADELNSU]|M[EKL]|N[EGNPRW]|O[LX]|P[AEHLOR]|R[GHM]|S[AEGKL-PRSTWY]|T[ADFNQRSW]|UB|W[ADFNRSV]|YO|ZE)\d\d?)|(^W1[A-HJKSTUW0-9])|(^E1[W0-9])|(((^WC[1-2])|(^EC[1-4])|(^SW1))[ABEHMNPRVWXY])|(^EC50)|(^NW1W)|(^WC99))(\s*)?([0-9][ABD-HJLNP-UW-Z]{2}))$|(^GIR\s?0AA$)/;
var REGEXP_UKPHONE = /^0[1-9]\d{8,9}$/;
var REGEXP_UKMOBILE = /^07\d{9}$/;
var REGEXP_EMAIL = /^[a-z0-9!$'*+\-_]+(\.[a-z0-9!$'*+\-_]+)*@([a-z0-9]+(-+[a-z0-9]+)*\.)+([a-z]{2}|aero|arpa|biz|cat|com|coop|edu|gov|info|int|jobs|mil|mobi|museum|name|net|org|pro|travel)$/;
//var REGEXP_EMAIL = /^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)*\.(([0-9]{1,3})|([a-zA-Z]{2,3})|(aero|coop|info|museum|name))$/

//address search tool
var xmlHttp;
var requestURL;
var house;
var postcode;
var sA;
var addrIDsArr = new Array();

function Initialize() {

	if (window.XMLHttpRequest)
	{
		xmlHttp	= new XMLHttpRequest();
	}
	else if (window.ActiveXObject)
	{
		xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
	}
}

function hideErrMsg(objName)
{
	var tagPArr = document.getElementsByTagName("p");
	for(var i=0; i<=tagPArr.length; i++)
	{
		if(typeof tagPArr[i] == "object")
		{
			if (tagPArr[i].id.indexOf(objName) == "0")
			{
				tagPArr[i].style.display = 'none';	
			}
		}
	}
}

function setAddress(s) {
			sA = s.split(', ');
			if (document.getElementById(addrIDsArr[2])) 
			{
				document.getElementById(addrIDsArr[2]).value = sA[0];
				hideErrMsg(addrIDsArr[2]);
			}
			if (sA[1].toUpperCase() == sA[1]) {
				if (document.getElementById(addrIDsArr[4])) 
				{
					document.getElementById(addrIDsArr[4]).value = sA[1];
					hideErrMsg(addrIDsArr[4]);
				}
				if (sA.length > 2) {
					if (document.getElementById(addrIDsArr[5])) 
					{
						document.getElementById(addrIDsArr[5]).value = sA[2];
						hideErrMsg(addrIDsArr[5]);
					}
				}
			} else {
				if (document.getElementById(addrIDsArr[3])) 
				{
					document.getElementById(addrIDsArr[3]).value = sA[1];
					hideErrMsg(addrIDsArr[3]);
				}
				if (document.getElementById(addrIDsArr[4])) 
				{
					document.getElementById(addrIDsArr[4]).value = sA[2];
					hideErrMsg(addrIDsArr[4]);
				}
				if (sA.length > 3) 
				{
					if (document.getElementById(addrIDsArr[5])) 
					{
						document.getElementById(addrIDsArr[5]).value = sA[3];
						hideErrMsg(addrIDsArr[5]);
					}
				}
			}
			if (document.getElementById(addrIDsArr[6])) document.getElementById(addrIDsArr[6]).innerHTML = '';
}

function responseHandler() {
	var sOut, st;
	if ((xmlHttp.readyState == 4 || xmlHttp.readyState == 'complete')&&(xmlHttp.status == 200))
	{
		var str = xmlHttp.responseText;
		if (str.indexOf('single:') == 0) {
			sA = str.split('|');
			sA = sA[1].split('#');
			setAddress(sA[0]);
		} else {
			sOut = "<div>select your address</div>";
			sA = str.split('\n');
			for (var i=0; i<sA.length; ++i) {
				if (sA[i] != '') {
					st = sA[i].split('|');
					st = st[1].split('#');
					sOut = sOut + '<div><input type=\"checkbox\" onclick=\"javascript:setAddress(\''+st[0]+'\', this.checked);\" />'+st[0]+'</div>';
				}
			}
			if (document.getElementById(addrIDsArr[6])) document.getElementById(addrIDsArr[6]).innerHTML = sOut;
		}
	}
}

function SendQuerySearch() 
	{
	var theVar = arguments[0] ? arguments[0] : '';
	//House Name or Number
	addrIDsArr[0] = arguments[1] ? arguments[1] : 'searchhouse';
	//Postcode
	addrIDsArr[1] = arguments[2] ? arguments[2] : 'postcode';
	//Address Line 1
	addrIDsArr[2] = arguments[3] ? arguments[3] : 'address1';
	//Address Line 2
	addrIDsArr[3] = arguments[4] ? arguments[4] : 'address2';
	//Town
	addrIDsArr[4] = arguments[5] ? arguments[5] : 'address3';
	//County
	addrIDsArr[5] = arguments[6] ? arguments[6] : 'address4';
	//Box Select
	addrIDsArr[6] = arguments[7] ? arguments[7] : 'boxSelect';

	house = document.getElementById(addrIDsArr[0]).value;
	postcode = document.getElementById(addrIDsArr[1]).value.toUpperCase();
	document.getElementById(addrIDsArr[1]).value = postcode;
	
	if((house=='')||(postcode==''))
	{
		alert('Please enter both a housename or number and your postcode');
		//eval("document.getElementById('" + addrIDsArr[0] + "').focus();")
		document.getElementById(addrIDsArr[0]).focus();
		return false;
	}
	Initialize();
	if (xmlHttp != null)
	{
		xmlHttp.onreadystatechange = responseHandler;	
		requestURL = "/tools/qaSearch.asp?house=" + house + "&postcode=" + postcode + "&mode=search&moniker=";
		//document.location = requestURL;     // for testing
		xmlHttp.open('GET', requestURL, true);
		xmlHttp.send(null);
	}
}
