var URL_PREFIX = "";

/* Currency Button */
var USD_IMG_SRC = IMAGES_DIR+"/store/currency-button/usd.png";
var EUR_IMG_SRC = IMAGES_DIR+"/store/currency-button/euro.png";
var PRESSED_IMG_SRC = IMAGES_DIR+"/store/currency-button/pressed.png";

// pre-load the images
USDImage = new Image();
USDImage.src = USD_IMG_SRC;
EURImage = new Image();
EURImage.src = EUR_IMG_SRC;
pressedImage = new Image();
pressedImage.src = PRESSED_IMG_SRC;
var CBwidth = 93;
var CBcurrent = "USD";
var CBmouseIsDown = false;

function CBmouseDown (button, event) {
	if (!event) event = window.event; // IE
	
	var mouseX = (event.x ? event.x : event.clientX) - button.offsetLeft;
	
	if (CBcurrent == "USD" && mouseX > CBwidth/2) {
		CBSetState(button, "pressed", "USD");
	} else if (CBcurrent == "EUR" && mouseX < CBwidth/2) {
		CBSetState(button, "pressed", "EUR");
	}
}

function CBmouseUp (button, event) {
	if (!event) event = window.event; // IE
	
	var mouseX = (event.x ? event.x : event.clientX) - button.offsetLeft;
	
	if (mouseX > CBwidth/2) {
		CBSetState(button, "normal", "EUR");
		setCurrency("EUR");
	} else {
		CBSetState(button, "normal", "USD");
		setCurrency("USD");
	}
}

function CBmouseOut (button) {
	if (CBmouseIsDown == true) {
		CBSetState(button, "normal", CBCurrent);
	}
}

function CBSetState(button, state, currency) {
	var img_src = currency == "USD" ? USD_IMG_SRC : EUR_IMG_SRC;
	CBcurrent = currency;
	if (state == "pressed") {
		img_src = PRESSED_IMG_SRC;
		CBmouseIsDown = true;
	} else {
		CBmouseIsDown = false;
	}
	button.style.background = "url('"+img_src+"')";
}


function store_init_js() {
	loadCoupons(); // pre-load coupons
	ensure_correct_collapsibles_are_open();
	
	setCurrency(CURRENCY);
	updateVolumeQuantityAndSavings(CURRENCY);
	validateCoupon(document.getElementById('coupon_field'));
}

function ensure_correct_collapsibles_are_open () {
	var form = document.forms[0];
	
	for (i=0; i<form.quantity_radio.length; i++) {
		var radio = form.quantity_radio[i];
		if (radio.checked) {
			if (radio.value.indexOf("upgrade") >= 0) {
				animatedcollapse.show('upgrade_info');
				animatedcollapse.hide('single_info');
			} else if (radio.value.indexOf("volume") >= 0) {
				animatedcollapse.show('volume_info');
				animatedcollapse.hide('single_info');
			} else { // single
				animatedcollapse.show('single_info');
			}
		}
	}
	
	// other deal elements
	for (i=0; i<form.elements.length; i++) {
		if (form.elements[i].checked) {
			if (form.elements[i].name.indexOf("gift") >= 0) {
				animatedcollapse.show('gift_info');
			}
		}
	}
}

function input_change(element) {
	if (element && element.name == "quantity_radio") {
		if (element.id == "upgrade_input") {
			animatedcollapse.show('upgrade_info');
		} else {
			animatedcollapse.hide('upgrade_info');
		}
		
		if (element.id == "volume_input") {
			animatedcollapse.show('volume_info');
		} else {
			animatedcollapse.hide('volume_info');
		}
		
		if (element.id == "single_input") {
			animatedcollapse.show('single_info');
		} else {
			animatedcollapse.hide('single_info');
		}
	}
	
	if (element && element.id == "gift_input") {
		if (element.checked) {
			animatedcollapse.show('gift_info');
		} else {
			animatedcollapse.hide('gift_info');
		}
	}
	
	updatePrices(CBcurrent);
	updateTotal(CBcurrent);
	updateVolumeQuantityAndSavings(CBcurrent);
	
}

function show_coupon_field(element) {
	animatedcollapse.show('coupon_info');
}

var coupon_discount_percent = 0;

