
/*----------------------------------------------------------------------------------------------------------------------------
 * Checkout
 */
var Checkout = {

	/** switch checkout step */
	changeStep: function(step, options) {
		this.changeStepTop(step, options);
		this.hideSteps();
		this.showStep(step);
		this.trackStep(step);
		return true;
	},
	
	/** track js step change */
	trackStep: function(step) {
		// coremetrics
		if (typeof cmCreatePageviewTag != 'undefined') {
			var steps = ['','step_basket', 'step_billing', 'step_delivery', 'step_payment', 'step_confirm'];
			cmCreatePageviewTag(steps[step], 'Checkout');
		}
	},
	
	/** hide all checkout steps */
	hideSteps: function() {
		$$('#checkwraper div.js_checkout_step.expanded').each(
			function(ch) {
					Element.replaceClassName(ch, 'expanded', 'passed');
			});
	},
	
	/** change checkout top menu */
	changeStepTop: function(step, options) {
		try {
			$$('#checkout-steps div.js_listeps').each(
				function(d) {
					if (d.id != 'js_listep_'+step) {
						Element.removeClassName(d, 'actual');
					}
				});
			Element.addClassName('js_listep_'+step, 'actual');
		} catch(ex) { if(_debug) throw ex; return false; };
	},
	
	/** show actual step */
	showStep: function(step) {
		Element.replaceClassName('js_step_' + step, 'passed', 'expanded');
	},
	
	/** show company options */
	userCompany: function(stat) {
		try {
			var action = (stat || 'toggle');
			if ($('js_company_info'))	Element[action]('js_company_info');
			if ($('js_company_f1'))
			{
				Element[action]('js_company_f1');
				Element[action]('js_company_f2');
			}
		} catch(ex) { if(_debug) throw ex; return false; };
		return true;
	},
	
	/** load postcode lookup billing address */
	bLoadAddress: function(index, count, forceLeaveAddrs) {
		try {
			var leaveAddrs = ((index == count-1) && forceLeaveAddrs) ? true : false;
			if (badrs && badrs[index] && !leaveAddrs) {
				document.getElementById('postcode').value = badrs[index].postcode;
				document.getElementById('street').value = badrs[index].street;
				if (!forceLeaveAddrs) {
					document.getElementById('apartment').value = badrs[index].apartment ? badrs[index].apartment : '';
				}
				document.getElementById('city').value = badrs[index].city;
			}
			if ((count > 0 && (index == count-1)) || count == 0) {
				this.bTrigLookupInputs(true);
			} else {
				this.bTrigLookupInputs(false);
			}
		} catch(ex) { if(_debug) throw ex; return false; };
		return true;
	},
	
	/** load postcode lookup billing address */
	bTrigLookupInputs: function(mode) {
		try {
			document.getElementById('street').disabled = !mode;
			document.getElementById('city').disabled = !mode;
		} catch(ex) { if(_debug) throw ex; return false; };
		return true;
	},
	
	/** clear some address field */
	bClearAddress: function() {
		try {
			document.getElementById('street').value = "";
			document.getElementById('apartment').value = "";
			document.getElementById('city').value = "";
		} catch(ex) { if(_debug) throw ex; return false; };
		return true;
	},
	
	/** load postcode lookup delivery address */
	dLoadAddress: function(index, count, forceLeaveAddrs) {
		try {
			var leaveAddrs = ((index == count-1) && forceLeaveAddrs) ? true : false;
			if (dadrs && dadrs[index] && !leaveAddrs) {
				$('d_postcode').value = dadrs[index].postcode;
				$('d_street').value = dadrs[index].street;
				if (!forceLeaveAddrs) {
					$('d_apartment').value = dadrs[index].apartment ? dadrs[index].apartment : '';
				}
				$('d_city').value = dadrs[index].city;
			}
			if ((count > 0 && (index == count-1)) || count == 0) {
				this.dTrigLookupInputs(true);
			} else {
				this.dTrigLookupInputs(false);
			}
		} catch(ex) { if(_debug) throw ex; return false; };
		return true;
	},
	
	/** load postcode lookup billing address */
	dTrigLookupInputs: function(mode) {
		try {
			document.getElementById('d_street').disabled = !mode;
			document.getElementById('d_city').disabled = !mode;
		} catch(ex) { if(_debug) throw ex; return false; };
		return true;
	},
	
	/** clear some address field */
	dClearAddress: function() {
		try {
			document.getElementById('d_street').value = "";
			document.getElementById('d_apartment').value = "";
			document.getElementById('d_city').value = "";
		} catch(ex) { if(_debug) throw ex; return false; };
		return true;
	},
	
	/** change bfpo in billing address */
	userBFPO: function(force, bfpoId) {
		try {
			var action = (force || (($F('country')==bfpoId) ? 'hide':'show'));
			if (!force) this.bfpoSelect(bfpoId, $('country'), action);
			switch (action) {
				case 'hide':
					Element.show('bfpo_req1', 'bfpo_req2');
					Element.hide('js_bfpo_info');
					break;
				case 'show':
					Element.hide('bfpo_req1', 'bfpo_req2');
					Element.show('js_bfpo_info');
					this.userCompany('hide');
					break;
			}
		} catch(ex) { if(_debug) throw ex; return false; };
		return true;
	},
	
	/** change bfpo in delivery address */
	userShippingBFPO: function(force, bfpoId) {
		try {
			var action = (force || (($F('country2')==bfpoId) ? 'hide':'show'));
			if (!force) this.bfpoSelect(bfpoId, $('country2'), action);
			switch (action) {
				case 'hide':
					Element.show('bfpo_reqs1', 'bfpo_reqs2', 'bfpo_reqs3');
					Element.hide('js_bfpo_sinfo');
					break;
				case 'show':
					Element.hide('bfpo_reqs1', 'bfpo_reqs2', 'bfpo_reqs3');
					Element.show('js_bfpo_sinfo');
					break;
			}
		} catch(ex) { if(_debug) throw ex; return false; };
		return true;
	},
	
	/** if user choose bfpo preselect bfpo in address box */
	bfpoSelect: function(bfpoId, select, force) {
		try {
			var action = (force || ((select.value==bfpoId) ? 'hide':'show'));
			switch (action) {
				case 'hide':
					select.selectedIndex = 0;
					break;
				case 'show':
					for(var i=0;i<select.options.length;i++) {
						if (select.options[i].value == bfpoId) {
							var bfpoIndex = i; break;
						}
					}
					select.selectedIndex = bfpoIndex;
					break;
			}
		} catch(ex) { if(_debug) throw ex; return false; };
		return true;
	},
		
	/** change country in billing address */
	changeCountry: function(element, country, bfpoId) {
		if (country == bfpoId) {
			this.userBFPO('show', bfpoId);
		} else {
			this.userBFPO('hide', bfpoId);
		}
	},

	/** change county in delivery address */
	changeShippingCountry: function(element, country, bfpoId) {
		if (country == bfpoId) {
			this.userShippingBFPO('show', bfpoId);
		} else {
			this.userShippingBFPO('hide', bfpoId);
		}
	},
	
	/** change delivery adress */
	changeAddress: function(element, addrType) {
		/*try {
			if (addrType == 'main' || addrType == 'billing') {
				document.getElementById('js_cell_info2').hide();
				document.getElementById('js_phone_info2').hide();
				document.getElementById('js_billing_info').hide();
				Element.hide('js_delivery_info');
				Element.hide('js_delivery_address');
				//Element.hide('js_bfpo_sinfo');
			} else {
				//$('js_delivery_address').show(); - jan: does not work, dunno why
				$('js_delivery_address').style.display = 'block';
				$A(Form.getInputs('js_delivery_address')).each(function(input){
					if ((input.id == 'd_postcode' 
						|| input.id == 'd_apartment'
						|| input.id == 'd_street'
						|| input.id == 'd_city')
					) input.value = '';
				});
			}
		} catch(ex) { if(_debug) throw ex; return false; };*/
		element.form.submit();
	},
	
	/** change payment type */
	changePayment: function(element, payType) {
		element.form.submit();
	},
	
	/** show payment type */
	showPaymentType: function() {
		//$('js_payment_type_select').show();		
		$('js_payment_type_select').style.display = 'block';		
		Form.enable('js_payment_type_select');
		//$('js_payment_type').hide();		
		$('js_payment_type').style.display = 'none';
		
		return true;
	}
}

