var product = false;
var products_options = new Array();
var width = 500;
var product_page = false;

function add_to_basket_info()
{
	//overlay
	var overlay = document.createElement("div");
	overlay.id = "add_to_basket_overlay";
	
	//okno
	var info_box = document.createElement("div");
	info_box.id = "add_to_basket_infobox";
	
	//Adding close link
	var close_link = document.createElement("a");
	close_link.id = "add_to_basket_close";
	info_box.appendChild(close_link);
	
	var text = document.createElement("div");
	text.className = "tekst";
	text.innerHTML = ADDED_TO_BASKET;
	info_box.appendChild(text);
	var buttons = document.createElement("div");
	var left = document.createElement("div");
	left.className = "doLewej";
	var right = document.createElement("div");
	right.className = "doPrawej";
	var button_left = document.createElement("button");
	button_left.innerHTML = BUTTON_CONTINUE;
	button_left.className = "button";
	jQuery(button_left).click(function(){
		jQuery("#add_to_basket_infobox").remove();
		jQuery("#add_to_basket_overlay").remove();
	});
	var button_right = document.createElement("button");
	button_right.innerHTML = BUTTON_REDIRECT;
	button_right.className = "button";
	jQuery(button_right).click(function(){
		redirect_to_basket();
	});
	left.appendChild(button_left);
	right.appendChild(button_right);
	buttons.appendChild(left);
	buttons.appendChild(right);
	info_box.appendChild(buttons);
	document.body.appendChild(overlay);
	document.body.appendChild(info_box);
	var top = (jQuery(window).height() - jQuery("#add_to_basket_infobox").outerHeight()) / 2;
    var left = (jQuery(window).width() - jQuery("#add_to_basket_infobox").outerWidth()) / 2;
	jQuery("#add_to_basket_infobox").css({top: (top > 0 ? top : 0)+'px', left: (left > 0 ? left : 0)+'px'});
	jQuery("#add_to_basket_close").click(function(){
		jQuery("#add_to_basket_infobox").remove();
		jQuery("#add_to_basket_overlay").remove();
	});
}

function redirect_to_basket()
{
	//Find current path
	var URLparts = window.location.href.split("/");
	var start_point = (URLparts[0].toLowerCase() == "http:" ? 2 : 0);
	var href = (URLparts[0].toLowerCase()+"//");
	for(var i=start_point; i<(URLparts.length-1); i++)
	{
		href += URLparts[i] + "/";
	}
	//Redirect
	window.location.href = href+"shopping_cart.php";	
}

function get_options_in_form(elem)
{
	var opts = "";
	var form = jQuery(elem).closest('form');
	jQuery("select", form).filter(function(){return /^id\[[\d]+\]/.test(this.name);}).each(function(e){
		var id = /^id\[([\d]+)\]/.exec(this.name);
		var value = this.value;
		if(!isNaN(id[1]) && !isNaN(value))
		{
			opts += "&options_id["+id[1]+"]="+value;	
		}
	});
	return opts;
}

function is_array(elem)
{
	return typeof(elem)=='object'&&(elem instanceof Array);
}
function ksort (inputArr) 
{
    var tmp_arr = {},
        keys = [],
        sorter, i, k, that = this,
        strictForIn = false,
        populateArr = {};

        sorter = function (a, b) {
            var aFloat = parseFloat(a),
                bFloat = parseFloat(b),
                aNumeric = aFloat + '' === a,
                bNumeric = bFloat + '' === b;
            if (aNumeric && bNumeric) {
                return aFloat > bFloat ? 1 : aFloat < bFloat ? -1 : 0;
            } else if (aNumeric && !bNumeric) {
                return 1;
            } else if (!aNumeric && bNumeric) {
                return -1;
            }
            return a > b ? 1 : a < b ? -1 : 0;
        };

    for (k in inputArr) {
        if (inputArr.hasOwnProperty(k)) {
            keys.push(k);
        }
    }
    keys.sort(sorter);

    this.php_js = this.php_js || {};
    this.php_js.ini = this.php_js.ini || {};

    strictForIn = this.php_js.ini['phpjs.strictForIn'] && this.php_js.ini['phpjs.strictForIn'].local_value && this.php_js.ini['phpjs.strictForIn'].local_value !== 'off';
    populateArr = strictForIn ? inputArr : populateArr;

    for (i = 0; i < keys.length; i++) {
        k = keys[i];
        tmp_arr[k] = inputArr[k];
        if (strictForIn) {
            delete inputArr[k];
        }
    }
    for (i in tmp_arr) {
        if (tmp_arr.hasOwnProperty(i)) {
            populateArr[i] = tmp_arr[i];
        }
    }
    return strictForIn || populateArr;
}

