/*
    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",
    async: true,

    hideEmpty: true,
    autoSubmit: false,

    aDefaultFieldsDisabledStatus: {},

    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
        this.reinitAxajStuff();

        this.getFieldsDefaultDisabled();

    },

    setOptions: function(opt){
        for(var key in opt){
            this[key] = opt[key];
        }
    },

    reinitAxajStuff: function(){
        var hOpt = {
            ajaxLib: this.ajaxLib,
            async: this.async,
            requestType: this.requestType,
            langData: this.langData,
            dataSource: this.dataSource
        };
        uzAjaxStuff.init(hOpt);
    },

/*
    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]);
            }
        }

        uzAjaxFilter.enableFields();

    },

    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;
                case "price_from":
                case "price_to":
                    uzAjaxFilter.populateText(data);
                    break;
                case "text":
                    uzAjaxFilter.populateText(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(data);
            //alert(name);
            //alert(aVals.length);
            //alert(aVals)
        }

        // Drop old options
        n = el.length;
        //value = el.value;
        for(i=n-1; i>0; i--) {
            el.options[i] = null;
        }

        if(aVals.length){
            // Add new options
            for(i=0; i<aVals.length; i++) {
                el.options[i+1] = new Option(aVals[i], aVals[i]);
            }
            el.value = defaultVal;

            // Show field
            if(document.getElementById("fld_box_"+name)){
                document.getElementById("fld_box_"+name).style.display = "inline";
            }

        
        } else {
            el.value = "";

            // Hide field
            if(this.hideEmpty){
                if(document.getElementById("fld_box_"+name)){
                    document.getElementById("fld_box_"+name).style.display = "none";
                }
            }
        }
    },

    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);
        }

        // 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);
            }

            if(aVals.length){
                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;
            } else {
                // Disable checkbox
                if(i > 0){
                    document.getElementById(cName).checked = false;
                    document.getElementById(cName).disabled = true;
                }
            }

            i++;
            cName = "chk_"+name+"_"+i;
        }

        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";
            }
           
        } else {
            if(uzAjaxFilter.debug){
                //alert("Hide field "+name+" id = '"+"fld_box_"+name+"'");
            }
            // Hide field
            if(this.hideEmpty){
                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++;
            }
            //*/

        }
    },

    populateText: function(data) {
        var name = uzAjaxStuff.getResItems(data, "name").join("");
        var defaultVal = uzAjaxStuff.getResItems(data, "default_val").join("");

        var hProp = uzAjaxFilter.getFieldProp(name);

        var cForm = document.forms[_cms_document_form];
        var el = cForm.elements[name];

        el.value = defaultVal;
    },


    onFieldChange: function(isManualChange){

        if(uzAjaxFilter.debug){
            //alert(name);
            //alert("Hide field "+name+" id = '"+"fld_box_"+name+"'");
        }

        var cForm = document.forms[_cms_document_form];

        if(typeof(isManualChange) != 'undefined'){
            if(isManualChange == 1){
                if(this.autoSubmit){
                    if(typeof(CheckFilterForms) != 'undefined'){
                        CheckFilterForms(cForm, 0);
                    }
                    return;
                }
            }
        }

        // 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+"="+encodeURIComponent(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+"="+encodeURIComponent(document.getElementById(cName+j).value);
                            }
                            j++;
                        }
                        break;
                    case "radio":
                        var j = 0;
                        var cName = "rd_"+uzAFilterFields[i].name+"_";
                        while(document.getElementById(cName+j)){
                            if(document.getElementById(cName+j).checked){
                                urlParams += "&"+uzAFilterFields[i].name+"="+encodeURIComponent(document.getElementById(cName+j).value);
                            }
                            j++;
                        }
                        break;
                    case "price_from":
                        urlParams += "&"+uzAFilterFields[i].name+"="+encodeURIComponent(cForm.elements[uzAFilterFields[i].name].value);
                        break;
                    case "price_to":
                        urlParams += "&"+uzAFilterFields[i].name+"="+encodeURIComponent(cForm.elements[uzAFilterFields[i].name].value);
                        break;
                    case "text":
                        urlParams += "&"+uzAFilterFields[i].name+"="+encodeURIComponent(cForm.elements[uzAFilterFields[i].name].value);
                        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();

        this.disableFields();

        // Re-init ajax stuff
        this.reinitAxajStuff();

        var hData = {
            action: "get_flt_data",
            fields_list: fieldsList,
            plainUrlParams: urlParams
        };
        uzAjaxStuff.request(hData, uzAjaxFilter.applyFilterData);
    },

    // Return array of fields used names with not empty value.
    getFieldsFilteredBy: function() {
        var aRes = new Array();
        if(typeof(uzAFilterFields) == 'undefined'){
            return aRes;
        }
        var cForm = this.getForm();
        if(cForm != false && uzAFilterFields.length){
            for(var i = 0; i < uzAFilterFields.length; i++){
                switch(uzAFilterFields[i].type){
                    case "select":
                        if(cForm.elements[uzAFilterFields[i].name].value != ""){
                            aRes.push(uzAFilterFields[i].name);
                        }
                        break;
                    case "checkbox":
                        var j = 0;
                        var cName = "chk_"+uzAFilterFields[i].name+"_";
                        while(document.getElementById(cName+j)){
                            if(document.getElementById(cName+j).checked && document.getElementById(cName+j).value != ""){
                                aRes.push(uzAFilterFields[i].name);
                            }
                            j++;
                        }
                        break;
                    case "price_from":
                        if(cForm.elements[uzAFilterFields[i].name].value != ""){
                            aRes.push(uzAFilterFields[i].name);
                        }
                        break;
                    case "price_to":
                        if(cForm.elements[uzAFilterFields[i].name].value != ""){
                            aRes.push(uzAFilterFields[i].name);
                        }
                        break;
                    case "text":
                        if(cForm.elements[uzAFilterFields[i].name].value != ""){
                            aRes.push(uzAFilterFields[i].name);
                        }
                        break;
                    default:
                        break;
                }
            }
        }
        return aRes;
    },

    getForm: function() {
        if(typeof(_cms_document_form) == 'undefined'){
            return false;
        }
        if(typeof(document.forms[_cms_document_form]) == 'undefined'){
            return false;
        }
        return document.forms[_cms_document_form];
    },

    getFieldsDefaultDisabled: function() {
        var cForm = this.getForm();
        if(cForm == false || typeof(uzAFilterFields) == 'undefined'){
            return;
        }
        for(var i = 0; i < uzAFilterFields.length; i++){
            if(typeof(cForm[uzAFilterFields[i].name]) != 'undefined'){
                switch(uzAFilterFields[i].type){
                    case "select":
                        this.aDefaultFieldsDisabledStatus[uzAFilterFields[i].name] = cForm[uzAFilterFields[i].name].disabled;
                        break;
                    case "checkbox":
                        /*
                        var j = 0;
                        var cName = "chk_"+uzAFilterFields[i].name+"_";
                        while(document.getElementById(cName+j)){
                            if(document.getElementById(cName+j).checked && document.getElementById(cName+j).value != ""){
                                aRes.push(uzAFilterFields[i].name);
                            }
                            j++;
                        }
                        //*/
                        break;
                    case "price_from":
                        this.aDefaultFieldsDisabledStatus[uzAFilterFields[i].name] = cForm[uzAFilterFields[i].name].disabled;
                        break;
                    case "price_to":
                        this.aDefaultFieldsDisabledStatus[uzAFilterFields[i].name] = cForm[uzAFilterFields[i].name].disabled;
                        break;
                    case "text":
                        this.aDefaultFieldsDisabledStatus[uzAFilterFields[i].name] = cForm[uzAFilterFields[i].name].disabled;
                        break;
                    default:
                        break;
                }
            }
        }
    },


    disableFields: function() {
        var cForm = this.getForm();
        if(cForm == false || typeof(uzAFilterFields) == 'undefined'){
            return;
        }
        for(var i = 0; i < uzAFilterFields.length; i++){
            if(typeof(cForm[uzAFilterFields[i].name]) != 'undefined'){
                switch(uzAFilterFields[i].type){
                    case "select":
                        cForm[uzAFilterFields[i].name].disabled = true;
                        break;
                    case "checkbox":
                        /*
                        var j = 0;
                        var cName = "chk_"+uzAFilterFields[i].name+"_";
                        while(document.getElementById(cName+j)){
                            if(document.getElementById(cName+j).checked && document.getElementById(cName+j).value != ""){
                                aRes.push(uzAFilterFields[i].name);
                            }
                            j++;
                        }
                        //*/
                        break;
                    case "price_from":
                        cForm[uzAFilterFields[i].name].disabled = true;
                        break;
                    case "price_to":
                        cForm[uzAFilterFields[i].name].disabled = true;
                        break;
                    case "text":
                        cForm[uzAFilterFields[i].name].disabled = true;
                        break;
                    default:
                        break;
                }
                // Disable subfields
                if(typeof(uzAFilterFields[i].aSubfieldsId) != 'undefined'){
                    this.setSubfieldsDisabledStatus(uzAFilterFields[i].aSubfieldsId, true);
                }
            }
        }
    },

    enableFields: function() {
        var cForm = this.getForm();
        if(cForm == false || typeof(uzAFilterFields) == 'undefined'){
            return;
        }
        for(var i = 0; i < uzAFilterFields.length; i++){
            if(typeof(cForm[uzAFilterFields[i].name]) != 'undefined'){
                switch(uzAFilterFields[i].type){
                    case "select":
                        cForm[uzAFilterFields[i].name].disabled = this.aDefaultFieldsDisabledStatus[uzAFilterFields[i].name];
                        break;
                    case "checkbox":
                        /*
                        var j = 0;
                        var cName = "chk_"+uzAFilterFields[i].name+"_";
                        while(document.getElementById(cName+j)){
                            if(document.getElementById(cName+j).checked && document.getElementById(cName+j).value != ""){
                                aRes.push(uzAFilterFields[i].name);
                            }
                            j++;
                        }
                        //*/
                        break;
                    case "price_from":
                        cForm[uzAFilterFields[i].name].disabled = this.aDefaultFieldsDisabledStatus[uzAFilterFields[i].name];
                        break;
                    case "price_to":
                        cForm[uzAFilterFields[i].name].disabled = this.aDefaultFieldsDisabledStatus[uzAFilterFields[i].name];
                        break;
                    case "text":
                        cForm[uzAFilterFields[i].name].disabled = this.aDefaultFieldsDisabledStatus[uzAFilterFields[i].name];
                        break;
                    default:
                        break;
                }

                // Enable subfields
                if(typeof(uzAFilterFields[i].aSubfieldsId) != 'undefined'){
                    this.setSubfieldsDisabledStatus(uzAFilterFields[i].aSubfieldsId, false);
                }
            }
        }
    },

    setSubfieldsDisabledStatus: function(aSubfieldsId, status) {
        for(var i = 0; i < aSubfieldsId.length; i++){
            var subfieldId = aSubfieldsId[i];

            if(document.getElementById(subfieldId)){
                document.getElementById(subfieldId).disabled = status;
            }
        }
    },

    endvar: 1
}







//
// On page load fill the filter fields
//
//var uzHOpt = {
//  /* define filter options */
//}
//uzAjaxFilter.init(uzHOpt);
//uzAjaxFilter.onFieldChange(0);

