﻿/**************************************************************
 * 车型车系选择
 * CarTypeSelecter
 * 省份城市选择
 * CitySelecter
 *************************************************************/
(function(){
    if (!jQuery){
        return;
    }
    window.AssociatedSelecterPrototype = {
        //参数,json数据源,select的描述参数.
        createOptions : function(dataSrc, sel){
            var selObj = jQuery('#' + sel.id);
            selObj.empty();
            if (sel.defaultName && sel.defaultName.length){
                selObj.append('<option value="' + sel.defaultValue + '">' + sel.defaultName + '</option>');
            }
            for (var i = 0; i < dataSrc.length; ++i){
                if (dataSrc[i].value && dataSrc[i].value.length && Number(dataSrc[i].value) > Number(sel.defaultValue)){
                    selObj.append('<option value="' + dataSrc[i].value + '">' + dataSrc[i].name + '</option>');
                }else{
                    selObj.append('<optgroup label="' + dataSrc[i].name + '"></optgroup>');
                }
            }
            if (sel.initValue && sel.initValue != sel.defaultValue){
                selObj.val(sel.initValue);
                if (selObj.val() == sel.initValue){
                    sel.initValue = '';
                    selObj.trigger('change');
                }
            }
        },
        /******************************************************
         * setting参数定义
         * 
         *  window.AssociatedSelecterPrototype.Setting = {
         *      separator : '',
         *      sels : [{id:'',argName:'',defaultName:'',defaultValue:'',initValue:''}],
         *      path : '',
         *      initArg : ''
         *  }
         *
         *****************************************************/
        bind : function(setting){
            var _initPath = setting.path;
            if (setting.initArg && setting.initArg.length){
                _initPath += '?';
                _initPath += setting.initArg;
            }
            jQuery.get(_initPath, function(rst){
                var dataSrc;
                if (setting.separator && setting.separator.length){
                    dataSrc = preAccessSeparator(rst,setting.separator);
                }else{
                    dataSrc = eval(rst);
                }
                AssociatedSelecterPrototype.createOptions(dataSrc, setting.sels[0]);
            });
            //将用分隔符分隔的字符串处理成固定格式的数组.
            var preAccessSeparator = function(_str, spt){
                var dataSrc = [];
                var dataArray = _str.split(spt);
                for (var idx = 0; idx < dataArray.length; ++idx){
                    dataSrc.push({'name':dataArray[idx], 'value':dataArray[++idx]});
                }
                return dataSrc;
            };
            var findIndexById = function(_id){
                for (var i = 0; i < setting.sels.length; ++i){
                    if (setting.sels[i].id == _id){
                        return i;
                    }
                }
                return 0;
            };
            for (var i = 0; i < setting.sels.length;++i){
                if (setting.sels[i].defaultName && setting.sels[i].defaultName.length){
                    jQuery('#' + setting.sels[i].id).append('<option value="' + setting.sels[i].defaultValue + '">' + setting.sels[i].defaultName + '</option>');
                }
                if (i < setting.sels.length - 1){
                    jQuery('#' + setting.sels[i].id).change(function(){
                        var currIdx = findIndexById(this.id);
                        var currSel = setting.sels[currIdx];
                        var nextSel = setting.sels[currIdx + 1];
                        for (var j = currIdx + 1; j < setting.sels.length; ++j){
                            jQuery('#' + setting.sels[j].id).empty();
                            if (setting.sels[j].defaultName && setting.sels[j].defaultName.length){
                                jQuery('#' + setting.sels[j].id).append('<option value="' + setting.sels[j].defaultValue + '">' + setting.sels[j].defaultName + '</option>');
                            }
                        }
                        if (jQuery(this).val() == currSel.defaultValue){
                            return;
                        }
                        jQuery.get(setting.path + '?' + currSel.argName + '=' + jQuery(this).val(), function(rst){
                            var dataSrc;
                            if (setting.separator && setting.separator.length){
                                dataSrc = preAccessSeparator(rst,setting.separator);
                            }else{
                                dataSrc = eval(rst);
                            }
                            AssociatedSelecterPrototype.createOptions(dataSrc, nextSel);
                        });
                    });
                }
            }
        }
    };
    //车型车系选择器
    window.CarTypeSelecter = function(producersel, brandsel, carsel){
        var setting = {separator : ',',
                       sels : [{id:producersel,argName:'carProducerID',defaultName:'请选择',defaultValue:'0'},
                               {id:brandsel,argName:'carBrandID',defaultName:'请选择',defaultValue:'0'},
                               {id:carsel,argName:'',defaultName:'请选择',defaultValue:'0'}],
                       path : '/AjaxObjectPage/NewCarTypePage.aspx',
                       initArg : 'carAreaID=40'};
        this.InitAllSelecter = function(){
            this.bind(setting);
        };
        this.GetProducerId = function() { return jQuery('#' + producersel).val();};
        this.GetBrandId = function() { return jQuery('#' + brandsel).val();};
        this.GetCarId = function() { return jQuery('#' + carsel).val();};
        var setValueMaybeDelay = function(selObj, value, idx){
            if (selObj.children().length > 1 && selObj.val() != value){
                selObj.val(value);
                if (selObj.val() == value){
                    selObj.trigger('change');
                }
            }
            if (selObj.val() != value){
                setting.sels[idx].initValue = value;
            }
        };
        this.SetProducerId = function(value) {
            var selObj = jQuery('#' + producersel);
            setValueMaybeDelay(selObj, value, 0);
        };
        this.SetBrandId = function(value) {
            var selObj = jQuery('#' + brandsel);
            setValueMaybeDelay(selObj, value, 1);
        };
        this.SetCarId = function(value) {
            var selObj = jQuery('#' + carsel);
            setValueMaybeDelay(selObj, value, 2);
        };
    };
    window.CarTypeSelecter.prototype = AssociatedSelecterPrototype;
    //城市省份选择器
    window.CitySelecter = function(provincesel, citysel){
        var setting = {separator : ',',
                       sels : [{id:provincesel,argName:'ProvinceId',defaultName:'请选择省份',defaultValue:'0'},
                               {id:citysel,argName:'',defaultName:'请选择城市',defaultValue:'0'}],
                       path : '/AjaxObjectPage/CityObjectPage.aspx',
                       initArg : 'ProvinceId=-100'};
        this.InitAllSelecter = function(){
            this.bind(setting);
        };
        this.GetProvinceId = function() { return jQuery('#' + provincesel).val();};
        this.GetCityId = function() { return jQuery('#' + citysel).val();};
        var setValueMaybeDelay = function(selObj, value, idx){
            if (selObj.children().length > 1 && selObj.val() != value){
                selObj.val(value);
                if (selObj.val() == value){
                    selObj.trigger('change');
                }
            }
            if (selObj.val() != value){
                setting.sels[idx].initValue = value;
            }
        };
        this.SetProvinceId = function(value) {
            var selObj = jQuery('#' + provincesel);
            setValueMaybeDelay(selObj, value, 0);
        };
        this.SetCityId = function(value) {
            var selObj = jQuery('#' + citysel);
            setValueMaybeDelay(selObj, value, 1);
        };
    };
    window.CitySelecter.prototype = AssociatedSelecterPrototype;
})();

//从任意值获得一个int结果
function GetIntValue(vlu){
    var rtnforthiskey = parseInt(vlu);
    if (isNaN(rtnforthiskey)){
        rtnforthiskey = 0;
    }
    return rtnforthiskey;
}
//获取绝对left坐标
function GetX(e){
    var l = e.offsetLeft;
    while (e = e.offsetParent){
        l += e.offsetLeft;
    }
    return l;
}
//获取绝对top坐标
function GetY(e){
    var t = e.offsetTop;
    while (e = e.offsetParent){
        t += e.offsetTop;
    }
    return t;
}
//String类的len方法，返回中文为2，应为为1
String.prototype.len=function(){ 
              return this.replace(/[^\x00-\xff]/g,"**").length; 
}
