
/**
 * Function:Global Utils
 * author: luli  yoyokings AT gmail.com
 * date:2008-06-27
 */
//namespace
if (!vsky) var vsky = {};
/******************************************************
 * Window
 * ***************************************************/
vsky.Win = function(win, overlap, opt){
    /**
     * @param {Object} win	要显示的对象
     * @param {Object} overlap 背景对象 默认为#overlap
     * @param {Object} opt　是否显示overlap 默认为显示　，如果==false则不显示
     */
    this.win = $(win);
    this.bg = overlap ? $(overlap) : $("#overlap");
    this.closeBtn = this.win.find("h2 div.closed");
    this.opt = opt || true;
    this.bindEvent();
}
vsky.Win.prototype = {
    //show Window
    show: function(){
        var _self = this;
        var cw = getClientW();
        var ch = getClientH();
        var pw = getPageW();
        var ph = getPageH();
        //计算中间坐标
        var pos = function getMidPoint(){
            var w = parseInt(_self.win.width());
            var h = parseInt(_self.win.height());
            var st = getPageST();
            return {
                top: (ch - h) / 2 + st + "px",
                left: (cw - w) / 2 + "px"
            }
        }();
        this.win.css({
            top: pos.top,
            left: pos.left
        });
        this.win.show();
        //不显示遮罩
        if (!this.opt) return;
        //显示背景遮罩
        var w = pw < cw ? cw : pw;
        var h = ph < ch ? ch : ph;
        this.bg.css({
            width: w,
            height: h,
            opacity: .4
        }).show();
        //fix IE6
        if ($.browser.msie && $.browser.version == "6.0") {
            $("select").css("visibility", "hidden");
            this.win.find("select").css("visibility", "visible");
        }
    },
    /**
     * 隐藏弹窗
     */
    hide: function(obj){
        this.win.hide();
        this.bg.hide();
        //fix IE6
        if ($.browser.msie && $.browser.version == "6.0") {
            $("select").css("visibility", "visible");
        }
    },
    /**
     * bindEvnt
     */
    bindEvent: function(){
        var _self = this;
        this.closeBtn.click(function(){
            _self.hide();
            return false;
        });
    }
}
/******************************************************
 * Confirm Window
 * ***************************************************/
vsky.Confirm = function(win){
    //vsky.Win instance
    this.win = win;
    this.init();
    this.bindEvent();
}
vsky.Confirm.prototype = {
    init: function(){
        this.enterBtn = this.win.win.find("input.venter");
        this.cancelBtn = this.win.win.find("input.vcancel");
    },
    bindEvent: function(){
        var _self = this;
        //close
        this.cancelBtn.click(function(){
            _self.hide();
        });
        //enter
        this.enterBtn.click(function(){
            _self.enterHandler();
        });
    },
    show: function(){
        this.win.show();
    },
    hide: function(){
        this.win.hide();
    }
};
/******************************************************
 * CheckGroup类
 * 功能：抽象checkbox组的全选和全部取消
 * ***************************************************/
vsky.ChkGroup = function(select){
    //记录当前checkbox组
    this.group = $(select);
}
vsky.ChkGroup.prototype = {
    //全选
    selectAll: function(){
        this.group.attr("checked", true);
        this.selectAllDone();
    },
    
    //全部取消
    cancelAll: function(){
        this.group.attr("checked", false);
        this.cancelAllDone(this);
    },
    
    //获取当前选择的checkbox的id
    getCurrentSelect: function(){
        var _array = [];
        var _self = this;
        this.group.each(function(){
            var o = $(this);
            if (o[0].checked) {
                var _v = _self.getAssociate(o);
                if (_v !== "") _array.push(_v);
            }
        });
        return _array;
    },
    
    //刷新当前组
    refresh: function(){
        this.group = $(select);
    },
    
    //全选完成后的回调,实例可重写
    selectAllDone: function(){
        //        alert("selectAllDoen");
    },
    
    //全部取消完成后的回调，实例可重写
    cancelAllDone: function(el){
        //        alert("cancelAllDone");
    },
    
    //获取checkbox的关联属性，实例可重写
    getAssociate: function(obj){
        return obj.attr("id");
    }
}
/******************************************************
 * Global Function
 * ***************************************************/
//PageHeight
function getPageH(){
    return document.documentElement.scrollHeight ? document.documentElement.scrollHeight : document.body.scrollHeight;
}

//PageWidth
function getPageW(){
    return document.documentElement.scrollWidth ? document.documentElement.scrollWidth : document.body.scrollWidth;
}

//ClientHeight
function getClientH(){
    return document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight;
}

//ClientWidth
function getClientW(){
    return document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.clientWidth;
}

//ScrollTop
function getPageST(){
    return document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop;
}

//copy
function copyToClipBoard(el){
    var _el = $(el);
    //IE
    if (document.all) {
        _el.select();
        window.clipboardData.clearData();
        window.clipboardData.setData("text", _el[0].value);
        alert("复制成功！\n你可以使用快捷键Ctrl+V粘贴到QQ、MSN发送给你的好友！");
    } else {
        alert("请使用快捷键Ctrl+C手动复制！");
        _el.select();
    }
}

