var sublimation = {
	is_active: false,
	default_firstname: '',
	default_name: '',
	init: function() {
		if(!sublimation.is_active) return;
	
		$_marker_firstname = $("input[name=sublimation[firstname]]");
		$_marker_name = $("input[name=sublimation[name]]");
	
		// DEFAULT FIRSTNAME					
		$_marker_firstname.click(function(){
			if($(this).val() == sublimation.default_firstname) $(this).val("");
		});
		$_marker_firstname.blur(function(){
			if(!$(this).val()) $(this).val(sublimation.default_firstname);
		});
		// DEFAULT NAME
		$_marker_name.click(function(){
			if($(this).val() == sublimation.default_name) $(this).val("");
		});
		$_marker_name.blur(function(){
			if(!$(this).val()) $(this).val(sublimation.default_name);
		});
		
		$_marker_firstname.blur();
		$_marker_name.blur();
		
		// submit
		$("#sublimation-submit").click(function(){
			// reinit
			$("input#hidden-name-flocage").val("");
			$("input#hidden-num-flocage").val("");
			
			if(!$_marker_name.val() || !$_marker_firstname.val() || $_marker_firstname.val() == sublimation.default_firstname || $_marker_name.val() == sublimation.default_name)
			{
				$_marker_firstname.removeClass("input-sublimation-valid");
				$_marker_name.removeClass("input-sublimation-valid");
				$_marker_firstname.fadeOut().fadeIn();
				$_marker_name.fadeOut().fadeIn();
			}
			else {
				$("input#hidden-name-flocage").val($_marker_firstname.val());
				$("input#hidden-num-flocage").val($_marker_name.val());
				$_marker_firstname.addClass("input-sublimation-valid");
				$_marker_name.addClass("input-sublimation-valid");
			}

			return false;
		});
	},
	postCart: function() {
		if($("input[name=sublimation[name]]").length > 0 && !$("input#hidden-name-flocage").val() && !$("input#hidden-num-flocage").val()) {
			$_marker_firstname.fadeOut().fadeIn();
			$_marker_name.fadeOut().fadeIn();
			product.init();
			return false;
		}
		return true;
	}
}

