// JavaScript Document
var d = document;
var currentStep = 1;
var highestStep = 3;
var cur_product = 'lite';
var codeOK 		= 'notOK';
var codeType	= '';
var codeValue	= '';


// Language variables
var lg = new Array();
lg['form'] = [];
lg['button'] = [];
lg['order'] = [];
lg['code'] = [];


// Config variables
var config = new Array();

if(language_from_php == 'nl') {

	config['language'] = 'nl';
	config['currency'] = '€';
	config['currencyFull'] = 'EUR';
	config['currencyName'] = 'EURO';
	config['licensePrices'] = [];
	config['licenseDiscountLimits'] = [];
	config['licenseDiscountPercent'] = [];
	config['termDiscountLimits'] = [];
	config['termDiscountPercent'] = [];

} else if(language_from_php == 'en') {

	config['language'] = 'en';
	config['currency'] = '&pound;';
	config['currencyFull'] = 'GBP';
	config['currencyName'] = 'Pound';
	config['licensePrices'] = [];
	config['licenseDiscountLimits'] = [];
	config['licenseDiscountPercent'] = [];
	config['termDiscountLimits'] = [];
	config['termDiscountPercent'] = [];

} else if(language_from_php == 'us') {

	config['language'] = 'us';
	config['currency'] = '$';
	config['currencyFull'] = 'USD';
	config['currencyName'] = 'Dollar';
	config['licensePrices'] = [];
	config['licenseDiscountLimits'] = [];
	config['licenseDiscountPercent'] = [];
	config['termDiscountLimits'] = [];
	config['termDiscountPercent'] = [];

}

function dg(id) {
	var el = d.getElementById(id);
	return el;
}

//Return event source element (cross browser compatible)
function getEventSrcElement(e) {
	e = e || window.event;

	var el;
	if (e.target) { el = e.target; } else if (e.srcElement) { el = e.srcElement; }
	if (el.nodeType == 3) { // defeat Safari bug
		el = el.parentNode;
	}
	return el;
}

// Redirect page to another URL
function newlocation(url) {
	window.location.href = url;
}

/******
 * AJAX HTTPREQUEST CREATION
 ***/ 
function createXMLHttpRequest() { // create XML HTTP REQUEST object for ajax 
	var ua; 
	
	if (window.XMLHttpRequest) { 
		try { 
			ua = new XMLHttpRequest(); 
		} catch(e) { 
			ua = false; 
		} 
	} else if(window.ActiveXObject) { 
		try { 
			ua = new ActiveXObject("Microsoft.XMLHTTP"); 
		} catch(e) { 
			ua = false; 
		} 
	}
	
	return ua; 
} 

var req = createXMLHttpRequest();


/******
 *
 ***/ 
function getCurrentTab() {
	var tab = 0;
	if (location.hash) {
		var hash = new String(location.hash).replace(/#/g, '');
		switch (hash) {
			case 'features':
				tab = 0;
				break;
			case 'requirements':
				tab = 1;
				break;
			case 'reviews':
				tab = 2;
				break;
		}
	}
	return tab;
}


function initTabs() {
	var tab = getCurrentTab();
	var container = dg('tabContainer');
	if (container) {
		var ul = container.getElementsByTagName('ul').item(0);
		if (ul) {
			var lis = ul.getElementsByTagName('li');
			for (var i = 0; i < lis.length; i++) {
				if (i == tab) {
					lis[i].className += ' tabs-selected';
				} else {
					lis[i].className = lis[i].className.replace(/\s*\btabs-selected\b/, '');
				}
			}
		}
	}
}


/******
 * Executed when clicked on a 'Buy Now!' or 'Bestel' link outside the order form
 ***/
function gotoOrderPage(product) {
	dg('selected_product').value = product;
	document.forms['form_product'].submit();
}


/******
 * Get price with 2 decimals
 ***/
/*
function formatPrice(price, decimals) {
	price = price || 0;
	decimals = parseInt(decimals) || 2;

	var re = new RegExp("\.(\d*)\$");
	var newPrice = new String(parseFloat(price));
	newPrice.replace(re, 
		function (str, p1, p2, offset, s) {
			var bla = ',' + p1;
			alert(
				'newPrice = '+ newPrice +'\n'+
				'str = '+ str +'\n'+
				'p1 = '+ p1 +'\n'+
				'p2 = '+ p2 +'\n'+
				'offset = '+ offset +'\n'+
				's = '+ s +'\n'+
				'bla = '+ bla
			);
			return ',' + p1;
		});

	return newPrice;
}
*/
// n = number, c = decimals, d = decimal char, t = thousands char
function formatPrice(n, c, d, t){
	var c = isNaN(c = Math.abs(c)) ? 2 : c, d = d == undefined ? ',' : d, t = t == undefined ? '.' : t, s = n < 0 ? '-' : '', i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + '', j = (j = i.length) > 3 ? j % 3 : 0;
	return s + (j ? i.substr(0, j) + t : '') + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : '');
}