/*----------------------------------------------------------------------------------------------------------------------------
 * Credit cards
 */

var Card = {
	
	types: null,
	
	/** change credit card */
	change: function(element, cardId) {
		if (cardId == 'new') {
			// select first card
			$('pay_method').selectedIndex = 0;
			this.changeType($('pay_method'), $F('pay_method'));
			
			// clear number
			$('number').value = '';
			$('issue').value = '';
			
			// clear dates
			$('payment_form').expiry_month.selectedIndex = 0;
			$('payment_form').expiry_year.selectedIndex = 0;
			$('payment_form').start_month.selectedIndex = 0;
			$('payment_form').start_year.selectedIndex = 0;
		} else {
			$('js_show_only').value = 1;
			element.form.submit();
		}
	},
	
	/** change credit card type*/
	changeType: function(element, cardType) {
		var c = this.types[cardType];
		if (!c) return false;
		
		var values = ['re', 'rs', 'ri'];
		$A(values).each(
			function(v) {
				Card._changeType(cardType, v, true);
				Card._changeType(cardType, v, false);
		});
	},
	
	/** change field status */
	_changeType: function(cardType,item, required) {
		var c = this.types[cardType];
		if (required) {
			$('js_c' + item + 'r')[(c[item]) ? 'show':'hide']();
		} else {
			$('js_c' + item)[(c[item] || c.dnr) ? 'show':'hide']();
		}
	}
}

