﻿jQuery.extend({
    MessageTips: function (message, options) {
        var Default = { color: 'white', bgColor: '#7ec624', borderColor: '#4f8808', duration: 10, top: '100px' };
        var html;
        options = $.extend({}, Default, options);
        if ($.trim(message) != "") {
            if ($("#divMessageTips").length > 0) {
                html = $("#divMessageTips");
            }
            else {
                html = $("<div id='divMessageTips'></div>").appendTo("body");
            }
            html.text(message);
            var bodyWidth = $(window).width();
            var htmlWidth = 150;
            var htmlLeft = (bodyWidth - htmlWidth) / 2;
            html.css({
                'position': 'absolute',
                'left': htmlLeft + 'px',
                'top': options.top,
                'color': options.color,
                'background-color': options.bgColor,
                'z-Index': 2000,
                'width': '150px',
                'border': 'solid 1px ' + options.borderColor,
                '-moz-border-radius': '3px',
                '-webkit-border-radius': '3px',
                'height': '23px',
                'text-align': 'center',
                'font-size': '14px',
                'font-weight': 'bold',
                'padding-top': '7px'
            });
            html.show();

            setTimeout("$('#divMessageTips').hide();", options.duration * 1000);
        }
    }

});



var WordCompute = {
    options: {
        maxSMSCount: 5,
        firstSMSWord: { CN: 70, ENG: 160 },
        otherSMSWord: { CN: 67, ENG: 153 }
    },
    testContent: function (content) {
        var pattern = /[^\x00-\xFF]/; //匹配初ACII码外的所有字符
        var isChinese = pattern.test(content);
        if (isChinese) return "CN";
        else return "ENG";
    },
    compute: function (content) {
        var result = { nowArticle: 0, spareWords: 0 };
        if (content.length == 0) {
            result.nowArticle = 0;
            result.spareWords = WordCompute.options.firstSMSWord['CN'];
        }
        else {
            var smsType = WordCompute.testContent(content);

            if (content.length <= WordCompute.options.firstSMSWord[smsType]) {
                result.nowArticle = 1;
                result.spareWords = WordCompute.options.firstSMSWord[smsType] - content.length;
            }
            else {
                result.nowArticle = Math.ceil(content.length / WordCompute.options.otherSMSWord[smsType]);
                result.spareWords = (WordCompute.options.otherSMSWord[smsType] * result.nowArticle) % content.length;
            }
        }
        return result;
    },
    count: function ($this, callback) {
        var content = $.trim($this.val());
        var result = WordCompute.compute(content);
        if ($.isFunction(callback)) {
            callback(result);
        }
    }
};



jQuery.fn.extend({
    wordCompute: function (callback) {
        var $this = $(this);
        $this.change(function () {
            WordCompute.count($this, callback)
        }).keyup(function () {
            WordCompute.count($this, callback)
        }).blur(function () {
            WordCompute.count($this, callback)
        });
        return $this;
    },
    wordCount: function (callback) {
        var $this = $(this);
        if (typeof $this != 'undefined') {
            WordCompute.count($this, callback)
        }
    },
    CheckAll: function (childrenChks) {
        if ($(this) && $(this).attr("type") == "checkbox") {
            $(this).bind("click", function () {
                if ($(this).attr("checked")) {
                    childrenChks.each(function () {
                        if (!this.disabled)
                            this.checked = true;
                    });
                }
                else {
                    childrenChks.each(function () {
                        if (!this.disabled)
                            this.checked = false;
                    });
                }
            });
            var checkall = this;
            childrenChks.each(function () {
                $(this).bind("click", function () {
                    var checked = true;
                    childrenChks.each(function () {
                        if (this.checked == false && !this.disabled) {
                            checked = false;
                            return;
                        }
                    });
                    checkall.attr("checked", checked);
                });
            });
        }
    },
    SlideTrans: function (slider, count, options) {
        return new SlideTrans($(this), slider, count, options)
    }
});

/*
如果父元素的事件,不想被子元素反应的话用jquery的时候
$(xxx).click(
function(event){
if(event ==this)
....
}
);
html 里面 onclick=”xxx(this,event);
function xxx(t,evt){
var e = (evt.target) ? evt.target : event.srcElement;
if(t == e){
....
}
}
*/

///这样触发子元素的话,不会触发他父元素上的同类事件了
function StopEventSet(e) {
    var evt = e;
    if (evt.preventDefault) {
        evt.preventDefault();
        evt.stopPropagation();
    } else {
        evt.cancelBubble = true;
        evt.returnValue = false;
    }
}

//设置iframe弹出窗口的 大小
function SetWinHeight(obj) {
    var win = obj;
    if (document.getElementById) {
        if (win && !window.opera) {
            if (win.contentDocument && win.contentDocument.body.offsetHeight) {
                win.height = win.contentDocument.body.offsetHeight;
            }
            else if (win.Document && win.Document.body.scrollHeight) {
                win.height = win.Document.body.scrollHeight;

            }

            //            if (win.contentDocument && win.contentDocument.body.offsetWidth) {
            //                win.width = win.contentDocument.body.offsetWidth;
            //            }
            //            else if (win.Document && win.Document.body.scrollWidth) {
            //                win.width = win.Document.body.scrollWidth;
            //            }
        }
    }
}


