/**
 * Autosearch object
 */
function AjaxSearch(fieldId) {
	// Save field id to object
	this.fieldId = fieldId;
	
	// Default values
	// - Was ajax aborted (used in __returnSearch)
	this.__ajaxAborted = false;
	// - Query params
	this.__queryParams = $H({ });
	// - Search url
	this.__searchUrl = site_url +'/_action/search.php';
	// - Has printed result?
	this.__hasPrintedResult = false;
	
	// Start observing key up
	Event.observe(this.fieldId, 'keyup', this.__onKeyUp.bindAsEventListener(this));
	// Start observing mouse click
	Event.observe(this.fieldId, 'click', this.__onClick.bindAsEventListener(this));
	// Start observing on blur
	Event.observe(this.fieldId, 'blur', this.__onBlur.bindAsEventListener(this));
	
	// Removes autocomplete in browser
	$(this.fieldId).setAttribute('autocomplete', 'off');
}
// Do a search?
AjaxSearch.prototype.__runSearch = function() {
	if (typeof this.__runSearch_PE == "object") {
		this.__runSearch_PE.stop();
	}
	this.__runSearch_PE = new PeriodicalExecuter(this.__sendSearch.bindAsEventListener(this), 0.2);
}
// Send search
AjaxSearch.prototype.__sendSearch = function(pe) {
	// Stop PE
	if (typeof pe == "object") {
		pe.stop();
	}
	// Abort if less then 2 characters
	if ($(this.fieldId).value.length < 3) {
		return true;
	}
	// Show loading
	$('ajax_search_loading').show();
	// Abort old ajax
	if (typeof this.__ajax == "object") {
		this.__ajaxAborted = true;
		this.__ajax.transport.abort();
	}
	// New ajax
	this.__ajaxAborted = false;
	this.__queryParams.set('s', encodeURIComponent($(this.fieldId).value));
	this.__ajax = new Ajax.Request(this.__searchUrl+"?type=no&t="+this.__getQueryRand(), {
		method: 'post', 
		requestHeaders: { Accept: 'application/json' }, 
		evalScripts: false,
		parameters: this.__queryParams, 
		onComplete: this.__returnSearch.bindAsEventListener(this),
		onFailure: this.__returnSearchFailure.bindAsEventListener(this)
	});
}
// Return a search result
AjaxSearch.prototype.__returnSearch = function(transporter) {
	// Set printed result false as standard
	this.__hasPrintedResult = false;
	// Was aborted, ignore
	if (this.__ajaxAborted) {
		return true;
	}
	// Hide loading
	$('ajax_search_loading').hide();
	// Make sure result area is visible
	this.__viewSearchResultArea();
	// Get json
	var json = transporter.responseText.evalJSON(true);
	// Ok result
	if (json['status'] == 1) {
		$('ajax_search_games').update(json['games']);
		var num_hits_total = (json['games_hits']);
		this.__hasPrintedResult = true;
	}
}
// Returned a search with error
AjaxSearch.prototype.__returnSearchFailure = function(transporter) {
	// Do nothing
}
// Get query random
AjaxSearch.prototype.__getQueryRand = function() {
	var date = new Date;
	var timestamp = date.getTime();
	return timestamp;
}
// View search result area
AjaxSearch.prototype.__viewSearchResultArea = function() {
	if (!$('ajax_search').visible()) {
		$('ajax_search').show();
	}
}
// Hide search result area
AjaxSearch.prototype.__hideSearchResultArea = function() {
	if ($('ajax_search').visible()) {
		$('ajax_search').hide();
	}
}
// Same but called from PE
AjaxSearch.prototype.__hideSearchResultArea_PE = function(pe) {
	pe.stop();
	this.__hideSearchResultArea();
}
// On mouse click
AjaxSearch.prototype.__onClick = function(e) {
	if (this.__hasPrintedResult && $(this.fieldId).value != "") {
		this.__viewSearchResultArea();
	}
}
// On blur observer
AjaxSearch.prototype.__onBlur = function(e) {
	new PeriodicalExecuter(this.__hideSearchResultArea_PE.bindAsEventListener(this), 0.2);
}
// On key up observer
AjaxSearch.prototype.__onKeyUp = function(e) {
	switch(e.keyCode) {
	
		// Backspace
		case Event.KEY_BACKSPACE:
			if ($(this.fieldId).value == "") {
				this.__hideSearchResultArea();
			}
			else {
				this.__runSearch();
			}
		break;
	
		// Tab
		case Event.KEY_TAB:
		break;
	
		// Retur
		case Event.KEY_RETURN:
		break;
		
		// Esc
		case Event.KEY_ESC:
			this.__onBlur();
		break;
		
		// Left
		case Event.KEY_LEFT:
		break;
		
		// Right
		case Event.KEY_RIGHT:
		break;
		
		// Up
		case Event.KEY_UP:
		break;
		
		// Down
		case Event.KEY_DOWN:
		break;
		
		// Delete
		case Event.KEY_DELETE:
			this.__runSearch();
		break;
		
		// Home
		case Event.KEY_HOME:
		break;
		
		// End
		case Event.KEY_END:
		break;
		
		// Page up
		case Event.KEY_PAGEUP:
		break;
		
		// Page down
		case Event.KEY_PAGEDOWN:
		break;
		
		// Other
		default:
			this.__runSearch();
		break;		
		
	}
}

/**
 * Review object
 */
