jQuery(document).ready(function() {
	//init search events
	initSearch();
});

function initSearch() {
	jQuery("#filterArea .extraCategories").hide();
	jQuery("#filterArea .headerFilter").append("<span class='closed'>Afficher les filtres</span>");
	// Chek variable for enabling ajax request or not (select box filtering event
	checkRearrangeUrl = jQuery(".searchFilters #filters").val();
	jQuery(".categoriesBlock li li a").bind("click", filterSearch);
	
	jQuery("#filterArea .headerFilter span").bind("click", toggleFilterBlock);
	toggleFilterBlock();
	jQuery("#filterArea .extraResults").bind("click", toggleExtraResults);
	jQuery(".pagination a").bind("click", nextResults);
	jQuery(".filterBar input[name=rearrangeResults]").bind("click", rearrangeResults);
}
var AjaxResponse = null; 
var AjaxParams = null; 


// ajaxResponse :: stokage des retours de données
 function ajaxResponse(data)
 {
 	this.navBar = data.results.navBar;
	this.products = data.results.products;
    this.moreFilters = data.results.moreFilters;
 } 
// Declaring ajax functions parameters object
function ajaxParam( Method, P_catid, P_filterName, P_filterValue, P_triName, P_PageNumber){
  //  alert("ajaxParam " + Method);  
	var vpath  = Method.split("?");  
    if (vpath.length == 2)
    { 
	    this.code= vpath[1];
	    this.method = vpath[0];
	  }
	else
	{
	    this.code= "NoDefine";
	    this.method = Method;
	}

	var vcatParam  = P_catid.split(":");  
    if (vcatParam.length == 2)
    { 
	    this.typeId = vcatParam[1];
	    this.catId =  vcatParam[0];
	  }
	  else
	  {
	    this.typeId = 2;
	    this.catId =  P_catid;
	  }
	
	var vsort  = P_triName.split(":");  
    if (vsort.length == 2)
    { 
	    this.sortDesc = vsort[1];
	    this.triName =  vsort[0];
	  }
	  else
	  {
      this.sortDesc = "desc";
      this.triName = P_triName;
	  }

	this.filterName = P_filterName;
	this.filterValue = P_filterValue;
	this.pageNumber = P_PageNumber;
}





function toggleFilterBlock() {
	if(jQuery(this).hasClass("closed")) {
		jQuery("#filterArea .categoriesBlock").show("blind", { direction: "vertical" }, 400);
		jQuery(this).fadeOut(400, function(){
			jQuery(this).html("Masquer les filtres");
			jQuery(this).removeClass("closed");
		});
		jQuery(this).fadeIn(400);
	}else{
		jQuery("#filterArea .categoriesBlock, #filterArea .extraCategories:visible").hide("blind", { direction: "vertical" }, 400);
		jQuery("#filterArea .categoriesBlock .extraResults").removeClass("current");
		jQuery(this).fadeOut(400, function(){
			jQuery(this).html("Afficher les filtres");
			jQuery(this).addClass("closed");
		});	
		jQuery(this).fadeIn(400);
	}
}


/* START ////// FILTER ZONE : EXTRA RESULTS */