function number_format (number, decimals, dec_point, thousands_sep) {
    number = (number + '').replace(/[^0-9+\-Ee.]/g, '');
    var n = !isFinite(+number) ? 0 : +number,
        prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
        sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
        dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
        s = '',
        toFixedFix = function (n, prec) {
            var k = Math.pow(10, prec);
            return '' + Math.round(n * k) / k;
        };
    s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
    if (s[0].length > 3) {
        s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
    }
    if ((s[1] || '').length < prec) {
        s[1] = s[1] || '';
        s[1] += new Array(prec - s[1].length + 1).join('0');
    }
    return s.join(dec);
}

function get_products_data(id)
{
	jQuery.ajax({
		type: "POST",
		url: "rpc.php?action=get_product_data",
		dataType: "json",
		async: false,
		data: "products_id="+id,
		success: function(response){
			if(response == false)
			{
				alert(PRODUCT_DOESNT_EXIST);	
			}
			else
			{
				product = response;	
			}
		}
	});		
	return product;
}

function add_to_basket(products_id, quantity, id)
{
	if(quantity == 0)
	{
		if(jQuery("#add_product_box").length > 0)
		{
			jQuery("#add_product_box").remove();
			jQuery("#add_product_overlay").remove();
		}
		return;
	}
	var product = get_products_data(products_id);
	if(id || product_page || !product.with_options)
	{
		jQuery.ajax({
			type: "POST",
			url: "rpc.php?action=add_to_basket",
			dataType: "json",
			data: "products_id="+products_id+"&quantity="+(quantity == undefined ? 1 : quantity)+(id != undefined ? id : ""),
			success: function(response){
				if(response == true)
				{
					if(basket_redirect)
					{
						redirect_to_basket();
					}
					else
					{
						jQuery("#add_product_box").remove();
						jQuery("#add_product_overlay").remove();
						if((!product.with_options && !product_page) || product_page)
							add_to_basket_info();
						refresh_cart(products_id);
						
					}
				}
				else
				{
					alert(ERROR_ADDING_TO_CART);	
				}
			}
		});	
	}
	else
	{
		draw_add_product_form(product, quantity);
	}
}

