// JavaScript Document

// Get the cursor position in text field for formating currency
function doGetCaretPosition (ctrl) {
	var CaretPos = 0;
	// IE Support
	if (document.selection) {
		ctrl.focus ();
		var Sel = document.selection.createRange ();
		Sel.moveStart ('character', -ctrl.value.length);
		CaretPos = Sel.text.length;
	} else if (ctrl.selectionStart || ctrl.selectionStart == '0') {
		// Firefox support
		CaretPos = ctrl.selectionStart;
	}
	return (CaretPos);
}

// Set the cursor position in text field for formating currency
function setCaretPosition(ctrl, pos) {
	if(ctrl.setSelectionRange) {
		ctrl.focus();
		ctrl.setSelectionRange(pos,pos);
	} else if (ctrl.createTextRange) {
		var range = ctrl.createTextRange();
		range.collapse(true);
		range.moveEnd('character', pos);
		range.moveStart('character', pos);
		range.select();
	}
}

// Adds Commas into a number e.g. 10,000
function formatCurrency(input, event) {
	var num = input.value.replace(/\,/g,'')
	var caret = doGetCaretPosition(input)
	var currentLength = input.value.length
	if(!isNaN(num)){
		if(num.indexOf('.') > -1){
			num = num.split('.');
			num[0] = num[0].toString().split('').reverse().join('').replace(/(?=\d*\.?)(\d{3})/g,'$1,').split('').reverse().join('').replace(/^[\,]/,'');
			if(num[1].length > 2){
				alert('You may only enter two decimals!');
				num[1] = num[1].substring(0,num[1].length-1);
			} 
			input.value = num[0]+'.'+num[1];
		} else{ 
			input.value = num.toString().split('').reverse().join('').replace(/(?=\d*\.?)(\d{3})/g,'$1,').split('').reverse().join('').replace(/^[\,]/,'') };
			if (input.value.length < currentLength) { caret -= 1 }
			if (input.value.length > currentLength) { caret += 1 }
		} 		
	else { alert('You may enter only numbers in this field!');
		input.value = input.value.substring(0,input.value.length-1);		
	}
	setCaretPosition(input, caret)
}

// Checks if the key pressed was enter and submits form
function submitEnter(myfield,e,form) {
	var keycode;
	if (window.event) keycode = window.event.keyCode;
	else if (e) keycode = e.which;
	else return true;
		
	if (keycode == 13) {
   		ajaxValidate('', form, 'all');
		return false;
	} else {
		return true;
	}
}

// Adds onblur events to day and month date elements
function addOnBlur() {
	ajaxValidate(this, 'single');
}

// AJAX functions for real time form validation
// inputField = individual input id on form (name, email, etc), extent = extent of validation (single = single inputs, all = whole form)
function ajaxValidate(inputField, extent) {
	xmlHttp=GetXmlHttpObject();
	if (xmlHttp==null) {
		alert ("Your browser does not support AJAX!");
		return;
	}
	
	var urlvars = "?extent="+extent;
	var submitForm = "Y";
	
	if (extent == "all") {
		var validateFields = new Array("title", "firstname", "surname", "telhome", "telmobile", "telwork", "email", "add1", "city", "postcode", "day", "month", "year", "claimType", "details");				
		
		for (j=0;j<validateFields.length;j++) {
			urlvars += "&"+validateFields[j]+"="+document.getElementById(validateFields[j]).value;			
		}		
	} else {
		var inputName = inputField.id
		var value = inputField.value;
		urlvars += "&"+inputName+"="+value
		
		// If checking date of accident we need to include other 2 parameters e.g. Year entered we need to send Day and Month
		if (inputName == "day" || inputName == "month") {
			urlvars += "&year="+document.getElementById("year").value;
		}
		if (inputName == "day" || inputName == "year") {
			urlvars += "&month="+document.getElementById("month").value;
		}
		if (inputName == "month" || inputName == "year") {
			urlvars += "&day="+document.getElementById("day").value;
		}
	}
	
	var url="/validateForm.php"+urlvars;
	
	xmlHttp.onreadystatechange=function() {
		if (xmlHttp.readyState==4) {
			var errorStr = xmlHttp.responseText;
			var errors = errorStr.split('##');			
			errors.splice(errors.length-1, 1);
			var formReadyToSubmit="Y";
			
			var dateValid = "";
			var dateError = "";
			
			for (i=0;i<errors.length;i++) {
				var error = errors[i].split('---');
				
				// Validate Dates seperate
				if (error[0] == "day" || error[0] == "month" || error[0] == "year") {
					
					if (error[1] != 0) {
						dateValid = "N";
						dateError = error[1];
						formReadyToSubmit="N";
					} else if (dateValid != "N") {
						dateValid = "Y";
					}
									
				} else {
					// Validate Other Fields
					if (error[1] == 0) {

						document.getElementById(error[0]).className="validField";
						if (document.getElementById(error[0]+"_hint")) {
							document.getElementById(error[0]+"_hint").innerHTML="&nbsp;";
						}
						
					} else {

						document.getElementById(error[0]).className="invalidField";
						if (document.getElementById(error[0]+"_hint")) {
							document.getElementById(error[0]+"_hint").className="inputHint inputHint_invalid";
							document.getElementById(error[0]+"_hint").innerHTML="* "+error[1];
						}
						formReadyToSubmit="N";
					}
				}
			}
			
			// Handle Date Errors if they are being validated
			if (dateValid == "Y") {
				document.getElementById("day").className="validField";
				document.getElementById("month").className="validField";
				document.getElementById("year").className="validField";

				document.getElementById("year_hint").innerHTML="&nbsp;"
			} else if (dateValid == "N") {
				document.getElementById("day").className="invalidField";
				document.getElementById("month").className="invalidField";
				document.getElementById("year").className="invalidField";

				document.getElementById("year_hint").className="inputHint inputHint_invalid";					
				document.getElementById("year_hint").innerHTML="* "+dateError;				
			}
			if (dateValid != "") {
				document.claimForm.day.onblur = addOnBlur;
				document.claimForm.month.onblur = addOnBlur;
			}
			
			if (extent=="all") {				
				if (formReadyToSubmit=="N") {
					alert('You have not filled in some fields correctly, please go back and correct the indicated fields.');
					return;
				} else {
					document.claimForm.submit();
				}
			}
		}
	}
	xmlHttp.open("GET",url,true);
	xmlHttp.send(null);	
}

function changeClaimType(type) {
	xmlHttp=GetXmlHttpObject();
	if (xmlHttp==null) {
		alert ("Your browser does not support AJAX!");
		return;
	}
	
	var url="/includes/claimType.php?type="+type;
	
	xmlHttp.onreadystatechange=function() {
		if (xmlHttp.readyState==4) {
			document.getElementById('claimTypeDesc').innerHTML=xmlHttp.responseText;
		}
	}
	xmlHttp.open("GET",url,true);
	xmlHttp.send(null);	
}

function GetXmlHttpObject() {
	var xmlHttp;
	try {
		// Firefox, Opera 8.0+, Safari
		xmlHttp=new XMLHttpRequest();
	} catch (e) {
		// Internet Explorer
		try {
			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	return xmlHttp;
}