var Review = new Object;
Review = {

	/**
	 * Report a review
	 */
	report: function(reviewId, linkId) {
		if (confirm(Messages['reviews']['wish_to_report'])) {
			var url = site_url +'/_action/product/review/report.php';
			var pars = { 'id':reviewId, 'type':'no' };
			var myAjax = new Ajax.Request(url, {
				method: 'post', 
				requestHeaders: { Accept: 'application/json' }, 
				evalScripts: false,
				parameters: pars, 
				// Success
				onSuccess: function(transport) {
					// Get json
					var json = transport.responseText.evalJSON(true);
					// Ok
					if (json['status'] == 1) {
						alert(json['ok_msg']);
					}
					// Error
					else {
						alert(json['error_msg']);
					}
				},
				// Failure
				onFailure: function(transport) {
					// Do nothing
				}
			});
		}
	}
	
}



/**
 * Character count
 * Number field should be a html field (for example a <span>).
 * Text field should be a <input> or <textfield> 
 */
function characterCount(textFieldId, numberFieldId, maxLength) {
	var new_length = maxLength - $(textFieldId).value.length;
	$(numberFieldId).update(new_length);
	if (new_length <= 0) {
		$(textFieldId).value = $(textFieldId).value.substring(0, maxLength);
	}
}



/**
 * Auto empty form on focus 
 * - Also adds and removes a specified class name on the input field
 */
function emptyForm_onFocus(id, stdValue, className) {
	if ($(id).value == stdValue) {
		$(id).value = "";
		if (typeof className !== "undefined") {
			$(id).removeClassName(className);
		}
	}
}
function emptyForm_onBlur(id, stdValue, className) {
	if ($(id).value == "") {
		$(id).value = stdValue;
		if (typeof className !== "undefined") {
			$(id).addClassName(className);
		}
	}
}


/**
 * Kreditor invoices
 */
var Kreditor = new Object;
Kreditor = {

	// Num addresses on last fetch
	num_addresses: 0,

	/**
	 * Get address
	 */
	getAddress: function() {
		var cno = $('send_civic_number').value;
		if (cno == "") {
			alert(Messages['checkout']['enter_civic_number']);
		}
		else {
			$('Kreditor_loading').show();
			$('Kreditor_next_button').hide();
			var url = site_url +'/_action/checkout/kreditor/get_address.php';
			var pars = { 'cno':cno, 'type':'no' };
			var myAjax = new Ajax.Request(url, {
				method: 'post', 
				requestHeaders: { Accept: 'application/json' }, 
				evalScripts: false,
				parameters: pars, 
				// Success
				onSuccess: function(transport) {
					// Get json
					var json = transport.responseText.evalJSON(true);
					$('Kreditor_loading').hide();
					// Ok
					if (json['error'] == 0) {
						Kreditor.__printAddresses(json['addresses']);
						$('Kreditor_next_button').show();
					}
					// Error
					else {
						alert(json['error_msg']);
					}
				},
				// Failure
				onFailure: function(transport) {
					// Do nothing
				}
			});
		}
	},
	
	/**
	 * Print addresses
	 */
	__printAddresses: function(addresses) {
		$('Kreditor_address_output').update('');
		this.num_addresses = addresses.length;
		for (var i=0, length=addresses.length; i<length; i++) {
			$('Kreditor_address_output').insert({ bottom:addresses[i] });
		}
	}
	
}
 

/**
 * Checkout object
 */
