<!--
/*	-------------------------------------------------------------
	e-commerce
	+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 
	Copyright:		Tom Carrington <tom.carrington@outrightltd.com>
	Description:	Generic Scripts / Functions
	Filename:		Library.js
	Version:		0.5
	Date:			Nov 01, 2006
	-------------------------------------------------------------*/
	var ie6						= false
	if(navigator.userAgent.indexOf('MSIE 6')>=0 || navigator.userAgent.indexOf('MSIE 5')>=0 || navigator.userAgent.indexOf('MSIE 4')>=0) {
		  ie6						= true
	}
/*	-------------------------------------------------------------
	FUNCTION:		SelectSet()
	+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 
	Description:	This function sets the value of a select box
					
	Requires:		Name, Value
	-------------------------------------------------------------*/	
	function SelectSet(SelectName, Value){
	var elements = document.getElementsByName(SelectName);
	var el = elements[0];
	for(index = 0; index < el.options.length; index++){
		if(el.options[index].value == Value)
			el.selectedIndex = index;
		}
	}
	function RadioSet(RadioName, Value){
		var elements = document.getElementsByName(RadioName);

		for (i=elements.length-1; i > -1; i--) {
			if (elements[i].value == Value){elements[i].checked = 'true';}
		}
	}
	
	/*-------------------------------------------------------------
	FUNCTION:		$F()
	Description:	These functions returns the value of a form
					element (pass it the name attribute)
	Requires:		NAME
	-------------------------------------------------------------*/
	function $F(str_var){
		var elements = document.getElementsByName(str_var);
		var el = elements[0];
		switch(el.type) {
			case 'text':   				return el.value; break
			case 'hidden':   			return el.value; break
			case 'select-one':  		return el.options[el.selectedIndex].value; break
			case 'select-multiple':  	return el.options[el.selectedIndex].value; break
			case 'radio':  				return get_selected(elements); break  
		}
	}
	
	function get_selected(radio_group){
		selected_element = -1;
		for (i=radio_group.length-1; i > -1; i--) {
			if (radio_group[i].checked){selected_element = i;}
		}
		if (selected_element == -1) {
			return "none selected";
		}else{
			return radio_group[selected_element].value;
		}
	}
/*	-------------------------------------------------------------
	FUNCTION:		SelectSet()
	Description:	This function sets the value of a select box
	Requires:		Name, Value
	-------------------------------------------------------------*/	
	function SelectSet(SelectName, Value){
	var elements = document.getElementsByName(SelectName);
	var el = elements[0];
	
	for(index = 0; index < el.options.length; index++){
		if(el.options[index].value == Value)
			el.selectedIndex = index;
		}
	}
/*	-------------------------------------------------------------
	FUNCTION:		$()
	Description:	This function returns the form element 
					object.
	Requires:		ID
	-------------------------------------------------------------*/
	function $() {
		var elements = new Array();
		for (var i = 0; i < arguments.length; i++) {
			var element = arguments[i];
			if (typeof element == 'string')
				element = document.getElementById(element);
			if (arguments.length == 1)
				return element;
			elements.push(element);
		}
		return elements;
	}	
/*	-------------------------------------------------------------
	FUNCTION:		IsNumeric()
	Description:	This function returns true or false depending 
					if the passed number is numeric
	-------------------------------------------------------------*/
	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;
	}
/*	-------------------------------------------------------------
	FUNCTION:		hide(), show(), toggle()
	Description:	These little functions hide or show 
					elements (pass the id attribute)
	Requires:		ID (Single || Array )
	-------------------------------------------------------------*/
	function hide(){
		for (var i = 0; i < arguments.length; i++) {
			var el = $(arguments[i]);
			el.style.display = 'none';
		}
	}
	
	function show(){
		for (var i = 0; i < arguments.length; i++) {
			var el = $(arguments[i]);
			el.style.display = '';
		}
	}
	
	function toggle() {
		for (var i = 0; i < arguments.length; i++) {
			var el = $(arguments[i]);
			if ( el.style.display != 'none' ) {
				el.style.display = 'none';
			}
			else {
				el.style.display = '';
			}
		}
	}
