function ButtonManager(){

    this.button1 = document.getElementById('mode1_button');
    this.button2 = document.getElementById('mode2_button');
    this.button3 = document.getElementById('mode3_button');
   
    this.selectButton = function(nb){
        this.disableButtons(false);
        switch(nb){
            case 1:
                this.button1.childNodes[0].src='medias/_images_modeles/_icones/_i_small_list_o.gif';
                break;
            case 2:
                this.button2.childNodes[0].src='medias/_images_modeles/_icones/_i_list_icon_o.gif';
                break;
            case 3:
                this.button3.childNodes[0].src='medias/_images_modeles/_icones/_i_list_detail_o.gif';
                break;
        }
    }

    this.disableButtons = function( disabled){
        if(disabled==true){
            this.button1.childNodes[0].src='medias/_images_modeles/_icones/_i_small_list_o.gif';
            this.button2.childNodes[0].src='medias/_images_modeles/_icones/_i_list_icon_o.gif';
            this.button3.childNodes[0].src='medias/_images_modeles/_icones/_i_list_detail_o.gif';

        } else {
            this.button1.childNodes[0].src='medias/_images_modeles/_icones/_i_small_list.gif';
            this.button2.childNodes[0].src='medias/_images_modeles/_icones/_i_list_icon.gif';
            this.button3.childNodes[0].src='medias/_images_modeles/_icones/_i_list_detail.gif';           
        }
    }

    this.getActiveButton = function() {
        if(this.button1.childNodes[0].src.indexOf('_i_small_list_o.gif',0)!=-1){
            return 1;
        }
        if(this.button2.childNodes[0].src.indexOf('_i_list_icon_o.gif',0)!=-1){
            return 2;
        }
        if(this.button3.childNodes[0].src.indexOf('_i_list_detail_o.gif',0)!=-1){
            return 3;
        }
    }
}


function ParamsManager(buttonmanager){
    this.action = "product";
    this.limit_page_index = 3;
    this.total_result = 0;
    this.nb_page = 1;
    this.mode = 0;
    this.catalog_id = catalog_id;
    this.minVal = sld1.values[0];
    this.maxVal = sld1.values[1];
    this.resultperpage = document.getElementById('resultsNum');
    this.page = 1;
    this.buttonmanager = buttonmanager;
    this.category_id = category_id;
    this.category_filtering = [];
    this.keywords = search_keywords;
    this.id_langue = id_langue;

    this.saveParams = function() {
    	dhtmlHistory.add('back'+parseInt(Math.random()*1000,10),this.getParams());
    }

    this.setRequestType = function(type) {
        this.action = type;
    }

    this.setMode = function(mode){
        this.mode = mode;
    }

    this.setPage = function(page){
        this.page = page;
    }

    this.setCategory = function(category){
        this.cleanCategorySelect();
        this.category_id = category;
    }

    this.setPriceScale = function(minval, maxval){
        this.minVal = parseInt(minval,10);
        this.maxVal = parseInt(maxval,10);
    }

    this.cleanCategorySelect = function(){
        this.category_filtering = [];
    }

    this.setResultPerPage = function(nb){
        this.resultperpage.value = nb;
    }

    this.setKeywords = function(keywords){
        this.keywords = keywords;
    }

    this.addCategoryFiltering = function(new_category){
        this.category_filtering.push(new_category);
    }

 
    this.removeCategoryFiltering = function(removed_category){
        var tmp = [];
        for(var i=0; i<this.category_filtering.length; i++){
            if(parseInt(this.category_filtering[i],10)!=parseInt(removed_category,10)){
                tmp.push(this.category_filtering[i]);
            } 
        }
        this.category_filtering = tmp;
    }

    this.getParams = function(modeauto) {
        if(modeauto==true && this.buttonmanager!=null){
            this.setMode(this.buttonmanager.getActiveButton());
        }

        var rowData = {
            action: this.action,
            mode: this.mode,
            catalog_id: this.catalog_id,
            minVal: this.minVal,
            maxVal: this.maxVal,
            resultperpage: parseInt(this.resultperpage.value,10),
            page: this.page,
            keywords: this.keywords,
            category_id: this.category_id,
            category_filtering: this.category_filtering.join(","),
            limit_page_index: this.limit_page_index,
            id_langue: this.id_langue
        }
        return rowData;
    }


    this.restoreParams = function(data) {
        if (data==null){
            return false;
        } else {
            this.action = data.action,
            this.mode = data.mode,
            this.catalog_id = data.catalog_id,
            this.minVal = this.minVal,
            this.maxVal = this.maxVal,
            this.resultperpage.value = data.resultperpage,
            this.page = data.page,
            this.keywords = data.keywords,
            this.category_id = data.category_id,
            this.category_filtering = data.category_filtering.split(","),
            this.limit_page_index = data.limit_page_index,
            this.id_langue = data.id_langue
        }
    }
}