// filtering search 
function filterSearch() {
	jQuery(".categoriesBlock li, .extraCategories li").removeClass("current");
	jQuery(this).parent().addClass("current");
	
	// getting filterName
	var parentClass = jQuery(this).parents(":eq(2)").attr("class").split(" ");
	if(parentClass[0] == "last") {
		parentClass = parentClass[1];
	}else{
		parentClass = parentClass[0];
	}
	
	// page numbers : setting back to page 1
	jQuery(".pagination li").removeClass("current");
	jQuery(".pagination li:first").addClass("current");
	var position = jQuery(".pagination li").length / 2;
	var secondItem = jQuery(".pagination li:eq("+position+")").addClass("current");
	//
	
	// creating loading layer
	var loadingHeight = jQuery(".searchResults div[id^=searchParamList]").height();
	jQuery(".searchResults div[id^=searchParamList] .loadingCategories").remove();
	jQuery(".searchResults div[id^=searchParamList] ul:first").append("<li class=\"loadingCategories\"><span>Chargement des informations demandées</span></li>");
	jQuery(".searchResults div[id^=searchParamList] .loadingCategories").css("height", loadingHeight);
	
	// Setting AJAX Parameters (method, category id, etc)
	// object ref
	//ajaxParam(Method, P_catid, P_filterName, P_filterValue, P_triName, P_PageNumber)
	
	var methodParameters = new ajaxParam(jQuery(this).attr("href"), jQuery(".searchFilters h2").attr("id"), parentClass, jQuery(this).attr("rel"), '', '');
	jQuery(".searchResults div[id^=searchParamList] .loadingCategories").fadeIn("slow", function(){
		
		// ajax request
		productListRefresh(methodParameters);
	});
	

	jQuery(this).blur();
	return false;
}



//function toggleExtraResults() {
//	if(jQuery(this).hasClass("current")) {
//		jQuery("#filterArea .extraCategories").hide("blind", { direction: "vertical"}, 400);
//		jQuery("#filterArea .extraResults").removeClass("current");

//	}else if(jQuery(this).hasClass("opened")){
//		jQuery("#filterArea .extraCategories:hidden").show("blind", { direction: "vertical"}, 400);
//		jQuery("#filterArea .extraResults").removeClass("current");
//		jQuery(this).addClass("current");

//	}else if(jQuery(this).hasClass("current") && jQuery(this).hasClass("opened")) {
//		jQuery("#filterArea .extraCategories").hide("blind", { direction: "vertical"}, 400);
//		jQuery("#filterArea .extraResults").removeClass("current");

//	}else{
//		jQuery("#filterArea .extraCategories:hidden").show("blind", { direction: "vertical"}, 400);
//		//lauching ajax request
//		getExtraFilters(jQuery(this));
//		jQuery("#filterArea .extraResults").removeClass("current");
//		jQuery(this).addClass("current");
//		jQuery("#filterArea .extraResults").removeClass("opened");
//		jQuery(this).addClass("opened");
//	}
//	jQuery(this).blur();
//	return false;
//}

function toggleExtraResults() {	
	if(jQuery(this).hasClass("current")) {
		jQuery("#filterArea .extraCategories").hide("blind", { direction: "vertical"}, 400);
		jQuery("#filterArea .extraResults").removeClass("current");

	}else if(jQuery(this).hasClass("opened")){
		jQuery("#filterArea .extraCategories:hidden").show("blind", { direction: "vertical"}, 400);
		jQuery("#filterArea .extraResults").removeClass("current");
		jQuery(this).addClass("current");

	}else if(jQuery(this).hasClass("current") && jQuery(this).hasClass("opened")) {
		jQuery("#filterArea .extraCategories").hide("blind", { direction: "vertical"}, 400);
		jQuery("#filterArea .extraResults").removeClass("current");

	}else{
		jQuery("#filterArea .extraCategories:hidden").show("blind", { direction: "vertical"}, 400);
		//lauching ajax request
		getExtraFilters(jQuery(this));		
		jQuery("#filterArea .extraResults").removeClass("current");
		jQuery(this).addClass("current");
		jQuery("#filterArea .extraResults").removeClass("opened");
		jQuery(this).addClass("opened");
	}
	jQuery(this).blur();
	return false;
}



// Récupération de la première class
function getFirstClass ( p_object)
{
    var v_class =  p_object.attr("class") 
    var v_tab = v_class.split(" ");  
    if (v_tab.length > 0) return v_tab[0];  
    else return v_class; 
} 




