/******************************************************************************
* bwlistElement.js
*******************************************************************************

*******************************************************************************
*                                                                             *
* Copyright 2010									                          *
*                                                                             *
******************************************************************************/
(function ($) {
    jQuery.extend(jQuery.fn,
			{
			    wlAction: function (options) {
			    /*  Plug-in jQuery "wlAction"
						Permet d'ajouter une référence à une liste de souhait

						Pamarètres OBLIGATOIRE :
						
						Pamarètres optionnels :
						idSpanRefCode : Identifiant de la balise qui contiendra le code référence à ajouter à la liste
					
					*/

			        // Paramètres par défaut
			        var defaults =
					{
					    "idSpanRefCode": "gshpReferenceCode"
					};

			        // Fusion de defaults et options
			        var params = $.extend(defaults, options);
			        var bt = $(this);
			        var url = bt.attr("href");
							
			        bt.click(function (e) {
									e.preventDefault();
									cButton = $(this);
			            if (url != "" && !cButton.hasClass("bwlist_addThis")) {
											var cRefs = loadingRef(cButton);
											var isDelBt = cButton.hasClass("bwlist_remove") ? true : false;
											
											if(isDelBt && confirm('Confirmez-vous la suppression ?') || !isDelBt){											
			                $.post(url, { pageMode: "ajax", ajaxFunc: "bwlist_" + (isDelBt ? "remove" : "add") + "ToWishList", cRef: cRefs }, function (data) {

			                    result = String(data);

			                    if (result.indexOf("linkTo") > -1){
														urlTarget = result.split(":")[1];
														document.location.href = urlTarget;
			                    }
													
													if (result.indexOf("deleteOk") > -1) {
														var deleteRow = cRefs.split(" ");
														
														for(dr=0; dr < deleteRow.length; dr++){
															$("#"+deleteRow[dr]).parent().parent().remove();
														}
														
														if($(".checkRef").length <= 1) location.reload();
													}
													
													if(isDelBt){
														$.post(url, { pageMode: "ajax", ajaxFunc: "bwlist_totalPrice_fct"}, function (data) {
															$("#bwlist_totalPrice_num").html(data);
														});
													}
			                });
											}
			            }
			        });

			        function loadingRef(cBt) {
								var cRef = $("#" + params.idSpanRefCode).text();
								
								if(cRef == ""){
									cRef = cBt.attr("id").split("_")[2];
									if(cRef == "all"){
										cRef = "";
										$(".checkRef:checked").each(function(index){
											cRef = cRef + (index == 0 ? "": " ") + $(this).attr("id");
										});
									}
								}
								
			          return cRef;
			        }
							
							$("body").ajaxStart(function(){
								$(this).imgLoading();
							});
							
							$("body").ajaxStop(function(){
								$("#bwlist_loading,#bwlist_loadingBox").remove();
							});
							
							return $(this);
			    },
					checkAll: function (options) {

							/*  Plug-in jQuery "checkAll"
							
							Exemple : 
								Permet de cocher tous les bouléen de la classe donnée
								
							Pamarètres possibles :
								checkClass : Class des input à cocher automatiquement
							*/

							// Paramètres par défaut
							var defaults =
							{
									'checkClass': 'checkMe'
							};

							// Fusion de defaults et options
							var params = $.extend(defaults, options);
							
							this.click(function(e){
								e.preventDefault();
								$("."+params.checkClass).attr("checked",true);
							});
							
							return $(this);
					},
					checkAllWithStock: function (options) {

							/*  Plug-in jQuery "checkAllWithStock"
							
							Exemple : 
								Permet de cocher tous les bouléen de la classe donnée par rapport au niveau de stock
								
							Pamarètres possibles :
								checkClass : Class des input à cocher automatiquement
							*/

							// Paramètres par défaut
							var defaults =
							{
									'checkClass': 'checkMe'
							};

							// Fusion de defaults et options
							var params = $.extend(defaults, options);
							
							this.click(function(e){
								e.preventDefault();
								$("."+params.checkClass).each(function(){
									if($(this).parent().parent().children(".bwlist_stockCol").children(".bwlist_hasStock").length > 0){
										$(this).attr("checked",true);
									}else{
										$(this).attr("checked",false);
									}
								});
							});
								
							return $(this);
					},
					unCheckAll: function (options) {

							/*  Plug-in jQuery "unCheckAll"
							
							Exemple : 
								Permet de décocher tous les bouléen de la classe donnée
								
							Pamarètres possibles :
								checkClass : Class des input à cocher automatiquement
							*/

							// Paramètres par défaut
							var defaults =
							{
									'checkClass': 'checkMe'
							};

							// Fusion de defaults et options
							var params = $.extend(defaults, options);
							
							this.click(function(e){
								e.preventDefault();
								$("."+params.checkClass).attr("checked",false);
							});
							
							return $(this);
					},
					unCheckAllWithStock: function (options) {

							/*  Plug-in jQuery "checkAllWithStock"
							
							Exemple : 
								Permet de cocher tous les bouléen de la classe donnée par rapport au niveau de stock
								
							Pamarètres possibles :
								checkClass : Class des input à cocher automatiquement
							*/

							// Paramètres par défaut
							var defaults =
							{
									'checkClass': 'checkMe'
							};

							// Fusion de defaults et options
							var params = $.extend(defaults, options);
							
							this.click(function(e){
								e.preventDefault();
								$("."+params.checkClass).each(function(){
									if($(this).parent().parent().children(".bwlist_stockCol").children(".bwlist_noStock").length > 0) $(this).attr("checked",false);
								});
								
							});
							
							return $(this);
					},
					imgLoading: function (options) {

							/*  Plug-in jQuery "imgLoading"
							
							Exemple : 
								Permet d'ajouter une image loader
								
							Pamarètres possibles :
								imgSrc : Adresse de l'image
								loadingTitle : Titre de la fenêtre de chargement
							
							*/

							// Paramètres par défaut
							var defaults =
							{
									'imgSrc': 'iso_icons/bwlist-loading.gif',
									'loadingTitle' : "Chargement ..."
							};

							// Fusion de defaults et options
							var params = $.extend(defaults, options);
							
							var loadingBoxTitle = $("<h6 id='bwlist_loadingBoxTitle'/>").text(params.loadingTitle);
							var loadingBoxImg = $("<img src='"+params.imgSrc+"' alt='loading' title='' />");
							var loadingBox = $("<div id='bwlist_loadingBox' /> ").append(loadingBoxTitle).append(loadingBoxImg);
							var loadingBlackWondow = $("<div/>").attr("id","bwlist_loading").css("height",$(document).height());
								
							if($("#bwlist_loading").length < 1){
								$(this).append(loadingBox).prepend(loadingBlackWondow);
								$(loadingBox).css({
									"top": function(index){
										return (($(window).height() - $(this).height()) / 2);
									},
									"left": function(index){
										return (($(window).width() - $(this).width()) / 2);
									}
								})
							}
							
							$(window).resize(function() {
								var win = $(this);
								$(loadingBox).css({
									"top": function(index){
										return (($(win).height() - $(this).height()) / 2);
									},
									"left": function(index){
										return (($(win).width() - $(this).width()) / 2);
									}
								});
							});

					}
			});
			
})(jQuery);