/******
 * (Re)calculates the price overview on the order form (step 1)
 ***/ 
function calculate() {
	var currency = config['currency'];
	if (currency == '€') { currency = '&euro;'; }

	var productEl = dg('product');
	var licensesEl = dg('licenses');
	var payPeriodEl = dg('pay_period');
	var codeEl = dg('code');
	var codeTypeEl = dg('code_type');
	var codeAmountEl = dg('code_amount');
	if (productEl && licensesEl && payPeriodEl && codeEl && codeTypeEl) {
		var product = productEl.value;
		var licenses = parseInt(licensesEl.value);
		var months = Math.ceil(payPeriodEl.value);
		//
		var code = [];
		code['code'] = codeEl.value;
		code['type'] = codeTypeEl.value;
		code['amount'] = parseFloat(codeAmountEl.value);

		// Calculate order and update price overview table
		var order = calculateOrder(product, licenses, months, code);
		if (order) {
			var subtotalEl = dg('price-subtotal1');
			var discountLicenseRow = dg('price-discount-license-row');
			var discountLicenseEl = dg('price-discount-license1');
			var discountTermRow = dg('price-discount-term-row');
			var discountTermEl = dg('price-discount-term1');
			var discountCodeRow = dg('price-discount-code-row');
			var discountCodeEl = dg('price-discount-code1');
			var totalEl = dg('price-total1');
			var discountTotalEl = dg('price-discount-total1');
			
			if(subtotalEl && discountLicenseEl && discountTermEl && totalEl && discountTotalEl ) {
				subtotalEl.innerHTML = currency +' '+ formatPrice(order['price']['subtotal']);
				discountLicenseEl.innerHTML = (order['discount']['license'] > 0 ? '- ' : '') + currency +' '+ formatPrice(order['discount']['license']);
				discountTermEl.innerHTML = (order['discount']['term'] > 0 ? '- ' : '') + currency +' '+ formatPrice(order['discount']['term']);
				if (discountCodeEl) {
					discountCodeEl.innerHTML = '- '+ currency +' '+ formatPrice(order['discount']['code']);
				}
				totalEl.innerHTML = currency +' '+ formatPrice(order['price']['total']);
				discountTotalEl.innerHTML = currency +' '+ formatPrice( (order['code']['type'] == 'licenses' ? order['code']['virtual_amount'] : order['price']['total_discount']) );
			}

			subtotalEl = null; discountLicenseEl = null; discountTermEl = null; discountCodeEl = null;
			totalEl = null; discountTotalEl = null;
		}

		productEl = null;
	}
}


/******
 * Generates the price overview on the order form (step 2)
 ***/ 
function updateOverview() {
	var currency = config['currency'];
	if (currency == '€') { currency = '&euro;'; }

	var productEl = dg('product');
	var licensesEl = dg('licenses');
	var payPeriodEl = dg('pay_period');
	var codeEl = dg('code');
	var codeTypeEl = dg('code_type');
	var codeAmountEl = dg('code_amount');
	if (productEl && licensesEl && payPeriodEl && codeEl && codeTypeEl) {
		var product = productEl.value;
		var licenses = parseInt(licensesEl.value);
		var months = Math.ceil(payPeriodEl.value);
		//
		var code = [];
		code['code'] = codeEl.value;
		code['type'] = codeTypeEl.value;
		code['amount'] = parseFloat(codeAmountEl.value);

		// Calculate order and update price overview table
		var order = calculateOrder(product, licenses, months, code);
		if (order) {
			var subtotalEl = dg('overview-item-subtotal');
			var discountLicenseRow = dg('overview-row-discount-code');
			var discountLicenseEl = dg('overview-item-discount-license');
			var discountTermRow = dg('overview-row-discount-period');
			var discountTermEl = dg('overview-item-discount-period');
			var discountCodeRow = dg('overview-row-discount-code');
			var discountCodeEl = dg('overview-item-discount-code');
			var totalEl = dg('overview-item-total');
			var vatEl = dg('overview-item-vat');
			var totalInclVatEl = dg('overview-item-total_incl_vat');
			if (subtotalEl && discountLicenseEl && discountTermEl && discountCodeEl && totalEl && vatEl && totalInclVatEl && discountLicenseRow && discountTermRow && discountCodeRow ) {
				subtotalEl.innerHTML = currency +' '+ formatPrice(order['price']['subtotal']);
				discountLicenseEl.innerHTML = (order['discount']['license'] > 0 ? '- ' : '') + currency +' '+ formatPrice(order['discount']['license']);
				discountTermEl.innerHTML = (order['discount']['term'] > 0 ? '- ' : '') + currency +' '+ formatPrice(order['discount']['term']);
				discountCodeEl.innerHTML = '- '+ currency +' '+ formatPrice(order['discount']['code']);
				totalEl.innerHTML = currency +' '+ formatPrice(order['price']['total']);
				vatEl.innerHTML = currency +' '+ formatPrice(order['price']['vat']);
				totalInclVatEl.innerHTML = currency +' '+ formatPrice(order['price']['total_incl_vat']);
	
				// Show/hide discount rows
				discountLicenseRow.style.display = (order['code']['amount'] > 0 ? 'none' : '');
				discountTermRow.style.display = (order['code']['amount'] > 0 ? 'none' : '');
				discountCodeRow.style.display = (order['discount']['code'] > 0 ? '' : 'none');
			}
			
			subtotalEl = null; discountLicenseEl = null; discountTermEl = null; discountCodeEl = null;
			totalEl = null; vatEl = null; totalInclVatEl = null;
		}

		productEl = null;
	}
}