/*	-------------------------------------------------------------
	FUNCTION:		initDates()
	Description:	This function performs a smooth scroll 
					from the bottom to the top of the page.
	-------------------------------------------------------------*/
/*	-------------------------------------------------------------
	FUNCTION:		initDates()
	+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 
	Description:	This function performs a smooth scroll 
					from the bottom to the top of the page.
	-------------------------------------------------------------*/
	function initDates() {
		if (!document.getElementsByTagName){
			return;
		}
		if (!document.getElementsByTagName){ return; }
		var allfields = document.getElementsByTagName("input");
		var dateadded = false;
		var calendaradded = false;

		for (var i = 0; i < allfields.length; i++){
			var field = allfields[i];
			if (field.getAttribute("type") == "text" &&  field.getAttribute("maxlength") == 10 ) {
				var link = document.createElement('a');
				link.id	= field.name + ".link";
				link.href=    "Javascript:calStartDate_.select('"+field.name+"','"+field.name+".link','dd/MM/y'); //return false;";
				link.tabIndex = field.tabIndex+1;
				link.title=   "Click here to choose a date";
				link.alt=   "Click here to choose a date";
				link.className=   "datepicker";
				
				var image = document.createElement('img');
				image.src = "/_resources/images/vauxhall/spacer.gif";
				image.className = "iconcalendar";
				image.alt = "Click here to choose a date";
				link.appendChild(image);

				if (field.nextSibling){
					field.parentNode.insertBefore(link, field.nextSibling);
				}else{
					field.parentNode.appendChild(link);
				}
				dateadded=true;
			}
		}
		if(dateadded){
			html = document.getElementById('container').innerHTML;
			html = html + "<div id='calendar_' class='calendar_'></div>";
			document.getElementById('container').innerHTML = html;
			
			script = document.createElement('script');
			script.type = 'text/javascript';
			script.src = '/_resources/javascript/calendar_init.js';
			document.getElementsByTagName('head')[0].appendChild(script);
			
		}
	}
/*	-------------------------------------------------------------
	FUNCTION:		initCancelReturnSubmit()
	Description:	This function stope a form from submitting 
					if  ENTER is pressed
	-------------------------------------------------------------*/	
	function initCancelReturnSubmit() {
		if (!document.getElementsByTagName){ return; }
		var allinputs = document.getElementsByTagName("input");
		// loop through all input tags and add events
		for (var i=0; i<allinputs.length; i++){
			var field = allinputs[i];
			if (field.type != "image" && field.name != "x_Button" && field.type != "submit"){			
				field.onkeypress = function (obj) {
					if (document.all){
						return event.keyCode!=13;	//IE
					}else{
						return obj.keyCode!=13;		//FIREFOX
					}
				}
			}
		}
	}
/*	-------------------------------------------------------------
	FUNCTION:		initErrors(), get_previoussibling(), 
					get_firstChild()
	Description:	This function adds a class to inputs with 
					errors & the parent row
	-------------------------------------------------------------*/
	function initErrors(){
		var arr_span = document.getElementsByTagName("span");
		
		for (var i = 0; i < arr_span.length; i++) {
			if (arr_span[i].className == "error" && arr_span[i].innerHTML != ""){
				arr_span[i].parentNode.className = "haserror";
				//arr_span[i].nextSibling.nextSibling.className = "errorhide";
				bln_errors = true;
			}
		}
	}
	
	// Two functions for Firefox's 
	// miss-handling of whitespace in the DOM
	function get_previoussibling(n){
		var x=n.previousSibling;
		while (x.nodeType!=1){
			x = x.previousSibling;
		}
		return x;
	}
	
	function get_firstChild(n){
		for (i=0;i<n.childNodes.length;i++){
			if(n.childNodes[i].nodeType==1){
				return n.childNodes[i];
			}

		}
	}
	
	function get_nextsibling(n){
		var x=n.nextSibling;
		if(!x){return false;}
		while (x.nodeType!=1){
			x = x.nextSibling;
			if(!x){return false;}
		}
		return x;
	}
	
	function get_secondChild(n){
		firstchild = 0
		for (i=0;i<n.childNodes.length;i++){
			if(n.childNodes[i].nodeType==1 & firstchild == 0){
				firstchild = 1
			}else if(n.childNodes[i].nodeType==1 & firstchild == 1){
				return n.childNodes[i];
			}
		}
	}
	
	