function getExtraFilters(obj) {
	
	// Setting AJAX Parameters (method, category id, etc)
	// object ref
	var v_filterName =  getFirstClass ( jQuery(obj).parent()); 
	
	//ajaxParam(Method, P_catid, P_filterName, P_filterValue, P_triName, P_PageNumber)
	var methodParameters = new ajaxParam(jQuery(obj).attr("href"), jQuery(".searchFilters h2").attr("id"), v_filterName, '', '', '');
	// loading layer
	var loadingHeight = jQuery("#filterArea .extraCategories").height();
	
	jQuery("#filterArea .extraCategories .loadingCategories").remove();
	jQuery("#filterArea .extraCategories").append("<li class=\"loadingCategories\"><span>Chargement des informations demandées</span></li>");
	jQuery("#filterArea .extraCategories, #filterArea .extraCategories .loadingCategories").css("height", loadingHeight);
	jQuery("#filterArea .extraCategories .loadingCategories").fadeIn("slow",function(){
		
		
		// ajax request
		$.ajax({ 
			url:methodParameters.method,
			type: "GET",
			dataType : "json",
			data: "{p_code:'" + methodParameters.code + "',p_catId:'" + methodParameters.catId + "', p_filterName:'" + methodParameters.filterName + "', p_filterValue:'" + methodParameters.filterValue +"', p_triName:'" + methodParameters.triName +"', p_PageNumber:'" + methodParameters.pageNumber +"' , p_sortDec:'" + methodParameters.sortDesc+"' , p_type:'" + methodParameters.typeId+"'}",
			contentType: "application/json; charset=utf-8",
			beforeSend: function(){}, 
			success: function(response){
			    AjaxResponse = new ajaxResponse(response); 
				jQuery("#filterArea .extraCategories .loadingCategories").siblings().remove();
			}, 
			complete:function(data){
			
				jQuery("#filterArea .extraCategories").css("height", "auto");
				jQuery("#filterArea .extraCategories").append(AjaxResponse.moreFilters);
				
				if(jQuery("#filterArea .extraCategories li a").length != 0) {
					jQuery("#filterArea .extraCategories .loadingCategories").fadeOut("normal", function() {
						jQuery(this).remove();
						jQuery("#filterArea .extraCategories > li").removeClass();
						jQuery("#filterArea .extraCategories > li").addClass(methodParameters.filterName);
						jQuery("#filterArea .extraCategories > li:last").addClass("last");
					});
				}else{
					jQuery("#filterArea .extraCategories li").append("<p>Il n'y a pas de résultats supplémentaires pour cette catégorie.</p>")
					jQuery("#filterArea .extraCategories li").addClass("noMoreCateg");
					jQuery("#filterArea .extraCategories .loadingCategories").fadeOut("normal", function() {
						jQuery(this).remove();
					});
				}
	          
	            // binding link events
	            jQuery(".extraCategories li a").bind("click", filterSearch);
	        },
			error: function(theRequest, errorType, exceptionObject){ } 
		});
	});
}
/* END ////// FILTER ZONE : EXTRA RESULTS */

/* START ////// NEXT RESULTS (pages) */