/******
 * Enhance order page
 ***/
function initOrderPage(page) {
	page = page || 1;

	switch (page) {
		case 1:
			// Attach submit handler
			var form = dg('orderProduct');
			form.onsubmit = orderFormSubmitHandler;
			form = null;

			//
			var button1 = dg('update-order-button1');
			if (button1) {
				button1.style.display = 'none';
			}

			var radios1 = d.getElementsByName('product');
			for (var i = 0; i < radios1.length; i++) {
				var radio = radios1[i];
				if (radio) { radio.onclick = setProductHandler; }
				radio = null;
			}

			var select = dg('licenses');
			if (select) {
				select.onchange = setLicensesHandler;
				select = null;
			}

			var radios2 = d.getElementsByName('pay_period');
			for (var i = 0; i < radios2.length; i++) {
				var radio = radios2[i];
				if (radio) { radio.onclick = setPeriodHandler; }
				radio = null;
			}

			setOrderBar(1);

			calculate();
			break;
		case 2:
			//
			enhanceOrderForm();
			setOrderBar(2);
			validateOrderForm();
			updateOverview();
			break;
		case 3:
			//
			enhanceOrderForm();
			enhancePaymentElement();
			setOrderBar(3);
			validateOrderForm();
			updateOverview();
			break;
		case 'promo':
			enhanceOrderForm(false);
			var index = fields.push('country');
			validateOrderForm();
			fields.pop();
			break;
		case 'trialrequest':
			enhanceOrderForm(false);
			var index = fields.push('country');
			validateOrderForm();
			fields.pop();
			break;
	}
}


/******
 * Enhance order form with validation image after every form field/row
 ***/
function enhanceOrderForm(createBackButton) {
	createBackButton = (createBackButton == null || createBackButton ? true : false);
	// Attach submit handler
	var form = dg('orderProduct');
	form.onsubmit = orderFormSubmitHandler;
	form = null;

	// Enhance form validation of customer info fields
	var table = dg('customer-info') || dg('payment-info') || dg('promo-customer-info');
	if (table) {
		//
		if (createBackButton) {
			var buttons_bar = dg('buttons-bar');
			var back_button = document.createElement('input');
			back_button.type = 'submit';
			back_button.name = 'order_go_back';
			back_button.className = 'button-back';
			back_button.value = lg['button']['goback'];
			back_button.onmouseup = setOrderAction;
			if (buttons_bar) {
				/*
				if (table.id == 'payment-info') {
					buttons_bar.appendChild(back_button);
				} else {
				*/
					buttons_bar.insertBefore(back_button, buttons_bar.firstChild);
				//}
			}
			back_button = null; buttons_bar = null;
		}

		// 
		var input = document.createElement('input');
		input.type = 'hidden';
		input.name = 'current_order_action';
		input.id = 'current_order_action';
		input.value = 'default';
		table.insertBefore(input, table.firstChild);
		input = null;
		// Fields to validate and complete form
		var trs = table.getElementsByTagName('tr');
		for (var i = 0; i < trs.length; i++) {
			if (trs[i].className.search(/\bbuttons\b/) == -1) {
				// Append validation event handler to form fields
				var td = trs[i].getElementsByTagName('td').item(0);
				var el = td.getElementsByTagName('input').item(0) || td.getElementsByTagName('select').item(0); // Form element
				if (el && el.name) {
					switch (el.name) {
						case 'pay_method':
							//el.onchange = validationHandler;
							if (el.addEventListener) {
								el.addEventListener('change', validationHandler, false);
							} else if (el.attachEvent) { // IE
								el.attachEvent('onchange', validationHandler);
							}
							break;
						case 'bankid':
							el.onchange = validationHandler;
						case 'country':
						case 'agree_conditions':
							el.onclick = validationHandler;
							break;
						case 'Salutation':
							//el.onclick = validationHandler;
							break;
						default: // text fields
							el.onblur = validationHandler;
							el.onkeyup = validationHandler;
					}
					var id = el.id;
				} else {
					var id = 'tmp'+ i;
				}
				// Create status image
				var extra_td = document.createElement('td');
				var extra_img = document.createElement('img');
				extra_td.className = 'status';
				extra_img.id = 'status-img-'+ id;
				extra_img.src = 'img/_blank.gif';
				extra_img.alt = '';
				extra_td.appendChild(extra_img);
				trs[i].appendChild(extra_td);
			}
		}
		table = null;
	}

	return true;
}