// Ajout au panier YUI.
isoYUILoader.onReady( function() {
	$(document).ready(function(){
	(function ($) {
		$("#addToBasket").unCheckAllWithStock({
			'checkClass': 'checkRef'
		});
	})(jQuery);

	var oidChecked = [];
	
	
	var button = $("#bwlist_addToBasket");
	var button_lpl = $("#bwlist_AddToBasket_lpl");
	if (button.length == 0) button = button_lpl;
	
	if(button_lpl){
		$("#bwlist_AddToBasket_lpl").checkAll({
			'checkClass': 'checkRef'
		});
	}
	
	button.click(function(e){
		e.preventDefault();

		var elements = $('.checkRef');
		for(var i=0; i<elements.length; i++){
			if(elements[i].checked) oidChecked.push(parseInt(elements[i].parentNode.parentNode.id));
		}
		gshp.basket.addReference(oidChecked[0],1);
	});
	
	$('.bwlist_addThis').click(function(e){
		e.preventDefault();
		var newId = this.id.split("_").pop();
		gshp.basket.addReference(newId,1);
	});
	
	gshp.basket.on('change', function () {
		oidChecked.shift();
		
		if(oidChecked.length > 0){
			gshp.basket.addReference(oidChecked[0],1);
		}else{
			
			var GetBasketQuantityFlow = document.getElementById("bwlist-nb_items");
			var GetBasketQuantityLabelFlow = document.getElementById("bwlist-label_items");
			var GetBasketAmountFlow = document.getElementById("bwlist-price_items");
			
			if(GetBasketQuantityFlow && GetBasketQuantityLabelFlow && GetBasketAmountFlow){
			
				var nbreBasketArticle = 0;	
				var nbreBasketArticleLabel = "Article";
				var prixTotal = 0;
				
				if (!gshp.basket.isEmpty()) {
					gshp.basket.eachItem(function (item) {
						nbreBasketArticle = nbreBasketArticle + parseFloat(item.getField('quantity'));
						prixTotal = prixTotal + parseFloat(item.getField('effectiveTotalPrice').replace(",","."));
					});
				}
				
				(function ($) {
					$("#bwlist-nb_items").text(nbreBasketArticle);
					$("#bwlist-label_items").text(nbreBasketArticleLabel + (nbreBasketArticle > 1 ? "s" : ""));
					$("#bwlist-price_items").text(prixTotal.toFixed(2));
				})(jQuery);
				
			}
		}
	});
	gshp.basket.on('busyStart', function () {
		(function ($) {
			$("body").imgLoading();
		})(jQuery);
	});
	gshp.basket.on('busyEnd', function () {
		
		if(!oidChecked || (oidChecked && oidChecked.length <= 1)){
			(function ($) {
				$("#bwlist_loading,#bwlist_loadingBox").remove();
			})(jQuery);
		}
	
	});
	gshp.basket.on("actionFail",function (msg) {
		alert(msg);
	});
	});
});