var Checkout = new Object;
Checkout = {
	
	/**
	 * Set payment option
	 */
	setPaymentOption: function(type, subType) {
		// Save in memory
		this.__paymentType = type;
		this.__paymentSubType = subType;
		// Get product details list
		var product_details = $('productlist_order').childElements();
		// View correct personal information
		switch (this.__paymentType) {
			
			// Credit card
			case "CC":
				$('checkoutBarCard1').show();
				$('checkoutBarInvoice1').hide();
				$('checkoutBarCode1').hide();
				
				if($('ccFillBox')){$('ccFillBox').show()};
				if($('ngtFillBox')){$('ngtFillBox').hide()};
				if($('cardFillBox')){$('cardFillBox').hide()};
				
				if($('adminfee_cc')){$('adminfee_cc').show()};
				if($('adminfee_klarna')){$('adminfee_klarna').hide()};
				if($('adminfee_none')){$('adminfee_none').hide()};
				if($('totalSum')){$('totalSum').hide()};
				if($('totalSumAdmin')){$('totalSumAdmin').show()};
				
				for (var i=0, length=product_details.length; i<length; i++) {
					if (product_details[i].id.indexOf('addcc_') !== -1) {
						product_details[i].show();
					}
				}
			break;

			// NextGenTel
			case "NextGenTel":
				$('checkoutBarCard1').hide();
				$('checkoutBarInvoice1').show();
				$('checkoutBarCode1').hide();
				
				if($('ccFillBox')){$('ccFillBox').hide()};
				if($('ngtFillBox')){$('ngtFillBox').show()};
				if($('cardFillBox')){$('cardFillBox').hide()};
				
				if($('adminfee_cc')){$('adminfee_cc').hide()};
				if($('adminfee_klarna')){$('adminfee_klarna').hide()};
				if($('adminfee_none')){$('adminfee_none').show()};
				if($('totalSum')){$('totalSum').show()};
				if($('totalSumAdmin')){$('totalSumAdmin').hide()};
						
				for (var i=0, length=product_details.length; i<length; i++) {
					if (product_details[i].id.indexOf('addcc_') !== -1) {
						product_details[i].hide();
					}
				}
			break;
			
			// Ztorm Card
			case "ZtormCard":
				$('checkoutBarCard1').hide();
				$('checkoutBarInvoice1').hide();
				$('checkoutBarCode1').show();
				
				if($('ccFillBox')){$('ccFillBox').hide()};
				if($('ngtFillBox')){$('ngtFillBox').hide()};
				if($('cardFillBox')){$('cardFillBox').show()};
				
				if($('adminfee_cc')){$('adminfee_cc').hide()};
				if($('adminfee_klarna')){$('adminfee_klarna').hide()};
				if($('adminfee_none')){$('adminfee_none').show()};
				if($('totalSum')){$('totalSum').show()};
				if($('totalSumAdmin')){$('totalSumAdmin').hide()};
				
				for (var i=0, length=product_details.length; i<length; i++) {
					if (product_details[i].id.indexOf('addcc_') !== -1) {
						product_details[i].hide();
					}
				}
			break;
			
		}
	},
	
	/**
	 * Next step in payment process (Dibs or confirm page)
	 */
	next: function() {
	
		var submitForm = "";
		
		$$('div.checkout_address').each(function(n){
			n.style.display = "none";
		});
		
		$$('div.checkout_country').each(function(n){
			n.style.display = "none";
		});
		
		$$('div.checkout_email').each(function(n){
			n.style.display = "none";
		});
		
		$$('div.checkout_username').each(function(n){
			n.style.display = "none";
		});
		
		$$('div.checkout_eula').each(function(n){
			n.style.display = "none";
		});
		
		switch (this.__paymentType) {
			// Credit card
			case "CC":
				var method = $('cc_method').value;
				var cardtype = $('cc_cardtype').value;
				var billingCountry = $('cc_billingCountry').value;
				
				if($('cc_eula_approve').checked == false){
					$$('div.checkout_eula').each(function(n){
						n.style.display = "block";
						n.innerHTML = "<span class=\"error\">" + Messages['checkout']['approve_eula'] + "</span>";
					});
				}
				else if ($('CC_eMail').value == "") {
					$$('div.checkout_email').each(function(n){
						n.style.display = "block";
						n.innerHTML = "<span class=\"error\">" + Messages['checkout']['enter_all_address_information'] + "</span>";
					});
				}
				else if ($('CC_eMail').value != $('CC_eMail_confirm').value) {
					$$('div.checkout_email').each(function(n){
						n.style.display = "block";
						n.innerHTML = "<span class=\"error\">" + Messages['checkout']['email_not_same'] + "</span>";
					});
				}
				else if ($('cc_forceAllAddressFields').value == 1 && ($('cc_billingFirstName').value == "" || $('cc_billingLastName').value == "" || $('cc_billingAddress').value == "" || $('cc_billingZipCode').value == "" || $('cc_billingCity').value == "")) {
					$$('div.checkout_address').each(function(n){
						n.style.display = "block";
						n.innerHTML = "<span class=\"error\">" + Messages['checkout']['enter_all_address_information'] + "</span>";
					});
				}
				else if (this.flags['cct'] || (method !== "" && cardtype !== "")) {
					if (billingCountry !== "false") {
						$('payment_cc').writeAttribute({ action:this.flags['ccurl'] });
						
						//Register or log in user and create order via AJAX
						if($('cc_allow_email').checked == true){
							$allow_email = 1;
						}else{
							$allow_email = 0;
						}
						
						if($('CC_userName') != null){
							var username = $('CC_userName').value;
						}else{
							var username = '';
						}
						
						if($('CC_billingMobilePhone') != null){
							var mobile = $('CC_billingMobilePhone').value;
						}else{
							var mobile = '';
						}
				
						var url = site_url +'/_action/checkout/login_register.php';
						var pars = { 'type':'no', 'paymentType':this.__paymentType, 'email':$('CC_eMail').value, 'civic_number':'DDMMYY-XXXXX', 'allow_email':$allow_email, 'firstname':$('cc_billingFirstName').value, 'lastname':$('cc_billingLastName').value, 'address':$('cc_billingAddress').value, 'postal':$('cc_billingZipCode').value, 'city':$('cc_billingCity').value, 'username':username, 'mobile':mobile };
						var myAjax = new Ajax.Request(url, {
							method: 'post', 
							requestHeaders: { Accept: 'application/json' }, 
							evalScripts: false,
							parameters: pars, 
							// Success
							onSuccess: function(transport) {
								// Get json
								var json = transport.responseText.evalJSON(true);
								
								// Ok
								if (json['error'] == 0) {
									if(json['mac_data'] != null){
										$('dibsData').value = json['dibs_data'];
										$('dibsOrderId').value = json['dibs_order_id'];
										$('dibsMac').value = json['mac_data'];
									}else{
										$('cryptoData').value = json['crypto_data'];
									}
								
									$('payment_cc').writeAttribute({ action:json['cc_post_url'] });
									$('payment_cc').submit();
								}
								// Error
								else if (json['error'] == 1) {
									var showdivs = 'div' + json['error_loc'];
									$$('div.').each(function(n){
										n.style.display = "block";
										n.innerHTML = "<span class=\"error\">" + json['error_msg'] + "</span>";
									});
								}
								// Error that requires page reload
								else if (json['error'] == 2) {
									alert(json['error_msg']);
									document.location.reload();
								}
							},
							// Failure
							onFailure: function(transport) {
								alert(json['error_msg']);
							}
						});
					}
					else {
						$$('div.checkout_country').each(function(n){
							n.style.display = "block";
							n.innerHTML = "<span class=\"error\">" + Messages['checkout']['choose_country'] + "</span>";
						});
					}
				}
				else {
					$('checkout_cc').style.display = "block";
					$('checkout_cc').innerHTML = "<span class=\"error\">" + Messages['checkout']['choose_cc'] + "</span>";
				}
			break;
			
			// NextGenTel
			case "NextGenTel":
				// Check selected
				var selected_index = null;
				if($('nextgentel_eula_approve').checked == false){
					$('checkout_paymenterror').style.display = "block";
					$('checkout_paymenterror').innerHTML = "<span class=\"error\">" + Messages['checkout']['select_payment_method'] + "</div>";
				}
				else if ($('NextGenTel_eMail').value == "") {
					$$('div.checkout_email').each(function(n){
						n.style.display = "block";
						n.innerHTML = "<span class=\"error\">" + Messages['checkout']['enter_all_address_information'] + "</span>";
					});
				}
				else if ($('NextGenTel_eMail').value != $('NextGenTel_eMail_confirm').value) {
					$$('div.checkout_email').each(function(n){
						n.style.display = "block";
						n.innerHTML = "<span class=\"error\">" + Messages['checkout']['email_not_same'] + "</span>";
					});
				}
				else{					
					//Register or log in user and create order via AJAX
					if($('nextgentel_allow_email').checked == true){
						$allow_email = 1;
					}else{
						$allow_email = 0;
					}
					
					if($('NextGenTel_userName') != null){
						var username = $('NextGenTel_userName').value;
					}else{
						var username = '';
					}
					
					if($('NextGenTel_billingMobilePhone') != null){
						var mobile = $('NextGenTel_billingMobilePhone').value;
					}else{
						var mobile = '';
					}
					
					var url = site_url +'/_action/checkout/login_register.php';
					var pars = { 'type':'no', 'paymentType':this.__paymentType, 'email':$('NextGenTel_eMail').value, 'civic_number':'DDMMYY-XXXXX', 'allow_email':$allow_email, 'username':username, 'mobile':mobile };
					var myAjax = new Ajax.Request(url, {
						method: 'post', 
						requestHeaders: { Accept: 'application/json' }, 
						evalScripts: false,
						parameters: pars, 
						// Success
						onSuccess: function(transport) {
							// Get json
							var json = transport.responseText.evalJSON(true);
							
							// Ok
							if (json['error'] == 0) {
								$('payment_NextGenTel').submit();
							}
							// Error
							else if (json['error'] == 1) {
								var showdivs = 'div' + json['error_loc'];
								$$('div.').each(function(n){
									n.style.display = "block";
									n.innerHTML = "<span class=\"error\">" + json['error_msg'] + "</span>";
								});
							}
							// Error that requires page reload
							else if (json['error'] == 2) {
								alert(json['error_msg']);
								document.location.reload();
							}
						},
						// Failure
						onFailure: function(transport) {
							alert(json['error_msg']);
						}
					});
				}
			break;
			
			// Ztorm Card
			case "ZtormCard":
				if ($('ZtormCardInput').value == "") {
					$('checkout_ztormcard'.style.display = "block");
					$('checkout_ztormcard').innerHTML = "<span class=\"error\">" + Messages['checkout']['enter_ztormcard_code'] + "</span>";
				}
				else if ($('ZtormCard_eMail').value == "") {
					$$('div.checkout_email').each(function(n){
						n.style.display = "block";
						n.innerHTML = "<span class=\"error\">" + Messages['checkout']['enter_all_address_information'] + "</span>";
					});
				}
				else if ($('ZtormCard_eMail').value != $('ZtormCard_eMail_confirm').value) {
					$$('div.checkout_email').each(function(n){
						n.style.display = "block";
						n.innerHTML = "<span class=\"error\">" + Messages['checkout']['email_not_same'] + "</span>";
					});
				}
				else if ($('zc_forceAllAddressFields').value == 1 && ($('zc_billingFirstName').value == "" || $('zc_billingLastName').value == "" || $('zc_billingAddress').value == "" || $('zc_billingZipCode').value == "" || $('zc_billingCity').value == "")) {
					$$('div.checkout_address').each(function(n){
						n.style.display = "block";
						n.innerHTML = "<span class=\"error\">" + Messages['checkout']['enter_all_address_information'] + "</span>";
					});
				}
				else if($('zc_eula_approve').checked == false){
					$$('div.checkout_eula').each(function(n){
						n.style.display = "block";
						n.innerHTML = "<span class=\"error\">" + Messages['checkout']['approve_eula'] + "</span>";
					});
				}
				else {
					$('ztormcard_card').value = $('ZtormCardInput').value;
					
					//Register or log in user and create order via AJAX
					if($('zc_allow_email').checked == true){
						$allow_email = 1;
					}else{
						$allow_email = 0;
					}
					
					if($('zc_userName') != null){
						var username = $('zc_userName').value;
					}else{
						var username = '';
					}
					
					if($('zc_billingMobilePhone') != null){
						var mobile = $('zc_billingMobilePhone').value;
					}else{
						var mobile = '';
					}
					
					var url = site_url +'/_action/checkout/login_register.php';
					var pars = { 'type':'no', 'paymentType':this.__paymentType, 'email':$('ZtormCard_eMail').value, 'civic_number':'DDMMYY-XXXXX', 'allow_email':$allow_email, 'firstname':$('zc_billingFirstName').value, 'lastname':$('zc_billingLastName').value, 'address':$('zc_billingAddress').value, 'postal':$('zc_billingZipCode').value, 'city':$('zc_billingCity').value, 'username':username, 'mobile':mobile };
					var myAjax = new Ajax.Request(url, {
						method: 'post', 
						requestHeaders: { Accept: 'application/json' }, 
						evalScripts: false,
						parameters: pars, 
						// Success
						onSuccess: function(transport) {
							// Get json
							var json = transport.responseText.evalJSON(true);
							
							// Ok
							if (json['error'] == 0) {
								$('payment_ZtormCard').submit();
							}
							// Error
							else if (json['error'] == 1) {
								var showdivs = 'div' + json['error_loc'];
								$$('div.').each(function(n){
									n.style.display = "block";
									n.innerHTML = "<span class=\"error\">" + json['error_msg'] + "</span>";
								});
							}
							// Error that requires page reload
							else if (json['error'] == 2) {
								alert(json['error_msg']);
								document.location.reload();
							}
						},
						// Failure
						onFailure: function(transport) {
							alert(json['error_msg']);
						}
					});
				}
			break;
			
			// No payment selected
			default:
				$('checkout_paymenterror').style.display = "block";
				$('checkout_paymenterror').innerHTML = "<span class=\"error\">" + Messages['checkout']['select_payment_method'] + "</div>";
			break;
			
		}
	}
}