function enhancePaymentElement() {
	var select = dg('pay_method');
	if (select) {
		if (select.addEventListener) {
			select.addEventListener('change', orderFormPaymentHandler, false);
		} else if (select.attachEvent) {
			select.attachEvent('onchange', orderFormPaymentHandler);
		}
		//
		var iDEALtr = dg('ideal-bank-row');
		if (iDEALtr && select.value != 1) { //1 = iDEAL
			iDEALtr.style.display = 'none';
		}
		iDEALtr = null;
		
		var icepaytr = dg('icepaydescholder');
		if (icepaytr &&	(
							select.value != 2 && //American Express
							select.value != 3 && //Mastercard
							select.value != 4	 //Visa
						)) {
			icepaytr.style.display = 'none';
		}
		icepaytr = null; 
		select = null;
		
	}
	return true;
}


function setOrderAction(e) {
	e = e || window.event;
	action = 'default';

	if (this.name) {
		switch (this.name) {
			case 'order_go_back':
				action = 'go_back';
				break;
		}
	}

	var input = dg('current_order_action');
	input.value = action;
	input = null;

	return true;
}


function updateActionCodeResult(code_arr) {
	var licensesTotal = dg('overview-item-licenses');
	//licensesTotal.appendChild();
	return true;
}


function checkCodeHandler(e) {
	e = e || window.event;

	var codeEl = dg('code');
	var container = dg('code-input-result');
	if (codeEl && container) {
		if (codeEl.value == '') {
			var p = dg('code-result') || document.createElement('p');
			if (!p.parentNode) {
				p.id = 'code-result';
				p.className = 'code-result-negative';
				container.appendChild( p );
			}
			p.innerHTML = lg['code']['invalid'];
			//
			var typeEl = dg('code_type');
			var amountEl = dg('code_amount');
			if (typeEl && amountEl) {
				typeEl.value = 'none';
				amountEl.value = '0';
			}
			p = null; container = null; typeEl = null; amountEl = null;

			calculate();

			return false;
		}
	}
	return true;
}


/******
 * Order form submit event handler
 ***/
function orderFormSubmitHandler(e) {
	e = e || window.event;

	// Check how form was submitted/which button was pressed
	var result = true;
	var input = dg('current_order_action');
	if (input) {
		switch (input.value) {
			case 'go_back':
				result = true;
				break;
			default:
				result = validateOrderForm();
				if (!result) {
					setOrderFormError(lg['order']['insert_all']);
				}
				break;
		}
		input = null;
	}

	return result;
}


var fieldIndex = -1;
function orderFormPaymentHandler(e) {
	e = e || window.event;

	// Show/hide iDEAL bank selector row
	var srcElement = getEventSrcElement(e);
	var iDEALtr = dg('ideal-bank-row');
	if (iDEALtr) {
		switch (srcElement.value) {
			case '1': //1 = iDEAL
				fieldIndex = fields.push('bankid');
				iDEALtr.style.display = '';
				toggleIcePayDesc('show');
				break;
			default:
				if (fields[fieldIndex]) {
					fields.splice(fieldIndex, 1);
					fieldIndex = -1;
				}
				iDEALtr.style.display = 'none';
				
				if(
					srcElement.value == 2 || //American Express
					srcElement.value == 3 || //Mastercard
					srcElement.value == 4	 //Visa
				) {
					toggleIcePayDesc('show');					
				} else {
					toggleIcePayDesc('hide');
				}
		}
		iDEALtr = null;
	}

	return true;
}


