﻿/**************************************************************
 * 车型车系选择
 * 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 (dataSrc[i].value && dataSrc[i].value.length && Number(dataSrc[i].value) < 0) {
                    selObj.append('<optgroup label="' + dataSrc[i].name + '"></optgroup>');
                } else {
                    selObj.append('<option value="' + dataSrc[i].value + '">' + dataSrc[i].name + '</option>');
                }
            }

            setTimeout(function () {
                if (sel.initValue && sel.initValue != sel.defaultValue) {
                    selObj.each(function () {
                        for (var i = 0; i < this.options.length; i++) {
                            if (this.options[i].value == sel.initValue) {
                                this.options[i].selected = "selected";
                                break;
                            }
                        }
                    });

                    if (selObj.val() == sel.initValue) {
                        sel.initValue = '';
                        selObj.trigger('change');
                    }
                }
            }, 0);
        },
        /******************************************************
        * 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;
                _initPath += '&r=' + Math.random();
            }
            //将用分隔符分隔的字符串处理成固定格式的数组.
            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;
            };
            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 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).empty();
                    jQuery('#' + setting.sels[i].id).append('<option value="' + setting.sels[i].defaultValue + '">' + setting.sels[i].defaultName + '</option>');
                    if (i > 0 && !!setting.sels[i].id) {
                        document.getElementById(setting.sels[i].id).disabled = 'true';
                    }
                }
                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];
                        if (setting.longSelector != 'true' && currIdx == 1) {
                            nextSel = setting.sels[4];
                        }
                        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) {
                            if (!!nextSel.id) {
                                document.getElementById(nextSel.id).disabled = true;
                                jQuery('#' + nextSel.id).trigger('change');
                            }
                            return;
                        }
                        else {
                            if (!!nextSel.id) {
                                document.getElementById(nextSel.id).disabled = false;
                            }
                        }
                        var pathAndQuery = setting.path + '?' + currSel.argName + '=' + jQuery(this).val() + '&r=' + Math.random();
                        if (setting.longSelector == 'true') {
                            switch (currIdx) {
                                case 1:
                                    pathAndQuery += '&carLongSelect=true';
                                    break;
                                case 2:
                                    pathAndQuery += '&carBrandID=' + document.getElementById(setting.sels[1].id).value + '&carLongSelect=true';
                                    break;
                                case 3:
                                    pathAndQuery += '&carBrandID=' + document.getElementById(setting.sels[1].id).value + '&carYear=' + document.getElementById(setting.sels[2].id).value + '&carLongSelect=true';
                                    break;
                            }
                        }
                        jQuery.get(pathAndQuery, 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, yearsel, exhaustsel) {
        var setting = { separator: ',',
            sels: [{ id: producersel, argName: 'carProducerID', defaultName: '请选择品牌', defaultValue: '0' },
                   { id: brandsel, argName: 'carBrandID', defaultName: '请选择系列', defaultValue: '0' },
                   { id: yearsel, argName: 'carYear', defaultName: '请选择年份', defaultValue: '0' },
                   { id: exhaustsel, argName: 'carExhaust', defaultName: '请选择排量', defaultValue: '0' },
                   { id: carsel, argName: '', defaultName: '请选择车型', defaultValue: '0'}],
            path: '/AjaxObjectPage/CarTypePage.aspx',
            initArg: 'carAreaID=20',
            longSelector: (!!yearsel && !!exhaustsel) ? 'true' : ''
        };
        this.InitAllSelecterWithAuthBrands = function () {
            setting.initArg = 'carAreaID=10';
            this.InitAllSelecter();
        };
        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(); };
        this.GetYear = function () { return jQuery('#' + yearsel).val(); };
        this.GetExhaust = function () { return jQuery('#' + exhaustsel).val(); };
        var setValueMaybeDelay = function (selObj, value, idx) {
            setTimeout(function () {
                if (selObj.children().length > 1 && selObj.val() != value) {
                    selObj.each(function () {
                        for (var i = 0; i < this.options.length; i++) {
                            if (this.options[i].value == value) {
                                this.options[i].selected = "selected";
                                break;
                            }
                        }
                    });

                    if (selObj.val() == value) {
                        selObj.trigger('change');
                    }
                }
                if (selObj.val() != value) {
                    setting.sels[idx].initValue = value;
                }
            }, 0);
        };
        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, 4);
        };
        this.SetYear = function (value) {
            var selObj = jQuery('#' + yearsel);
            setValueMaybeDelay(selObj, value, 2);
        };
        this.SetExhaust = function (value) {
            var selObj = jQuery('#' + exhaustsel);
            setValueMaybeDelay(selObj, value, 3);
        };
    };
    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',
            longSelector: ''
        };
        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) {
            setTimeout(function () {
                if (selObj.children().length > 1 && selObj.val() != value) {
                    selObj.each(function () {
                        for (var i = 0; i < this.options.length; i++) {
                            if (this.options[i].value == value) {
                                this.options[i].selected = "selected";
                                break;
                            }
                        }
                    });

                    if (selObj.val() == value) {
                        selObj.trigger('change');
                    }
                }
                if (selObj.val() != value) {
                    setting.sels[idx].initValue = value;
                }
            }, 0);
        };
        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; 
}