/**
 * Toggle product containers (Used for similar products for example) 
 */
function toggleProductContainers(containerId, productContainerId, viewProductId) {
	// Get all possible products
	var product_elements = $(containerId).childElements();
	if (typeof product_elements == "object") {
		// Loop and hide all
		for (var i=0; i<product_elements.length; i++) {
			product_elements[i].hide();
			$(product_elements[i].id +'_li').removeClassName('active');
		}
		// Show the one
		$(productContainerId +'_'+ viewProductId).show();
		$(productContainerId +'_'+ viewProductId +'_li').addClassName('active');
	}
}


/**
 * Show full black cover
 */
function showCoverAll() {
	var doc_height = ($('page_body').getHeight() + 50) ;
	var viewport_height = document.viewport.getHeight();
	var set_height = (doc_height > viewport_height ? doc_height:viewport_height);
	$('page_cover_full').setStyle({ width:document.viewport.getWidth() + "px", height:set_height+ "px" });
	
	if (!$('page_cover_full').visible()) {
		//$('page_cover_full').setOpacity(0.4);
		//$('page_cover_full').show();
		$('page_cover_full').appear({ duration:'0.3', from:'0', to:'0.4' });
	}
}

/**
 * Hide full black cover
 */
function hideCoverAll() {
	if ($('page_cover_full').visible()) {
		//$('page_cover_full').hide();
		$('page_cover_full').hide({ duration:'0.3', from:'0.4', to:'0' });
	}
}