function setOrderFormError(str, type) {
	type = type || 'warning';

	var div = dg('order-form-messages');
	if (div) {
		div.innerHTML = '<'+'p class="error-'+ type +'">'+ str +'<'+'/p>\n';
		div = null;
	}

	return true;
}


/******
 * Returns an array with order properties, calculates properties using input 
 *   and discount config
 ***/
function calculateOrder(product, licenses, months, code) {
	code = code || {'code' : '', 'type' : 'none', 'amount' : 0};

	var order = new Array();
	order['product'] = [];

	order['product']['type'] = false;
	for (var productType in config['licensePrices']) {
		if (productType == product) {
			order['product']['type'] = product;
		}
	}

	if (order['product']['type']) {
		// Collect and calculate all order properties
		order['product']['license_price'] = config['licensePrices'][product];

		order['licenses'] = parseInt(licenses);
		order['length_months'] = Math.ceil(months);
		order['start_date'] = new Date();
		order['expire_date'] = new Date(); // ToDo

		order['discount'] = [];
		order['discount']['license'] = 0;
		order['discount']['term'] = 0;
		order['discount']['code'] = 0;
		order['discount']['custom'] = 0;

		order['price'] = [];
		order['price']['subtotal'] = new Number(order['licenses'] * order['product']['license_price'] * order['length_months']);
		order['price']['total_discount'] = 0;
		order['price']['total'] = 0;
		order['price']['vat'] = 0;
		order['price']['total_incl_vat'] = 0;

		order['code'] = [];
		order['code']['code'] = '';
		order['code']['type'] = 'none';
		order['code']['amount'] = 0;
		order['code']['virtual_amount'] = 0;

		// Check license discount options
		var license_discount = 0; // in percent
		var currentLimit = 0;
		for (var i = 0; i < config['licenseDiscountLimits'].length; i++) {
			if (config['licenseDiscountLimits'][i] > currentLimit) {
				if (order['licenses'] >= config['licenseDiscountLimits'][i]) {
					license_discount = config['licenseDiscountPercent'][i];
				}
			}
			currentLimit = config['licenseDiscountLimits'][i];
		}
		order['discount']['license'] = new Number(order['price']['subtotal'] * (license_discount / 100));

		// Check term discount options
		var term_discount = 0; // in percent
		var currentLimit = 0;
		for (var i = 0; i < config['termDiscountLimits'].length; i++) {
			if (config['termDiscountLimits'][i] > currentLimit) {
				if (order['length_months'] >= config['termDiscountLimits'][i]) {
					term_discount = config['termDiscountPercent'][i];
				}
			}
			currentLimit = config['termDiscountLimits'][i];
		}
		order['discount']['term'] = new Number(order['price']['subtotal'] * (term_discount / 100));

		// Set code discount options from argument
		order['code']['type'] = code['type'];
		order['code']['amount'] = code['amount'];
		if (order['code']['type'] == 'percentage') {
			order['discount']['code'] = new Number(order['price']['subtotal'] * (order['code']['amount'] / 100));
		}

		// Check which discount to use
		if (order['code']['amount'] > 0) {
			order['discount']['license'] = 0;
			//order['discount']['term'] = 0; // Term discount still applies with code discount
			order['price']['total_discount'] = order['discount']['code'] + order['discount']['term'];
			if (order['code']['type'] == 'licenses') {
				order['code']['virtual_amount'] = new Number(order['product']['license_price'] * order['code']['amount'] * order['length_months']);
			}
		} else {
			order['price']['total_discount'] = order['discount']['license'] + order['discount']['term'] + order['discount']['custom'];
		}

		//
		// Substract discount from subtotal
		order['price']['total'] = order['price']['subtotal'] - order['price']['total_discount'];
		order['price']['vat'] = new Number(order['price']['total'] * (config['VAT_percentage'] / 100));
		order['price']['total_incl_vat'] = order['price']['total'] + order['price']['vat'];
	} else {
		order = false;
	}

	return order;
}


// ORDERING PROCESS FUNCTIONS
function clickToStep(step) { // go to the requested step on the order form isn't the current step
	if(step <= highestStep && step != currentStep) {
		gotoStep(step);
	}
}

function gotoStep(step) { // go to the requested step on the order form
	if(step == 5) {
		//alert(codeOK);
		//alert(codeType);
		
		if(codeOK == 'OK' && codeType == 'license') {
			//dg('licenses').value++;
			//alert(dg('licenses').value);	
		}
		
		d.orderProduct.submit();
		//connectToPSP();
	} else {
		dg('step'+currentStep).style.display = 'none';
		dg('step'+step).style.display = 'block';
		currentStep = step;
		if(currentStep > highestStep && currentStep < 4) {
			highestStep = currentStep; 
		}		
		if(currentStep == 4) {
			setOrderBar(3);
			showConfirm();
		} else {
			setOrderBar(currentStep);
		}
		if(step > 1 && step < 5) {
			setYouOrderBlock();
			dg('youOrder').style.display = 'block';
		} else {
			dg('youOrder').style.display = 'none';
		}
	}
}


