/*
    Functions for make any ajax requests and process responded data

    //
    // 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(){
    });


    //
    // Using example
    //

    var hData = {
        action: "get_price",
        convert: 'RUR',
        curr: 'EUR',
        id_list: "123|234|213"
    };
    uzAjaxStuff.request(hData, uzProcessData);

    function uzProcessData(content){
        var aData = uzAjaxStuff.getResItems(content, "items");
        while(aData.length){
            var item = aData.shift();
            var id = uzAjaxStuff.getResItems(item, "id").join("");
            var price = uzAjaxStuff.getResItems(item, "price").join("");
            alert(id+", "+price);
        }
    }

//*/

var uzAjaxStuff = {
    actionProcess: 0,
    actionCB: false,
    ajaxLib: "ami",
    requestType: "GET",
    langData: "ru",
    dataSource: "uz_get_custom_data.php",
    cache: false,
    async: false,

    init: function(opt){
        // Set options
        if(typeof(opt) != 'undefined'){
            this.setOptions(opt);
        }
    },

    setOptions: function(opt){
        for(var key in opt){
            this[key] = opt[key];
        }
    },

    // hData = hash with params
    // use hData.plainUrlParams to give complete url request params string, like "&param1=qwe&param2=asd&param3=4"
    request: function(hData, callback) {
        var urlParams = "";

        if(this.actionProcess == 0){

            this.actionProcess = 1;
            this.actionCB = callback;

            // add lang data, if need
            if(typeof(hData.lang_data) == 'undefined'){
                hData.lang_data = this.langData;
            }

            urlParams += this.prepareUrlParams(hData);

            //alert(urlParams);
            /*
            for(name in hData){
                if(name == "plainUrlParams"){
                    urlParams += hData[name];
                } else {
                    urlParams += "&" + name + "=" + hData[name];
                }
            }
            //*/

            switch(this.ajaxLib){
                case "ami":
                    //alert(frontBaseHref+'uz_get_custom_data.php?' + urlParams);
                    amiAjax.getContent(this.requestType, frontBaseHref+this.dataSource, urlParams, uzAjaxStuff.getDataCBAmi);
                    break;
                case "jquery":
                    $.ajax({
                        type: this.requestType,
                        cache: this.cache,
                        async: this.async,
                        url: frontBaseHref + this.dataSource,
                        data: urlParams,
                        success: uzAjaxStuff.getDataCBJQuery,
                        error: uzAjaxStuff.requestErrorCBJQuery
                    });    
                    break;
                default:
                    this.actionProcess = 0;
                    break;
            }
        }
    },

    requestErrorCBJQuery: function(){
        this.actionProcess = 0;
        //alert("error");
    },


    getDataCBAmi: function(status, content) {
        uzAjaxStuff.actionProcess = 0;

        if(status == 1) {
            //alert("ok");
            uzAjaxStuff.actionCB(content);
        } else {
            //alert("error");
        }
    },

    getDataCBJQuery: function(content) {
        uzAjaxStuff.actionProcess = 0;
        uzAjaxStuff.actionCB(content);
    },


    //
    // Get items from response string.
    // Always return an array
    //
    getResItems: function(resultStr, itemName){
        var aRes = new Array();
        if(resultStr.length){
            var startMarker = "<!-- " + itemName + " -->";
            var endMarker = "<!-- /" + itemName + " -->";
            var aStr = resultStr.split(startMarker);
            var i, subIndex;
            if(aStr.length){
                for(i = 0; i < aStr.length; i++){
                    subIndex = aStr[i].search(endMarker);
                    if(subIndex != -1){
                        aRes.push(aStr[i].substr(0, subIndex));
                    }
                }
            }
        }
        return aRes;
    },

    // Return hash with params
    parseUrlParams: function(str){
        var hRes = {};
        if(str.length){
            var aStr = str.split("&");
            var i, subIndex;
            if(aStr.length){
                for(i = 0; i < aStr.length; i++){
                    var param = aStr[i];
                    if(param.length){
                        // Check param name
                        if(param.substr(0, 1) != '='){
                            var aParam = param.split("=");
                            var name = aParam[0];
                            var val = "";
                            if(aParam.length == 2){
                                val = aParam[1];
                            }
                            hRes[name] = val;
                        }
                    }
                }
            }
        }
        return hRes;
    },

    // Return hash with params
    // use hData.plainUrlParams to give complete url request params string, like "&param1=qwe&param2=asd&param3=4"
    prepareUrlParams: function(hData){
        var res = "";

        for(name in hData){
            if(name == "plainUrlParams"){
                res += hData[name];
            } else {
                res += "&" + name + "=" + hData[name];
            }
        }
        
        return res;
    },

    endvar: 1
}









