if (typeof(rows_number) == 'undefined')
{
	var rows_number	= 5;
}
var fieldsNotToReset	= null; 

jQuery(document).ready(function() {

	/**
	 * on masque le bouton ajout de produit
	 */
	jQuery('.submit_one_product').hide();
	
	/**
	 * on masque le bouton ok qty
	 */
	jQuery('.submit_qty').hide();
	
	/**
	 * @desc ajoute les evenements
	 */
	jQuery('tr.commande_directe').each(function() {
		addDefaultFunctions(jQuery(this));
	});
	
	jQuery('.submit_add_to_cart').click(function() {
		jQuery('.form_commande_directe').attr('action', ajax_url + 'ajaxAddMulti')
										.submit();
		return false;
	});
});

/**
 * @desc retourne le nombre de lignes contenant des produits
 * @return int
 */
function getRowsFilled() {
	return jQuery('.reference[value!=""]').size();
}

var currentVal	= null;

/**
 * @desc ajoute les evenements à une ligne
 * @param jQuery objJQuery niveau TR du tableau
 * @return void
 */
function addDefaultFunctions(objJQuery) {
	objJQuery.find('.reference').focus(function() { currentVal = jQuery(this).val(); });
	objJQuery.find('.reference').keyup(function() { addRow(this); });
	objJQuery.find('.reference').blur(function() { loadProduct(this); });
	objJQuery.find('.submit_qty').click(function() { return addQty(this); });
	objJQuery.find('.td_delete').html('<p class="bt-supp"></p>');
	objJQuery.find('.bt-supp').click(function() { resetRow(this); });
	/*maj qty sans bouton ok*/
	objJQuery.find('.qty').keyup(function() { addQty(this); });
	jQuery('.submit_qty').hide();
}

/**
 * @desc ajoute une ligne au tableau
 * @param object obj 
 * @return void
 */
function addRow(obj) {
	if (obj == null || jQuery(obj).val() != '')	{
		var rows_filled	= getRowsFilled();
		if (rows_filled == rows_number) {
			var tr			= jQuery('#table_commande_directe').find('tr:last');
			var newClass	= (tr.attr('class') == 'odd' ? 'even' : 'odd');
			var html		= tr.html().replace(new RegExp('_' + (rows_number - 1), 'g'), '_' + rows_number);
			jQuery('#table_commande_directe').append('<tr class="' + newClass + '">' + html + '</tr>');
		    jQuery('#sku_' + rows_number).val('');
		    jQuery('#reference_' + rows_number).val('');
			addDefaultFunctions(jQuery('#table_commande_directe').find('tr:last'));
			rows_number++;
		}
	}
}

/**
 * @desc charge un produit dans une ligne 
 * @param object obj input contenant la reference du produit
 * @return void
 */
function loadProduct(obj)	{
	if (currentVal != jQuery(obj).val()) {
		var url	= ajax_url + 'ajaxAdd/';
		var row	= jQuery(obj).attr('id').split('_');
		var qty	= jQuery(obj).parent().parent().find('td > .qty').val();
		jQuery(obj).parent().parent().find('.td_name').html('<p class="loading_compare">&nbsp;</p>');
		jQuery(obj).parent().parent().find('p.loading_compare').show();
		jQuery.ajax({
						type: 'GET',
						url: url,
						data: 'sku=' + jQuery(obj).val() + '&row=' + row[row.length - 1] + '&qty=' + qty,
						dataType: 'xml',
						async: true,
						success: function(data, status) {
							var parentN	= jQuery(obj).parent().parent();  
							var error	= jQuery(data).find('error').text();
							if (error != '') {
								if (fieldsNotToReset == null) {
									fieldsNotToReset	= jQuery(data).find('field');
								}
								parentN.find('td').each(function() {
									var erase	= true;
									for (var i=0; i<fieldsNotToReset.length; i++)	{
										if (jQuery(this).attr('class') == ('td_' + jQuery(fieldsNotToReset[i]).text()))	{
											erase	= false;
											break;
										}
									}
									if (erase == true){
										jQuery(this).html('');
									}
								});
								parentN.find('.td_qty > .final_price').val('');
								parentN.find('.td_name').html(jQuery(data).find('message').text());
							} else {
								parentN.find('td').each(function() {
								jQuery(this).html(jQuery(data).find(jQuery(this).attr('id').replace('td_', '')).text());								});
								addDefaultFunctions(parentN);
							}
							loadMainTotal();
						}
					});
	}
}

/**
 * @desc met a jour les prix selon la quantité
 * @param object obj bouton d'ajout
 * @return false
 */