/**
 * Star vote object
 */
var StarVote = new Object;
StarVote = {

	// Active image for preload
	__imgActive: new Image(),
	// Inactive image for preload
	__imgInctive: new Image(),
	// Active image for preload
	__imgLargeActive: new Image(),
	// Inactive image for preload
	__imgLargeInactive: new Image(),
	
	/**
	 * Vote (click)
	 */
	vote: function(overIndex, id, productId) {
		var url = site_url +'/_action/product/vote.php';
		var pars = { 'product':productId, 'vote':overIndex };
		var myAjax = new Ajax.Request(url, {
			method: 'post', 
			requestHeaders: { Accept: 'application/json' }, 
			evalScripts: false,
			parameters: pars, 
			// Success
			onSuccess: function(transport) {
				// Get json
				var json = transport.responseText.evalJSON(true);
				// Ok
				if (json['status'] == 1) {
					StarVote.setActive(id, json['current_stars']);
					$('star_'+ id +'_container').writeAttribute({ onmouseout:'javascript:StarVote.setActive(\''+ id +'\', \''+ json['current_stars'] +'\');' });
					alert(json['msg']);
				}
				// Error
				else {
					alert(json['msg']);
				}
			},
			// Failure
			onFailure: function(transport) {
				// Do nothing
			}
		});
	},
	
	/**
	 * Vote in review form (click)
	 */
	reviewvote: function(overIndex, id, objectToSet) {
		$(objectToSet).value = overIndex;
		StarVote.setActiveLarge(id, overIndex);
		$('star_'+ id +'_container').writeAttribute({ onmouseout:'javascript:StarVote.setActiveLarge(\''+ id +'\', \''+ overIndex +'\');' });
	},
	
	/**
	 * Mouse over a star
	 */
	over: function(overIndex, id, activeStars) {
		this.setActive(id, overIndex);
	},
	
	/**
	 * Mouse over a large star
	 */
	overlarge: function(overIndex, id, activeStars) {
		this.setActiveLarge(id, overIndex);
	},
	
	/**
	 * Set active large stars
	 */
	setActive: function(id, activeStars) {
		for (var i=1; i<=5; i++) {
			if (i <= activeStars) {
				$('star_'+ id +'_'+ i).src = this.__imgActive.src;
			}
			else {
				$('star_'+ id +'_'+ i).src = this.__imgInctive.src;
			}
		}
	},
	
	/**
	 * Set active large stars
	 */
	setActiveLarge: function(id, activeStars) {
		for (var i=1; i<=5; i++) {
			if (i <= activeStars) {
				$('star_'+ id +'_'+ i).src = this.__imgLargeActive.src;
			}
			else {
				$('star_'+ id +'_'+ i).src = this.__imgLargeInactive.src;
			}
		}
	}
	
}
// Preload
StarVote.__imgActive.src = site_dir +'/_images/icons/star_xx.gif';
StarVote.__imgInctive.src = site_dir +'/_images/icons/star_oo.gif';
StarVote.__imgLargeActive.src = site_dir +'/_images/icons/star_large_xx.gif';
StarVote.__imgLargeInactive.src = site_dir +'/_images/icons/star_large_oo.gif';


