
var dtCh= "/";
var minYear=1900;
var maxYear=2100;

function isInteger(s){
	var i;
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    return true;
}

function stripCharsInBag(s, bag){
	var i;
    var returnString = "";
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function daysInFebruary (year){
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}
function DaysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
		if (i==2) {this[i] = 29}
   } 
   return this
}

function isDate(pElement){
	var reTestString = /[-.,]/ig;
	var dtStr = pElement.value;
	dtStr = dtStr.replace(reTestString, '/');
	if (dtStr.substr(1, 1) == '/') {
		dtStr = '0' + dtStr;
	}
	if (dtStr.substr(4, 1) == '/') {
		dtStr = dtStr.substring(0,3) + '0' + dtStr.substring(3, dtStr.length);
	}
	if (dtStr.length < 10) {
		if (dtStr.substring(dtStr.length-2, dtStr.length) < 10)
			dtStr = dtStr.substring(0,6) + '20' + dtStr.substring(6)
		else
			dtStr = dtStr.substring(0,6) + '19' + dtStr.substring(6);
	}
	var daysInMonth = DaysArray(12)
	var pos1=dtStr.indexOf(dtCh)
	var pos2=dtStr.indexOf(dtCh,pos1+1)
	var strDay=dtStr.substring(0,pos1)
	var strMonth=dtStr.substring(pos1+1,pos2)
	var strYear=dtStr.substring(pos2+1)
	strYr=strYear
	if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
	if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
	}
	month=parseInt(strMonth)
	day=parseInt(strDay)
	year=parseInt(strYr)
	if (pos1==-1 || pos2==-1){
		return false
	}
	if (strMonth.length<1 || month<1 || month>12){
		return false
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
		return false
	}
	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
		return false
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
		return false
	}
pElement.value = dtStr;
return true
}

//--

function getFormElements(pElement, formElements) {
	var oElement = null;
	var j;
	for (j=0; j<(pElement.childNodes.length); j+=1) {
		oElement = pElement.childNodes[j];
		if (oElement.nodeType == 1) {
			if (oElement.tagName == 'INPUT' || oElement.tagName == 'TEXTAREA' || oElement.tagName == 'SELECT') {
				if (oElement.type != 'submit' && oElement.type != 'reset') {
					if (oElement.id != '')
	 					formElements[formElements.length] = oElement.id;
				}
			}
		}
		getFormElements (oElement, formElements);		
	}
}

function requiredField (fieldName, pArray) {
	var j;
	if (pArray.length > 1) {
		for (j=1; j<(pArray.length); j+=1) {
			if (fieldName == pArray[j])
				return true;
		}
	}
	return false;
}

function checkEmail(pEmailAddress) {
	var reTestString = /[-,a-z,A-Z,0-9,.,_]+@[-,a-z,A-Z,0-9,.,_]+\.[a-z,A-Z]+/i;
	if (reTestString.test(pEmailAddress))
		return true
	else
		return false;
}

function checkMoney(pElement) {
	var pAmount = pElement.value;
	var reTestString = /\d+[.]\d\d/i;

	if (pAmount.lastIndexOf('.') == -1) {
		pAmount = pAmount + '.00';
	}

	if (pAmount.lastIndexOf('.') == pAmount.length-1) {
		pAmount = pAmount + '00';
	}

	if (pAmount.lastIndexOf('.') == pAmount.length-2) {
		pAmount = pAmount + '0';
	}

	if (reTestString.test(pAmount)) {
		pElement.value = pAmount;
		return true
	}
	else
		return false;
}


function inputType (pElement) {
	 if (pElement.id.substring(0,5)=='email')
		 return 'email';
	 if (pElement.id.substring(0,4)=='date')
		 return 'date';
	 if (pElement.id.substring(0,5)=='money')
		 return 'money';
 
 	return '';
}


function showFormError(pElement) {
	pElement.className = "formError";
	pElement.focus();
}


function validateForm(pElement) {
	var formElements =  new Array();
	var oElement;
	var i;
	var valid = true;
	if (document.all)
		getFormElements(pElement, formElements)
	else
		getFormElements(pElement.parentNode, formElements);
	for (i=0; i<(formElements.length); i+=1) {
		if (locateElement(formElements[i])) {
			oElement = locateElement(formElements[i]);
			if (oElement.className == 'formError')
				oElement.className = 'formInput';
		}
	}
	for (i=0; i<(formElements.length); i+=1) {
		if(locateElement(formElements[i]) && valid) {
		
			oElement = locateElement(formElements[i]);
			eval ('if (window.validate' + oElement.id + ') {if (validate' + oElement.id + '(oElement)) {showFormError(oElement);alert(validate' + oElement.id + '(oElement));valid=false}}');

			if (oElement.tagName == 'SELECT') {
				if (oElement.options[0].selected && requiredField(oElement.id, validateForm.arguments)) {
					showFormError(oElement);
					alert ('Please enter highlighted field.');
					valid = false;
				}
			}
			
			if (oElement.tagName == 'INPUT') {
				if (oElement.type == 'text' || oElement.type == 'password') {
					if (trim(oElement.value).length == 0 && requiredField(oElement.id, validateForm.arguments)) {
						oElement.value = '';
						showFormError(oElement);					
						alert ('Please enter highlighted field.');
						valid = false;
					}
					if (oElement.value.length > 0 && inputType(oElement) == 'email') {
						if (!checkEmail(oElement.value)) {
							showFormError(oElement);
							alert ('Please enter a valid Email address (eg. user@company.com)');
							valid = false;
						}
					}
					if (oElement.value.length > 0 && inputType(oElement) == 'date') {
						if (!isDate(oElement)) {
							showFormError(oElement);
							alert ('Please enter a valid date (DD/MM/YYYY)');
							valid = false;
						}
					}
					if (oElement.value.length > 0 && inputType(oElement) == 'money') {
						if (!checkMoney(oElement)) {
							showFormError(oElement);
							alert ('Please enter a valid monetary value');
							valid = false;
						}
					}

				}
			}
			
			if (oElement.tagName == 'INPUT') {
				if (oElement.type == 'file') {
					if (oElement.value.length == 0 && requiredField(oElement.id, validateForm.arguments)) {
						showFormError(oElement);
						alert ('Please enter highlighted field.');
						valid = false;
					}
				}
			}
			
			if (oElement.tagName == 'TEXTAREA') {
				if (oElement.value.length == 0 && requiredField(oElement.id, validateForm.arguments)) {
					showFormError(oElement);					
					alert ('Please enter highlighted field.');
					valid = false;
				}
			}
		}
	}
	if (valid) {
		return true;
	}
	else {
		return false;
	}
}

