//global variables
var combinations = new Array();
var selectedCombination = new Array();
var globalQuantity = new Number;
var colors = new Array();

//check if a function exists
function function_exists(function_name)
{
	if (typeof function_name == 'string')
		return (typeof window[function_name] == 'function');
	return (function_name instanceof Function);
}

//execute oosHook js code
function oosHookJsCode()
{
	for (var i = 0; i < oosHookJsCodeFunctions.length; i++)
	{
		if (function_exists(oosHookJsCodeFunctions[i]))
		setTimeout(oosHookJsCodeFunctions[i]+'()', 0);
	}	
}

//add a combination of attributes in the global JS sytem
function addCombination(idCombination, arrayOfIdAttributes, quantity, price, ecotax, id_image, reference)
{
	globalQuantity += quantity;

	var combination = new Array();
	combination['idCombination'] = idCombination;
	combination['quantity'] = quantity;
	combination['idsAttributes'] = arrayOfIdAttributes;
	combination['price'] = price;
	combination['ecotax'] = ecotax;
	combination['image'] = id_image;
	combination['reference'] = reference;
	combinations.push(combination);
}

// search the combinations' case of attributes and update displaying of availability, prices, ecotax, and image
function findCombination()
{
	//create a temporary 'choice' array containing the choices of the customer
	var choice = new Array();
	$('div#attributes select').each(function(){
		choice.push($(this).val());
	});
	var nbAttributesEquals = 0;
	//testing every combination to find the conbination's attributes' case of the user
	
	for (combination in combinations)
	{
		//verify if this combinaison is the same that the user's choice
		nbAttributesEquals = 0;
		for (idAttribute in combinations[combination]['idsAttributes'])
		{
			//ie6 bug fix
			if (idAttribute != 'indexOf'){
				//if this attribute has been choose by user
				if (in_array(combinations[combination]['idsAttributes'][idAttribute], choice))
				{
					//we are in a good way to find the good combination !
					nbAttributesEquals++;
				}
			}
		}

		if (nbAttributesEquals == choice.length)
		{
			//combination of the user has been found in our specifications of combinations (created in back office)
			selectedCombination['unavailable'] = false;
			selectedCombination['reference'] = combinations[combination]['reference'];
			$('#idCombination').val(combinations[combination]['idCombination']);
			$('#reserveren').attr("href","/index.php?m=reserveren&productid=" + id_product + "&combi=" + combinations[combination]['idCombination']);
			//$('#reserveren').attr('href').val("test");
			
			//get the data of product with these attributes
			quantityAvailable = combinations[combination]['quantity'];
	
			if(quantityAvailable <= 0)
			{
				
				//alert(hrefAlt);
				
				$('#voorraad').removeClass();
				$('#voorraad').addClass("red");
				$('#voorraad').attr("title","Niet op voorraad, wel te reserveren");
				$('#voorraad').html("Niet op voorraad, wel te reserveren");
					
			
				 				
			}			
			if(quantityAvailable <= 5  && quantityAvailable >= 1)
			{
				$('#voorraad').removeClass();
				$('#voorraad').toggleClass("orange"); 	
				$('#voorraad').attr("title","Beperkt (minder dan 5 stuks)");	
				$('#voorraad').html("Beperkt (minder dan 5 stuks)");			
			}
			if(quantityAvailable >= 6 && quantityAvailable <= 24)
			{
				$('#voorraad').removeClass();
				$('#voorraad').addClass("light");
				$('#voorraad').attr("title","Voldoende op voorraad");
				$('#voorraad').html("Voldoende op voorraad");
			}			
			if(quantityAvailable >= 25)
			{
				$('#voorraad').removeClass();
				$('#voorraad').addClass("green");
				$('#voorraad').attr("title","Groot (meer dan 25 stuks)");
				$('#voorraad').html("Groot (meer dan 25 stuks)");
			}			
			
			
			
			selectedCombination['price'] = combinations[combination]['price'];
			if (combinations[combination]['ecotax'])
				selectedCombination['ecotax'] = combinations[combination]['ecotax'];
			else
				selectedCombination['ecotax'] = default_eco_tax;
			
			//show the large image in relation to the selected combination
			if (combinations[combination]['image'] && combinations[combination]['image'] != -1)
				displayImage( $('#thumb_'+combinations[combination]['image']).parent() );
			
			//update the display
			updateDisplay();
			
			//leave the function because combination has been found
			return;
		}
	}
	//this combination don't exist (not created in back office)
	selectedCombination['unavailable'] = true;
	updateDisplay();
}