var flocking = {
	is_active: false,
	forbidden: [],
	is_custom: function() { return flocking.custom.price != undefined; },
	customdefault: {},
	custom: {},
	custom_marker: {
		name: '#flocking-custom-name', 
		number: '#flocking-custom-number'
	},
	custom_wich: {
		name: [97, 122],
		number: [48, 57]
	},
	custom_space: {
		name: true
	},
	default_color_id: '',
	default_color_text: '',
	name: '',
	name_max: 10,
	number: '',
	number_max: 2,
	patch_error: '',
	init: function() {
		if(!flocking.is_active) return;
		
		flocking.default_color_id = flocking.is_active;
		
		// HP default flocking generate
		if($('#flocking-category').length > 0) flocking.colorChange();
		else {
			$("#couleur-product").val(flocking.default_color_id);
			flocking.generate();
		}
		
		// custom flocking
		if(flocking.is_custom()) flocking.initCustom();
		
		// default color text overload
		$('#couleur-product option[value='+ flocking.default_color_id +']').text(flocking.default_color_text);
		
		// patch control
		$('#badge-product').val(''); // init
		$("#badge-product").change(function() {
			if(patch_error = flocking.checkPatch()) {
				$('#badge-product').val('');
				product.errorShow("#flocking-error", patch_error);
			}
			
			// img view
			if(!patch_error && $('#badge-product').val() != '') $('img#image-flocage-patch').show();
			else $('img#image-flocage-patch').hide();
			
			// price
			flocking.totalPrice();
			
			return false;
		});
		
		// box cadeau for flocking total price
		$("#box_cadeau").change(function(){
			// price
			flocking.totalPrice();
		});
		
	},
	initCustom: function() {
		$.each(flocking.custom_marker, function(key, marker) {
			$_marker = $(marker);
			$_marker.focus(function(){
				if($(this).val() == flocking.customdefault[key]) $(this).val("");
			});
			$_marker.blur(function(){
				if(!$(this).val()) $(this).val(flocking.customdefault[key]);
			});
			// keypress
			$_marker.keypress(function(evt) {
				// enter + suppr + back
				if(evt.which == 13 || evt.which == 8 || evt.which == 0) return true;
				
				// only one space is permitted 
				if($(this).val().substr(-1) == ' ' && evt.which == 32) return false;
				
				return (
					$(this).val().length < flocking.custom[key]
					&& (
						(evt.which >= flocking.custom_wich[key][0] && evt.which <= flocking.custom_wich[key][1])
						|| (flocking.custom_space[key] == true && evt.which == 32)
					)
				);
	        });
			$_marker.val('');
			$_marker.blur();
			$_marker.attr('disabled', '');
		});
		
		// submit
		$("#flocking-custom-submit").click(function() {
			if(flocking.is_custom())  flocking.generateCustom();
			return false;
		});
	},
	colorChange: function() {
		if(!flocking.is_active) return;
		
		// reinit custom values !!
		$.each(flocking.custom_marker, function(key, marker) {
			$_marker = $(marker);
			$_marker.val('');
			$_marker.blur();
		});
		
		// parametrage flocage reel
    	if($("#couleur-product").val() != flocking.default_color_id) {
    		var flocage_nom_num = $("#couleur-product option:selected").text().split('-')
    		flocking.name = flocage_nom_num[0] ? flocage_nom_num[0] : '';
    		flocking.number = flocage_nom_num[1] ? flocage_nom_num[1] : '';
    	}
    	// sans flocage !!
    	else {
    		$('#badge-product').val('');
    		flocking.name = flocking.number = '';
		}
    	// price
    	flocking.totalPrice();
    	
    	flocking.generate();
	},
	// gestion retour message erreur en fonction du type d erreur
    checkPatch: function () {
    	if($("input#hidden-name-flocage").val() == '' && $("input#hidden-num-flocage").val() == '') { 
    		return flocking.patch_error;
		} 
    	
    	return false;
    },
	// generate from custom
    generateCustom: function() {
    	product.errorHide();

    	$_marker_name = $(flocking.custom_marker.name);
    	$_marker_number = $(flocking.custom_marker.number);
    	
    	// reinit previous flocking values
    	flocking.name = flocking.number = '';
    	$("input#hidden-name-flocage").val(flocking.name);
		$("input#hidden-num-flocage").val(flocking.number);
		
		// validate inputs ?
		if(!$_marker_name.val() || !$_marker_number.val() || $_marker_name.val() == flocking.customdefault.name || $_marker_number.val() == flocking.customdefault.number)
		{
			product.errorShow("#flocking-error",  flocking.customdefault.error);
			return;
		}
		// validate forbidden
		flocking.forbidden = '';
		$.each(flocking.customdefault.forbidden, function(k, value) {
			regexp = new RegExp('^'+ value +'$', 'gi')
			if($_marker_name.val().match(regexp) != null) {
				flocking.forbidden = $_marker_name.val();
				product.errorShow("#flocking-error",  flocking.customdefault.error_forbidden);
				return false;
			}
		});
		if(flocking.forbidden != '') return false;

		flocking.name = $_marker_name.val(); 
    	flocking.number = $_marker_number.val();
    	
    	// init dimension flocage joueur
    	$("#couleur-product").val(flocking.default_color_id);
    	if(flocking.checkPatch()) $('#badge-product').val('');
    	
    	// price
    	flocking.totalPrice();
    	
    	flocking.generate();
    	product.dimensionChange();
    },
    // 
    generate: function() {
		$("input#hidden-name-flocage").val(flocking.name);
		$("input#hidden-num-flocage").val(flocking.number);
//		$("input#name-flocage").val(flocking.name);
//		$("input#num-flocage").val(flocking.number);
		
		$args = '';
		if(flocking.name) $args += '/name/'+ flocking.name;
		if(flocking.number) $args += '/number/'+ flocking.number;
		
		// for HP ?
		if($args.length == 0 && $('#flocking-category').length > 0) $args += '/name/front';
		
		$('img#image-flocage').attr('src', flocking.generate_url + $('#hidden-product_id').val() + $args);
	},
	postCart: function(postdata) {
		if($("#badge-product").length > 0 && $("#badge-product").val() != '') postdata.push({ name:'product[badge]', value :  $("#badge-product").val() });
		return postdata;
	},
	totalPrice: function() {
		total_price = flocking.price.total;
		
		if(!total_price) {
			$('#flocking-total-price').parent().hide();
			return;
		}
		else $('#flocking-total-price').parent().show();
		
		if(!flocking.promo && flocking.name && flocking.number) total_price = parseFloat(total_price) + parseFloat(flocking.price.active.replace(',', '.'));
		if($("#badge-product").length > 0 && $("#badge-product").val() != '') total_price = parseFloat(total_price) + parseFloat(flocking.price.patch);
		if($("#box_cadeau:visible").attr('checked')) total_price = parseFloat(total_price) + parseFloat(flocking.price.gift);

		// format
		total_price = flocking.toFix(total_price);
		total_price = total_price.replace('.', ',');
		
		$('#flocking-total-price').text(total_price);
	},
	toFix: function(num) {
		var numv=num-0;
		var sign=(numv>=0?1:-1); // Will give 1 for num=0
		var numabs=numv*sign;
		var naint=Math.floor(numabs);
		var nacent=Math.round((numabs-naint)*100);
		if (nacent>=100) {nacent=0; naint++;}
		var nais=''+naint;
		var nacs=(nacent<10?'0':'')+nacent;
		if (naint+nacent==0) sign=1;
		return (sign==1?'':'-')+nais+'.'+nacs;
	},
	parseFloat: function(f) {
		return ((parseFloat(f) * 100) / 100);
	}
}

