/*
    UZ AJAX filter

    //
    // Options
    //

    ajaxLib
        Expected value: ami|jquery
        Default: "ami"

    requestType
        Expected value: GET|POST
        Default: "GET"
        NOTE: AMI ajax supports the POST method not correctly

    langData
        Expected value: 2 chars language name
        Default: "ru"

    dataSource
        Expected value: .php file name
        Default: "uz_get_custom_data.php"

    //
    // Init example
    //

    var hOpt = {
        ajaxLib: "jquery",
        requestType: "POST",
        langData: "en",
        dataSource: "uz_custom_filter.php",
    };
    uzAjaxStuff.init(hOpt);

    // For JQuery use
    $(document).ready(function(){
    });



//*/

//
// Init ajax stuff
//

var uzAjaxFilter = {
    debug: 0,
    ajaxLib: "ami",
    requestType: "GET",
    langData: "ru",
    dataSource: "uz_custom_filter.php",

    init: function(opt){
        // Set options
        if(typeof(opt) != 'undefined'){
            this.setOptions(opt);
        }

        // Enable debug by ip
        if(typeof(DEBUG_BY_IP) != 'undefined'){
            if(DEBUG_BY_IP == 1){
                this.debug = 1;
            }
        }

        // Init ajax stuff
        var hOpt = {
            ajaxLib: this.ajaxLib,
            requestType: this.requestType,
            langData: this.langData,
            dataSource: this.dataSource
        };
        uzAjaxStuff.init(hOpt);
        
    },

    setOptions: function(opt){
        for(var key in opt){
            this[key] = opt[key];
        }
    },

/*
    onLoadFillFilter: function() {
        var subpath;
        var filters = "";

        var aTmp = active_module_link.split('?');
        subpath = aTmp[0].substr(frontBaseHref.length);
        if(aTmp.length > 1){
            filters = aTmp[1];
            // Parse url params
            var hParams = uzAjaxStuff.parseUrlParams(filters);

            // Strip action
            if(typeof(hParams.action) != 'undefined'){
                delete(hParams.action);
            }

            // Prepare url params
            filters = uzAjaxStuff.prepareUrlParams(hParams);

            if(this.debug){
                //alert("filters orig = '"+aTmp[1]+"'\n\nfilters prepared = '"+filters+"'");
                //alert(urlParams);
            }

        }
        var urlParams = "&subpath=" + subpath + filters;

        if(this.debug){
            //alert(subpath+", filters = "+filters);
            //alert(urlParams);
        }

        var fieldsList = this.getFieldsList();

        var hData = {
            action: "get_flt_data",
            fields_list: fieldsList,
            plainUrlParams: urlParams
        };
        uzAjaxStuff.request(hData, uzAjaxFilter.applyFilterData);
    },
//*/

    getFieldsList: function() {
        var aRes = new Array();
        if(uzAFilterFields.length){
            for(var i = 0; i < uzAFilterFields.length; i++){
                aRes.push(uzAFilterFields[i].name);
            }
        }
        return aRes.join("|");
    },

    getFieldProp: function(name) {
        if(uzAFilterFields.length){
            for(var i = 0; i < uzAFilterFields.length; i++){
                if(name == uzAFilterFields[i].name){
                    return uzAFilterFields[i];
                }
            }
        }
        return {};
    },

    applyFilterData: function(content) {
        if(uzAjaxFilter.debug){
            //alert(content);
            var debug = uzAjaxStuff.getResItems(content, "debug").join("");
            if(debug.length){
                alert(debug);
            }
        }

        var aFieldsData = uzAjaxStuff.getResItems(content, "fields_data");
        if(uzAjaxFilter.debug){
            //alert(aFieldsData.join("\n\n"));
        }
        if(aFieldsData.length){
            for(var i = 0; i < aFieldsData.length; i++){
                uzAjaxFilter.populateField(aFieldsData[i]);
            }
        }

    },

    populateField: function(data) {
        var name = uzAjaxStuff.getResItems(data, "name").join("");
        var hProp = uzAjaxFilter.getFieldProp(name);
        if(uzAjaxFilter.debug){
            //alert("populateField "+hProp.name+" - "+hProp.type);
        }
        if(typeof(hProp.type) != 'undefined'){
            switch(hProp.type){
                case "select":
                    uzAjaxFilter.populateSelect(data);
                    break;
                case "checkbox":
                    uzAjaxFilter.populateCheckbox(data);
                    break;
                default:
                    break;
            }
        }
    },

    populateSelect: function(data) {
        var name = uzAjaxStuff.getResItems(data, "name").join("");
        var defaultVal = uzAjaxStuff.getResItems(data, "default_val").join("");
        var aVals = uzAjaxStuff.getResItems(data, "exist_vals");

        var hProp = uzAjaxFilter.getFieldProp(name);

        var cForm = document.forms[_cms_document_form];
        var el = cForm.elements[name];

        var i, n;

        if(uzAjaxFilter.debug){
            //alert(name);
            //alert(aVals.length);
            //alert(aVals)
        }

        if(aVals.length){
            // Show field
            if(document.getElementById("fld_box_"+name)){
                document.getElementById("fld_box_"+name).style.display = "inline";
            }

            // Rebuild options
            n = el.length;
            //value = el.value;
            for(i=n-1; i>0; i--) {
                el.options[i] = null;
            }
            for(i=0; i<aVals.length; i++) {
                el.options[i+1] = new Option(aVals[i], aVals[i]);
            }
            el.value = defaultVal;
        
        } else {
            // Hide field
            if(document.getElementById("fld_box_"+name)){
                document.getElementById("fld_box_"+name).style.display = "none";
            }
            el.value = "";
        }
    },

    populateCheckbox: function(data) {
        if(uzAjaxFilter.debug){
            //alert(data);
        }
        var name = uzAjaxStuff.getResItems(data, "name").join("");
        var defaultVal = uzAjaxStuff.getResItems(data, "default_val").join("");
        var aVals = uzAjaxStuff.getResItems(data, "exist_vals");

        var hProp = uzAjaxFilter.getFieldProp(name);

        var i, j, val, isExists, cName;

        if(uzAjaxFilter.debug){
            //alert(aVals.join(","));
            //alert(name);
        }

        if(aVals.length){
            if(uzAjaxFilter.debug){
                //alert(aVals.join(","));
                //alert("Show field "+name+" id = '"+"fld_box_"+name+"'");
            }
            // Show field
            if(document.getElementById("fld_box_"+name)){
                document.getElementById("fld_box_"+name).style.display = "inline";
            }

            // Walk over checkboxes
            //chk_ext_custom_29[]_0
            i = 0;
            cName = "chk_"+name+"_"+i;
            if(uzAjaxFilter.debug){
                //alert("check field '"+cName+"'");
            }
            while(document.getElementById(cName)){
                isExists = 0;

                if(uzAjaxFilter.debug){
                    //alert(cName);
                }

                val = document.getElementById(cName).value;
                for(j=0; j < aVals.length; j++) {
                    if(val == aVals[j]){
                        isExists = 1;
                        break;
                    }
                }

                if(uzAjaxFilter.debug){
                    //alert("have field '"+cName+"', value='"+val+"', isExists = "+isExists+", in "+aVals.join(","));
                }

                if(isExists){
                    // Enable checkbox
                    document.getElementById(cName).disabled = false;
                    //if(document.getElementById(cName+"_label")){
                        document.getElementById(cName+"_label").className = "uz_check_box_enabled";
                    //}
                } else {
                    // Disable checkbox
                    if(i > 0){
                        document.getElementById(cName).checked = false;
                        document.getElementById(cName).disabled = true;
                        //if(document.getElementById(cName+"_label")){
                            document.getElementById(cName+"_label").className = "uz_check_box_disabled";
                        //}
                    } else {
                        document.getElementById(cName+"_label").className = "uz_check_box_enabled";
                    }
                }

                i++;
                cName = "chk_"+name+"_"+i;
            }
           
        } else {
            if(uzAjaxFilter.debug){
                //alert("Hide field "+name+" id = '"+"fld_box_"+name+"'");
            }
            // Hide field
            if(document.getElementById("fld_box_"+name)){
                document.getElementById("fld_box_"+name).style.display = "none";
            }

            // Uncheck checkboxes
            i = 0;
            cName = "chk_"+name+"_";
            while(document.getElementById(cName+i)){
                // Disable checkbox
                document.getElementById(cName+i).checked = false;
                i++;
            }

        }
    },

    onFieldChange: function(){
        if(uzAjaxFilter.debug){
            //alert(name);
            //alert("Hide field "+name+" id = '"+"fld_box_"+name+"'");
        }

        var cForm = document.forms[_cms_document_form];

        // Prepare url params
        var urlParams = "";

        // Prepare subpath
        var aTmp = active_module_link.split('?');
        var subpath = aTmp[0].substr(frontBaseHref.length);
        urlParams += "&subpath=" + subpath;

        // Prepare search subcats flag
        var searchSubCats = 1;
        if(document.getElementById("flt_search_subcats")){
            if(document.getElementById("flt_search_subcats").checked){
                searchSubCats = 1;
            } else {
                searchSubCats = 0;
            }
        }
        urlParams += "&search_subcats=" + searchSubCats;

        // Prepare search subcats flag
        var catId = 20000;
        if(typeof(cForm.catid) != 'undefined'){
            catId = cForm.catid.value;
        }
        urlParams += "&catid=" + catId;


        // Collect actual fields values from form
        if(uzAFilterFields.length){
            for(var i = 0; i < uzAFilterFields.length; i++){
                switch(uzAFilterFields[i].type){
                    case "select":
                        urlParams += "&"+uzAFilterFields[i].name+"="+cForm.elements[uzAFilterFields[i].name].value;
                        break;
                    case "checkbox":
                        var j = 0;
                        var cName = "chk_"+uzAFilterFields[i].name+"_";
                        while(document.getElementById(cName+j)){
                            if(document.getElementById(cName+j).checked){
                                urlParams += "&"+uzAFilterFields[i].name+"="+document.getElementById(cName+j).value;
                            }
                            j++;
                        }
                        break;
                    default:
                        break;
                }
            }
        }

        if(uzAjaxFilter.debug){
            //alert(urlParams);
            //alert("Hide field "+name+" id = '"+"fld_box_"+name+"'");
        }
/*        
        var subpath;

        if(aTmp.length > 1){
            filters = aTmp[1];
            // Parse url params
            var hParams = uzAjaxStuff.parseUrlParams(filters);

            // Strip action
            if(typeof(hParams.action) != 'undefined'){
                delete(hParams.action);
            }

            // Prepare url params
            filters = uzAjaxStuff.prepareUrlParams(hParams);

            if(this.debug){
                //alert("filters orig = '"+aTmp[1]+"'\n\nfilters prepared = '"+filters+"'");
                //alert(urlParams);
            }

        }
        var urlParams = "&subpath=" + subpath + filters;

        if(this.debug){
            //alert(subpath+", filters = "+filters);
            //alert(urlParams);
        }
  //*/  

        var fieldsList = this.getFieldsList();

        var hData = {
            action: "get_flt_data",
            fields_list: fieldsList,
            plainUrlParams: urlParams
        };
        uzAjaxStuff.request(hData, uzAjaxFilter.applyFilterData);
    
    },

    endvar: 1
}







//
// On page load fill the filter fields
//
//uzAjaxFilter.init();
//uzAjaxFilter.onLoadFillFilter();