/******
 * Connect to ABN Internetkassa
 ***/ 
function connectToPSP() {
	dg('CN').value = dg('name').value+' '+dg('surname').value;
	dg('EMAIL').value = dg('email').value;
	dg('ownerZIP').value = dg('zipcode').value;
	dg('owneraddress').value = dg('address').value;
	dg('ownercty').value = getLabel(dg('country').value);
	dg('ownertown').value = dg('city').value;
	
	var product = dg('selectproduct').value;
	var licenses = dg('licenses').value;
	var period = dg('pay_period').value;
	
	var url = "js/calculateTotal.php?product="+product+"&licenses="+licenses+"&period="+period;
	req.open('get', url, false); 
	req.onreadystatechange = function() {
		if(req.readyState == 4 && req.status == 200) {
			dg('amount').value = req.responseText;
			d.pspForm.submit();
		}
	}
	req.send(null);
}


/******
 * Set the product hidden field on the order form
 ***/ 
function setProduct(product) {
	var el = dg('product');
	if (el) {
		el.value = product;
		el = null;
	}
	cur_product = product;
	//
	calculate();
}

function setProductHandler(e) {
	e || window.event;
	setProduct(this.value);
	return true;
}

/******
 * Set the licenses hidden field on the order form
 ***/ 
function setLicenses(licenses) {
	/*
	var el = dg('licenses');
	if (el) {
		el.value = licenses;
		el = null;
	}
	*/
	//
	calculate();
}

function setLicensesHandler(e) {
	e || window.event;
	setLicenses(this.value);
	return true;
}


/******
 * Set the paying peroid hidden field on the order form
 ***/ 
function setPeriod(period) {
	var input = dg('pay_period');
	if (input) {
		input.value = period;
		input = null;
	}
	/*** deprecated?
	gotoStep('2');
	*/
	//
	calculate();
}

function setPeriodHandler(e) {
	e || window.event;
	setPeriod(this.value);
	return true;
}


/******
 * Set the paying peroid hidden field on the order form
 ***/
function setCode(code) {
	var input = dg('code');
	if (input) {
		input.value = code;
		input = null;
	}
	//
	calculate();
}

function setCodeHandler(e) {
	e || window.event;
	setCode(this.value);
	return true;
}


/******
 * Trial functions
 ***/
function setYouTrialBlock() { // fills the 'Youre Trialing' block with the right contents 	
	var url = 'contents/trial/trial_overview.php?check=true';
	
	var html = '<iframe src ="'+url+'" width="100%" height="500" frameborder="0"></iframe>';
	dg('youOrder').innerHTML = html;
	dg('youOrder').style.display = 'block';
	return;	
}

function valTrial(action,element,type) { // order form validator
	var result = 'notOK';
	var field = element.id;

	if (field == "conditions") {
		var value = element.checked;
	} else {
		var value = element.value;
		value = value.replace(/ /g, '');
	}
	
	switch(action) {
		case 'val_step2':
			if (value != '' && value != null) {
				switch(type) {
					case 'email':
						var regexp = /^([\w-]+(?:\.[\w-]+)*)\@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$|(\[?(\d{1,3}\.){3}\d{1,3}\]?)$/i;
						if(regexp.test(value)) {
							result = "OK";
						}					
						break;
					case 'telephone':
						var regexp = /^((00|\+)[0-9]{2,3}(|-)[0-9]{2}|[0-9]{3})(|-)[0-9]{3}(|-)[0-9]{4}$/;
						if (regexp.test(value)) { 
							result = "OK";
						}
						break;
					case 'select':
						if(value != 'nochoice') {
							result = "OK";
						}				
						break;
					case 'no_numbers':
						var illegalChars = /[0-9]/;
						if(!illegalChars.test(value)) { 
							result = "OK";
						}
						break;
					case 'checkbox':
						if(value == true) {
							result = "OK";
						}
						break;
					case 'zipcode':
						//var regexp = /^[1-9][0-9]{3}\s?[a-zA-Z]{2}$/;
						if (value.length >= 4) {
							result = "OK";
						}
						break;
					case 'url':
						var regexp = new RegExp("^((http|https):\/\/)?(|www\.)?([a-z][a-z0-9\-]+(\.|\-*\.))+[a-z]{2,6}$");
						if (regexp.test(value)) {
							result = "OK";
						}
						break;
					default:
						result = "OK";
						break;
				}
			}
			
			fields[field] = result;
			
			if(value != '' && value != null) {
				if(result == "OK") {
					if(field != "code") {
						dg('img_' + field).src = 'img/tick.gif';
					}
				} else {
					dg('img_' + field).src = 'img/cross.gif';
				}				
			} else {
				dg('img_' + field).src = 'img/_blank.gif';
			}
			
			var errors = 'no';
			for(var i = 0; i<fields.length; i++) {
				if(fields[fields[i]] != 'OK') {
					errors = 'yes';
				}						
			}
		
			if(errors == 'no') {
				dg('btn_forward2_go').style.display = '';
				dg('btn_forward2_no').style.display = 'none';
			} else {
				dg('btn_forward2_go').style.display = 'none';
				dg('btn_forward2_no').style.display = '';
			}
			
		break;
		case 'validate_step3':

			var value = dg(field).value;
			var errors = 'no';
			if(value != 'nochoice') {
				dg('img_' + field).src = 'img/tick.gif';
				errors = 'no';
			} else {
				dg('img_' + field).src = 'img/_blank.gif';
				errors = 'yes';
			}
			
			if (errors == 'no') {
				dg('btn_forward3_go').style.display = '';
				dg('btn_forward3_no').style.display = 'none';
			} else {
				dg('btn_forward3_go').style.display = 'none';
				dg('btn_forward3_no').style.display = '';
			}
			
		break;
	}
}