var product = {
    init: function() {
	    // init the submit button for cart 
		product.configureImgsubmitformUnclick();
		
		// produit unique avec taille et couleur unique ou actualisation de page firefox
		if(this.quick_post || $("#hidden-id-pdt").val()) this.post();
		else if(this.alert_stock) {
			// reconstituer front taille / couleur
			jQuery.each(this.alert_stock, function(index, value){
				if(value.name == "product[couleur]") $("#couleur-product").val(value.value);
				else if(value.name == "product[taille]") $("#taille-product").val(value.value);
			});
			this.post();
		}
		
		// launch flocking system
		if(flocking.is_active) flocking.init();
		// launch sublimation system
		if(sublimation.is_active) sublimation.init();
		
		// gestion couleur
		$("#couleur-product").change(function(){
			// gestion flocage joueur reel
			if(flocking.is_active) flocking.colorChange();
			
			product.dimensionChange();
		});
		
		// gestion taille
		$("#taille-product").change(function() {
			product.dimensionChange();
		});

         // init qty process
        this.initQuantity();
        
        // guide des tailles
        $("#guide-des-tailles, .guidetailles-table div").css('width', '700px');
        $(".guidetailles-table table").css('width', '699px');
        $(".guide-des-tailles-button").click(function() {
        	$("#guide-des-tailles").animate({ height: 'toggle', opacity: 'toggle' }, "slow");
        	return false;
        });
        
        // button alert stock
        $('#alert-stock-email a').click(function(){
        	postdata = product.getPostData();
        	postdata.push({ name:'product[url]', value: window.location.href});
        	product.alertStock(postdata);
        	return false;
        });
    },
    alertStock: function(postdata) {
    	$.post(product.posturl_alertstock, postdata, function (data, textStatus) {
    		if (textStatus != "success") return;
            if(!data) return;

            product.errorShow("div#cart-error", data.statusmessage);
    	  
            // redirect si log necessaire
            if(data.status == 1) window.location = data.redirect;
        });
    },
    configureImgsubmitformUnclick: function() {
    	$("img#submit_form").unbind('click', product.imgsubmitformClick);
    	$("img#submit_form").bind('click', function() { return false; });
    	$("img#submit_form").show();
    	$("img#submit_form").css('cursor', 'default');
    	if($("img#submit_form").css('opacity') != 0.2) $("img#submit_form").animate({opacity: '0.2'}, 500);
    },
    configureImgsubmitformClick: function() {
    	$("img#submit_form").bind('click', product.imgsubmitformClick);
    	
    	$("img#submit_form").css('cursor', 'pointer');
    	if($("img#submit_form").css('opacity') != 1) $("img#submit_form").animate({opacity: '1'}, 500);
    },
    imgsubmitformClick: function() {
    	product.configureImgsubmitformUnclick();
    	product.errorHide();
    	
    	// determine la regle de selection du champs qty
    	if(!parseInt($("#product_qty").val())) var qty_id = "#i_quantite";
    	else var qty_id = "#product_qty";
    	
    	// gestion erreur sur (int)qty  + id_unique undefined 
    	if(!$("#hidden-id-pdt").val() || !parseInt($(qty_id).val())) { product.errorShow("div#cart-error", product.error); product.init(); return false; }
    	
    	// gestion SUBLIMATION
    	if(sublimation.is_active && !sublimation.postCart()) return false;
    	
        // get the for input hidden and select values
        var postdata = $(document).find("#product-form :input[type=hidden], #product-form "+ qty_id).serializeArray();

        // add gift
        if($("#box_cadeau").attr('checked')) postdata.push({ name: 'product[cadeau]', value :  '' });
        
    	// add patch
        if(flocking.is_active) postdata = flocking.postCart(postdata);
       	
        // post the data via AJAX post
        $.post(product.posturl_cart, postdata, function (data, textStatus) {
        	if (textStatus != "success") return;
            if(!data) return;
            
        	// gestion no qty
        	if(data['cart-error']) { 
        		product.errorShow("div#cart-error", data['cart-error']);
        		product.init();
        		return false;
        	}
        	
        	$("#panier-article-count").text(parseInt(data['qty']));
        	$("#panier-article-cart-price").text(data['cart_price']);
        	
        	// launch thickbox
        	var t = product.lightbox_addcart_title +" !";
        	var a = product.lightbox_addcart +"/cartline/"+ data['cartline'] +"/?height=155&width=380";
        	var g = false;
        	tb_show(t,a,g);
        	
        	product.configureImgsubmitformClick();
        });
        
        return false;
    },
	configureImageAction: function(button, image, preload_img) {
    	// disable link
    	$(button).click(function() { return false; });

    	$(button).mouseover(function(){
			if($(this).hasClass('noselected'))
			{
				key = $(this).find("a").attr('href');
				var img_src = (!preload_img) ? product.media_slide[key].src : preload_img[key].src;
				$(image).stop(true).fadeTo(0, 0.5).attr('src', img_src).fadeTo(500, 1);
				$(this).siblings().removeClass("selected").addClass("noselected");
				$(this).removeClass("noselected").addClass("selected");
			}
			
			return false;
		});
	},
    initQuantity: function() {
		// select + input quantite
        $('#i_quantite').focus(function() {
            $(this).val('');
        });
        $('#i_quantite').blur(function() {
            if ($(this).val() == '') {
            	$('#product_qty').val('1');
                $('#product_qty').change();
            }
        });
        $('#i_quantite').keypress(function(evt) {
            return evt.which != 13;
        });
        
        $('#product_qty').change(function() {
        	if(!parseInt($(this).val())) {
        		$('#i_quantite').show();
        		$('#i_quantite').focus();
        	} 
        	else {
        		$('#i_quantite').hide();
        	}
        });
        // init qty inputs
        $('#i_quantite').blur();
    },
    dimensionChange: function() {
    	product.configureImgsubmitformUnclick();
    	product.errorHide();
    	
    	// controle sur les attributs avant post
		if(($("#taille-product").length && !$("#taille-product").val()) || ($("#couleur-product").length && !$("#couleur-product").val()))
		{
			$("#hidden-id-pdt").val('');
			return;
		}
		
    	product.post();
    },
    getPostData : function() {
    	postdata = $(document).find("#hidden-product_id, #taille-product, #couleur-product").serializeArray();
    	if(product.unique_color_id != '') postdata.push({ name:'product[couleur]', value:product.unique_color_id});
    	return postdata;
    },
    // dispo + unique id + price
	post: function()
	{	    	
		var postdata = product.getPostData();

		$.post(product.posturl_control, postdata, function (data, textStatus) {
            if (textStatus != "success") return;
            if(!data) return;
            
    		if(data["id"]) {
    			$("div#product-dispo-state").hide().text(data["dispo_view"]).fadeIn(1000);
    			$("#big-price").text(data["big_price"]);
    			$("#small-price").text(','+ data["small_price"]);
    			
    			// Flocking total Price
    			if(flocking.is_active)
    			{
    				flocking.price.total = data["big_price"] +'.'+ data["small_price"];
    				flocking.totalPrice();
    			}
    			
    			// stock ok ?
    			if(data["dispo_state"] >= 0) {
    				// toggle css dispo
    				$("div#product-dispo-state").removeClass('redweight_dispo').addClass('greenweight_dispo');
    				$('div#alert-stock-email').hide();
    				
        			$("#hidden-id-pdt").val(data["id"]);
        			$("#hidden-price-pdt").val(data["big_price"] +'.'+ data["small_price"]);
        			$("#hidden-fees-pdt").val(data["fees"]);
        			
        			product.configureImgsubmitformClick();
    			}
    			else {
    				$("div#product-dispo-state").removeClass('greenweight_dispo').addClass('redweight_dispo');
    			}
    		}
    		// si pas d id no stock
    		else {
    			$("div#product-dispo-state").removeClass('greenweight_dispo').addClass('redweight_dispo');
    			$("div#product-dispo-state").hide().text(data["dispo_view"]).fadeIn(1000);
    		}

    		// no stock
    		if(data["dispo_state"] < 0) {
    			// alert stock system on no available product
				if(!product.alert_stock) $('div#alert-stock-email').fadeIn(1000);
				else {
					postdata = product.alert_stock;
					delete product.alert_stock;
					product.alertStock(postdata);
				}
				
				// HP spec !
				if($('#flocking-category').length > 0) product.errorShow('#flocking-error', data["dispo_view"]);
			}
        });

    },
    errorShow: function(jmarker, msg) {
    	product.errorHide();
    	$(jmarker).text(msg).fadeIn(1000);
    },
    errorHide: function() {
    	$("div#cart-error, div#cadeau-error, #flocking-error").hide();
    }
}