//addToOption
function addToOption(sel,value,id){
	var sel = $(sel);
	if(value == undefined) return;
	if(!id) id = value;
	var _opt = sel[0].options;
	var _len = _opt.length++;
	_opt[_len].text  = value;
	_opt[_len].value  = id;
	sel.val(value);
}

/******************************************************
 * City
 * ***************************************************/
vsky.City = function(p, c, auto){
    this.p = $(p);
    this.c = $(c);
    //当选择了省，是否自动选择第一个市，默认是自动选择
    this.a = (auto == undefined) ? true : auto;
    //city Data
    this.cd = _cityData;
    this.init();
}

vsky.City.prototype = {
    init: function(){
        var _self = this;
        this.c.hide();
        //province
        var _len = this.cd.length;
        var _options = this.p[0].options;
        _options.length = _len + 1;
        _options[0].text = "省";
        _options[0].value = "0";
        for (var i = 0; i < _len; i++) {
            var _t = this.cd[i];
            _options[i + 1].text = _t.n;
            _options[i + 1].value = _t.i;
        }
        this.p.change(function(){
            if (_self.pChangeHanlder && _self.pChangeHanlder() == false) return;
            _self.showCity();
        });
    },
    setCity: function(p, c){
        if (p == 0) return;
        this.p.val(p);
        this.p.change();
        this.c.val(c).show();
    },
    showCity: function(){
        var _index = this.p[0].selectedIndex;
        var _self = this;
        //create city
        try {
            //防止出现无二级城市的情况
            var _city = this.cd[_index - 1].c;
        } catch (e) {
        }
        
        if (_index == 0 || !_city) {
            this.c.hide();
            return;
        }
        var _len = _city.length;
        var _options = this.c[0].options;
        if (!this.a) {
            _options.length = _len + 1;
            _options[0].text = "市";
            _options[0].value = "0";
            for (var i = 0; i < _len; i++) {
                var _t = _city[i];
                _options[i + 1].text = _t.n;
                _options[i + 1].value = _t.i;
            }
        } else {
            _options.length = _len;
            for (var i = 0; i < _len; i++) {
                var _t = _city[i];
                _options[i].text = _t.n;
                _options[i].value = _t.i;
            }
        }
        _options[0].selected = true;
        this.c.show();
        //$(".home .error").hide();
        try {
            _self.c.unbind("change");
            if (!_self.cChangeHanlder) return;
            _self.c.change(function(){
                _self.cChangeHanlder();
            });
            if (_self.c.val() == 0) return;
            _self.c.change();
        } catch (e) {
        }
    },
    setDisabled: function(bool){
        this.p.attr("disabled", bool);
        this.p.attr("disabled", bool);
    }
}

/******************************************************
 * Hover
 * ***************************************************/
vsky.Hover = function(s, c){
    var _self = this;
    this.s = $(s);
    this.c = c;
    this.s.hover(function(){
        $(this).addClass(_self.c);
    }, function(){
        $(this).removeClass(_self.c);
    });
}

/******************************************************
 * CheckInputLeft
 * ***************************************************/
vsky.CheckInputLeft = function(textarea, state, limit){
    this.area = $(textarea);
    this.state = $(state);
    this.limit = limit;
    this.init();
}
vsky.CheckInputLeft.prototype = {
    init: function(){
        var _self = this;
        this.setState(this.limit);
        this.area.keyup(function(){
            var _v = _self.area.val();
            var _len = _v.length;
            if (_len > _self.limit) {
                _self.area.val(_v.substr(0, _self.limit));
                return false;
            }
            _self.setState(_self.limit - _len);
        });
		var currentLen = $.trim(this.area.val()).length;
		this.setState(this.limit - currentLen);
    },
    setState: function(num){
        var _num = num || "0";
        this.state.html(_num);
    }
}

/******************************************************
 * Regular
 * ***************************************************/
vsky.Re = {
	isMobile : function(mobile){
		return /^(13|15)\d{9}$/.test(mobile);
	},
	isYDMobile : function(mobile){
		return /^(13[4-9]|15(0|1|8|9))\d{8}$/.test(mobile);
	},
	isEmail : function(email){
		return /^[A-Za-z0-9+]+[A-Za-z0-9\.\_\-+]*@([A-Za-z0-9\-]+\.)+[A-Za-z0-9]+$/.test(email);
	}
};
/******************************************************
 * Form Reset
 * ***************************************************/
$(function(){
    $("form:has(input[@type = reset])").each(function(){
        this.onreset = function(){
            $("select", this).attr("selectedIndex",0).change();
			try{
				if(formResetHandler) formResetHandler();
			}catch(e){}
        }
    });
});

/******************************************************
 * multiple Slecte
 * ***************************************************/
vsky.MSelect = function(sel){
	this.sel = $(sel)[0];
}
vsky.MSelect.prototype = {
	getCurrentSelected : function(){
		var opts = this.sel.options;
		var len = opts.length;
		var current = [];
		for(var i = 0;i<len;i++){
			if(opts[i].selected) current.push(opts[i]);
		}
		if(current.length == 0) return false;
		return current;
	},
	addOption : function(opts){
		var len = opts.length;
		for(var i = 0;i<len;i++){
			this.sel.appendChild(opts[i]);
		}
	},
	selectAll : function(){
		var opts = this.sel.options;
		var len = opts.length;
		for(var i = 0;i<len;i++){
			opts[i].selected = true;
		}
	}
};