/* Changing Currency */
function setCurrency (currency) {
	// change currency button state
	var currencyButton = document.getElementById("currency_button");
	CBSetState(currencyButton, "normal", currency);
	document.forms[0].currency.value = currency.toUpperCase();
	updatePrices(currency);
	updateTotal(currency);
}

function getPrice(key, currency, process_household) {
	if (process_household == undefined) process_household = true;
	var price = PRICES[key];
	// take away main product price from household price (if requested)
	if (process_household && key.indexOf("::household::") >= 0) price -= PRICES[key.replace("::household::", "::::")];
	return price;
}

function updatePrices (currency) {
	for (key in PRICES) {
		var id = "price::"+key.substring(0, key.lastIndexOf("::"));
		if (key.indexOf("::"+currency.toLowerCase()) > 0) {
			var e = document.getElementById(id);
			var price = getPrice(key, currency);
			if (e != null) {
				e.innerHTML = moneyFormat(price, currency);
			}
		}
	}
	
	// update volume unit price
	if (document.forms[0].volume_quantity) {
		var vol_price = document.getElementById('volume_price');
		var quantity = parseInt(document.forms[0].volume_quantity.value);
		vol_price.innerHTML = moneyFormat(volume_price(currency, quantity), currency);
	}
}

function updateVolumeQuantityAndSavings (currency) {
	if (document.forms[0].volume_quantity && parseInt(document.forms[0].volume_quantity.value) > 0) {
		var quantity = parseInt(document.forms[0].volume_quantity.value);
		document.getElementById("volume_quantity").innerHTML = quantity;
		
		var costPerLicense = volume_price(currency, quantity);
		var singleLicenseCost = getPrice(PRODUCT_NAME.toLowerCase()+"::::"+currency.toLowerCase(), currency);
		document.getElementById("volume_saving").innerHTML = (Math.round((1-costPerLicense/singleLicenseCost)*100))+"%";
	}
}

function moneyFormat(number, currency) {
	var currencySymbol = currency == "USD" ? "$" : "&euro;";
	if (!number) number = 0;
	var n = new Number(number);
	return currencySymbol+number.toFixed(2);
}

function volume_price(currency, quantity) {
	var q=50;
	if (quantity >= 10 && quantity < 20) {
		q = 10;
	} else if (quantity >= 20 && quantity < 50) {
		q = 20;
	} else if (quantity < 10) {
		key = PRODUCT_NAME.toLowerCase()+"::::"+currency.toLowerCase();
		return getPrice(key, currency);
	}
	
	key = PRODUCT_NAME.toLowerCase()+"::volume"+q+"::"+currency.toLowerCase();
	return getPrice(key, currency);
}

function updateTotal (currency) {
	var form = document.forms[0];
	var total = 0;
	
	for (i=0; i<form.quantity_radio.length; i++) {
		var radio = form.quantity_radio[i];
		if (radio.checked) {
			var key, quantity = form.volume_quantity ? parseInt(form.volume_quantity.value) : 0;
			var product_price = 0;
			var discount_applies = true;
			
			if (radio.value.indexOf("upgrade") >= 0) {
				key = PRODUCT_NAME.toLowerCase()+"::upgrade::"+currency.toLowerCase();
				product_price = getPrice(key, currency);
				discount_applies = false;
			} else if (radio.value.indexOf("volume") >= 0 && quantity > 1) {
				product_price = volume_price(currency, quantity)*quantity;
				discount_applies = false;
			} else { // single
				key = PRODUCT_NAME.toLowerCase()+"::::"+currency.toLowerCase();
				product_price = getPrice(key, currency, false);
				
				
				// try and find a household element
				for (j=0; j<form.elements.length; j++) {
					if (form.elements[j].checked && form.elements[j].name.indexOf("household") >= 0) {
						key = PRODUCT_NAME.toLowerCase()+"::household::"+currency.toLowerCase();
						var p = getPrice(key, currency);
						if (p) product_price += p;
					}
				}
			}
			
			var discount = 0;
			if (discount_applies && coupon_discount_percent > 0 && coupon_discount_percent <= 1) discount = coupon_discount_percent*product_price;
			total += product_price - discount;
		}
	}
	
	// other deal elements
	for (i=0; i<form.elements.length; i++) {
		if (form.elements[i].checked) {
			if (form.elements[i].name.indexOf("gift") >= 0) {
				key = PRODUCT_NAME.toLowerCase()+"::gift::"+currency.toLowerCase();
				var p = getPrice(key, currency);
				if (p) total += p;
			} else if (form.elements[i].name.indexOf("picturesque_bundle") >= 0) {
				key = "picturesque"+"::bundle::"+currency.toLowerCase();
				var p = getPrice(key, currency);
				if (p) total += p;
			} else if (form.elements[i].name.indexOf("soulver_bundle") >= 0) {
				key = "soulver"+"::bundle::"+currency.toLowerCase();
				var p = getPrice(key, currency);
				if (p) total += p;
			}
		}
	}
	
	var total_element = document.getElementById('total_text');
	total_element.innerHTML = moneyFormat(total, currency);
}