function getFieldType(id) {
	var type;
	switch (id) {
		case 'zipcode':
			type = 'zipcode';
			break;
		case 'country':
		case 'pay_method':
		case 'bankid':
			type = 'select';
			break;
		case 'telephone':
			type = 'telephone';
			break;
		case 'email':
			type = 'email';
			break;
		case 'agree_conditions':
		case 'conditions':
			type = 'checkbox';
			break;
	}
	return type;
}


/******
 * Order form validator (can be attached to an element event)
 ***/ 
function validationHandler(e) {
	e = e || window.event;

	var srcElement = getEventSrcElement(e);
	var type;
	// Check if current form element needs special validating
	switch (srcElement.id) {
		case 'zipcode':
			type = 'zipcode';
			break;
		case 'country':
		case 'pay_method':
		case 'bankid':
			type = 'select';
			break;
		case 'telephone':
			type = 'telephone';
			break;
		case 'email':
			type = 'email';
			break;
		case 'code':
			updateOverview();
			break;
		case 'agree_conditions':
		case 'conditions':
			type = 'checkbox';
			break;
	}

	validate(srcElement, type);

	return true;
}

/******
 * Order form element validator (can be attached to an element event)
 ***/ 
function validate(element, type) {
	if (!element || !element.nodeType || element.nodeType != 1) { return false; }
	type = type || '';

	var result = false;
	var id = element.id;
	var img = dg('status-img-'+ id);
	var src = 'img/_blank.gif';

	if (type == 'checkbox') {
		var value = element.checked;
	} else {
		var value = element.value;
		value = value.replace(/ /g, '');
	}

	if (value && value != '') {
		switch (type) {
			case 'email':
				var re = /^([\w-]+(?:\.[\w-]+)*)\@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$|(\[?(\d{1,3}\.){3}\d{1,3}\]?)$/i;
				if (re.test(value)) {
					result = true;
				}
				break;
			case 'telephone':
				//var re = /^((00|\+)[0-9]{2,4}(|-)[0-9]{2}|[0-9]{3})(|-)[0-9]{3}(|-)[0-9]{4}$/;
				var re = /^[0-9\-\s\(\)]+$/;
				if (re.test(value)) {
					result = true;
				}
				break;
			case 'select':
				if (value != '' && value != 'nochoice') {
					result = true;
				}
				break;
			case 'no_numbers':
				var illegalChars = /[0-9]/;
				if (!illegalChars.test(value)) {
					result = true;
				}
				break;
			case 'checkbox':
				if (value == true) {
					result = true;
				}
				break;
			case 'zipcode':
				//var re = /^[1-9][0-9]{3}\s?[a-zA-Z]{2}$/;
				if (value.length >= 4) {
					result = "OK";
				}
				break;
			default:
				result = true;
				break;
		}

		if (result) {
			if (id != 'code') { src = 'img/tick.gif'; }
		} else {
			src = 'img/cross.gif';
		}
	}

	// Set validation image
	if (img) {
		img.src = src;
	}

	return result;
}


/******
 * 
 ***/ 
