/*******************************
		Misc Functions
*******************************/

function swapImage(id, path) 
{
	var element		= document.getElementById(id);
	element.src		= path;
}

/*******************************
		Number Functions
*******************************/

function checkTelNumber(obj, bMobile)
{
	var iNumber = obj.value;
	
	if(checkNumber(obj))
	{
		iNumber = replaceChar(iNumber, " ", "");
		var sFormat;
		
		if(bMobile)
		{
			sFormat = new RegExp(/^0[7]\d{9}$/);
		}
		else
		{
			sFormat = new RegExp(/^0[1258]\d{9}$/);
		}
		
		var check = sFormat.test(iNumber);
		
		if(!check)
		{
			return false
		}
		else
		{
			return true;
		}
	}
	else
	{
		return false;
	}
}

function isValidEmail(emailAddress) 
{
	var re		= new RegExp(/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/);
	return re.test(emailAddress);
}

function checkNumber(obj)
{
	var sValue		= cleanNumber(obj);
	var sFormat		= new RegExp(/^[0-9 ]+$/i);
	return sFormat.test(sValue);
}

function cleanNumber(obj)
{
	var sValue		= obj.value.replace(/[\£\$\s\,]/g,'');
	obj.value		= sValue;
	return	sValue;
}

/*******************************
		String Functions
*******************************/

function validatePostcode(sText)
{
	var sFormat		= new RegExp(/^(GIR ?0AA)|([A-PR-UWYZ]((\d(\d|[A-HJKSTUW])?)|([A-HK-Y]\d(\d|[ABEHMNPRV-Y])?)) ?\d[ABD-HJLNP-UW-Z]{2})$/i);
	var bCheck		= sFormat.test(sText);
	
	if(bCheck)
	{
		return true;
	}
	else
	{
		return false;
	}

}

function validateLength(sValue, iLength)
{
	if(sValue.length >= iLength)
	{
		return true;
	}
	else
	{
		return false;
	}
}

function replaceChar(intNumber, charReplace, charReplaceWith)
{
	while(intNumber.indexOf(charReplace) != -1)
	{
		intNumber = intNumber.replace(charReplace, charReplaceWith);
	}
	return intNumber;
}

function capitaliseAll(obj)
{
	obj.value = obj.value.toUpperCase();
}

//Capitalise the first letter of each word in a textbox
function capitalise(obj) 
{
	var s	= obj.value;
	var out = "";
	
	if (s.length > 0) 
	{
		var c = true;
		// process each character one at a time
		for (var i = 0; i < s.length; i++) 
		{
			var t = s.substring(i, i+1).toUpperCase();
			
			// if not alpha cap next character
			cmp = "ABCDEFGHIJKLMNOPQRSTUVWXYZ'";
			if ( cmp.indexOf(t) < 0) 
			{
				c = true;
			}
			else 
			{
				if (c) 
				{
					c = false;
				}
				else 
				{
					t = t.toLowerCase();
				}
			}
			out += t;
		}
		obj.value = out;
	} 
}

/*******************************
		Date Functions
*******************************/