// Evenement sur les click bouton
function onRefreshButtonPage(nb){
    button.selectButton(nb);
    switch(nb){
        case 1:
            document.getElementById('catalog-list').className='small-list';
            break;
        case 2:
            document.getElementById('catalog-list').className='icon-list';
            break;
        case 3:
            document.getElementById('catalog-list').className='detail-list';
            break;
    }
    send_request(params.getParams(true));
}

function onClickButton1(init){
    button.selectButton(1);
    document.getElementById('catalog-list').className='small-list';
    if (init != true) {
        params.saveParams();
    }
    send_request(params.getParams(true));
}

function onClickButton2(init){
    button.selectButton(2);
    document.getElementById('catalog-list').className='icon-list';
    if (init != true) {
        params.saveParams();
    }
    send_request(params.getParams(true));
}

function onClickButton3(init){
    button.selectButton(3);
    document.getElementById('catalog-list').className='detail-list';
    if (init != true) {
        params.saveParams();
    }
    send_request(params.getParams(true));
}

function onChangePage(nb){
    params.setPage(nb);
    onSetPageClass(nb);
    params.saveParams();
    send_request(params.getParams());
}

function onChangeValue(){
    send_request(params.getParams());
}

function onChangeCategory(nb){
    onSetPageClass(1);
    params.setPage(1);
    params.keywords = '';
    $('search_field_article').value = '';
    params.setCategory(nb);
    params.setPriceScale(0,50000);
    params.saveParams();
    send_request(params.getParams());
}

function onChangePrice(){
    clearTimeout(timeout_flag);
    params.setPage(1);
    params.setPriceScale(sld1.values[0], sld1.values[1]);
    timeout_flag = setTimeout(function(){
        send_request(params.getParams());            
    },500);
}

function onChangeCategoryFiltering(objet){
    if(objet.checked==true){
        params.removeCategoryFiltering(objet.getAttribute('name'));
    } else {
        params.addCategoryFiltering(objet.getAttribute('name'));
    }
    params.saveParams();
    send_request(params.getParams());
}

function onChangeSearch(keywords){
    clearTimeout(timeout_flag);
    params.setPage(1);

    params.setCategory(0);              // A RETIRER SI BESOIN
    params.setPriceScale(0,50000);      // A RETIRER SI BESOIN

    params.setKeywords(keywords);
    timeout_flag = setTimeout(function(){
        params.saveParams();
        send_request(params.getParams());            
    },500);
    
}