/**
 * Cart object
 */
var Cart = new Object;
Cart = {

	/**
	 * View cart
	 */
	view: function() {
		// Cover page
		showCoverAll();
		// Show basket
		//$('basket_large').show();
		$('basket_large').appear({ duration:'0.3' });
		// Update content
		this.__updateLargeCartHtml();
	},
	
	/**
	 * Close cart
	 */
	close: function() {
		// Remove page cover
		hideCoverAll();
		// Hide basket
		//$('basket_large').hide();
		$('basket_large').fade({ duration:'0.3' });
		// Update standard basket
		this.__updateSmallCartHtml();
	},
	
	/**
	 * Remove from cart
	 */
	remove: function(id) {
		var url = site_url +'/_action/cart/remove.php';
		var pars = {'type':'no', 'id':id };
		var myAjax = new Ajax.Request(url, {
			method: 'post', 
			requestHeaders: { Accept: 'application/json' }, 
			evalScripts: false,
			parameters: pars, 
			// Success
			onSuccess: function(transport) {
				// Get json
				var json = transport.responseText.evalJSON(true);
				// Ok
				if (json['status'] == 1) {
					Cart.__updateLargeCartHtml();
				}
				// Error
				else {
					$('cart_message').style.display = "block";
					$('cart_message').innerHTML = "<span class=\"error\">" + json['error'] + "</span>";
				}
			},
			// Failure
			onFailure: function(transport) {
				// Do nothing
			}
		});
	},

	/**
	 * Add to cart
	 */
	add: function(id, isGiftcard) {
		var url = site_url +'/_action/cart/add.php';
		var pars = { 'type':'no', 'id':id, 'giftcard':isGiftcard };
		var myAjax = new Ajax.Request(url, {
			method: 'post', 
			requestHeaders: { Accept: 'application/json' }, 
			evalScripts: false,
			parameters: pars, 
			// Success
			onSuccess: function(transport) {
				// Get json
				var json = transport.responseText.evalJSON(true);
				// Ok
				if (json['error_code'] == 0) {
					//Cart.__updateSmallCartHtml();
					Cart.__updateLargeCartHtml();
					Cart.view();
					$('basket_large').scrollTo();
					if (json['message'] != "") {
						$('cart_message').style.display = "block";
						$('cart_message').innerHTML = "<span class=\"error\">" + json['message'] + "</span>";
					}
				}
				// Error
				else {
					$('cart_message').style.display = "block";
					$('cart_message').innerHTML = "<span class=\"error\">" + json['error'] + "</span>";
				}
			},
			// Failure
			onFailure: function(transport) {
				// Do nothing
			}
		});
	},
	
	/**
	 * Add from options form
	 */
	addFromOptions: function() {
		var formObj = $('purchase_options');
		var value = "";
		for (var i=0; i<formObj['purchase_option'].length; i++) {
			var id = formObj['purchase_option'][i].id;
			if ($(id).checked) {
				value = $(id).value;
				break;
			}
		}
		if (value !== "") {
			var temp = value.split('.');
			this.add(temp[0], temp[1]);
		}
		else {
			alert(Messages['cart']['choose_payment_option']);
		}
	},
	
	/**
	 * Add single item, then go to checkout
	 */
	addSingleToCheckout: function(id, isGiftcard, storeType) {
		var url = site_url +'/_action/cart/add_to_checkout.php';
		var pars = { 'id':id, 'giftcard':isGiftcard, 'type':'no' };
		var myAjax = new Ajax.Request(url, {
			method: 'post', 
			requestHeaders: { Accept: 'application/json' }, 
			evalScripts: false,
			parameters: pars, 
			// Success
			onSuccess: function(transport) {
				// Get json
				var json = transport.responseText.evalJSON(true);
				// Ok
				if (json['ok']) {
					if (json['message'] != "") {
						$('cart_message').style.display = "block";
						$('cart_message').innerHTML = "<span class=\"error\">" + json['message'] + "</span>";
					}
					document.location = json['checkout_url'];
				}
				// Error
				else {
					$('cart_message').style.display = "block";
					$('cart_message').innerHTML = "<span class=\"error\">" + json['error'] + "</span>";
				}
			},
			// Failure
			onFailure: function(transport) {
				// Do nothing
			}
		});
	},
	
	/**
	 * Empty cart
	 */
	empty: function() {
		var url = site_url +'/_action/cart/empty.php';
		var myAjax = new Ajax.Request(url, {
			method: 'get',  
			requestHeaders: { Accept: 'application/json' }, 
			evalScripts: false,
			// Success
			onSuccess: function(transport) {
				// Get json
				var json = transport.responseText.evalJSON(true);
				// Update cart
				Cart.__updateSmallCartHtml();
			},
			// Failure
			onFailure: function(transport) {
				// Do nothing
			}
		});
	},
	
	/**
	 * Update cart html
	 */
	__updateSmallCartHtml: function() {
		var url = site_url +'/_action/cart/get.php?type=no';
		var myAjax = new Ajax.Request(url, {
			method: 'get',  
			requestHeaders: { Accept: 'application/json' }, 
			evalScripts: false,
			// Success
			onSuccess: function(transport) {
				// Get json
				var json = transport.responseText.evalJSON(true);
				// Update cart
				$('basket_small').update(json['list']);
			},
			// Failure
			onFailure: function(transport) {
				// Do nothing
			}
		});
	},
	
	/**
	 * Update large cart html
	 */
	__updateLargeCartHtml: function() {
		var url = site_url +'/_action/cart/get.php';
		var pars = { 'type':'no', 'full':'1' };
		var myAjax = new Ajax.Request(url, {
			method: 'get',  
			parameters: pars,
			requestHeaders: { Accept: 'application/json' }, 
			evalScripts: false,
			// Success
			onSuccess: function(transport) {
				// Get json
				var json = transport.responseText.evalJSON(true);
				// Hide loading
				$('basket_large_progress').hide();
				// Update cart
				$('basket_large_content').update(json['list']);
				$('basket_large_alsobought').update(json['also_bought']);
				// No products = Reload page
				if (json['products'] == 0) {
					document.location.reload();
				}
			},
			// Failure
			onFailure: function(transport) {
				// Hide loading
				$('basket_large_progress').hide();
				// Set error
				$('basket_large_content').update('<br/>An error occured ...<br/><br/>');
			}
		});
	}
	
}