function draw_add_product_form(product, given_quantity, opts)
{
	if(opts != undefined)
	{
		var opts_array = new Array();
		var pattern = /options_id\[([\d]+)\]=([\d]+)/g;
		var data;
		while(data = pattern.exec(opts))
		{
			opts_array[data[1]] = data[2];
		}
	}
	var products_quantity_array = new Array();
	//overlay
	var overlay = document.createElement("div");
	overlay.id = "add_product_overlay";
	//main frame
	var box = document.createElement("div");
	box.id = "add_product_box";
	box.style.width = width+"px";
	//Adding close link
	var close_link = document.createElement("a");
	close_link.id = "add_product_box_close";
	box.appendChild(close_link);
	
	//pageHeading
	var pageHeading = document.createElement("div");
	pageHeading.className = "heading";
	pageHeading.innerHTML = HEADING;
	box.appendChild(pageHeading);
	
	// lewa kolumna
	var lewaKolumna = document.createElement("div");
	lewaKolumna.className = "lewaKolumna";
	//image
	var img = document.createElement("img");
	img.id = "add_product_box_image";
	if(product.image)
	{
		var filename = product.image.split("/");
		filename = filename[filename.length-1];
		img.src = "user/images/min/product_min/"+filename;	
	}
	else
		img.src = "images/brak-zdjecia.png";
	lewaKolumna.appendChild(img);
	//dodaj lewa kolumne
	box.appendChild(lewaKolumna);
	
	// prawa kolumna
	var prawaKolumna = document.createElement("div");
	prawaKolumna.className = "prawaKolumna";
	//title

	var title_div = document.createElement("div");
	title_div.id = "add_product_box_title";
	title_div.innerHTML = product.name;
	prawaKolumna.appendChild(title_div);
	//price
	var price_div = document.createElement("div");
	price_div.id = "add_product_box_price";
	price_div.innerHTML = LANG_PRODUCTS_PRICE + " <span class=\"wartosc\">" + number_format(product.price*(1+(product.tax_rate/100)), 2, ".", ",") + currency + "</span>";
	prawaKolumna.appendChild(price_div);
	//options
	if(product.with_options)
	{
		var options_div = document.createElement("div");
		options_div.id = "add_product_box_options";
		options_div.innerHTML = "<div class=\"tytul\">"+LANG_PRODUCTS_OPTIONS+"</div>";
	
		if(product.quantity_mode == 1)
		{
			var options_source = product.quantity;	
		}
		else
			var options_source = products_options;
		for(i in product.options)
		{
			if(!isNaN(i))
			{
				//var options_data = get_options_data(i);
				//if(options_data)
				//{
					
					option_selected = false;
					
					var option_row = document.createElement("div");
					option_row.className = "wiersz";
				
					var option_name = document.createElement("div");
					option_name.className = "nazwa";
					option_name.innerHTML = product.options[i].option_name + ": ";
					option_row.appendChild(option_name);
				
					var option_value = document.createElement("div");
					option_value.className = "wartosc";
					var options_select = document.createElement("select");
					options_select.id = "add_product_box_select_" + product.options[i].option_id;
					options_select.name = "id["+product.options[i].option_id+"]";
					for(j in product.options[i].values)
					{
						if(!isNaN(j))
						{
							options_value = document.createElement("option");
							options_value.value = product.options[i].values[j].value_id;
							options_value.innerHTML = product.options[i].values[j].value_name;
							if(is_array(opts_array))
							{
								if(opts_array[product.options[i].option_id] == product.options[i].values[j].value_id)
								{
									options_value.selected = true;
									option_selected = true;
								}
							}
							else
								if(!option_selected)
								{
									options_value.selected = true;
									option_selected = true;
								}
							options_select.appendChild(options_value);
						}
					}
					option_value.appendChild(options_select);
					option_row.appendChild(option_value);
					options_div.appendChild(option_row);
				//}
			}
		}
		prawaKolumna.appendChild(options_div);
	}
	
	//quantity
	//getting total quantity
	var quant=get_quantity(options_div);
	var quantity_div = document.createElement("div");
	quantity_div.id = "add_product_box_quantity";
	quantity_div.innerHTML = (quant == -1 ? ("<span class=\"dostepny\">"+ALWAYS_AVAILABLE+"</span>") : (LANG_PRODUCTS_QUANTITY + " " + quant + product.unit_name));
	prawaKolumna.appendChild(quantity_div);
	var quantity_box = document.createElement("div");
	quantity_box.id = "add_product_box_quantity_box";
	quantity_box.innerHTML = LANG_PRODUCTS_ORDER_PCS + " ";
	var quantity_input = document.createElement("input");
	quantity_input.type = "text";
	quantity_input.id = "add_product_quantity";
	quantity_input.value = (given_quantity == undefined ? 1 : given_quantity);
	quantity_input.size = 2;
	quantity_box.appendChild(quantity_input);
	quantity_div.innerHTML += product.unit_name;
	prawaKolumna.appendChild(quantity_box);
	//Submit button
	var submit = document.createElement("button");
	submit.id = "add_product_box_submit";
	submit.innerHTML = LANG_PRODUCTS_SUBMIT;
	submit.className = "button";
	prawaKolumna.appendChild(submit);
	//dodaj prawa kolumne
	box.appendChild(prawaKolumna);
	
	//Display it all
	document.body.appendChild(overlay);
	document.body.appendChild(box);
	var top = (jQuery(window).height() - jQuery("#add_product_box").outerHeight()) / 2;
    var left = (jQuery(window).width() - jQuery("#add_product_box").outerWidth()) / 2;
	jQuery("#add_product_box").css({top: (top > 0 ? top : 0)+'px', left: (left > 0 ? left : 0)+'px'});
	jQuery("#add_product_box_submit").click(submit_add_product);
	jQuery("#add_product_box_close").click(function(){
		jQuery("#add_product_box").remove();
		jQuery("#add_product_overlay").remove();
	});
	jQuery("#add_product_box_options select").change(change_quantity);
}

