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(".lastChild").bind("click", filterSearchMenu);

	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);
}

// Declaring ajax functions parameters object
function ajaxParam(Method, P_catid, P_filterName, P_filterValue, P_triName, P_PageNumber){
	this.method = Method;
	this.catId = P_catid;
	this.filterName = P_filterName;
	this.filterValue = P_filterValue;
	this.triName = P_triName;
	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(".categoriesBlock li.current a").removeAttr("params");
		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").removeAttr("params");
	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[class^=productListStyle]").height();
	jQuery(".searchResults div[class^=productListStyle] .loadingCategories").remove();
	jQuery(".searchResults div[class^=productListStyle] ul:first").append("<li class=\"loadingCategories\"><span>Chargement des informations demandées</span></li>");
	jQuery(".searchResults div[class^=productListStyle] .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 requestURL = jQuery(this).attr("href");
	var temp1 = requestURL.lastIndexOf("SearchDeep.aspx");
	var temp2 = requestURL.length;
	requestURL = requestURL.substring(temp1,temp2);
	
	var methodParameters = new ajaxParam(requestURL, jQuery(".searchFilters h2").attr("id"), parentClass, jQuery(this).attr("rel"), '', '');
	
	jQuery(".searchResults div[class^=productListStyle] .loadingCategories").fadeIn("slow", function(){
		
		// ajax request
		productListRefresh(methodParameters);
	});
	

	jQuery(this).blur();
	return false;
}

// filtering search
function filterSearchMenu() {
    // getting filterName
    var parentClass = 'rayonFILTER';

    // 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[class^=productListStyle]").height();
    jQuery(".searchResults div[class^=productListStyle] .loadingCategories").remove();
    jQuery(".searchResults div[class^=productListStyle] ul:first").append("<li class=\"loadingCategories\"><span>Chargement des informations demandées</span></li>");
    jQuery(".searchResults div[class^=productListStyle] .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 requestURL = jQuery(this).attr("href");
    var temp1 = requestURL.lastIndexOf("SearchDeep.aspx");
    var temp2 = requestURL.length;
    requestURL = requestURL.substring(temp1, temp2);

    var methodParameters = new ajaxParam(requestURL, jQuery(this).attr("ref"), parentClass, jQuery(this).attr("rel"), '', '');

    jQuery(".searchResults div[class^=productListStyle] .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 getExtraFilters(obj) {
	
	// 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(obj).attr("href"), jQuery(".searchFilters h2").attr("id"), jQuery(obj).parents(":eq(0)").attr("class"), '', '', '');
	
	// 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: "POST",
	        dataType: "json",
	        data: "{p_searchText:'" + jQuery("#hidSearch").val() + "', p_parameters:'" + jQuery('input#hidParameters').val() + "', p_filterName:'" + methodParameters.filterName + "'}",
	        contentType: "application/json; charset=utf-8",
	        beforeSend: function() { },
	        success: function(res) {
	            result = res.d;
	            jQuery("#filterArea .extraCategories .loadingCategories").siblings().remove();
	        },
	        complete: function(data) {
	            data = eval("(" + result + ")");
	            jQuery("#filterArea .extraCategories").css("height", "auto");
	            jQuery("#filterArea .extraCategories").append(data.results.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
		
		//http://fo.cultura.bi/SearchDeep.aspx/ApplyFilter
		var requestURL = jQuery(this).attr("href");
		var temp1 = requestURL.lastIndexOf("SearchDeep.aspx");
		var temp2 = requestURL.length;
		requestURL = requestURL.substring(temp1,temp2);
		// 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;
				}
			}
		}*/
		

		// 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"), '', '', '', jQuery(this).attr("page"));
		
		// loading layer
		var loadingHeight = jQuery(".searchResults div[class^=productListStyle]").height();
		jQuery(".searchResults div[class^=productListStyle] .loadingCategories").remove();
		jQuery(".searchResults div[class^=productListStyle] ul:first").append("<li class=\"loadingCategories\"><span>Chargement des informations demandées</span></li>");
		jQuery(".searchResults div[class^=productListStyle] .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[class^=productListStyle] .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[class^=productListStyle]").height();
				jQuery(".searchResults div[class^=productListStyle] ul:first").append("<li class=\"loadingCategories\"><span>Chargement des informations demandées</span></li>");
				jQuery(".searchResults div[class^=productListStyle] .loadingCategories").css("height", loadingHeight);
				
				jQuery(".searchResults div[class^=productListStyle] .loadingCategories").fadeIn("slow", function(){
					// ajax request
					productListRefresh(methodParameters,jQuery(this).attr("id"));
				});
				break;
			case "rearrangeCategoryResults":
				// loading layer
				var loadingHeight= 0;
				jQuery(".searchResults div[class^=productListStyle]").each(function(i){
					loadingHeight = loadingHeight + jQuery(this).height();
				});								 

				jQuery(".searchResults div[class^=productListStyle]: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;
}



/*function get_data(searchText, index) {
    $.ajax({
        type: "POST",
        url: "SearchDeep.aspx/NextResults",
        data: "{p_searchText:'" + $('input#hidSearch').val() + "', p_parameters:'" + $('input#hidParameters').val() + "', p_pageNumber:'1'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(msg) {
            $('#result').html(msg.d);
        },
        error: function(xhr, status, error) {
            var err = xhr.responseText;
            $('#result').html('Error –> ' + err.Message);
        }
    });
}*/
var result = null;
var p_params = '';
var p_filterApply = false;
var p_currentFilter;
var p;
// AJAX FUNCTION TO RELOAD PRODUCTS LIST FROM SERVER
function productListRefresh(methodParameters,searchType) {
	// object ref
	//ajaxParam(Method, P_catid, P_filterName, P_filterValue, P_triName, P_PageNumber)
	
	/// JSON Format expected from server ///
	/*
	{
		results: {
			navBar: "",
			products: "",
			moreFilters:""
		}
	}
	*/		
    p = jQuery("#hidParameters").val();
    var chaine= p;
    var reg=new RegExp("(rayonFILTER)", "g");    
    p = chaine.replace(reg,"old");
    if (p_filterApply) {
            p = p + '&' + p_currentFilter;
    }    
    var triName = jQuery(".searchFilters #filters").val();
    switch (methodParameters.method) {
		
        case "SearchDeep.aspx/NextResults":
            if (triName != "-1") {
				p = p + "&SORT_ORDER=" + triName;
			}
            p_params = "{p_searchText:'" + jQuery("#hidSearch").val() + "', p_parameters:'" + p + "', p_pageNumber:'" + methodParameters.pageNumber + "'}";
            searchType = "rearrangeResults";
            break;
        case "SearchDeep.aspx/ApplyFilter":
            p = jQuery("#hidParameters").val();
            p_filterApply = true;
            p_currentFilter = methodParameters.filterName + '=' + methodParameters.filterValue;
            if (triName != "-1") {
                p = p + "&SORT_ORDER=" + triName;
            }
            p_params = "{p_searchText:'" + jQuery("#hidSearch").val() + "', p_parameters:'" + p + "', p_filterName:'" + methodParameters.filterName + "', p_filterValue:'" + methodParameters.filterValue + "'}";
            searchType = "rearrangeResults";
            break;
        case "SearchDeep.aspx/RemoveFilter":
            p_filterApply = false;
            p_currentFilter = '';
            p = jQuery("#hidParameters").val();
            if (triName != "-1") {
                p = p + "&SORT_ORDER=" + triName;
            }
            p_params = "{p_searchText:'" + jQuery("#hidSearch").val() + "', p_parameters:'" + p + "'}";
            searchType = "rearrangeResults";
            break;
        
        case "SearchDeep.aspx/GetMoreFilters":
            p_params = "{p_searchText:'" + jQuery("#hidSearch").val() + "', p_parameters:'" + jQuery("#hidParameters").val() + "', p_filterName:'" + methodParameters.filterName + "'}";
            searchType = "rearrangeCategoryResults";
            break;
		case "SearchDeep.aspx/ApplySortOrder":
            p_params = "{p_searchText:'" + jQuery("#hidSearch").val() + "', p_parameters:'" + p + "', p_triName:'" + methodParameters.triName + "'}";
            searchType = "rearrangeResults";
            break;
        default:
            p_params = "{p_searchText:'" + jQuery("#hidSearch").val() + "', p_parameters:'" + jQuery("#hidParameters").val() + "', p_filterName:'" + methodParameters.filterName + "'}";
            break;
    }
    $.ajax({
        url: methodParameters.method,
        type: "POST",
        dataType: "json",
        data: p_params,
        contentType: "application/json; charset=utf-8",
        beforeSend: function() { },
        success: function(res) {
            result = res.d;
        },
        complete: function(data) {
			result = result.replace(/\n/g,'');
            data = eval("(" + result + ")");
            jQuery("#hidCurrentPage").val(data.results.page);
            if (data.results.navBar != "") {
                jQuery(".filterBar .pagination").each(function(i) {
                    jQuery(this).fadeOut(300, function() {
                        jQuery(this).remove();
                    });
                    jQuery(".filterBar:eq("+i+")").append(data.results.navBar);
                });
                jQuery(".filterBar .pagination").hide();
                jQuery(".filterBar .pagination").fadeIn(500);
                jQuery(".pagination a").bind("click", nextResults);
            }
            if (data.results.filterParams != "") {
                jQuery(".categoriesBlock li.current a").attr("params", data.results.filterParams);
            }
            switch (searchType) {
                case "rearrangeResults":
                    jQuery(".searchResults div[class^=productListStyle] .loadingCategories").css("height", "100%");

                    //removing old items
                    jQuery(".searchResults div[class^=productListStyle] .loadingCategories").siblings().remove();

                    //appending new products and their events
                    jQuery(".searchResults div[class^=productListStyle] ul:first").append(data.results.products);
                    productsEvents();

                    jQuery(".searchResults div[class^=productListStyle] .loadingCategories").fadeOut("normal", function() {
                        jQuery(this).remove();
                    });
                    break;
                case "rearrangeCategoryResults":
                    //removing old items
                    jQuery(".searchResults div.loadingCategories").siblings("div[class^=productListStyle]").remove();
                    //appending new products and their events
                    jQuery(".searchResults div.loadingCategories").after(data.results.products);

                    //binding products events
                    productsEvents();

                    //update loading layer height
                    var loadingHeight = 0; // to compensate browser adjusting height
                    jQuery(".searchResults div[class^=productListStyle]").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);
		
		 //// Marquage 55th 
		jQuery(".searchResults .productPrincing a").bind("click", function(){
		  tracker55.fc("Ajoutpanier/recherche");
    });
	/* END //////////  Add to cart Button */
}

/* END ////// NEXT RESULTS (pages) */