/**
 * Info tab object
 */
var InfoTab = new Object;
InfoTab = {

	/**
	 * Activate a tab
	 */
	activate: function(numTabs, id, clickId) {
		// Loops through tabs
		var elements = $$('div.info_tabs_content');
		for (var i=0, end=elements.length; i<end; i++) {
			if (elements[i].id == 'InfoTab_'+ id +'_'+ clickId +'_content') {
				// Show content
				elements[i].show();
				// Activate tab
				var tab = elements[i].id.replace('_content', '_');
				$(tab +'tl').addClassName('active_left');
				$(tab +'tc').addClassName('active');
				$(tab +'tr').addClassName('active_right');
				$(tab +'tl').removeClassName('inactive_left');
				$(tab +'tc').removeClassName('inactive');
				$(tab +'tr').removeClassName('inactive_right');
			}
			else {
				// Hide content
				elements[i].hide();
				// Activate tab
				var tab = elements[i].id.replace('_content', '_');
				$(tab +'tl').addClassName('inactive_left');
				$(tab +'tc').addClassName('inactive');
				$(tab +'tr').addClassName('inactive_right');
				$(tab +'tl').removeClassName('active_left');
				$(tab +'tc').removeClassName('active');
				$(tab +'tr').removeClassName('active_right');
			}
		}
	}
	
}



/**
 * Category List Object
 */
var Category = new Object;
Category = {
	
	/**
	 * Show next level
	 */
	showNextLevel: function(containerId, clickId) {
		// Get all <li>
		var elements = $(containerId).childElements();
		// Click is submenu
		var clickIsSubmenu = clickId.include('submenu');
		// Start looping through
		for (var i=0; i<elements.length; i++) {
			// Click is first menu
			if (!clickIsSubmenu) {
				// Found click id
				if (elements[i].id == clickId) {
					elements[i].addClassName('active');
				} 
				// Found a li part of the submenu -> Open
				else if (elements[i].id.include(clickId +'.submenu') && !elements[i].id.include('minormenu')) {
					elements[i].show();
					elements[i].addClassName('subWithActiveTopcategory');
				}
				// Found another type of submenu -> Close
				else if (elements[i].id.include('.submenu')) {
					elements[i].hide();
					elements[i].removeClassName('subWithActiveTopcategory');
				}
				// Found top menu not clicked
				else {
					elements[i].removeClassName('active');
				}
			}
			// Click is on a submenu
			else {
				// Found click id
				if (elements[i].id == clickId) {
					elements[i].addClassName('activeSubcategory');
				}
				// Found a li part of the minormenu -> Open
				else if (elements[i].id.include(clickId +'.minormenu')) {
					elements[i].show();
					elements[i].addClassName('minorWithActiveSubcategory');
				}
				// Found another type of minor menu -> Close
				else if (elements[i].id.include('minormenu')) {
					elements[i].hide();
				}
				// Found submenu not clicked
				else {
					elements[i].removeClassName('activeSubcategory');
				}
			}
		}
	}
	
}

/**
 * OverlayBox object
 */
function OverlayBox(id) {
	this.BoxId = id;
}
OverlayBox.prototype.view = function() {
	// Cover page
	showCoverAll();
	// Show container
	if (!$(this.BoxId).visible()) {
		//$(this.BoxId).show();
		$(this.BoxId).appear({ duration:'0.3' });
	}
}
OverlayBox.prototype.close = function() {
	// Remove page cover
	hideCoverAll();
	// Hide container
	if ($(this.BoxId).visible()) {
		//$(this.BoxId).hide();
		$(this.BoxId).fade({ duration:'0.3' });
	}
}
OverlayBox.prototype.closeAndSet = function(setSessionIn) {
	// Remove page cover
	hideCoverAll();
	// Hide container
	if ($(this.BoxId).visible()) {
		var url = site_url +'/_action/product/set_os_warning.php';
		var pars = { 'os_warning':setSessionIn };
		var myAjax = new Ajax.Request(url, {
			method: 'get',  
			parameters: pars,
			requestHeaders: { Accept: 'application/json' }, 
			evalScripts: false,
			// Success
			onSuccess: function(transport) {
				//Do nothing
			},
			// Failure
			onFailure: function(transport) {
				//Do nothing
			}
		});
		
		$(this.BoxId).fade({ duration:'0.3' });
	}
}