/*----------------------------------------------------------------------------------------------------------------------------
 * Postage & packing
 */

var Postage = {

	prices: null,

	init: function(prices) {
		this.prices = prices;
	},
	/** change postage price */
	change: function(element, postId) {
		var postage = this.prices[postId];
		$('js_pp').innerHTML = postage.pp;
		$('js_tp').innerHTML = postage.tp;
		
		if (element.options[element.selectedIndex].text.match(/saturday/i)) {
			if (!element.hoverObj) {
				Object.extend(element, new Hover({className:'hover_message delivery_message', position:'bottom', on:'onfocus', off:'onblur'}), true);
				element.showTitle();
			}
		} else {
			if (element.hoverObj) {
				element.hideTitle();
				element.hoverObj = null;
				element.onfocus = {};
			}
		}
	}
}

/*----------------------------------------------------------------------------------------------------------------------------
 * Phone
 */

var Phone = {
	prefixes: null,
	init: function(prefixes) {
		this.prefixes = (prefixes || {});
	},
	changePrefix: function(element, countryId, className) {
		this._changePrefix(countryId, className);
	},
	_changePrefix: function(countryId, className) {
		var prefix = (this.prefixes[countryId] || '');
		$$('input.'+className).each(	
			function(v){ v.value = prefix; });
	}
}

/*----------------------------------------------------------------------------------------------------------------------------
 * Errors
 */
 
var Error = {
	errors: null,
	step: null,
	inputs: null,
	
	init: function(errors, step) {
		this.errors = errors;
		this.step = step;
	},
	
	show: function() {
		if (!this.errors) return false;
		var inputs = {};
		var form = Form.getElements('js_step_'+this.step);	
		form.each( function(inp) { 
			inputs[inp.name] = inp;
			if (this.errors[inp.name]) {
				this.errors[inp.name] = this.errors[inp.name].replace(/&lt;.*?&gt;/ig, '');
				inp.title = this.errors[inp.name].replace(/&amp;/, '&');
				Error._show(inp);
			}
		});
	},
	
	_show: function(element) {
		Element.setStyle(element, { border:'2px solid #B80000'});
		
		//attach errors handles on input box with errors
		element.__onfocus = [];
		if (typeof element.onfocus == 'function') {
			element.__onfocus.push(element.onfocus);
		}
		Object.extend(element, new Hover({className:'hover_message error_message', position:'right', on:'_onfocus', off:'_onblur'}));
		element.__onfocus.push(function() { element._onfocus() });
		element.__onfocus.push(function() { Element.setStyle(element, {'background':'#ffffe3'}); });
		Object.extend(element, {
			onfocus: function() { this.__onfocus.each( function(f) { f(); }); },
			onblur: function() { this._onblur(); Element.setStyle(this, {'background':'#ffffff'}); }
		});
	}
}
Loader.push(function() { Error.show(); });