////////////////////////////////////////////////////////////////////////////////
//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
////////////////////////////////////////////////////////////////////////////////
	function driver_Sex(driverTitle){
		var bln_driverM = false;
		var bln_driverF = false;
		var arr_male = new Array('Mr','Sir','Lord');
		var arr_femail = new Array('Mrs','Miss','Ms','Dame','Lady');
		var obj_QF;
		var driverID = $("x_CurrentDriverID");
		
		if ($("Proposer.id.1_Name.title") != null) {
			obj_QM = $("Proposer.id.1_SexM");
			obj_QF = $("Proposer.id.1_SexF");
		}
		else if ($("Driver.id." + driverID.value + "_Name.title") != null) {
			obj_QM = $("Driver.id." + driverID.value + "_SexM");
			obj_QF = $("Driver.id." + driverID.value + "_SexF");
		}
		
		if (driverTitle != "") {
			for (i=0;i<arr_male.length;i++) {
				if (driverTitle == arr_male[i]) {
					bln_driverM = true;
				}
			}
			for (j=0;j<arr_femail.length;j++) {
				if (driverTitle == arr_femail[j]) {
					bln_driverF = true;
				}
			}
			
			if (bln_driverM) { obj_QM.checked = true; }
			if (bln_driverF) { obj_QF.checked = true; }
		}
		
	}