function ValiDate(obj, iFormatId)
{
	if(iFormatId == 1)
	{
		var sFormat = "dd/mm/yyyy";
	}
	else if(iFormatId == 2)
	{
		var sFormat = "mm/dd/yyyy";
	}
	else if(iFormatId == 3)
	{
		var sFormat = "yyyy/mm/dd";
	}
	else
	{
		var sFormat = "dd/mm/yyyy";
	}
	
	var sDateSplit = DateComponents(obj.value, sFormat);
	
	if (sDateSplit == null) return false;
	
	var iDay		= sDateSplit[0];
	var iMonth		= sDateSplit[1];
	var iYear		= sDateSplit[2];

	if (iYear.length == 2) 
	{
		var dtNow = new Date();
		if(((parseInt(iYear) + 2000)) > dtNow.getFullYear())
		{
			iYear = "19" + iYear;
		}
		else
		{
			iYear  = "20" + iYear;
		}
	}
		
	if ((iMonth < 1 || iMonth > 12) || (iDay < 1 || iDay > 31)) // check month range 
	{
		return false;
	} 
	if ((iMonth == 4 || iMonth == 6 || iMonth == 9 || iMonth == 11) && iDay == 31) 
	{
		return false;
	}
	if (iMonth == 2) // check for february 29th 
	{	
		var bIsLeap = (iYear % 4 == 0 && (iYear % 100 != 0 || iYear % 400 == 0)); 
		
		if (iDay > 29 || (iDay == 29 && !bIsLeap)) 
		{
			return false;
		}
	} 
	
	if (sFormat.charAt(0) == "d") //format=dd/mm/yyyy
	{
		obj.value = iDay + "/" + iMonth + "/" + iYear;
	} 
	else if (sFormat.charAt(0) == "m") //format=mm/dd/yyyy
	{
		obj.value = iMonth + "/" + iDay + "/" + iYear;
	} 
	else //format=yyyy/mm/dd
	{
		obj.value = iYear + "/" + iMonth + "/" + iDay;
	}
	
	if( iYear == 0001 )
	{
		// Skip year validation for the postgresql null year
	}
	else
	{
		if(iYear < 1753 || iYear > 9999  )
		{
			return false;
		}
	}
	
	return true;
}

function DateComponents(dateStr, format) 
{
	var results		= new Array();
	var datePat		= /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{2}|\d{4})$/;
	var matchArray	= dateStr.match(datePat);
	
	if (matchArray == null) return null; 
	// parse date into variables
	if (format.charAt(0) == "d") //format=dd/mm/yyyy
	{
		results[0] = matchArray[1];
		results[1] = matchArray[3];
		results[2] = matchArray[4];
	} 
	else if (format.charAt(0) == "m") //format=mm/dd/yyyy
	{
		results[0] = matchArray[3];
		results[1] = matchArray[1];
		results[2] = matchArray[4];
	} 
	else //format=yyyy/mm/dd
	{
		results[0] = matchArray[4];
		results[1] = matchArray[3];		
		results[2] = matchArray[1];
	}

	return results;
}

/**************************************************************************
		Insurance Quote Functions
**************************************************************************/

function miAddUser()
{
	var dob		= $F('dobDate') + '/' + $F('dobMonth') + '/' + $F('dobYear');
	var	sPost	= '&postcode=' + $F('postcode').replace(' ', '') + '&building=' + $F('building') + '&gender=' + $F('gender') + '&dob=' + dob
				+ '&mileage=' + $F('insuranceMileage') + '&tracker=' + $('tracker').checked + '&garaged=' + $('garaged').checked
				+ '&accidents=' + $('accidents').checked + '&convictions=' + $('convictions').checked + '&coverType=' + $F('coverType') 
				+ '&email=' + $F('email') + '&telephone=' + $F('telephone') + '&ncb=' + $F('noClaimsDiscount');
						
	sPost		+= '&title=' + $('title').value + '&forename=' + $F('forename') + '&surname=' + $F('surname');

	new Ajax.Updater({success: 'insuranceQuoteBlank', failure: 'insuranceQuoteResponseMessage'}, '../ajax/rpc.aspx?page=insurance&method=save_user', {postBody: sPost, method: 'post', asynchronous: false, 
		onFailure: function(){ bMiReturn = false; },
		onSuccess: function(response){ bMiReturn = true; m_InsuranceCookieUserId	= response.responseText; }
	});
}

function miAddUserInsuranceDetails()
{
	var dob				= $F('dobDate') + '/' + $F('dobMonth') + '/' + $F('dobYear');
	var	sPost			= '&postcode=' + $F('postcode').replace(' ', '') + '&building=' + $F('building') + '&gender=' + $F('gender') + '&dob=' + dob
						+ '&mileage=' + $F('insuranceMileage') + '&tracker=' + $('tracker').checked + '&garaged=' + $('garaged').checked
						+ '&accidents=' + $('accidents').checked + '&convictions=' + $('convictions').checked + '&coverType=' + $F('coverType') 
						+ '&email=' + $F('email') + '&telephone=' + $F('telephone') + '&userid=' + $F('hdnUserId') + '&ncb=' + $F('noClaimsDiscount');
						
	sPost				+= '&title=' + $('title').value + '&forename=' + $F('forename') + '&surname=' + $F('surname');
	
	new Ajax.Updater('insuranceQuoteResponseMessage', '../ajax/rpc.aspx?page=insurance&method=save_user_insurance_details', {postBody: sPost, method: 'post', asynchronous: false, 
		onFailure: function(){ bMiReturn = false; },
		onSuccess: function(response){ bMiReturn = true; if(checkNumber(response.responseText)){ m_InsuranceCookieUserId	= response.responseText; }}
	});
}