function refresh_cart(products_id)
{
	if(jQuery("#shopping_cart_contents").length)
	{
		var cart = false;
		jQuery.ajax({
			type: "GET",
			url: "rpc.php?action=get_cart_contents&plain",
			dataType: "html",
			async: false,
			success: function(response){
				cart = response;
			}
		});
		if(cart)
		{
			contents = jQuery(cart);
			html_contents = jQuery("#shopping_cart_contents", contents)[0].innerHTML;
			html_contents = jQuery(html_contents);
			if(jQuery("form[name=currencies]", html_contents).length)
			{
				if(jQuery("form[name=currencies]", html_contents)[0].setAttribute)
					jQuery("form[name=currencies]", html_contents)[0].setAttribute("action", window.location.href);
				else
					jQuery("form[name=currencies]", html_contents)[0].action = window.location.href;	
			}
			jQuery("#shopping_cart_contents").html(html_contents);
		}
	}
	if(jQuery("#shopping_cart_header").length)
	{
		var head_cart = false;
		jQuery.ajax({
			type: "GET",
			url: "rpc.php?action=get_header_cart_contents&plain",
			dataType: "html",
			async: false,
			success: function(response){
				head_cart = response;
			}
		});
		if(cart)
		{
			head_cart_contents = jQuery(head_cart);
			head_cart_html_contents = jQuery("#shopping_cart_header", head_cart_contents)[0].innerHTML;
			head_cart_html_contents = jQuery(head_cart_html_contents);
			if(jQuery("form[name=currencies]", head_cart_html_contents).length)
			{
				if(jQuery("form[name=currencies]", head_cart_html_contents)[0].setAttribute)
					jQuery("form[name=currencies]", head_cart_html_contents)[0].setAttribute("action", window.location.href);
				else
					jQuery("form[name=currencies]", head_cart_html_contents)[0].action = window.location.href;	
			}
			jQuery("#shopping_cart_header").html(head_cart_html_contents);
		}
	}
}

function get_product_options(pid)
{
	var data = false;
	jQuery.ajax({
		type: "POST",
		url: "rpc.php?action=get_product_options",
		dataType: "json",
		async: false,
		data: "product_id="+pid,
		success: function(response){
			if(response)
			{
				data = response;
			}
		}
	});
	var ret = new Array();
	for(i in data)
	{
		if(!isNaN(i))
		{
			ret[data[i].option_id] = new Array();
			for(j in data[i].values)
				if(!isNaN(j))
					ret[data[i].option_id][data[i].values[j].value_id] = data[i].values[j].value_name;
		}
	}
	return ret;
}

function get_options_data(id)
{
	var data = false;
	jQuery.ajax({
		type: "POST",
		url: "rpc.php?action=get_options_data",
		dataType: "json",
		async: false,
		data: "options_id="+id,
		success: function(response){
			if(response)
			{
				data = response;
			}
		}
	});
	return data;		
}

function get_quantity(options_div)
{
	if(product['quantity_mode'] == 0)
		return product['quantity'][product['product_id']];
	if(product['quantity_mode'] == 2)
		return -1;
	if(!isNaN(product['quantity']))
		return product['quantity'];
	var quant=false;
	if(options_div == undefined)
		var matched = jQuery("#add_product_box_options select");
	else
		var matched = jQuery("select", options_div);
	quant = product['product_id'];
	var quant_arr = new Array();
	matched.each(function(){
		var expr = /^id\[([\d]+)\]$/m;
		var key = expr.exec(this.name);
		key = key[1];
		var val = this.options[this.selectedIndex].value;
		quant_arr[key]=val;
	});
	ksort(quant_arr);
	//ksort(quant_arr);
	var max_id = 0;
	for(i in quant_arr)
	{
		if(!isNaN(i) && i > max_id)
			max_id = i;
	}
	for(var i=0; i<=max_id; i++)
	{
		if(quant_arr[i] != undefined)
			quant += "{"+i+"}" + quant_arr[i];	
	}
	return product['quantity'][quant];
}

function submit_add_product()
{
	var quant = jQuery("#add_product_quantity").val();
	var opt = "";
	var expr = /^id\[([\d]+)\]$/m;
	jQuery("#add_product_box_options select").each(function(i){
		var key = expr.exec(this.name);
		key = key[1];
		var val = this.value;
		opt += "&options_id["+key+"]="+val;
	});

	if(quant)
	{
		add_to_basket(product.product_id, quant, opt);	
	}
	else
	{
		alert(INVALID_QUANTITY);	
	}
}

function change_quantity()
{
	var quant=get_quantity();
	jQuery("#add_product_box_quantity").html(quant == -1 ? ("<span class=\"dostepny\">"+ALWAYS_AVAILABLE+"</span>") : (LANG_PRODUCTS_QUANTITY + " " + quant + product.unit_name));
}