////////////////////////////////////////////////////////////////////////////////
//\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
////////////////////////////////////////////////////////////////////////////////	
	function defaultOccupation(EmploymentStatusObject){
		EmploymentStatus = EmploymentStatusObject.value;
		EmploymentScope = EmploymentStatusObject.name.split("_")[1].substr(0,4);
		// test to see whether called from proposer or additional driver page
		// and setup name of form fields appropriately
		var insuredSex;
		var occupationSearchField;
		var occupationResultsField;
		var employerSearchField;
		var employerResultsField;
		
		if ($("Proposer.id.1_SexM") != null) 
		{
		    var alertMsgBoth = "Your occupation and employer's business have been automatically set to the most suitable for your employment status";
		    var alertMsgStudent = "Please select the most appropriate choice from the occupation selection (Your employer's business has been automatically set to the most suitable for your employment status)";
			if ($("Proposer.id.1_SexM").checked) {
				insuredSex = $("Proposer.id.1_SexM").value;
			}
			else {
				insuredSex = $("Proposer.id.1_SexF").value;
			}
			occupationSearchField = $("Proposer.id.1_" + EmploymentScope + "TimeOccupation.occDesc");
			occupationResultsField = $("Proposer.id.1_" + EmploymentScope + "TimeOccupation.occCode");
			
			employerSearchField = $("Proposer.id.1_" + EmploymentScope + "TimeOccupation.empDesc");
			employerResultsField = $("Proposer.id.1_" + EmploymentScope + "TimeOccupation.empCode");
		}else {
			var alertMsgBoth = "Their occupation and employer's business have been automatically set to the most suitable for their employment status";
			var alertMsgStudent = "Please select the most appropriate choice from the occupation selection (Their employer's business has been automatically set to the most suitable for their employment status)";

			var driverID = $("x_CurrentDriverID");

			if ($("Driver.id." + driverID.value + "_SexM").checked) {
				insuredSex = $("Driver.id." + driverID.value + "_SexM").value;
			}else {
				insuredSex = $("Driver.id." + driverID.value + "_SexF").value;
			}
			occupationSearchField = $("Driver.id." + driverID.value + "_" + EmploymentScope + "TimeOccupation.occDesc");
			occupationResultsField = $("Driver.id." + driverID.value + "_" + EmploymentScope + "TimeOccupation.occCode");
			
			employerSearchField = $("Driver.id." + driverID.value + "_" + EmploymentScope + "TimeOccupation.empDesc");
			employerResultsField = $("Driver.id." + driverID.value + "_" + EmploymentScope + "TimeOccupation.empCode");
		}

		switch (EmploymentStatus) {
			case "R":
				occupationSearchField.value = "Retired";
				occupationResultsField.options.length = 0;
				occupationResultsField.options[0] = new Option("Retired","R09");
				occupationResultsField.options[0].selected = true;
				
				employerSearchField.value = "Not In Employment";
				employerResultsField.options.length = 0;
				employerResultsField.options[0] = new Option("Not In Employment","186");
				employerResultsField.options[0].selected = true;
				alert(alertMsgBoth);
				break;
			case "FTE":
				occupationSearchField.value = "Student";
				occupationResultsField.options.length = 0;
				// CREATE AN OBJECT TO PASS TO AJAX REQUEST
				var theStatus = new Object;
				theStatus.keyCode = 0;
				
				if (EmploymentScope =="Part"){
					searchOccupationPt(theStatus);
				}else{
					searchOccupation(theStatus);
				}
				
				employerSearchField.value = "Not In Employment";
				employerResultsField.options.length = 0;
				employerResultsField.options[0] = new Option("Not In Employment","186");
				employerResultsField.options[0].selected = true;
				alert(alertMsgStudent);
				break;
			case "U":
				occupationSearchField.value = "Unemployed";
				occupationResultsField.options.length = 0;
				occupationResultsField.options[0] = new Option("Unemployed","U03");
				occupationResultsField.options[0].selected = true;
				
				employerSearchField.value = "Not In Employment";
				employerResultsField.options.length = 0;
				employerResultsField.options[0] = new Option("Not In Employment","186");
				employerResultsField.options[0].selected = true;
				alert(alertMsgBoth);
				break;
			case "H":
				if (insuredSex == "M") {
					occupationSearchField.value = "Househusband";
					occupationResultsField.options.length = 0;
					occupationResultsField.options[0] = new Option("Househusband","163");
					occupationResultsField.options[0].selected = true;
				}else {
					occupationSearchField.value = "Housewife";
					occupationResultsField.options.length = 0;
					occupationResultsField.options[0] = new Option("Housewife","H09");
					occupationResultsField.options[0].selected = true;
				}
				
				employerSearchField.value = "Not In Employment";
				employerResultsField.options.length = 0;
				employerResultsField.options[0] = new Option("Not In Employment","186");
				employerResultsField.options[0].selected = true;
				alert(alertMsgBoth);
				break;
			default: return false;
		}
	}
	
	function Find_PositionX(obj) {
		var curleft = 0;
		if (obj.offsetParent) {
			while (1) {
				curleft+=obj.offsetLeft;
				if (!obj.offsetParent) {
					break;
				}
				obj=obj.offsetParent;
			}
		} else if (obj.x) {
			curleft+=obj.x;
		}
		return curleft;
	}
	
	function Find_PositionY(obj) {
		var curtop = 0;
		if (obj.offsetParent) {
			while (1) {
				curtop+=obj.offsetTop;
				if (!obj.offsetParent) {
					break;
				}
				obj=obj.offsetParent;
			}
		} else if (obj.y) {
			curtop+=obj.y;
		}
		return curtop;
	}
	
  //***************************************** Ajax help ***************************************