function updateColorSelect(id_attribute)
{
	// Visual effect
	$('#color_'+id_attribute).fadeTo('fast', 1, function(){	$(this).fadeTo('slow', 0, function(){ $(this).fadeTo('slow', 1, function(){}); }); });
	// Attribute selection
	$('#group_'+id_color_default+' option[value='+id_attribute+']').attr('selected', 'selected');
	$('#group_'+id_color_default+' option[value!='+id_attribute+']').removeAttr('selected');
	findCombination();
}

//update display of the availability of the product AND the prices of the product
function updateDisplay()
{

	if (!selectedCombination['unavailable'] && quantityAvailable >= 1)
	{
		//show the choice of quantities
		$('#quantity_wanted_p:hidden').show('slow');
		
		//show the "add to cart" button ONLY if it was hidden
		$('#add_to_cart:hidden').fadeIn(600);
		
		//hide the hook out of stock
		$('#oosHook').hide();
		
		//availability value management
		if (availableNowValue != '')
		{
			//update the availability statut of the product
			$('#availability_value').removeClass('warning-inline');
			$('#availability_value').text(availableNowValue);
			$('#availability_statut:hidden').show();
			
		}
		else
		{
			//hide the availability value
			$('#availability_statut:visible').hide();
		}
		
		//'last quantities' message management
		if (quantityAvailable <= maxQuantityToAllowDisplayOfLastQuantityMessage)
		{
			//display the 'last quantities' message
			$('#last_quantities').show('slow');
		}
		else
		{
			//hide the 'last quantities' message
			$('#last_quantities').hide('slow');
			
		}
	
		//display the quantities of pieces (only if allowed)
		if (quantitiesDisplayAllowed)
		{
			$('#pQuantityAvailable:hidden').show('slow');
			$('#quantityAvailable').text(quantityAvailable); 
			$('#quantityAvailable').text(quantityAvailable); 
			if(quantityAvailable <= 2)
			{
				//$('#quantityAvailableTxt').show();
				$('#quantityAvailable').hide();
				$('#quantityAvailableTxt').hide();
				$('#quantityAvailableTxtMultiple').hide();
				$('#voorraad').addClass("red"); 
			}
			else
			{
				$('#quantityAvailable').hide();
				$('#quantityAvailableTxt').hide();
				//$('#quantityAvailableTxtMultiple').show();
				$('#quantityAvailableTxtMultiple').hide();
			}
		}
		else
		{
			$('#voorraad').addClass("red"); 
			
		}
	}
	else if (allowBuyWhenOutOfStock && availableLaterValue != '')
	{
		//hide the hook out of stock
		$('#oosHook').hide();
		
		//update the availability status of the product
		$('#availability_value').text(availableLaterValue);
		$('#availability_statut:hidden').show();
	}
	else
	{
		
		//show the hook out of stock
		$('#oosHook').show();
		if ($('#oosHook').length > 0 && function_exists('oosHookJsCode'))
			oosHookJsCode();
		
		//hide 'last quantities' message if it was previously visible
		$('#last_quantities:visible').hide('slow');

		//hide the quantity of pieces if it was previously visible
		$('#pQuantityAvailable:visible').hide('slow');
		
		//hide the choice of quantities
		if (!allowBuyWhenOutOfStock)
		{
			$('#quantity_wanted_p:visible').hide('slow');
			$('#pQuantityAvailable:visible').hide('slow');
		}
		else
		{
			$('#quantity_wanted_p:visible').show('slow');
			$('#pQuantityAvailable:visible').show('slow');
		}
			
		
		//display that the product is unavailable with theses attributes
		if (!selectedCombination['unavailable'])
			$('#availability_value').text(doesntExistNoMore + (globalQuantity > 0 ? ' ' + doesntExistNoMoreBut : '')).addClass('warning-inline');
		else
			$('#availability_value').text(doesntExist).addClass('warning-inline');
		$('#availability_statut:hidden').show();

		
		//show the 'add to cart' button ONLY IF it's possible to buy when out of stock AND if it was previously invisible
		if (allowBuyWhenOutOfStock && !selectedCombination['unavailable'])
		{
			
			$('#add_to_cart:hidden').fadeIn(600);
			$('p#availability_statut:visible').hide('slow');
		}
		else
		{
			$('#add_to_cart:visible').fadeOut(600);
			$('p#availability_statut:hidden').show('slow');
		}
	}
	
	//update display of the the prices in relation to tax, discount, ecotax, and currency criteria
	if (!selectedCombination['unavailable'])
	{
		var attribut_price_tmp = selectedCombination['price'];

		var tax = (taxRate / 100) + 1;

		if (noTaxForThisProduct)
			attribut_price_tmp /= tax;

		if (selectedCombination['reference'])
		{
			$('#product_reference span').text(selectedCombination['reference']);
			$('#product_reference:hidden').show();
		}
		else
			$('#product_reference:visible').hide('slow');

		var productPriceWithoutReduction2 = (attribut_price_tmp + productPriceWithoutReduction);
		var productPriceWithoutReductionTest = (attribut_price_tmp + productPriceWithoutReductionOld);
		
		if (reduction_from != reduction_to && (currentDate > reduction_to || currentDate < reduction_from))
			var priceReduct = 0;
		else
			var priceReduct = productPriceWithoutReduction2 / 100 * parseFloat(reduction_percent) + reduction_price;
			
		var priceProduct = productPriceWithoutReduction2 - priceReduct;
		//alert(priceProduct);
		if(priceProduct == productPriceWithoutReductionTest)
		{
			//alert(priceProduct);
			//alert(productPriceWithoutReductionTest);
			$('#old_price_display').hide();
			var this2 = $('p.last span');
			this2.html(this2.html().replace('van','').replace('voor',''));
		}
		else
		{
			//$('#old_price_display').show();
		}
		var productPricePretaxed = (productPriceWithoutReduction2 - priceReduct) / tax;
		$('#our_price_display').html(" &euro; " + formatCurrency(priceProduct, currencyFormat, currencySign, currencyBlank));
		$('#pretaxe_price_display').text(formatCurrency(productPricePretaxed, currencyFormat, currencySign, currencyBlank));
		$('#old_price_display').text(formatCurrency(productPriceWithoutReductionTest, currencyFormat, currencySign, currencyBlank));
		$('#ecotax_price_display').text(formatCurrency(selectedCombination['ecotax'], currencyFormat, currencySign, currencyBlank));
	}
}