function nextResults() {
	if(!jQuery(this).parent().hasClass("current")){
		
		// URL to call
		var requestURL = jQuery(this).attr("href");
		
		// GET page index		
		var parentIndex = jQuery(".pagination li").index(jQuery(this).parent());
		if(parentIndex >= jQuery(".pagination li").length / 2) {
			// pair
			if(!(parentIndex % 2) == true){
				parentIndex = parseInt((parentIndex / 2) - 1);
			// impair
			}else{
				parentIndex = parseInt(parentIndex / 2);
				if(parentIndex == 1){
					parentIndex = parentIndex -1;
				}
			}
		}
		var v_pageNumber = jQuery(this).attr("rel")//parentIndex + 1; 



		// object ref
		//ajaxParam(Method, P_catid, P_filterName, P_filterValue, P_triName, P_PageNumber)
		
		// Setting AJAX Parameters (method, category id, etc)

  	var methodParameters = new ajaxParam(requestURL, jQuery(".searchFilters h2").attr("id"), '', '', '', v_pageNumber);
		
		if (AjaxParams != null ) 
		{
		    methodParameters.filterName = AjaxParams.filterName; 
		    methodParameters.filterValue = AjaxParams.filterValue; 
		    methodParameters.triName= AjaxParams.triName; 
		    methodParameters.sortDesc= AjaxParams.sortDesc; 
	  }
		
		// loading layer
		var loadingHeight = jQuery(".searchResults div[id^=searchParamList]").height();
		jQuery(".searchResults div[id^=searchParamList] .loadingCategories").remove();
		jQuery(".searchResults div[id^=searchParamList] ul:first").append("<li class=\"loadingCategories\"><span>Chargement des informations demandées</span></li>");
		jQuery(".searchResults div[id^=searchParamList] .loadingCategories").css("height", loadingHeight);

		// page numbers
		jQuery(".pagination li").removeClass("current");
		jQuery(this).parent().addClass("current");
		var position = jQuery(".searchResults .pagination li").index(jQuery(".searchResults .pagination .current"));
		var myIndex = "";
		if(position < jQuery(".searchResults .pagination li").length / 2) {
			myIndex = jQuery(".searchResults .pagination li").length / 2; 
		}else{
			myIndex = -(jQuery(".searchResults .pagination li").length / 2);	
		}
		var activeItem = jQuery(".pagination li")[position + myIndex];
		jQuery(activeItem).addClass("current");
		//
		
		jQuery(".searchResults div[id^=searchParamList] .loadingCategories").fadeIn("slow", function(){
			// ajax request
			productListRefresh(methodParameters);
		});	
	}	
	jQuery(this).blur();
	return false;
}

/* START //// SELECT BOX EVENT */
function rearrangeResults() {
	
	// URL to call
	//var requestURL = jQuery(".searchFilters #filters").val();
	var triName = jQuery(".searchFilters #filters").val();
	
	// Setting AJAX Parameters (method, category id, etc)
	var methodParameters = new ajaxParam(jQuery(".filterBar input[name=sortFilter]").val(), jQuery(".searchFilters h2").attr("id"), '', '', triName, '');
	
	
	if(triName != -1 && triName != checkRearrangeUrl) {
		switch(jQuery(this).attr("id")){
			case "rearrangeResults":
				// page numbers : setting back to page 1
				jQuery(".pagination li").removeClass("current");
				jQuery(".pagination li:first").addClass("current");
				var position = jQuery(".pagination li").length / 2;
				var secondItem = jQuery(".pagination li:eq("+position+")").addClass("current");
				
				
				// loading layer
				var loadingHeight = jQuery(".searchResults div[id^=searchParamList]").height();
				jQuery(".searchResults div[id^=searchParamList] ul:first").append("<li class=\"loadingCategories\"><span>Chargement des informations demandées</span></li>");
				jQuery(".searchResults div[id^=searchParamList] .loadingCategories").css("height", loadingHeight);
				
				jQuery(".searchResults div[id^=searchParamList] .loadingCategories").fadeIn("slow", function(){
					// ajax request
					//productListRefresh(methodParameters,jQuery(this).attr("id")); // MEC Fred
					productListRefresh(methodParameters);
				});
				break;
			case "rearrangeCategoryResults":
				// loading layer
				var loadingHeight= 0;
				jQuery(".searchResults div[id^=searchParamList]").each(function(i){
					loadingHeight = loadingHeight + jQuery(this).height();
				});								 

				jQuery(".searchResults div[id^=searchParamList]:last").after("<div class=\"loadingCategories\"><span>Chargement des informations demandées</span></div>");
				jQuery(".searchResults div.loadingCategories").css("height", loadingHeight);
				
				var searchType = jQuery(this).attr("id");
				jQuery(".searchResults div.loadingCategories").fadeIn("normal", function(){
					// ajax request
					productListRefresh(methodParameters, searchType);
				});
								
				break;
		}
		
	}
	checkRearrangeUrl = triName;
	jQuery(this).blur();
	return false;
}