// --- 

function hiddenElements () {
	document.write ('<input type="hidden" name="URL" id="URL" value="' + document.URL + '">');
	document.write ('<input type="hidden" name="siteID" id="siteID" value="' + sSite + '">');
	document.write ('<input type="hidden" name="guid" id="guid" value="' + sGUID + '">');
}

function clearOptions() {
	sOption = '';
}

function addOption(pValue, pText) {
	sOption = sOption + '<option value="' + pValue + '">' + pText + '</option>';
}

function togglePurpose() {
if (locateElement('loanPurpose').options[getOption('loanPurpose')].value == 'Other') {
	locateElement('loanPurposeText').style.display = 'block';
	locateElement('loanPurposeText').disabled = false
	}
else {
	locateElement('loanPurposeText').style.display = 'none';
	locateElement('loanPurposeText').disabled = true;
	}
}

function toggleStatus() {
if (locateElement('status').options[getOption('status')].value == 'Homeowner') {
	locateElement('valuation').style.display = 'block';
	locateElement('valuation').disabled = false;
	locateElement('valuationLabel').style.display = 'block';
	locateElement('mortgage').style.display = 'block';
	locateElement('mortgage').disabled = false;
	locateElement('mortgageLabel').style.display = 'block';
	}
else {
	locateElement('valuation').style.display = 'none';
	locateElement('valuation').disabled = true;
	locateElement('valuationLabel').style.display = 'none';
	locateElement('mortgage').style.display = 'none';
	locateElement('mortgage').disabled = true;
	locateElement('mortgageLabel').style.display = 'none';
}
}


function resetDate(pElement) {
	if (pElement.value == 'dd/mm/yyyy')
		pElement.value = '';
}

function validateconfirmEmail(pElement) {
	if (trim(pElement.value) == '')
		return "Please enter highlighted field.";
	if (pElement.value != locateElement('emailAddress').value)
		return "Confirm Email Address must match Email Address.";
}

function validatevaluation(pElement) {
	if (locateElement('status').options[getOption('status')].value == 'Homeowner') {
		if (trim(pElement.value) == '')
			return "Please enter highlighted field.";
	}
}

function validatemortgage(pElement) {
	if (locateElement('status').options[getOption('status')].value == 'Homeowner') {
		if (trim(pElement.value) == '')
			return "Please enter highlighted field.";
	}
}

function setOptions(pType) {
	clearOptions();
	switch(pType) {
		case 'yesNo':
			addOption ('',  'Please Select');
			addOption ('Y', 'Yes');
			addOption ('N', 'No');
			break;
		case 'title':
			addOption ('',  'Please Select');
			addOption ('Mr.', 'Mr.');
			addOption ('Mrs.', 'Mrs.');
			addOption ('Miss.', 'Miss');
			addOption ('Dr.', 'Dr.');
			addOption ('Prof.', 'Prof.');
			break;
		case 'employment':
			addOption('', 'Please Select');
			addOption('employed', 'Employed');
			addOption('self-employed', 'Self-Employed');
			addOption('retired', 'Retired');
			addOption('not working', 'Not Working');
			addOption('disabled', 'Disabled');
			break;
		case 'status1':
			addOption ('',  'Please Select');
			addOption ('Homeowner', 'Homeowner');
			addOption ('Living with parents', 'Living with Parents');
			addOption ('Tenant', 'Tenant');
			addOption ('Council tenant', 'Council Tenant');
			addOption ('Other', 'Other');
			break;
		case 'period1':
			addOption ('',  'Please Select');
			addOption ('12', '1 Year / 12 Months');
			addOption ('24', '2 Years / 24 Months');
			addOption ('36', '3 Years / 36 Months');
			addOption ('48', '4 Years / 48 Months');
			addOption ('60', '5 Years / 60 Months');
			addOption ('72', '6 Years / 72 Months');
			break;
		case 'purpose1':
			addOption ('',  'Please Select');
			addOption ('Car', 'Car');
			addOption ('Debt consolidation', 'Debt Consolidation');
			addOption ('Home improvement', 'Home Improvement');
			addOption ('Holiday', 'Holiday');
			addOption ('Wedding', 'Wedding');
			addOption ('Other', 'Other - Please specify below');
			break;
	}
}

function writeTitle (pText) {
	document.write ('<tr>');
	document.write ('<td class="formCaption"></td>');
	document.write ('<td class="formElement">');
	document.write ('<h3 class="formTitle">' + pText + '</h3>');
	document.write ('</td>');
	document.writeln ('</tr>');
}

function writeRow (pTitle, pElement) {
	document.write ('<tr>');
	document.write ('<td class="formCaption">');
	document.write (pTitle);
	document.write ('</td>');
	document.write ('<td class="formElement">');
	document.write (pElement);
	document.write ('</td>');
	document.writeln ('</tr>');
}