function addQty(obj) {
	var td	= jQuery(obj).parent();
	if (td.find('.final_price').val() != '') {
		var qtyTmp	= parseInt(td.find('.qty').val());
		if (isNaN(qtyTmp)) {
			td.find('.qty').val(1);
		} else {
			td.find('.qty').val(qtyTmp);
		}
		td.parent().find('.td_total').html(number_format(td.find('.final_price').val() * td.find('.qty').val(), 2, ',', '') + '&nbsp;&euro;');
		loadMainTotal();
	}
	return false;
}

function resetRow(obj) {
	rows_number--;
	addRow(null);
	jQuery(obj).parent().parent().remove();
	loadMainTotal();
}

/**
 * @desc calcule le total global 
 * @return void
 */
function loadMainTotal() {
	var total	= 0;
	jQuery('.td_qty').each(function() {
		if (jQuery(this).find('.final_price').val() != '') {
			total	+= (jQuery(this).find('.final_price').val() * jQuery(this).find('.qty').val());
		}			
	});
	jQuery('#main_total').html(number_format(total, 2, ',', '') + '&nbsp;&euro;');	
}

/**
 * Formats a number with grouped thousands
 *
 * version: 906.1806
 * discuss at: http://phpjs.org/functions/number_format
 *     original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
 *     improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
 *     bugfix by: Michael White (http://getsprink.com)
 *     bugfix by: Benjamin Lupton
 *     bugfix by: Allan Jensen (http://www.winternet.no)
 *     revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
 *     bugfix by: Howard Yeend
 *     revised by: Luke Smith (http://lucassmith.name)
 *     bugfix by: Diogo Resende
 *     bugfix by: Rival
 *     input by: Kheang Hok Chin (http://www.distantia.ca/)
 *     improved by: davook
 *     improved by: Brett Zamir (http://brett-zamir.me)
 *     input by: Jay Klehr
 *     improved by: Brett Zamir (http://brett-zamir.me)
 *     input by: Amir Habibi (http://www.residence-mixte.com/)
 *     bugfix by: Brett Zamir (http://brett-zamir.me)
 *     example 1: number_format(1234.56);
 *     returns 1: '1,235'
 *     example 2: number_format(1234.56, 2, ',', ' ');
 *     returns 2: '1 234,56'
 *     example 3: number_format(1234.5678, 2, '.', '');
 *     returns 3: '1234.57'
 *     example 4: number_format(67, 2, ',', '.');
 *     returns 4: '67,00'
 *     example 5: number_format(1000);
 *     returns 5: '1,000'
 *     example 6: number_format(67.311, 2);
 *     returns 6: '67.31'
 *     example 7: number_format(1000.55, 1);
 *     returns 7: '1,000.6'
 *     example 8: number_format(67000, 5, ',', '.');
 *     returns 8: '67.000,00000'
 *     example 9: number_format(0.9, 0);
 *     returns 9: '1'
 *     example 10: number_format('1.20', 2);
 *     returns 10: '1.20'
 *     example 11: number_format('1.20', 4);
 *     returns 11: '1.2000'
 *     example 12: number_format('1.2000', 3);
 *     returns 12: '1.200'
 * @param number
 * @param decimals
 * @param dec_point
 * @param thousands_sep
 * @return
 */
function number_format (number, decimals, dec_point, thousands_sep) {
    var n = number, prec = decimals;
 
    var toFixedFix = function (n,prec) {
        var k = Math.pow(10,prec);
        return (Math.round(n*k)/k).toString();
    };
 
    n = !isFinite(+n) ? 0 : +n;
    prec = !isFinite(+prec) ? 0 : Math.abs(prec);
    var sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep;
    var dec = (typeof dec_point === 'undefined') ? '.' : dec_point;
 
    var s = (prec > 0) ? toFixedFix(n, prec) : toFixedFix(Math.round(n), prec); //fix for IE parseFloat(0.55).toFixed(0) = 0;
 
    var abs = toFixedFix(Math.abs(n), prec);
    var _, i;
 
    if (abs >= 1000) {
        _ = abs.split(/\D/);
        i = _[0].length % 3 || 3;
 
        _[0] = s.slice(0,i + (n < 0)) +
              _[0].slice(i).replace(/(\d{3})/g, sep+'$1');
        s = _.join(dec);
    } else {
        s = s.replace('.', dec);
    }
 
    var decPos = s.indexOf(dec);
    if (prec >= 1 && decPos !== -1 && (s.length-decPos-1) < prec) {
        s += new Array(prec-(s.length-decPos-1)).join(0)+'0';
    }
    else if (prec >= 1 && decPos === -1) {
        s += dec+new Array(prec).join(0)+'0';
    }
    return s;
}