/* Form validation and submission */
function validate_form(form) {
	var form = document.forms[0];
	var nameField = form.customer_name;
	var emailField = form.customer_email;
	var countryField = form.customer_country;
	
	// validation regexes
	var regexNum = new RegExp ("^[1-9][0-9]*?$");
	var regexName = new RegExp ("^[a-z A-Z\-]+$");
	var regexEmail = new RegExp ("^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$");
	
	var valid = true;
	
	// you
	if (!regexName.test(nameField.value)) {
		valid = false;
		var errorMsg = "&larr; Please enter your name";
		if (nameField.value.length > 0) {
			errorMsg = "&larr; Please enter your name (english characters only)";
		}
		document.getElementById("name_error").innerHTML = errorMsg;
		document.getElementById("name_error").style.display = "inline";
	} else {
		document.getElementById("name_error").style.display = "none";
	}
	if (!regexEmail.test(emailField.value)) {
		valid = false;
		document.getElementById("email_error").style.display = "inline";
	} else {
		document.getElementById("email_error").style.display = "none";
	}
	
	// friend
	if (form.gift_to_friend.checked) {
		if (!regexName.test(form.friend_name.value)) {
			valid = false;
			document.getElementById("friend_name_error").style.display = "inline";
		} else {
			document.getElementById("friend_name_error").style.display = "none";
		}
		if (!regexEmail.test(form.friend_email.value)) {
			valid = false;
			document.getElementById("friend_email_error").style.display = "inline";
		} else {
			document.getElementById("friend_email_error").style.display = "none";
		}
	}
	
	return valid;
}




/* Coupon validation */
var coupons_cache = null;
var salt = null;
var requesting = false;
var request_coupon = null;

function loadCoupons () {
	if (!requesting) {
		requesting = true;
		new Ajax.Request (URL_PREFIX+'/store/coupons-get.php', {
					method: 'post',
					parameters: 'product='+PRODUCT_NAME,
					onComplete: requestFinished
				}
			);
	}
}

function validateCoupon (input_element) {
	if (coupons_cache) {
		updateCouponUI(input_element.value, getCouponDiscount(input_element.value));
	} else if (input_element.value && input_element.value.length > 0) {
		request_coupon = input_element.value;
		loadCoupons();
	}	
}

function getCouponDiscount(coupon) {
	var hash = SHA1(coupon.toLowerCase()+salt);
	if (coupons_cache[hash] != null) {
		return coupons_cache[hash]['percent_discount'];
	}
	return 0;
}

function requestFinished (reply) {
	var result = reply.responseText.evalJSON(true);
	salt = result['salt'];
	var coupons = result['coupons'];
	
	coupons_cache = new Object();
	for (var i=0; i<coupons.length; i++) {
		if (coupons[i] && coupons[i]['hash']) {
			coupons_cache[coupons[i]['hash']] = coupons[i];
		}
	}
	
	if (request_coupon) {
		updateCouponUI(request_coupon, getCouponDiscount(request_coupon));
	}
	
	requesting = false;
	request_coupon = null;
}

function updateCouponUI (code, percent_discount) {
	var element = document.getElementById('coupon_discount_msg');
	if (percent_discount > 0 && percent_discount <= 1) {
		discount = new Number(percent_discount*100);
		element.innerHTML = discount.toFixed(0)+"% off "+PRODUCT_NAME;
		element.style.display = "inline";
	} else if (!code || code.length == 0) {
		element.innerHTML = "";
		element.style.display = "none";
	} else {
		element.innerHTML = "Invalid code";
		element.style.display = "inline";
	}
	
	coupon_discount_percent = percent_discount;
	updateTotal(CBcurrent);
}