function miUpdateUserInsuranceDetails()
{
	var dob		= $F('dobDate') + '/' + $F('dobMonth') + '/' + $F('dobYear');
	var	sPost	= '&postcode=' + $F('postcode').replace(' ', '') + '&building=' + $F('building') + '&gender=' + $F('gender') + '&dob=' + dob
				+ '&mileage=' + $F('insuranceMileage') + '&tracker=' + $('tracker').checked + '&garaged=' + $('garaged').checked
				+ '&accidents=' + $('accidents').checked + '&convictions=' + $('convictions').checked + '&coverType=' + $F('coverType')
				+ '&email=' + $F('email') + '&telephone=' + $F('telephone') + '&userid=' + $F('hdnUserId') + '&ncb=' + $F('noClaimsDiscount');
						
	sPost		+= '&title=' + $('title').value + '&forename=' + $F('forename') + '&surname=' + $F('surname');
	
	new Ajax.Updater('insuranceQuoteResponseMessage', '../ajax/rpc.aspx?page=insurance&method=update_user_insurance_details', {postBody: sPost, method: 'post', asynchronous: false, 
		onFailure: function(){ bMiReturn = false; },
		onSuccess: function(response){ bMiReturn = true; if(checkNumber(response.responseText)){ m_InsuranceCookieUserId	= response.responseText; }}
	});
}

function miListingQuotationSuccess()
{
	var	arrayEditLinks	= $$('.editDetails');
	
	for(var i = 0; i < arrayEditLinks.length; i++)
	{
		arrayEditLinks[i].style.display	= 'block';
	}
}

function miRetreiveUserDetailsAndSaveCookie()
{
	//new Ajax.Request('../ajax/rpc.aspx?page=insurance&method=retreive_user_details_and_save_cookie', {asynchronous: false });
}

/**************************************************************************
		Enquiry Functions
**************************************************************************/

function toggleAdditionalEnquiryQuestions(obj)
{
	if(obj.checked)
	{
		new Effect.Appear('hpNumberContainer');
		new Effect.BlindUp('additionalEnquiryQuestionsContainer');
		$('EnquiryNature').disabled		= false;
	}
	else
	{
		new Effect.BlindDown('additionalEnquiryQuestionsContainer');
		$('EnquiryNature').disabled		= true;
		$('hpNumberContainer').style.display	= 'none';
	}
}

/**************************************************************************
		Admin Functions
**************************************************************************/

function saveRatesUsers()
{
	new Ajax.Updater('responseMessage', '../ajax/rpc.aspx?page=rates_user_import&method=save_rates_users', { asynchronous: false, onComplete: function(){ new Effect.highlight('responseMessage'); } });
}

/**************************************************************************
		Header Functions
**************************************************************************/

function redirectToUsedVehiclesPage(sMApp)
{
	new Ajax.Request(sMApp + 'ajax/rpc.aspx?page=&method=used_vehicle_redirect', { asynchronous: true, onComplete: usedVehicleRedirect });
}

function usedVehicleRedirect(response)
{
	if(response.responseText != '')
	{
		window.location.href		= response.responseText;
	}
}

/**************************************************************************
		Vehicle Detail Functions
**************************************************************************/

function submitYcllPostForm(obj)
{
	new Ajax.Request('../ajax/rpc.aspx?page=&method=ycll_post_form', { asynchronous: false, evalScripts: true, onSuccess: setYcllForm });
}

function setYcllForm(response)
{
	var values						= response.responseText.split(';');
	$('ycll_term').value			= values[0];
	$('ycll_deposit').value			= values[1];
	$('ycll_annual_mileage').value	= values[2];
	//$('frmYcllPostForm').submit();
}