//update display of the large image
function displayImage(domAAroundImgThumb)
{
    if (!domAAroundImgThumb.hasClass('shown'))
    {
        if (domAAroundImgThumb.attr('href'))
        {
        	//alert(domAAroundImgThumb.attr('href'));
            var newSrc = domAAroundImgThumb.attr('href').replace('/productImages/','/productImages/thumbs/large-');
            $('#bigpic').fadeOut('fast', function(){
                $(this).attr('src', '' + newSrc + '');
                $(this).attr('rel', 'leeg');
                
                $('#url').attr('href', '' + newSrc.replace('thumbs/large-','') + '');
   
                
                $(this).load(function() {
                  $(this).fadeIn('fast')
                })
                ;
            });
            $('#views_block li a').removeClass('shown');
            $(domAAroundImgThumb).addClass('shown');
        }
    }
} 

//To do after loading HTML
$(document).ready(function(){
	
	//init the serialScroll for thumbs
	$('#thumbs_list').serialScroll({
		items:'li',
		prev:'a#view_scroll_left',
		next:'a#view_scroll_right',
		axis:'x',
		offset:0,
		start:0,
		stop:true,
		duration:700,
		step: 2,
		lock: false,
		force:false,
		cycle:false
	});
		//init the serialScroll for thumbs
	$('#thumbs_list_items').serialScroll({
		items:'li',
		prev:'a#view_scroll_left_2',
		next:'a#view_scroll_right_2',
		axis:'x',
		offset:0,
		start:0,
		stop:true,
		duration:700,
		step: 2,
		lock: false,
		force:false,
		cycle:false
	});

	//hover 'other views' images management
	$('#views_block li a').hover(
		function(){displayImage($(this));},
		function(){}
	);

	//add a link on the span 'view full size' and on the big image


	//catch the click on the "more infos" button at the top of the page
	$('div#short_description_block p a.button').click(function(){
		$('#more_info_tab_more_info').click();
		$.scrollTo( '#more_info_tabs', 1200 );
	});

	// Hide the customization submit button and display some message
	$('p#customizedDatas input').click(function() {
		$('p#customizedDatas input').hide();
		$('p#customizedDatas').append('<img src="' + img_ps_dir + 'loader.gif" alt="" /> ' + uploading_in_progress);
	});

	//init the price in relation of the selected attributes
	if (typeof productHasAttributes != 'undefined' && productHasAttributes)
	{
		findCombination();
	}
	else
	{
		if(productPriceWithoutReductionOld == productPriceWithoutReduction)
		{

			$('#old_price_display').hide();
			var this2 = $('p.last span');
			this2.html(this2.html().replace('van','').replace('voor',''));

		}
		else
		{
			//$('#old_price_display').show();
			//var this2 = $('p.last span');
			//this2.html(this2.html().replace('van','').replace('voor',''));			
		}
			if(quantityAvailable <= 0)
			{
				if(externURL != '')
				{
					$('#reserveren').attr("href",externURL);
					$('#reserveren').attr("target","_blank");
					$('#reserveren').text("Bestellen");
					$('#voorraad').removeClass();
					$('#voorraad').addClass("green");
					$('#voorraad').attr("title","Te bestellen via "+externShop);
					$('#voorraad').text("Te bestellen via "+externShop);
					$('#availability_value').text("Dit product is te bestellen via "+externShop);
					$('#add_to_cart').hide();
					$('#pQuantityAvailable:visible').hide('slow');
				}
				else
				{
					$('#reserveren').attr("href","/index.php?m=reserveren&productid=" + id_product);
					$('#voorraad').removeClass();
					$('#voorraad').addClass("red");
					$('#voorraad').attr("title","Niet op voorraad, wel te reserveren");
					$('#voorraad').text("Niet op voorraad, wel te reserveren");
					$('#availability_value').text("Dit product is niet op voorraad, wel te reserveren");
					$('#add_to_cart').hide();
					$('#pQuantityAvailable:visible').hide('slow');
				}
			}			
			if(quantityAvailable <= 5  && quantityAvailable >= 1)
			{
				$('#voorraad').removeClass();
				$('#voorraad').toggleClass("orange"); 	
				$('#voorraad').attr("title","Beperkt (minder dan 5 stuks)");	
				$('#voorraad').text("Beperkt (minder dan 5 stuks)");
				$('#pQuantityAvailable:visible').show('slow');		
			}
			if(quantityAvailable >= 6 && quantityAvailable <= 24)
			{
				$('#voorraad').removeClass();
				$('#voorraad').addClass("light");
				$('#voorraad').attr("title","Voldoende op voorraad");
				$('#voorraad').text("Voldoende op voorraad");
				$('#pQuantityAvailable:visible').show('slow');
			}			
			if(quantityAvailable >= 25)
			{
				$('#voorraad').removeClass();
				$('#voorraad').addClass("green");
				$('#voorraad').attr("title","Groot (meer dan 25 stuks)");
				$('#voorraad').text("Groot (meer dan 25 stuks)");
				$('#pQuantityAvailable:visible').show('slow');
			}	
		if (!allowBuyWhenOutOfStock)
		{
			if(quantityAvailable <= 0)
			{
			$('#quantity_wanted_p:visible').hide('slow');
			}
			else
			{
			$('#reserveren').show('slow');
			}
		}
		else
		{
					//update the availability status of the product

		}
	}
});