var obj_ajax 	= getXmlHttpRequestObject();
var helpmessage	= "";
var hoverid;

function getXmlHttpRequestObjectOld() {
	if (window.XMLHttpRequest) {
		return new XMLHttpRequest();
	} else if(window.ActiveXObject) {
		return new ActiveXObject("Microsoft.XMLHTTP");
	} else {
		alert("Your current browser does not support ActiveX controls.\nPlease upgrade your browser.");
	}
}

function getXmlHttpRequestObject() {
	if (window.ActiveXObject) { // IE
		try {
			return new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
		try {
		  return new ActiveXObject("Microsoft.XMLHTTP");
		} catch (e) {alert("Your current browser does not support ActiveX controls.\nPlease upgrade your browser.");}
	}
	}else if (window.XMLHttpRequest) { // Mozilla, Safari,...    
		return new XMLHttpRequest();
		}
	}

function stateHandler(){
	if (obj_ajax.readyState == 4){
		helpmessage = obj_ajax.responseText;
		$("helpcopy").innerHTML = helpmessage;
		$('box').style.height = 'auto';
		$('box').className = 'loaded';
	}
	return true;
}

function getDimensions(element) {
    element = $(element);
    var display = $(element).style.display;
    if (display != 'none' && display != null) // Safari bug
      return {width: element.offsetWidth, height: element.offsetHeight};

    // All *Width and *Height properties give 0 on elements with display none,
    // so enable the element temporarily
    var els = element.style;
    var originalVisibility = els.visibility;
    var originalPosition = els.position;
    var originalDisplay = els.display;
    els.visibility = 'hidden';
    els.position = 'absolute';
    els.display = 'block';
    var originalWidth = element.clientWidth;
    var originalHeight = element.clientHeight;
	//alert(originalHeight);
    els.display = originalDisplay;
    els.position = originalPosition;
    els.visibility = originalVisibility;
    return {width: originalWidth, height: originalHeight};
}

function getAnchorPosition(_1){
	var _2=false;var _3=new Object();
	var x=0,y=0;
	var _4=false,_5=false,_6=false;
	if(document.getElementById){
		_4=true;}
	else{if(document.all){
		_5=true;}
	else{if(document.layers){
		_6=true;}
		}
	}
	if(_4&&document.all){
		x=AnchorPosition_getPageOffsetLeft(document.all[_1]);
		y=AnchorPosition_getPageOffsetTop(document.all[_1]);}
	else{if(_4){
		var o=document.getElementById(_1);
		x=AnchorPosition_getPageOffsetLeft(o);
		y=AnchorPosition_getPageOffsetTop(o);}
	else{if(_5){
		x=AnchorPosition_getPageOffsetLeft(document.all[_1]);
		y=AnchorPosition_getPageOffsetTop(document.all[_1]);}
	else{if(_6){
		var _7=0;
		for(var i=0;i<document.anchors.length;i++){
	if(document.anchors[i].name==_1){
		_7=1;break;}
	}
	if(_7==0){
		_3.x=0;_3.y=0;return _3;
		}
		x=document.anchors[i].x;
		y=document.anchors[i].y;
		}else{
			_3.x=0;
			_3.y=0;
			return _3;
			}
		}
	}
	}
	_3.x=x;
	_3.y=y;
	return _3;
};
	
//function overlay(str_parent, str_child){
//	show(str_parent);
//	var _docHeight = (document.height !== undefined) ? document.height : document.body.offsetHeight;
//	centerLegal(str_child)
//$(str_parent).style.height = _docHeight + "px";
//}
	
	
function overlay(str_parent, str_child){
	var _docHeight = (document.height !== undefined) ? document.height : document.body.offsetHeight;
	show(str_parent);
	centerLegal(str_child);
	$(str_parent).style.height = _docHeight + "px"
}	