/*!
* SlideTrans
* Copyright (c) 2010 cloudgamer
* Blog: http://cloudgamer.cnblogs.com/
* Date: 2008-7-6
* 备注：在chrome浏览器下，会出现bug，解决bug的方法就是直接设置slider的高度。
*/


var Bind = function (object, fun) {
    var args = Array.prototype.slice.call(arguments).slice(2);
    return function () {
        return fun.apply(object, args.concat(Array.prototype.slice.call(arguments)));
    }
}


var Tween = {
    Quart: {
        easeOut: function (t, b, c, d) {
            return -c * ((t = t / d - 1) * t * t * t - 1) + b;
        }
    },
    Back: {
        easeOut: function (t, b, c, d, s) {
            if (s == undefined) s = 1.70158;
            return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;
        }
    },
    Bounce: {
        easeOut: function (t, b, c, d) {
            if ((t /= d) < (1 / 2.75)) {
                return c * (7.5625 * t * t) + b;
            } else if (t < (2 / 2.75)) {
                return c * (7.5625 * (t -= (1.5 / 2.75)) * t + .75) + b;
            } else if (t < (2.5 / 2.75)) {
                return c * (7.5625 * (t -= (2.25 / 2.75)) * t + .9375) + b;
            } else {
                return c * (7.5625 * (t -= (2.625 / 2.75)) * t + .984375) + b;
            }
        }
    }
}





//容器对象,滑动对象,切换数量
var SlideTrans = function (container, slider, count, options) {
    this._slider = $(slider);
    this._container = $(container); //容器对象
    this._timer = null; //定时器
    this._count = Math.abs(count); //切换数量
    this._target = 0; //目标值
    this._t = this._b = this._c = 0; //tween参数

    this.Index = 0; //当前索引

    this.SetOptions(options);

    this.Auto = !!this.options.Auto;
    this.Duration = Math.abs(this.options.Duration);
    this.Time = Math.abs(this.options.Time);
    this.Pause = Math.abs(this.options.Pause);
    this.Tween = this.options.Tween;
    this.onStart = this.options.onStart;
    this.onFinish = this.options.onFinish;

    var bVertical = !!this.options.Vertical;
    this._css = bVertical ? "top" : "left"; //方向

    //样式设置
    var p = this._container.css('position');
    //var p = CurrentStyle(this._container).position;
    p == "relative" || p == "absolute" || (this._container.css('position', "relative"));
    this._container.css('overflow', 'hidden');
    this._slider.css('position', 'absolute');

    this.Change = this.options.Change ? this.options.Change :
		this._slider.height() / this._count;
};
SlideTrans.prototype = {
    //设置默认属性
    SetOptions: function (options) {
        this.options = {//默认值
            Vertical: true, //是否垂直方向（方向不能改）
            Auto: true, //是否自动
            Change: 0, //改变量
            Duration: 30, //滑动持续时间
            Time: 10, //滑动延时
            Pause: 4000, //停顿时间(Auto为true时有效)
            onStart: function () { }, //开始转换时执行
            onFinish: function () { }, //完成转换时执行
            Tween: Tween.Quart.easeOut//tween算子
        };
        $.extend(this.options, options || {});
    },
    //开始切换
    Run: function (index) {
        //修正index
        index == undefined && (index = this.Index);
        index < 0 && (index = this._count - 1) || index >= this._count && (index = 0);
        //设置参数
        this._target = -Math.abs(this.Change) * (this.Index = index);
        this._t = 0;
        //this._b = parseInt(CurrentStyle(this._slider)[this.options.Vertical ? "top" : "left"]);
        this._b = parseInt(this._slider.css(this.options.Vertical ? "top" : "left"));
        this._c = this._target - this._b;
        this.onStart();
        this.Move();
    },
    //移动
    Move: function () {
        clearTimeout(this._timer);
        //未到达目标继续移动否则进行下一次滑动
        if (this._c && this._t < this.Duration) {
            var dd = this.Tween(this._t++, this._b, this._c, this.Duration);
            this.MoveTo(Math.round(dd));
            this._timer = setTimeout(Bind(this, this.Move), this.Time);
        } else {
            this.MoveTo(this._target);
            this.Auto && (this._timer = setTimeout(Bind(this, this.Next), this.Pause));
        }
    },
    //移动到
    MoveTo: function (i) {
        this._slider.css(this._css, i + "px");
    },
    //下一个
    Next: function () {
        this.Run(++this.Index);
    },
    //上一个
    Previous: function () {
        this.Run(--this.Index);
    },
    //停止
    Stop: function () {
        clearTimeout(this._timer); this.MoveTo(this._target);
    }
};