/*----------------------------------------------------------------------------------------------------------------------------
 * Checkout Form check
 */
Checkout.Check = {
	isCustomer: false,
	isBFPO: false

	// @TODO: form check

}


/**
 * switch checkout step
 * @param step step number
function switch_step (step) {
	var prefix = "chk_step_";
	var prefixb = "li_step_";
	
	for (var i=1; i<5; i++) {
		var e = document.getElementById(prefix+i);
		var eb = document.getElementById(prefixb+i);
		if (e && eb) {
			e.className = (step == i) ? 'chk_container on' : 'chk_container off';
			eb.className = (step == i) ? 'focus' : '';
			var st = document.getElementById('step_int');
			if (st) st.value = step;
		}
	}
	
	var ec = document.getElementById('secure_code');
	var pc = document.getElementById('promo_code');
	
	if (ec && (step != 5)) {
		ec.className = 'secure_code hide';
	}
	if (ec && (step == 5)) {
		ec.className = 'secure_code';
	}
	return false;
}
 */

/**
 * hide checkout step (and show last openned)
 * @param step step number
function hide_step (step) {
	var prefix = "chk_step_";
	var prefixb = "li_step_";
	var e = document.getElementById(prefix+step);
	var eb = document.getElementById(prefixb+step);
	if (e) e.className = 'chk_container off';
	if (eb) eb.className = '';
	var ec = document.getElementById('secure_code');
	if (ec) ec.className = 'secure_code on';

	for (var i=5; i!=0; i--) {
		var es = document.getElementById(prefix+i);
		if (es) {
			if ((i == 5) && (es.className == 'chk_container off')) {
				i = 4;
			}			
			switch_step(i);
			break;
		}
	}

	return false;
}
 */

/**

function visible_form_rows (prefix) {
	for (var i=0; i<3; i++) {
		var tr = document.getElementById(prefix+i);
		if (tr) {
			var chk = document.getElementById('is_company');
			if (tr.className == 'hide') {
				tr.className = '';
				if (chk) chk.value = '1';
			}
			else {
				tr.className = 'hide';
				if (chk) chk.value = '0';
			}
		}
	}
	return false;
}
*/

/**
 * update shipping price on change P&P
 * @param id p&p price id
 * TODO: bug 10,000.00+ prices ?
function show_shipping_price (id) {

	var price = document.getElementById('shipping_price');
	var price2 = document.getElementById('shipping_price2');
	var sumprice = document.getElementById('sumprice');
	var total = document.getElementById('total');
	var total2 = document.getElementById('total2');
	
	if (price) {
		price.innerHTML = supp[id].toFixed(2);
		if (price2) price2.innerHTML = supp[id].toFixed(2);
		var sum = (parseFloat(supp[id])+parseFloat(sumprice.innerHTML.replace(',', ''))).toFixed(2).split('.');
		tmp = sum[0].split('');
		for (var i=tmp.length-1, buf = new Array, j=0; i >= 0; i--,j++) {
			if (((j%3) == 0) && (j>0)) buf.push(',');
			buf.push(tmp[i]);			
		}
		sum[0] = buf.reverse().join('');
		total.innerHTML = sum[0]+'.'+sum[1];
		if (total2) total2.innerHTML = sum[0]+'.'+sum[1];
	}
}
 */

/**
 * delivery price change
 * @param type delivery type id
function select_delivery (type) {
	switch (type) {
		case '0': break;
		case '2': // work addr.
			var e = document.getElementById('billing2working');
			if (e) e.value = '1';
		default:
			document.getElementById('checkout_form').submit();
	}
}
 */

/**
 * select payment type
 * @param type payment type id
function select_payment (type) {
	switch (type) {
		case '0': break;
		default:
			document.getElementById('checkout_form').submit();
			return true;
	}
}
 */

/**
 * select credit card type
 * @param type credit card id
 */