function centerLegal(element){
	elementType = element;
    try{
        element = $(element);
    }catch(e){
        return;
    }
    var my_width  = 0;
    var my_height = 0;
    
	if ( typeof( window.innerWidth ) == 'number' ){
        my_width  = window.innerWidth;
        my_height = window.innerHeight;
    }else if ( document.documentElement &&( document.documentElement.clientWidth || document.documentElement.clientHeight ) ){
        my_width  = document.documentElement.clientWidth;
        my_height = document.documentElement.clientHeight;
    }
    else if ( document.body && ( document.body.clientWidth || document.body.clientHeight ) ){
        my_width  = document.body.clientWidth;
        my_height = document.body.clientHeight;
    }
    
	element.style.position = 'absolute';
    element.style.zIndex   = 99;
    var scrollY = 0;
    
	if ( document.documentElement && document.documentElement.scrollTop ){
        scrollY = document.documentElement.scrollTop;
    }else if ( document.body && document.body.scrollTop ){
        scrollY = document.body.scrollTop;
    }else if ( window.pageYOffset ){
        scrollY = window.pageYOffset;
    }else if ( window.scrollY ){
        scrollY = window.scrollY;
    }
    
	var elementDimensions = getDimensions(element);
    var setX = ( my_width  - elementDimensions.width  ) / 2;
    var setY = ( my_height - elementDimensions.height ) / 2 + scrollY;
    
	setX = ( setX < 0 ) ? 0 : setX;
    setY = ( setY < 0 ) ? 0 : setY;
    //element.style.left = (setX-443) + "px";
    element.style.top  = (setY-0) + "px";
	element.style.display  = 'block';
}

function getDimensions(element) {
    element = $(element);
    var display = $(element).style.display;
    if (display != 'none' && display != null) // Safari bug
      return {width: element.offsetWidth, height: element.offsetHeight};
    // All *Width and *Height properties give 0 on elements with display none, so enable the element temporarily
    var els = element.style;
    var originalVisibility = els.visibility;
    var originalPosition = els.position;
    var originalDisplay = els.display;
    els.visibility = 'hidden';
    els.position = 'absolute';
    els.display = 'block';
    var originalWidth = element.clientWidth;
    var originalHeight = element.clientHeight;
    els.display = originalDisplay;
    els.position = originalPosition;
    els.visibility = originalVisibility;
    return {width: originalWidth, height: originalHeight};
  }
  
	
  //sets drivers frequency of use questions
  	function setDrivers(){
		var driver = $F('x_Policy_TotalDrivers')
		if (driver == "1"){
			hide("Driver_1");
		}else if (driver == "2"){	
			show("Driver_2");
		}else if (driver == "3"){	
			show("Driver_2", "Driver_3");
		}else if (driver == "4"){	
			show("Driver_2", "Driver_3", "Driver_4");
		}else if (driver == "5"){	
			show("Driver_2", "Driver_3", "Driver_4", "Driver_5");
		}
	}
	//sets validation for drivers frequency of use questions
	function mainUser(str_id){
		if (str_id == "1"){
			for (var int_counter=2; int_counter<6; int_counter++){
				if ($F("Driver.id." + int_counter + "_VehicleUse") == "M"){
					overlay('mainUser_Layer', 'Alert3');return false;
				}
			}
		}else if (str_id != "1"){ 
			if ($F("Proposer.id.1_VehicleUse") == "M"){
				overlay('mainUser_Layer', 'Alert3');return false;
			}else{
				for (var int_counter=2; int_counter<6; int_counter++){
					if ($F("Driver.id." + int_counter + "_VehicleUse") == "M"){
						if(int_counter == str_id){
							hide('mainUser_Layer');
						}else{	
							overlay('mainUser_Layer', 'Alert3');;return false;
						}
					}
				}
			}
		}
	}


	function showFAQ(str_id, str_this){
		hide(str_this);
		show(str_id);
	}

	function hideFAQ(str_id, str_this){
		show(str_this);
		hide(str_id);
	}