function saveCustomization()
{
	$('#quantityBackup').val($('#quantity_wanted').val());
	$('body select[@id^="group_"]').each(function() {
		$('#customizationForm').attr('action', $('#customizationForm').attr('action') + '&' + this.id + '=' + parseInt(this.value));
	});
	$('#customizationForm').submit();
}

//return a formatted price
function formatCurrency(price, currencyFormat, currencySign){
	//if you modified this function, don't forget to modify the PHP function displayPrice (in the Tools.php class)
	if(currencyFormat == 1)
		return currencySign + formatNumber(price,priceDisplayPrecision,',', '.');
	if(currencyFormat == 2)
		return (formatNumber(price,priceDisplayPrecision,' ',',') + ' ' + currencySign);
	if(currencyFormat == 3)
		return (currencySign + ' ' + formatNumber(price,priceDisplayPrecision,' ',','));
	if(currencyFormat == 4)
		return (formatNumber(price,priceDisplayPrecision,',', '.') + currencySign);
	return price;
}

//return a formatted number
function formatNumber(value,numberOfDecimal,thousenSeparator, virgule) {
	value = value.toFixed(numberOfDecimal);
	if (parseInt(numberOfDecimal) == 0)
		return (value);
	var val_string = value+'';
	var tmp = val_string.split('.');
	var abs_val_string = (tmp.length == 2) ? tmp[0] : val_string;
	var deci_string = ('0.' + (tmp.length == 2 ? tmp[1] : 0)).substr(2);
	var nb = abs_val_string.length;
	for (var i=1;i<4;i++)
		if (value>=Math.pow(10,(3*i)))
			abs_val_string=abs_val_string.substring(0,nb-(3*i))+thousenSeparator+abs_val_string.substring(nb-(3*i));
	return abs_val_string + virgule + (deci_string > 0 ? deci_string : '00');
}