/*
function select_creditcard (type) {
	var sd = document.getElementById('card_start_date');
	var is = document.getElementById('card_issue_number');
	var sr = document.getElementById('star_req');
	
	if (sd && is && sr) {
		switch (type) {
			default:
			case '0': break;
			case '1': // visa
			case '2': // master card
			case '3': // visa electron
			case '5': // am xp
			case '7': // visa delta
				sd.className = 'hide';
				is.className = 'hide';
				break;
			case '4': // switch
			case '8': // solo
				sd.className = 'hide';
				sr.className = 'req';
				is.className = '';
				break;			
			case '6': // solo + date
			case '9': // switch + date
				sr.className = 'hide';
				sd.className = '';
				is.className = '';
				break;			
		}
	}
}*/

/**
 * select credit card type
 * @param type credit card id
function select_creditcard (type) {
	var sd = document.getElementById('card_start_date');
	var is = document.getElementById('card_issue_number');
	var ir = document.getElementById('is_req');
	var dr = document.getElementById('sd_req');
		
	if (sd && is && ir && dr) {
		switch (type) {
			default:
			case '0': break;
			case '1': // visa
			case '2': // master card
			case '3': // visa electron
			case '5': // am xp
			case '7': // visa delta
				sd.className = 'hide';
				is.className = 'hide';
				break;
			case '4': // switch
			case '8': // solo
				sd.className = '';
				is.className = '';
				// required fields
				ir.className = 'req';
				dr.className = 'hide';
				break;			
			case '6': // solo + date
			case '9': // switch + date
				sd.className = '';
				is.className = '';
				// required fields
				ir.className = 'hide';
				dr.className = 'req';
				break;			
		}
	}
}
 */


/**
 * checkout login form check & submit
function checkout_login () {
	var u = document.getElementById('st1_username');
	var p = document.getElementById('st1_password');
	
	if (u && p) {
		if ((u.value == '') || (p.value == '')) {
			alert('Please fill in your email address and password.');
		}
		else {
			//todo: login from checkout where user click continue
			//var lu = document.getElementById('i_login_username');
			//var lp = document.getElementById('i_login_password');
			
			checkout_form_submit();
		}
	}
	return false;
}
 */

/**
 * check checkout values and submit form
 * @param confirm is confirmed order?
function checkout_form_submit(special) {
	var e = document.getElementById('checkout_form');
	
	if (e.b_day && e.b_month && e.b_year) {
		if ((isNaN(e.b_day.value) && (e.b_day.value != 'DD')) || (e.b_day.value > 31)) {
			switch_step('2');
			e.b_day.focus();
			return false;
		}
		if ((isNaN(e.b_month.value) && (e.b_month.value != 'MM')) || (e.b_month.value > 12)) {
			switch_step('2');
			e.b_month.focus();
			return false;
		}
		if ((isNaN(e.b_year.value) && (e.b_year.value != 'YYYY'))) {
			switch_step('2');
			e.b_year.focus();
			return false;
		}
	}
	if (e.prefix_phone) {
		if (!isNaN(e.prefix_phone.value)) {
			var tmp = e.prefix_phone.value.split('');
			if ((tmp[0] == 0) || (tmp[0] == 7)) {
				alert ('You cannot enter a mobile phone number in this field. Please enter your land line home telephone number.');
				switch_step('2');
				e.prefix_phone.focus();
				return false;
			}
		}
		else {
			switch_step('2');
			e.prefix_phone.focus();
			return false;
		}
	}
	if (e.terms && confirm) {
		if (e.terms.checked == false) { 
			alert ('Please read and agree to Think4 Terms & Conditions.');
			e.prefix_phone.focus();
			return false;
		}
	}
	if (special == 'vpoints') {
		var si = document.getElementById('step_int');
		si.value = 4;
	}
	if (e.confirm)
		e.confirm.value = (special == 'confirm') ? '1' : '0';
	e.submit();
	return true;
}
 */
 