// AJAX FUNCTION TO RELOAD PRODUCTS LIST FROM SERVER
function productListRefresh(params,p_type) {
	
	// Sauvegarde des paramètres de la recherche
	AjaxParams = params; 

	$.ajax({ 
		url:params.method,
		type: "GET",
		dataType : "json",
		data: "{p_code:'" + params.code + "',p_catId:'" + params.catId + "', p_filterName:'" + params.filterName + "', p_filterValue:'" + params.filterValue +"', p_triName:'" + params.triName +"', p_PageNumber:'" + params.pageNumber  +"' , p_sortDec:'" + params.sortDesc+"' , p_type:'" + params.typeId+"'}",
		contentType: "application/json; charset=utf-8",
		beforeSend: function(){}, 
		success: function(response){
		AjaxResponse = new ajaxResponse(response); 
		}, 
		complete:function(data){
			if(AjaxResponse.navBar != ""){
			
			// cas NavBar rempli 
				jQuery(".filterBar .pagination").each(function(i){
					jQuery(this).fadeOut(300, function(){
						jQuery(this).remove();
					});
					// Ajout Fred 
					jQuery(".filterBar .pagination").remove();
					jQuery(".filterBar").append(AjaxResponse.navBar);
				});
				jQuery(".filterBar .pagination").hide();
				jQuery(".filterBar .pagination").fadeIn(500);
				jQuery(".pagination a").bind("click", nextResults);
			}
			
			//alert(type  + '\t'+ AjaxResponse.products );
			
			// le type n'est pas transmis 
			if (p_type == null )  p_type = "rearrangeResults"; 
			
			switch(p_type) {
				case "rearrangeResults":
					jQuery(".searchResults div[id^=searchParamList] .loadingCategories").css("height", "100%");				
				
					//removing old items
					jQuery(".searchResults div[id^=searchParamList] .loadingCategories").siblings().remove();
					
					//appending new products and their events
					jQuery(".searchResults div[id^=searchParamList] ul:first").append(AjaxResponse.products);
					productsEvents();	
					
					jQuery(".searchResults div[id^=searchParamList] .loadingCategories").fadeOut("normal", function(){
						jQuery(this).remove();
					});
					break;
				case "rearrangeCategoryResults":					
					//removing old items
					jQuery(".searchResults div.loadingCategories").siblings("div[id^=searchParamList]").remove();
					//appending new products and their events
					jQuery(".searchResults div.loadingCategories").after(AjaxResponse.products);
					
					//binding products events
					productsEvents();
					
					//update loading layer height
					var loadingHeight= 0; // to compensate browser adjusting height
					jQuery(".searchResults div[id^=searchParamList]").each(function(i){
						loadingHeight = loadingHeight + jQuery(this).height();
					});
					jQuery(".searchResults div.loadingCategories").css("height", loadingHeight);
					
					jQuery(".searchResults div.loadingCategories").fadeOut("normal", function(){
						jQuery(this).remove();
					});
					break;
			}
		},
		error: function(theRequest, errorType, exceptionObject){ } 
	});
}

/* END //// SELECT BOX EVENT */


function productsEvents() {
	/* START ////////// Initialize links to display hidden product description */
	/* START ////////// and manage BADGE Z-index UP */
		jQuery(".productDetails .displayData").bind('click', displayData);
		jQuery(".productDetails .displayData").bind('click', zBadgeUp);
		jQuery(".productPrincing a").bind('click', zBadgeUp);
	/* END  /////////// Initialize links to display hidden product description */
	
	/* START ////////// Initialize links to hide products description */
	/* START ////////// and manage BADGE Z-index DOWN */
		jQuery(".completeDescription .hideData").bind('click', hideData);
		jQuery(".completeDescription .hideData").bind('click', zBadgeDown);
	/* END  /////////// Initialize links to hide products description */
	
	/* START //////////  Add to cart Button*/
		jQuery(".productPrincing a").bind("click", addToCart);
		jQuery(".searchResults .productPrincing a").bind("click", function(){
		  tracker55.fc("Ajoutpanier/catalogue"); 
    });
	/* END //////////  Add to cart Button */
}

/* END ////// NEXT RESULTS (pages) */

