/*************************************************/
/* This javascript file can be used to add any   */
/* other javascript that you might need to your  */
/* plugin. You can create new javascript and CSS */
/* files as you need and they will automatically */
/* be added to the head of the document          */
/* THIS: contact_script.js						 */
/*************************************************/

/**
 *
 * This function sets the page up so that all form validation can
 * be added to the form for when js is enabled allowing simple, on
 * page validation. This will be backed up by the back-end
 *
 */
	var Dom = YAHOO.util.Dom;
	var YE = YAHOO.util.Event;
	var telOkay = false;
	var emailOkay = false;

	function forminit(){
		/*var textAreas = document.getElementsByTagName('textarea');
		for(var i=0; i<textAreas.length; i++){
			YE.on(textAreas[i], 'click', hideText);
		}
		var theForms = document.getElementsByTagName('form');
		for(var i=0; i<theForms.length; i++){
			if(theForms[i].id == 'form_' + (i + 1)){
				//YE.on(theForms[i], 'submit', checkFormDetails);
				YE.on(theForms[i], 'reset', resetFormDetails);
			}
		}*/

		var successMsg = $('formSuccess');
		if(successMsg){
			setTimeout("hideAlertMessage()", 3000);
		}
		var formType = Dom.getElementsByClassName('formType')[0];
		switch (true){
			case formType.id == 'mortgage_1':
				YE.on(formType, 'submit', buildMortgage, formType);
				break;
			case formType.id == 'taxrebate_1':
				YE.on(formType, 'submit', buildTaxRebate, formType);
				break;
			case formType.id == 'loanrepayment_1':
				YE.on(formType, 'submit', buildLoanCalculator, formType);
				break;
			case formType.id == 'currency_1':
				//YE.on(formType, 'submit', buildCurrencyCalculator, formType);
				var isCountry = $('country0');
				if(isCountry){
					isCountry.value = 1;
					convertCurrency(0);
				}
				break;
			default:
				alert("Hmmm Form Unknown :'(!");
				break;
		}
		YE.on(formType, 'reset', resetFormDetails);
	}

	function buildMortgage(e, theForm){
		YE.stopEvent(e);
		var errors = new Array();
		var results = new Array();
		var fieldsets = theForm.getElementsByTagName('fieldset')[0];
		var inputs = fieldsets.getElementsByTagName('input');
		var j=0;
		var k=0;
		for(var i=0;i<inputs.length;i++){
			var curInput = inputs[i];
			curName = curInput.name;
			curId = curInput.id;
			if(curInput.value == "" || checkInteger(curInput.value) == false){
				errors[k] = curId;
				k++;
			} else {
				results[j] = curInput.value;
				j++;
			}
		}
		if(errors.length > 0){
			resetFormDetails(null);
			for(var i=0;i<errors.length;i++){
				errorInput = $(errors[i]);
				errorInput.style.border = '1px solid red';
				errorInput.style.marginBottom = '0';
				var spanEl = document.createElement('span');
				errorInput.parentNode.appendChild(spanEl);
				spanEl.style.display = 'block';
				spanEl.style.marginLeft = '28%';
				spanEl.style.padding = '0';
				spanEl.style.clear = 'both';
				Dom.addClass(spanEl, 'errorInput');
				switch(true){
					case errors[i] == 'amountRequired':
						spanEl.appendChild(document.createTextNode('^ Please specify the amount required'));
						break;
					case errors[i] == 'paymentPeriod':
						spanEl.appendChild(document.createTextNode('^ Please specify the number of years for repayment'));
						break;
					case errors[i] == 'interestRate':
						spanEl.appendChild(document.createTextNode('^ Please specify the current interest rate'));
						break;
				}
			}
		} else {
			var outputDiv = $('serverRes');

			var mortgageAmount = results[0];
			var paymentPeriod = results[1];
			var interestRate = results[2];

			// making sure that entries are valid by using check number
			if (!checkNumber(mortgageAmount, 1, 99999999, "'Mortgage required'") || !checkNumber(interestRate, .001, 1000, "Interest rate") || !checkNumber(paymentPeriod, 5, 40, "Repayment period")) {
				outputDiv.innerHTML = "Invalid";
				return;
			}

			interest = interestRate / 100;
			var monthlyRepayments = ((mortgageAmount*interest)/12) * (1/(1 - (Math.pow(1/(1 + interest),paymentPeriod))));
			var interestOnly = (mortgageAmount*interest)/12;

			var currForm = $('formResponse');
			var newField = $('responseField');
			if (!newField) {
				newField = document.createElement('fieldset');
				newField.setAttribute('id', 'responseField');
			}
			currForm.appendChild(newField);

			newField.innerHTML = '<p><label for="repayment">Monthly Repayement:</label><span>&#163;</span><input type="text" name="repayment"  value="' + poundsPence( monthlyRepayments ) + '" disabled="disabled" class="none_yet" /></p>';

			newField.innerHTML += '<p><label for="repayment">Interest Only:</label><span>&#163;</span><input type="text" name="interest"  value="' + poundsPence( interestOnly ) + '" disabled="disabled" class="none_yet" /></p>';
		}
	}

	function buildTaxRebate(e, theForm){
		YE.stopEvent(e);
		var errors = new Array();
		var results = new Array();
		var fieldsets = theForm.getElementsByTagName('fieldset')[0];
		var inputs = fieldsets.getElementsByTagName('input');
		var j=0;
		var k=0;
		for(var i=0;i<inputs.length;i++){
			var curInput = inputs[i];
			curName = curInput.name;
			curId = curInput.id;
			if(curInput.value == "" || checkInteger(curInput.value) == false){
				errors[k] = curId;
				k++;
			} else {
				results[j] = curInput.value;
				j++;
			}
		}
		if(errors.length > 0){
			resetFormDetails(null);
			for(var i=0;i<errors.length;i++){
				errorInput = $(errors[i]);
				errorInput.style.border = '1px solid red';
				errorInput.style.marginBottom = '0';
				var spanEl = document.createElement('span');
				errorInput.parentNode.appendChild(spanEl);
				spanEl.style.display = 'block';
				spanEl.style.marginLeft = '28%';
				spanEl.style.padding = '0';
				spanEl.style.clear = 'both';
				Dom.addClass(spanEl, 'errorInput');
				switch(true){
					case errors[i] == 'gross':
						spanEl.appendChild(document.createTextNode('^ Please specify your gross income'));
						break;
					case errors[i] == 'net':
						spanEl.appendChild(document.createTextNode('^ Please specify your net income (i.e. after tax)'));
						break;
				}
			}
		} else {
			var outputDiv = $('serverRes');

			var gross = results[0];
			var net = results[1];
			var year = $('year').value;

			switch(year){
				case '2002':
					year = "2002 - 2003";
					personal_allowance = 4615;
					lowRate = 1920;
					mediumRate = 29900;
					break;
				case '2003':
					year = "2003 - 2004";
					personal_allowance = 4615;
					lowRate = 1960;
					mediumRate = 30500;
					break;
				case '2004':
					year = "2004 - 2005";
					personal_allowance = 4745;
					lowRate = 2020;
					mediumRate = 31400;
					break;
				case '2005':
					year = "2005 - 2006";
					personal_allowance = 4895;
					lowRate = 2090;
					mediumRate = 32400;
					break;
				case '2006':
					year = "2006 - 2007";
					personal_allowance = 5035;
					lowRate = 2150;
					mediumRate = 33300;
					break;
				case '2007':
					year = "2007 - 2008";
					personal_allowance = 5225;
					lowRate = 2230;
					mediumRate = 34600;
					break;
				case '2008':
					year = "2008 - 2009";
					personal_allowance = 6035;
					lowRate = 0;
					mediumRate = 36000;
					break;
				default:
					personal_allowance = 0;
					lowRate = 0;
					mediumRate = 0;
					break;
			} // switch
			var newGross = gross - personal_allowance;
			if (newGross <= lowRate){
				taxPayable = lowRate * 0.1;
				rebate = net - taxPayable;
			}else if (newGross > lowRate && newGross <= mediumRate){
				runningTotal = newGross - lowRate;
				taxDue = runningTotal * 0.22;
				taxPayable = taxDue + (lowRate * 0.1);
				rebate = net - taxPayable;
			}else if (newGross > mediumRate){
				runningTotal = newGross - lowRate - mediumRate;
				taxDue = runningTotal * 0.44;
				taxPayable = taxDue + (mediumRate * 0.22) + (lowRate * 0.1);
				rebate = net - taxPayable;

			}
			var currForm = $('formResponse');
			var newField = $('responseField');
			if (!newField) {
				newField = document.createElement('fieldset');
				newField.setAttribute('id', 'responseField');
			}
			currForm.appendChild(newField);
			if (rebate < 0) {
				rebate = (rebate * -1);
				newField.innerHTML = '<p><label for="repayment">Tax Owed:</label><span>&#163;</span><input type="text" name="interest"  value="' + poundsPence( rebate ) + '" disabled="disabled" class="none_yet" /></p>';
			}else{
				newField.innerHTML = '<p><label for="repayment">Rebate Due:</label><span>&#163;</span><input type="text" name="interest"  value="' + poundsPence( rebate ) + '" disabled="disabled" class="none_yet" /></p>';
			}
		}
	}

	/**
	 *
	 * @access public
	 * @return void
	 **/
	function buildLoanCalculator(e, theForm){
		YE.stopEvent(e);
		var errors = new Array();
		var results = new Array();
		var fieldsets = theForm.getElementsByTagName('fieldset')[0];
		var inputs = fieldsets.getElementsByTagName('input');
		var j=0;
		var k=0;
		for(var i=0;i<inputs.length;i++){
			var curInput = inputs[i];
			curName = curInput.name;
			curId = curInput.id;
			if(curInput.value == "" || checkInteger(curInput.value) == false){
				errors[k] = curId;
				k++;
			} else {
				results[j] = curInput.value;
				j++;
			}
		}
		if(errors.length > 0){
			resetFormDetails(null);
			for(var i=0;i<errors.length;i++){
				errorInput = $(errors[i]);
				errorInput.style.border = '1px solid red';
				errorInput.style.marginBottom = '0';
				var spanEl = document.createElement('span');
				errorInput.parentNode.appendChild(spanEl);
				spanEl.style.display = 'block';
				spanEl.style.marginLeft = '28%';
				spanEl.style.padding = '0';
				spanEl.style.clear = 'both';
				Dom.addClass(spanEl, 'errorInput');
				switch(true){
					case errors[i] == 'amount':
						spanEl.appendChild(document.createTextNode('^ Please specify the amount you wish to borrow (number)'));
						break;
					case errors[i] == 'repayAPR':
						spanEl.appendChild(document.createTextNode('^ Please specify the current APR for this loan (number)'));
						break;
				}
			}
		} else {
			var princ = results[0];
			var term  = $('year').value;
			var intr  = results[1] / 1200;

			var startTerm = $('firstPay').value;
			if(parseFloat(startTerm) > 1){
				term = parseFloat(term) + parseFloat(startTerm);
			}

			var repayment = princ * intr / (1 - (Math.pow(1/(1 + intr), term)));
			var totalRepayment = repayment * term;

			var currForm = $('formResponse');
			var newField = $('responseField');
			if (!newField) {
				newField = document.createElement('fieldset');
				newField.setAttribute('id', 'responseField');
			}
			currForm.appendChild(newField);
			newField.innerHTML = '<p><label for="repayment">Monthly Repayments:</label><span>&#163;</span><input type="text" name="interest"  value="' + poundsPence( repayment ) + '" disabled="disabled" class="none_yet" /></p>';
			newField.innerHTML += '<p><label for="wholeRepayment">Total Repayment:</label><span>&#163;</span><input type="text" name="wholeRepayment"  value="' + poundsPence( totalRepayment ) + '" disabled="disabled" class="none_yet" /></p>';
		}
	}

	function buildCurrencyCalculator(e, theForm){
		YE.stopEvent(e);
		var errors = new Array();
		var results = new Array();
		var fieldsets = theForm.getElementsByTagName('fieldset')[0];
		var inputs = fieldsets.getElementsByTagName('input');
		var j=0;
		var k=0;
		for(var i=0;i<inputs.length;i++){
			var curInput = inputs[i];
			curName = curInput.name;
			curId = curInput.id;
			if(curInput.value == "" || checkInteger(curInput.value) == false){
				errors[k] = curId;
				k++;
			} else {
				results[j] = curInput.value;
				j++;
			}
		}
		if(errors.length > 0){
			resetFormDetails(null);
			for(var i=0;i<errors.length;i++){
				errorInput = $(errors[i]);
				errorInput.style.border = '1px solid red';
				errorInput.style.marginBottom = '0';
				var spanEl = document.createElement('span');
				errorInput.parentNode.appendChild(spanEl);
				spanEl.style.display = 'block';
				spanEl.style.marginLeft = '28%';
				spanEl.style.padding = '0';
				spanEl.style.clear = 'both';
				Dom.addClass(spanEl, 'errorInput');
				switch(true){
					case errors[i] == 'amount':
						spanEl.appendChild(document.createTextNode('^ Please specify the amount you wish to convert (number)'));
						break;
				}
			}
		} else {

			/**
			  *
			  * @access public
			  * @return void
			  **/
			 function showMeTheMoney(o){
			 	var currForm = $('formResponse');
			 	var newField = $('responseField');
				if (!newField) {
					newField = document.createElement('fieldset');
					newField.setAttribute('id', 'responseField');
				}
				currForm.appendChild(newField);
			 	//var returnedData = YAHOO.lang.dump(YAHOO.simple_get.data, 3);
			 	var returnedData = YAHOO.simple_get.data['Converted'];
			 	//returnedData = returnedData.split(' => ')[1];
			 	newField.innerHTML = '<p><label for="curAmount">Converted Amount:</label><span>&#163;</span><input type="text" name="curAmount"  value="' + poundsPence( returnedData ) + '" disabled="disabled" class="none_yet" /></p>';
			 }

			var currencyFrom = '';
			var currencyTo = '';
			var amount = results[0];

			var formData = YAHOO.util.Connect.setForm(theForm);
			var sUrl = 'http://webservices.rapidsite.local/general/currency_api.php?' + formData + '&authme=1234';
			var request = YAHOO.util.Get.script(sUrl, { onSuccess: showMeTheMoney });
		}
	}

	/**
	 *
	 * @access public
	 * @return void
	 **/
	function convertCurrency(origin){
		var rate = new Array(
			1,			// EUR Euro
			0.886376134,// GBP GB Pound
			1.2895,		// USD US Dollar
			118.302752,	// JPY Japanese Yen
			1.94847386,	// AUD Aussie Dollar
			1.49711027,	// CHF Swiss Franc
			10.7770869,	// SEK Swedish kronor
			2.12019421,	// TRY Turkish Lire
			1.58608525, // CAD Canadian Dollar
			8.81179188,	// CNY Chinese Yuan
			28.5907499,	// CZK Czech Koruny
			7.45216341	// DKK Danish Kroner
		);

		var input = $('country' + origin);

		var origin_value = input.value;
		var euro_equivalent = rate[origin];
		var v;
		for (i=0; i<rate.length; i++) {
			if (i !== origin) {
				var country = 'country' + i;
				var thisCountry = $(country);
				v = Math.round(rate[i] * origin_value/euro_equivalent * 100)/100;
				thisCountry.value = v;
			}
		}
		return true;

	}



	function checkNumber(input, min, max, msg) {

		msg = "The " + msg + " field is invalid. ";

		//this makes sure that the number is a number
		var str = input;
		for (var i = 0; i < str.length; i++) {
			var ch = str.substring( i, i + 1)
			if ((ch < "0" || "9" < ch) && ch != '.') {
				alert(msg);
				return false;
			}
		}

		//this makes sure that the number lies between the min and max values allowed
		var num = 0 + str
		if (num < min || max < num) {
			alert(msg + "The figure should be between " + min + " and " + max + ".");
			return false;
		}
		input = str;
		return true;
	}


	function poundsPence( N ) {
		// won't work as intended in ie3
		if ((navigator.appName.indexOf('Microsoft')>-1)
			&& (navigator.appVersion.indexOf('3.0')>-1) )
		{
			return N;
		}
		S = new String( N );
		var i = S.indexOf('.');
		if (i != -1) {
			S = S.substr( 0, i+3 );
			if (S.length-i < 3)
				S = S + '0';
		}
		return S;
	}

	function checkInteger(num){
		var anum = /(^\d+$)|(^\d+\.\d+$)/
		if (anum.test(num)) {
			return true;
		} else {
			return false;
		}
	}


















	/**
	 * Hide textarea text when the textarea is clicked
	 *
	 **/
	function hideText(e){
		if(this.value == 'Enter Your Text'){
			this.value = '';
		}
	}

	/**
	 * hideSuccess
	 * Hides the success (or error) message that displays when the form has been submitted
	 *
	 **/
	function hideAlertMessage(){
		var removeElement = function (){
			var fadeBlock = document.getElementById('fadeBlock');
	   		fadeBlock.style.visibility = 'hidden';
		}
		var myAnim = new YAHOO.util.Anim("fadeBlock", {
  		  height: { to: 0 },
  		  opacity: { to: 0 }
   		}, 2, YAHOO.util.Easing.easeOut);

   		myAnim.animate();
		myAnim.onComplete.subscribe(removeElement);
	}

	function resetFormDetails(e){
		var errorInputs = Dom.getElementsByClassName('errorInput');
		for(var i=0;i<errorInputs.length;i++){
			var actualInput = Dom.getPreviousSibling(errorInputs[i]);
			if(actualInput.tagName.toLowerCase() == 'input'){
				actualInput.removeAttribute('style');
			} else {
				actualInput = Dom.getPreviousSibling(actualInput);
				actualInput.removeAttribute('style');
			}
			errorInputs[i].parentNode.removeChild(errorInputs[i]);
		}
		var fieldsetId = $('responseField');
		if(fieldsetId){
			fieldsetId.parentNode.removeChild(fieldsetId);
		}
	}

// Initiate the init function for page load

YE.onDOMReady(forminit);