// Empty form on focus
function emptyForm_onFocus(obj, std_value) {
	if (obj.value == std_value) {
		obj.value = "";
	}
}
// Reset form on blur
function emptyForm_onBlur(obj, std_value) {
	if (obj.value == "") {
		obj.value = std_value;
	}
}


function showField(displayIdIn, fieldIdIn, originalValueIn)
{
	if(originalValueIn == $(fieldIdIn).value){
		$(displayIdIn).hide();
		$('usr_email_update').value = 0;
	}else{
		$(displayIdIn).show();
		$('usr_email_update').value = 1;
	}
}

function switchDownloadButton(buttonIdIn)
{
	var buttonId = "dlbutton" + buttonIdIn;
	var inactiveButtonId = buttonId + "_pressed";
	
	$(buttonId).style.display = "none";
	$(inactiveButtonId).style.display = "block";
	
	var linkId = "dllink" + buttonIdIn;
	var inactiveLinkId = linkId + "_pressed";
	$(linkId).style.display = "none";
	$(inactiveLinkId).style.display = "block";
}

function giftcardDisplaySwitch(switchToIn)
{
	if(switchToIn == "giftcard"){
		$("purchase_options_regular").style.display = "none";
		$("purchase_options_giftcard").style.display = "block";
	}else{
		$("purchase_options_giftcard").style.display = "none";
		$("purchase_options_regular").style.display = "block";
	}
}

function showEmailInfo()
{
	$("payment_help_Email").style.display = "block";
}

function checkCardInfo()
{
	var url = site_url +'/_action/checkout/check_card_info.php';
	var pars = { 'card':$('ZtormCardInput').value, 'type':'no' };
	var myAjax = new Ajax.Request(url, {
		method: 'post',  
		parameters: pars,
		requestHeaders: { Accept: 'application/json' }, 
		evalScripts: false,
		// Success
		onSuccess: function(transport) {
			var json = transport.responseText.evalJSON(true);

			if(json['value_found'] == 0){
				$('ZtormCardInfo').innerHTML = "";
			}else{
				if(json['value_exceeded'] == 1){
					$('ZtormCardInfo').innerHTML = Messages['checkout']['card_value_is'] + " <span style=\"color:#DD0000;\">" + json['value'] + "</span>";
					alert(Messages['checkout']['card_value_exceeded']);
				}else{
					$('ZtormCardInfo').innerHTML = Messages['checkout']['card_value_is'] + " <span style=\"color:#00DD00;\">" + json['value'] + "</span>";
				}
			}
		},
		// Failure
		onFailure: function(transport) {
			$('ZtormCardInfo').innerHTML = "";
		}
	});
}

function addNewsletterEmail()
{
	var url = site_url +'/_action/product/add_newsletter_address.php';
	var pars = { 'email':$('newsletterAddEmail').value };
	var myAjax = new Ajax.Request(url, {
		method: 'post',  
		parameters: pars,
		requestHeaders: { Accept: 'application/json' }, 
		evalScripts: false,
		// Success
		onSuccess: function(transport) {
			var json = transport.responseText.evalJSON(true);
			
			alert(json['message']);
			
			$('newsletterAddEmail').value = json['email_value'];
		},
		// Failure
		onFailure: function(transport) {
			$('newsletterAddEmail').value = "E-postadress";
		}
	});
}

function fillField(stringIn, typeIn)
{
	if(typeIn == "off"){
		if(dojo.byId("headerSearchField").value == stringIn){
			dojo.byId("headerSearchField").value = "";
		}
	}else{
		if(dojo.byId("headerSearchField").value == ""){
			dojo.byId("headerSearchField").value = stringIn;
		}
	}
}



function showProductTab(tabNumberIn, maxTabsIn)
{
	for(x=1;x<=maxTabsIn;x++){
		if(x == tabNumberIn){
			dojo.addClass("tab"+x, "tsMenuItemSelected");
			dojo.byId("tab_"+x).style.display = "block";
		}else{
			if(dojo.hasClass("tab"+x, "tsMenuItemSelected")){
				dojo.removeClass("tab"+x, "tsMenuItemSelected");
			}
			dojo.byId("tab_"+x).style.display = "none";
		}
	}
}

function checkValues()
{
	if($('showImagesCheckbox').checked == false){
		$('showImagesCheckbox').checked = true;
		$('showImagesCheckbox').value = 0;
	}
	
	$('filterForm').submit();
}

function openTrailerPlayer()
{
	$('basket_large').scrollTo();
	$('trailerplayer').style.display = "block";
	showCoverAll();
}

function closeTrailerPlayer()
{
	$('trailerplayer').style.display = "none";
	hideCoverAll();
}

function flipMenu(menuIn)
{
	if($(menuIn+'Header')){
		var header = $(menuIn+'Header');
		var ul = $(menuIn+'Ul');
		
		if(ul.style.display == "none"){
			header.setAttribute("class", "parent open");
			ul.style.display = "block";
		}else{
			header.setAttribute("class", "parent");
			ul.style.display = "none";
		}
	}
}