/**
function account_form_submit() {
	var e = document.getElementById('account_form');
	
	if (e.b_day && e.b_month && e.b_year) {
		if ((isNaN(e.b_day.value) && (e.b_day.value != 'DD')) || (e.b_day.value > 31)) {
			e.b_day.focus();
			return false;
		}
		if ((isNaN(e.b_month.value) && (e.b_month.value != 'MM')) || (e.b_month.value > 12)) {
			e.b_month.focus();
			return false;
		}
		if ((isNaN(e.b_year.value) && (e.b_year.value != 'YYYY'))) {
			e.b_year.focus();
			return false;
		}
	}
	if (e.prefix_phone)
		if (!isNaN(e.prefix_phone.value)) {
			var tmp = e.prefix_phone.value.split('');
			if ((tmp[0] == 0) || (tmp[0] == 7)) {
				alert ('You cannot enter a mobile phone number in this field. Please enter your land line home telephone number.');
				switch_step('2');
				e.prefix_phone.focus();
				return false;
			}
		}
		else {
			switch_step('2');
			e.prefix_phone.focus();
			return false;
		}
		
	e.submit();
	return true;
}
*/
/*
	http://www.porjes.com/idocs/forms/index_famsupp_157.html
*/
/*
function basket_keypressed (elm, e, sku) {
	var keycode;
	if (window.event) keycode = window.event.keyCode;
	else if (e) keycode = e.which;
	else return true;
	
	if (keycode == 13) {
		basket_control(sku, int_only(document.getElementById('inp_'+sku).value));
		return false;
	}
	else { 
		add_arrow(elm,sku);
		return true;
	}
}

function goto_step5() {
	var f = document.getElementById('checkout_form');

	if (f.s4_pay_type.value == 0) {
		alert('Please select a payment type.');
		switch_step('4');
		f.s4_pay_type.focus();
		return false;
	}
	
	if (f.card_type != undefined) {
		if (f.card_type.value == 0) {
			alert('Please select the type of your card.');
			switch_step('4');
			f.card_type.focus();
			return false;
		}
		if (f.card_number.value == '') {
			alert('Please fill in your credit/debit card number.');
			switch_step('4');
			f.card_number.focus();
			return false;
		}
		else {
			if (f.card_number.value.length < 13) {
				alert('Please fill in your credit/debit card number.');
				switch_step('4');
				f.card_number.focus();
				return false;
			}		
		}
		switch (f.card_type.value) {
			default:
			case '0': break;
			case '1': // visa
			case '3': // visa electron
			case '5': // am xp
			case '7': // visa delta
			case '2': // master card
				if (f.exp_month.value == 0) { 
					alert('Please fill in expired month.');
					switch_step('4');
					f.exp_month.focus();
					return false;
				}
				if (f.exp_year.value == 0) {
					alert('Please fill in expired year.');
					switch_step('4');
					f.exp_year.focus();
					return false;
				}
				break;
			case '9': // switch + date
			case '6': // solo + date
				if (f.start_month.value == 0) { 
					alert('Please fill in start month.');
					switch_step('4');
					f.start_month.focus();
					return false;
				}
				if (f.start_year.value == 0) {
					alert('Please fill in start year');
					switch_step('4');
					f.start_year.focus();
					return false;
				}
				break;
			case '4':
			case '8':
				if (f.issue_number.value == '') {
					alert('Please fill in your company issue number.');
					switch_step('4');
					f.issue_number.focus();
					return false;
				}
				break;
		}
		switch (f.card_type.value) {
			default:
			case '0': break;
			case '9': // switch + date
			case '6': // solo + date
			case '4':
			case '8':
				if (f.exp_year.value == 0) {
					alert('Please fill in expired year.');
					switch_step('4');
					f.exp_year.focus();
					return false;
				}
				if (f.exp_month.value == 0) { 
					alert('Please fill in expired month.');
					switch_step('4');
					f.exp_month.focus();
					return false;
				}
				break;
		}
	}

	// show step 5
	var e = document.getElementById('chk_step_5');
	if (e) {
		switch_step(5);
		e.className = 'chk_container on';
	}
	// hide error messages
	var f = document.getElementById('err_msg');
	if (f) f.className = 'hide';
	// show promo code
	var g = document.getElementById('promo_code');
	if (g) g.className = 'ch_promo on';
	
	return false;
}

function show_address_note() {
	var e = document.getElementById('note_address_p');
	if (e) {
		e.className = 'bordered';
	}
}
*/