function onSetPageClass(nb){
    var before_nb = 0;
    var after_nb = 0;
    var nb_page_each_side = 2;

    for(var i=1; i<=nb_page_each_side; i++) {
        if (document.getElementById('li_page_'+(nb-i)) == null) {
            after_nb++;
        }
        if (document.getElementById('li_page_'+(nb+i)) == null) {
            before_nb++;
        }   
    }

    for (var i=1; i<=params.nb_page; i++){
        if (document.getElementById('li_page_'+i) != null) {
            if (i >= nb-(nb_page_each_side+before_nb) && i <= nb+(nb_page_each_side+after_nb)) {
                document.getElementById('li_page_'+i).style.display='block';
                document.getElementById('bottom_li_page_'+i).style.display='block';
            } else {
                document.getElementById('li_page_'+i).style.display='none';
                document.getElementById('bottom_li_page_'+i).style.display='none';
            }
        }

        if (i == nb) {
            document.getElementById('li_page_'+i).className='activeli';
            document.getElementById('bottom_li_page_'+i).className='activeli';
        } else {
            document.getElementById('li_page_'+i).className='';
            document.getElementById('bottom_li_page_'+i).className='';
        }
    }

    if(
        document.getElementById('li_page_previous')!=null &&
        document.getElementById('li_page_next')!=null
      ){
        if(nb == 1) {
            document.getElementById('li_page_previous').style.display = 'none';
            document.getElementById('bottom_li_page_previous').style.display = 'none';
        } else {
            document.getElementById('li_page_previous').style.display = 'block';
            document.getElementById('bottom_li_page_previous').style.display = 'block';
        }

        if(nb == params.nb_page) {
            document.getElementById('li_page_next').style.display = 'none';
            document.getElementById('bottom_li_page_next').style.display = 'none';
        } else {
            document.getElementById('li_page_next').style.display = 'block';
            document.getElementById('bottom_li_page_next').style.display = 'block';
        }
    }
}

function previousPage(){
    onChangePage(params.page-1);
}

function nextPage(){
    onChangePage(params.page+1);
}

// Fonction d'envoi de requete
function send_request(params){
    // Message d'accueil
    showWaitingMessage();

    //Demande d'un jeton d'identification de la requete
    var tmp_date = new Date();
    last_token_request = tmp_date.getTime();
    params.token = last_token_request;

    // Requete
    new Ajax.Request('../catalog_manager/htdocs/frontoffice/product_presentation/get_product.php',
        {
            method:'post',
            parameters: params,
            onSuccess: function(transport){
                var response = transport.responseText || "error";
                if (response != "error") {
                    var response = eval("("+response+")");
                    if(last_token_request == response.token){
                        updatediv(response);
                    }
                } else {
                    updatediv(false);
                }
            },
            onFailure: function(){ return false; }
        });
}

function showInfoMessage(message)
{
    $('message-content').innerHTML = '<p>'+message+'</p>';

	Effect.SlideDown('info-message', { duration: 0.5 });
	$('info-message').fade({ delay: 1.5, duration: 0.5 , afterFinish: function()
		{
			$('message-content').innerHTML = '<p>&nbsp;</p>';
    	}
	});
}

function showWaitingMessage(){
    if (id_langue == 2) {
        wait_icone = '<p id="loading-progress">Loading datas ...</p>';
    } else {
        wait_icone = '<p id="loading-progress">Chargement en cours ...</p>';
    }
    document.getElementById('catalog-list').innerHTML = wait_icone;
}

function updateCartDiv(count_article){
    if (id_langue == 2) {
        if(count_article<=0){
            document.getElementById('products-in-basket').innerHTML = '<strong>No reference</strong> in the cart';
        } else if(count_article==1) {
            document.getElementById('products-in-basket').innerHTML = '<strong>1 reference</strong> in the cart';
        } else {
            document.getElementById('products-in-basket').innerHTML = '<strong>'+count_article+' references</strong> in the cart';
        }
    } else {
        if(count_article<=0){
            document.getElementById('products-in-basket').innerHTML = '<strong>aucune référence</strong> dans le panier';
        } else if(count_article==1) {
            document.getElementById('products-in-basket').innerHTML = '<strong>1 référence</strong> dans le panier';
        } else {
            document.getElementById('products-in-basket').innerHTML = '<strong>'+count_article+' références</strong> dans le panier';
        }
    }
}