function validateOrderForm() {
	var result = true;
	for (var i = 0; i < fields.length; i++) {
		var type = getFieldType(fields[i]);
		if (!validate(dg(fields[i]), type)) {
			if (result) {
				result = false;
			}
		}
	}

	return result;
}


function initValidate() {
	for (var i = 0; i < fields.length; i++) {
		if(dg('img_' + fields[i])) {
			fields[fields[i]] = 'notOK';
		}
	}
}


function showConfirm() { // generates confirm page after step 3
	for (var i = 0; i < fields.length; i++) {
		if (fields[i] != 'conditions') {
			if (fields[i] == 'country') {
				var value = dg(fields[i]).value;
				var country = value.charAt(8) + value.charAt(9);
				switch(country) {
					case 'nl': var vartoshow = 'Nederland'; break;
					case 'en': var vartoshow = 'United Kingdom'; break;
					case 'fr': var vartoshow = 'France'; break;
					case 'de': var vartoshow = 'Deutschland'; break;
				}
				dg('confirm_'+ fields[i]).innerHTML = vartoshow;
			} else {			
				dg('confirm_'+ fields[i]).innerHTML = dg(fields[i]).value;
			}
		}
	}

	if (dg('code').value == '' || codeOK == 'notOK') {
		dg('confirm_code').innerHTML = '-';
		dg('code').value = '0';
	} else {
		dg('confirm_code').innerHTML = dg('code').value;
		if (codeValue > 0) {
			dg('code').value = codeValue;
		}
	}
}

function getLabel(str) { // get a language based label
/*	var url = "js/confirm.php?str="+str;
	var label;
	req.open('get', url, false); 
	req.onreadystatechange = function() {
		if(req.readyState == 4 && req.status == 200) {
			var response = req.responseText;
			label = response;
		}
	}
	req.send(null);
	if(req.readyState == 4 && req.status == 200) {
		return label;	
	}
*/
}


/******
 * Highlight the current step in the order procedure bar
 ***/ 
function setOrderBar(step) {
	var btn_names = new Array('','choose','data','pay');
	var url_path = 'languages/'+ config['language'] +'/img/';

	for (var i = 1; i <= highestStep; i++) {
		/*** deprecated
		if(i != currentStep) {
			dg('link_step_'+i).href = 'javascript:;';
		}
		***/
		var button = dg('btn_step_'+ i);
		if (button) {
			if (i == step) {
				button.src = url_path +'step'+ i +'_'+ btn_names[i] +'_over.gif';
			} else {
				button.src = url_path +'step'+ i +'_'+ btn_names[i] +'.gif';
			}
			button = null;
		}
	}
	return true;
}


function sendPriceList() { // email the price overview
	var email = dg('email_address').value;
	var product = dg('selectproduct').value;
	var licenses = dg('licenses').value;
	
	var url = "js/sendPriceList.php?email="+email+"&product="+product+"&licenses="+licenses;
	if(email != null && email != '') {
		dg('img_sendPriceList').src = 'img/ajax-loader.gif';
		req.open('get', url); 
		req.onreadystatechange = function() {
			if(req.readyState == 4 && req.status == 200) {
				var response = req.responseText;
				if(response == "OK") {
					dg('img_sendPriceList').src = 'img/tick.gif';
				} else {
					dg('img_sendPriceList').src = 'img/cross.gif';
				}
			}
		}
		req.send(null);
	}
}


function checkInput(id, defaultValue, click) {

	var input = dg(id);
	
	if (input.value == '' && !click) {
		input.value = defaultValue;
	}

	if (input.value == defaultValue && click) {
		input.value = '';
	}
}

function validateNewsletter(defaultValue) {
	var input = dg('newsletterInput');
	var emailOk = checkEmail(input.value);

	if (input.value != defaultValue && input.value != '' && emailOk) {
		document.newsletterSubscribe.submit();
	} else {
		blinkInput();
		return false;
	} 
}

var count = 0;
var t = 0;
function blinkInput() {

	input = dg('newsletterInput');
	maxcount = 2;

	if (count <= maxcount) {
		
		if (input.className == 'email-subscribe') {
			input.className = 'email-subscribeRed';
		} else {
			input.className = 'email-subscribe';
		}
		
		count = count + 1;	
		t = setTimeout("blinkInput()",200);
		
	} else {
		clearTimeout(t);
		count = 0;
		input.className = 'email-subscribe';
	}	
}

function checkEmail(str) {
	return (str.indexOf(".") > 2) && (str.indexOf("@") > 0) && (str.indexOf(" ") < 0);
}

function toggleIcePayDesc(toggle) {
	
	var el = document.getElementById('icepaydescholder');
	if(toggle == 'show') {
		el.style.display = '';
	} else {
		el.style.display = 'none';
	}
}