//change the text of a jQuery element with a sliding effect (velocity could be a number in ms, 'slow' or 'fast', effect1 and effect2 could be slide, fade, hide, show)
function updateTextWithEffect(jQueryElement, text, velocity, effect1, effect2, newClass)
{
	if(jQueryElement.text() != text)
		if(effect1 == 'fade')
			jQueryElement.fadeOut(velocity, function(){
				$(this).addClass(newClass);
				if(effect2 == 'fade') $(this).text(text).fadeIn(velocity);
				else if(effect2 == 'slide') $(this).text(text).slideDown(velocity);
					else if(effect2 == 'show')	$(this).text(text).show(velocity, function(){});
			});
		else if(effect1 == 'slide')
			jQueryElement.slideUp(velocity, function(){
				$(this).addClass(newClass);
				if(effect2 == 'fade') $(this).text(text).fadeIn(velocity);
				else if(effect2 == 'slide') $(this).text(text).slideDown(velocity);
					else if(effect2 == 'show')	$(this).text(text).show(velocity);
			});
			else if(effect1 == 'hide')
				jQueryElement.hide(velocity, function(){
					$(this).addClass(newClass);
					if(effect2 == 'fade') $(this).text(text).fadeIn(velocity);
					else if(effect2 == 'slide') $(this).text(text).slideDown(velocity);
						else if(effect2 == 'show')	$(this).text(text).show(velocity);
				});
}

//show a JS debug
function dbg(value){
	var active = false;//true for active
	var firefox = true;//true if debug under firefox

	if (active)
		if (firefox)
			console.log(value);
		else
			alert(value);	
}

/**
* Function : print_r()
* Arguments: The data  - array,hash(associative array),object
*            The level - OPTIONAL
* Returns  : The textual representation of the array.
* This function was inspired by the print_r function of PHP.
* This will accept some data as the argument and return a
* text that will be a more readable version of the
* array/hash/object that is given.
*/
function print_r(arr,level) {
	var dumped_text = "";
	if(!level) level = 0;
	
	//The padding given at the beginning of the line.
	var level_padding = "";
	for(var j=0;j<level+1;j++) level_padding += "    ";
	
	if(typeof(arr) == 'object') { //Array/Hashes/Objects 
		for(var item in arr) {
			var value = arr[item];
			
			if(typeof(value) == 'object') { //If it is an array,
				dumped_text += level_padding + "'" + item + "' ...\n";
				dumped_text += dump(value,level+1);
			} else {
				dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
			}
		}
	} else { //Stings/Chars/Numbers etc.
		dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
	}
	return dumped_text;
}

//verify if value is in the array
function in_array(value, array)
{
	for (var i in array) if (array[i] == value) return true;
	return false;
}

var currencySign = '';
var currencyRate = '1';
var currencyFormat = '2';
var currencyBlank = '0';
var taxRate = 0;
var priceDisplayPrecision = 2;
var oosHookJsCodeFunctions = new Array();
var reduction_percent = 0;
var reduction_price = 0;
var reduction_from = '';
var reduction_to = '';
var default_eco_tax = 0.00;
var currentDate = '2009-04-09';
var maxQuantityToAllowDisplayOfLastQuantityMessage = 1;
var noTaxForThisProduct = true;
var availableNowValue = '';
var availableLaterValue = "";
var doesntExist = 'Het product bestaat niet in deze uitvoering. Kies een andere.';
var doesntExistNoMore = 'Dit item is niet langer op voorraad';
var doesntExistNoMoreBut = 'in deze uitvoering, maar wel in een andere combinatie';
var uploading_in_progress = 'En ogenblik geduld a.u.b.';
var fieldRequired = 'U dient alle verplichte velden in te vullen.';
var quantitiesDisplayAllowed = true;