function updatediv(response){
    //Ce qu'on change quoiqu'il arrive
    document.getElementById('catalog-list').innerHTML = response.content;
    document.getElementById('result_indic').innerHTML = response.affich_result;
    params.total_result = response.total_result;
    params.nb_page = response.nb_page;

    // Ce qu'on change si la category change
    if(origin_params.category_id != params.category_id ){
        document.getElementById('navigation-cat').innerHTML = response.navigation;

        if(response.category_select){
            document.getElementById('catalogue-options-1').innerHTML = response.category_select;
            document.getElementById('catalogue-options-1').style.display = 'block';
            document.getElementById('catalogue-options-1-title').innerHTML = response.category_title;
        } else {
            document.getElementById('catalogue-options-1').style.display = 'none';
        }
    }

    // Ce qu'on change si la category change ainsi que le nombre de requete par page 
    if(
        origin_params.resultperpage != params.resultperpage.value || 
        origin_params.category_id != params.category_id ||
        origin_params.category_filtering != params.category_filtering.join() ||
        origin_params.minVal != params.minVal ||
        origin_params.maxVal != params.maxVal ||
        origin_params.keywords != params.keywords
      ){
        document.getElementById('page_button').innerHTML = response.page_content;
        document.getElementById('bottom_page_button').innerHTML = response.bottom_page_content;
    }
    onSetPageClass(params.page);

    // Ce qu'on change si la category change ainsi que le nombre de requete par page
    if(
        origin_params.category_id != params.category_id ||
        origin_params.category_filtering != params.category_filtering.join()
      ){
        document.getElementById('price_scale').innerHTML = response.price_scale;

        var price_slider = $('tirette');

        sld1 = new Control.Slider(price_slider.select('.cursor'), price_slider, {
          range: $R(response.lower_price,response.upper_price),
          sliderValue: [response.lower_price,response.upper_price],
          restricted: true,
          onSlide: function(values) {
            $('cursor1').innerHTML = '<span>' + Math.round(values[0]) + '&euro;</span>';
            $('cursor2').innerHTML = '<span>' + Math.round(values[1]) + '&euro;</span>';
          },
          onChange: function(values) { 
            $('cursor1').innerHTML = '<span>' + Math.round(values[0]) + '&euro;</span>';
            $('cursor2').innerHTML = '<span>' + Math.round(values[1]) + '&euro;</span>';
            onChangePrice();
          }
        });
    }
    
    // Mise à jour des params d'origine
    origin_params = params.getParams();
}


function addProductToCart(product_id, quantity, title_message){
    var rowData = {
        action: "addproducttocart",
        product_id: product_id,
        quantity: quantity
    }

    //Requete
    new Ajax.Request('../catalog_manager/htdocs/frontoffice/product_presentation/remote_orders.php',
        {
            method:'post',
            parameters: rowData,
            onSuccess: function(transport){
                var response = transport.responseText || "error";
                if (response != "error") {
                    var response = eval("("+response+")");
                    updateCartDiv(parseInt(response.count_article,10));
                    if (id_langue == 2) {
                        showInfoMessage('The product "'+title_message+'" is added to your cart.');
                    } else { 
                        showInfoMessage('Le produit "'+title_message+'" a été ajouté au panier.');
                    }
                } else {
                }
            },
            onFailure: function(){ return false; }
        });
}

function goToUrl(urlstring){
    document.location.href = urlstring;
}

function initPage(){
    // Permet de connaitre le numéro de jeton
    // de la dernière requete afin de ne pas charger par erreur une ancienne
    last_token_request = 0;
    timeout_flag = 0;

    // Instanciation 
    button = new ButtonManager();
    params = new ParamsManager(button);
    params.setResultPerPage(8);
    origin_params = params.getParams();

    // Nécessaire pour détecter un changement par défaut sur les catégories
    origin_params.category_id = -1;
    
    // Initialisation
    onClickButton2(true);
}

// Restore History
function restoreHistory(data){
    // initialisation si retour
    if (isCatalogLoaded != true){
        initPage();
        isCatalogLoaded = true;
    } else {

        // restauration des paramètres
        if (data != null) {
            params.restoreParams(data);
            document.getElementById('search_field_article').value = params.keywords;
            onRefreshButtonPage(params.mode);
        } else {
            history.back();
        }
    }
}

