﻿//**************************************************
//名称：WebHelper类库  (*扩展最新版jquery1.5.2的使用方法)
//版本：FZG 2.5.01
//功能: 1 扩展String类的常用方法 (FZG2.3)
//      2 加入浮动窗口，对flash进行控制，Url参数获取等方法 (FZG2.4)
//      3 新增数据绑定控件等方法 (FZG2.2)
//      4 增加监听器 (FZG2.3)
//      5 增加图片滚动加载 (FZG2.4)
//      6 增加弹出提示框(FZG2.5)
//日期：2011.6.17
//
//方法集:
/*
--------------关于字符串的方法--------------
1   $.WebHelper_IsNullOrEmpty(str)
2   $.WebHelper_IsNumeric(str)
3   var str = " abc ".Trim();
4   var str = "bbb abc zzzz".Replace("abc","1111"); 
5   var UrlParams = "Pager.aspx?PageSize=5&pageIndex=1&RecordCount=50".GetQueryString("PageSize", "dfdfdf");
6   alert("中华人民共和国sadasq".GetBytesLength())
7   alert("中华人民共和国sadasq".SubStringByBytes(3))
------------------------------------------

--------------关于标准控件的方法--------------
1   $.WebHelper_Rnd(min,max) 
2   $("#img1").WebHelper_FixImage(50, 50); 
3   $.WebHelper_FlashPlayer("_swf=../Flash/Main6.swf", "_id=flaobj","_fullScreen=true","_alwaysfullScreen=true"); 
4   $("#swf01").WebHelper_FlashSetAlwaysFullScreen(); 
5   $("#swf01").WebHelper_FlashSetFullScreen(); 
6   $("#div1").WebHelper_StartFloat({"right":25,"top":200}); 
7   $("#textbox1").WebHelper_RequiredTextBox({Required:true,onLoad:"请填写",onLoadCssObj:{ color: "#ff0011", background: "blue" });
8   new $.WebHelper_CLASS_MSN_MESSAGE("aa", 200, 120, "短消息提示：", "您有新消息", "你的房间已经自动退租").show();
------------------------------------------

-------------关于图像处理方法--------------
1   var colorArray = $.WebHelper_ColorGradient("#c597ff", "#73e7a9", 5); //颜色A到颜色B的过渡颜色进行分段
2   $(".scrollLoading").scrollLoading();
------------------------------------------

--------------关于数据控件类的方法--------------
1  仿.NET的Repeater控件（530行开始,关于控件分页的一些方法，必须将页面代码顶端的的“<!DOCTYPE html.....”这行代码注释掉，才能运行正常)
----------------------------------------------

--------------关于监听器用法--------------
1  $.WebHelper_addListener("div1", WebHelperEvents.EnterFrame, callback);
------------------------------------------

--------------其他常用的方法--------------
1  $.WebHelper_ConfirmToUrl('是否打开搜索引擎','www.baidu.com','www.google.com') 
2  $("#div").WebHelper_ChangeDisplay()
3  $.WebHelper_GetQueryString("id","0")
------------------------------------------
*/
//**************************************************

///=======================================
//名称: WebHelper_IsNullOrEmpty 判断str是否为null，或者空字符串
//使用方法：$.WebHelper_IsNullOrEmpty(str)
//=======================================
$.extend({
    WebHelper_IsNullOrEmpty: function (s) {
        if (s == undefined || s == '') return true;
        return false;
    }
});

///=======================================
//名称: WebHelper_IsNumeric 判断str是不是数字类型,true则表示为数字类型
//使用方法：$.WebHelper_IsNumeric(str)
//=======================================
$.extend({
    WebHelper_IsNumeric: function (s) {
        if (!isNaN(s)) return true;
        return false;
    }
});

///=======================================
//名称: 扩展String类的方法，Trim方法，表示过滤字符串前后的空格
//使用方法：var str = " abc ".Trim();
//=======================================
String.prototype.Trim = function () {
    return this.replace(/^\s*([\S\s]*?)\s*$/, '$1');
}

///=======================================
//名称: 扩展String类的方法，Replace方法，表示替换字符串
//使用方法：var str = "bbb abc zzzz".Replace("abc","1111");
//=======================================
String.prototype.Replace = function (str, replaceStr) {
    var rArr = new Array();
    rArr = this.split(str);
    var repStr = (replaceStr == undefined) ? "" : replaceStr;
    return rArr.join(repStr);
}

///=======================================
//名称: 扩展String类的方法，GetQueryString方法，当该字符串为URL时，获取其URL的参数
//使用方法：var UrlParams = "Pager.aspx?PageSize=5&pageIndex=1&RecordCount=50".GetQueryString("PageSize", "dfdfdf");
//=======================================
String.prototype.GetQueryString = function (name, defaultstring) {
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
    var r = this.substr(1).match(reg);
    if (r != null) return decodeURI(r[2]);
    return defaultstring;
}

///=======================================
// 得到字符串的字符长度（一个汉字占两个字符长）
//=======================================
String.prototype.GetBytesLength = function () {
    // 在GBK编码里，除了ASCII字符，其它都占两个字符宽
    return this.replace(/[^\x00-\xff]/g, 'xx').length;
}

///=======================================
// 根据字符长来截取字符串
//=======================================
String.prototype.SubStringByBytes = function (maxBytesLen) {
    var len = maxBytesLen;
    var result = this.slice(0, len);
    while (result.GetBytesLength() > maxBytesLen) {
        result = result.slice(0, --len);
    }
    return result;
}

///=======================================
//名称: WebHelper_Rnd 产生指定范围内的随机数
//使用方法：$.WebHelper_Rnd(min,max)
//=======================================
$.extend({
    WebHelper_Rnd: function (min, max) {
        var iRan, iMax, iMin, iRtn;
        min = parseInt(min);
        max = parseInt(max);
        iRan = Math.random();

        if (!isNaN(max)) { // 是否有可转换成数字的第二个参数
            iMax = Math.max(min, max);
            iMin = Math.min(min, max);
            iRtn = Math.ceil(iRan * (iMax - iMin) + iMin);
            if (iRtn >= max) iRtn = iRtn - 1; // 如果生成的随机数>=传入最大的数时减1
            return iRtn;
        }

        if (!isNaN(min)) {// 是否有可转换成数字的第一个参数
            iRtn = Math.ceil(iRan * min);
            if (iRtn >= min) iRtn = iRtn - 1;
            return iRtn;
        }
        return 0;
    }
});

//=======================================
//方法名称：按比例调整图片
//使用方法：$("#img1").WebHelper_FixImage(50, 50);
//=======================================
$.fn.extend({
    WebHelper_FixImage: function (ImgWidth, ImgHeight) {
        if ($(this).is("img")) {
            var image = new Image();
            image.src = $(this).attr("src");
            if (image.width > 0 && image.height > 0) {
                if (image.width / image.height >= ImgWidth / ImgHeight) {
                    if (image.width > ImgWidth) {
                        $(this).width(ImgWidth);
                        $(this).height((image.height * ImgWidth) / image.width);
                    } else {
                        $(this).width(image.width);
                        $(this).height(image.height);
                    }
                }
                else {
                    if (image.height > ImgHeight) {
                        $(this).width(ImgHeight);
                        $(this).height((image.width * ImgHeight) / image.height);
                    } else {
                        $(this).width(image.width);
                        $(this).height(image.height);
                    }
                }
            }
        }
    }
});

//=======================================
//方法名称：加载FLASH
//使用方法：$.WebHelper_FlashPlayer("_swf=../Flash/Main6.swf", "_width=780", "_height=331","_wmode=transparent","_id=flaobj","_fullScreen=true","_alwaysfullScreen=true");
//=======================================
$.extend({
    WebHelper_FlashPlayer: function (arg) {
        var parm = []
        var _default_version = "8,0,24,0";
        var _default_quality = "high";
        var _default_align = "middle";
        var _default_menu = "false";

        for (i = 0; i < arguments.length; i++) {
            parm[i] = arguments[i].split(' ').join('').split('=')
            for (var j = parm[i].length - 1; j > 1; j--) {
                parm[i][j - 1] += "=" + parm[i].pop();
            }
            switch (parm[i][0]) {
                case '_version': var _version = parm[i][1]; break;
                case '_swf': var _swf = parm[i][1]; break;
                case '_base': var _base = parm[i][1]; break;
                case '_quality': var _quality = parm[i][1]; break;
                case '_loop': var _loop = parm[i][1]; break;
                case '_bgcolor': var _bgcolor = parm[i][1]; break;
                case '_wmode': var _wmode = parm[i][1]; break;
                case '_play': var _play = parm[i][1]; break;
                case '_menu': var _menu = parm[i][1]; break;
                case '_scale': var _scale = parm[i][1]; break;
                case '_salign': var _salign = parm[i][1]; break;
                case '_height': var _height = parm[i][1]; break;
                case '_width': var _width = parm[i][1]; break;
                case '_hspace': var _hspace = parm[i][1]; break;
                case '_vspace': var _vspace = parm[i][1]; break;
                case '_align': var _align = parm[i][1]; break;
                case '_class': var _class = parm[i][1]; break;
                case '_id': var _id = parm[i][1]; break;
                case '_name': var _name = parm[i][1]; break;
                case '_style': var _style = parm[i][1]; break;
                case '_declare': var _declare = parm[i][1]; break;
                case '_flashvars': var _flashvars = parm[i][1]; break;
                case '_fullScreen': var _fullScreen = parm[i][1]; break; //是否全屏，默认为否
                case '_alwaysfullScreen': var _alwaysfullScreen = parm[i][1]; break; //是否总是全屏，默认为否
                case '_IsReturnHtml': var _IsReturnHtml = parm[i][1]; break; //是否返回HTML
                default: ;
            }
        }
        var thtml = ""
        thtml += "<object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0'"
        if (_width) thtml += " width='" + _width + "'"
        if (_height) thtml += " height='" + _height + "'"
        if (_hspace) thtml += " hspace='" + _hspace + "'"
        if (_vspace) thtml += " vspace='" + _vspace + "'"
        if (_align) thtml += " align='" + _align + "'"
        else thtml += " align='" + _default_align + "'"
        if (_class) thtml += " class='" + _class + "'"
        if (_id) thtml += " id='" + _id + "'"
        if (_name) thtml += " name='" + _name + "'"
        if (_style) thtml += " style='" + _style + "'"
        if (_declare) thtml += " " + _declare
        thtml += ">"
        if (_swf) thtml += "<param name='movie' value='" + _swf + "'>"
        if (_quality) thtml += "<param name='quality' value='" + _quality + "'>"
        else thtml += "<param name='quality' value ='" + _default_quality + "'>"
        if (_loop) thtml += "<param name='loop' value='" + _loop + "'>"
        if (_bgcolor) thtml += "<param name='bgcolor' value='" + _bgcolor + "'>"
        if (_play) thtml += "<param name='play' value='" + _play + "'>"
        if (_menu) thtml += "<param name='menu' value='" + _menu + "'>"
        else thtml += "<param name='menu' value='" + _default_menu + "'>"
        if (_scale) thtml += "<param name='scale' value='" + _scale + "'>"
        if (_salign) thtml += "<param name='salign' value='" + _salign + "'>"
        if (_wmode) thtml += "<param name='wmode' value='" + _wmode + "'>"
        if (_base) thtml += "<param name='base' value='" + _base + "'>"
        if (_flashvars) thtml += "<param name='flashvars' value='" + _flashvars + "'>"
        thtml += "<embed pluginspage='http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash'"
        if (_width) thtml += " width='" + _width + "'"
        if (_height) thtml += " height='" + _height + "'"
        if (_hspace) thtml += " hspace='" + _hspace + "'"
        if (_vspace) thtml += " vspace='" + _vspace + "'"
        if (_align) thtml += " align='" + _align + "'"
        else thtml += " align='" + _default_align + "'"
        if (_class) thtml += " class='" + _class + "'"
        //if (_id) thtml += " id='" + _id + "'"
        if (_name) thtml += " name='" + _name + "'"
        if (_style) thtml += " style='" + _style + "'"
        thtml += " type='application/x-shockwave-flash'"
        if (_declare) thtml += " " + _declare
        if (_swf) thtml += " src='" + _swf + "'"
        if (_quality) thtml += " quality='" + _quality + "'"
        else thtml += " quality='" + _default_quality + "'"
        if (_loop) thtml += " loop='" + _loop + "'"
        if (_bgcolor) thtml += " bgcolor='" + _bgcolor + "'"
        if (_play) thtml += " play='" + _play + "'"
        if (_menu) thtml += " menu='" + _menu + "'"
        else thtml += " menu='" + _default_menu + "'"
        if (_scale) thtml += " scale='" + _scale + "'"
        if (_salign) thtml += " salign='" + _salign + "'"
        if (_wmode) thtml += " wmode='" + _wmode + "'"
        if (_base) thtml += " base='" + _base + "'"
        if (_flashvars) thtml += " flashvars='" + _flashvars + "'"
        thtml += "></embed>"
        thtml += "</object>"

        if (_IsReturnHtml) {
            return thtml;
        }
        else {
            document.write(thtml)
            if (_fullScreen == "true" && !$.WebHelper_IsNullOrEmpty(_id)) {
                $("#" + _id).WebHelper_FlashSetFullScreen();
            }
            if (_alwaysfullScreen == "true" && !$.WebHelper_IsNullOrEmpty(_id)) {
                $("#" + _id).WebHelper_FlashSetAlwaysFullScreen();
            }
        }

    }
});

//=======================================
//方法名称：WebHelper_FlashSetAlwaysFullScreen 总是全屏
//使用方法：$("#swf01").WebHelper_FlashSetAlwaysFullScreen();
//=======================================
$.fn.extend({
    WebHelper_FlashSetAlwaysFullScreen: function () {
        if ($(this).is("object") && !$.WebHelper_IsNullOrEmpty($(this).attr("id"))) {
            $(window).data("CurrentFullScreenObjID", $(this).attr("id"));
            $(window).resize(function (e) {
                var CurrentFullScreenObjID = $(this).data("CurrentFullScreenObjID");
                $("#" + CurrentFullScreenObjID).WebHelper_FlashSetFullScreen();
            });
        }
    }
});

//=======================================
//方法名称：WebHelper_FlashSetFullScreen 设置全屏
//使用方法：$("#swf01").WebHelper_FlashSetFullScreen();
//=======================================
$.fn.extend({
    WebHelper_FlashSetFullScreen: function () {
        if ($(this).is("object") && !$.WebHelper_IsNullOrEmpty($(this).attr("id"))) {

            if ($(this).data("OriginalScreen") == null) {
                var OriginalScreen = { "width": $(this).attr("width"), "height": $(this).attr("height") }
                $(this).data("OriginalScreen", OriginalScreen);
            }

            var resetWindow = function (ID) {
                var winW, winH;
                if (window.innerHeight) {
                    winW = window.innerWidth;
                    winH = window.innerHeight;
                } else if (document.documentElement && document.documentElement.clientHeight) {
                    winW = document.documentElement.clientWidth;
                    winH = document.documentElement.clientHeight;
                } else if (document.body) {
                    winW = document.body.clientWidth;
                    winH = document.body.clientHeight;
                }

                window.document[ID].width = winW;
                window.document[ID].height = winH;

                var obj = document.getElementById(ID).getElementsByTagName("embed")[0];
                if (obj != null) {
                    obj.width = $(window).width();
                    obj.height = $(window).height();
                }
            }
            resetWindow($(this).attr("id"));
        }
    }
});

//=======================================
//方法名称：WebHelper_FlashSetOriginalScreen 设置回原始屏幕大小
//使用方法：$("#swf01").WebHelper_FlashSetOriginalScreen();
//=======================================
$.fn.extend({
    WebHelper_FlashSetOriginalScreen: function () {
        if ($(this).is("object") && !$.WebHelper_IsNullOrEmpty($(this).attr("id")) && $(this).data("OriginalScreen") != undefined) {

            window.document[$(this).attr("id")].width = $(this).data("OriginalScreen").width;
            window.document[$(this).attr("id")].height = $(this).data("OriginalScreen").height;

            var obj = document.getElementById($(this).attr("id")).getElementsByTagName("embed")[0];
            if (obj != null) {
                obj.width = $(this).data("OriginalScreen").width;
                obj.height = $(this).data("OriginalScreen").height;
            }
        }
    }
});

//=======================================
//方法名称：让QQMSN 浮动起来，变成滚动的QQMSN
//使用方法：$("#div1").WebHelper_StartFloat({"right":25,"top":200});
//=======================================
$.fn.extend({
    WebHelper_StartFloat: function (parem) {
        $(this).css(parem);
        $(this).css("position", "absolute");

        $(window).data("CurrentStartFloatObj", { "id": $(this).attr("id") });
        $(window).scroll(function () { //这个函数可以监视浏览器滚动条,只要滚动条一移动,此函数就触发
            var diffY = $(window).scrollTop(); //页面现在的位置和滚动条顶端的距离[scrollTop()]
            var diffH = $(window).height() / 4; //设计者期望的浮动栏与浏览器顶端的距离[height()],这里是与浏览器顶端保持1/4个页面的高度,如果diffH的值设置成0,浮动栏就会落在屏幕顶端
            var percent = diffY + diffH; //percent将被赋值给css中的"top"属性,作为浮动栏的新高度值
            if (percent < 0) {      //判断percent的值是否小于0,小于0就凑整,大于0就忽略小数部分
                percent = Math.ceil(percent);
            } else {
                percent = Math.floor(percent); //取整
                $("#" + $(this).data("CurrentStartFloatObj").id).css("top", percent);
                //$("#" + $(this).data("CurrentStartFloatObj").id).animate({top: percent},1000);
            }
        });
    }
});

///=======================================
//名称：startfloat()
//功能: 让QQMSN 浮动起来，变成滚动的QQMSN
//日期：2009714
//作者：FZG
//=======================================
//WebHelper.prototype.startfloat=function () {
//    var ZHCverticalpos = "fromtop"
//    function ZHC_FloatTopDiv() {
//        var jqq_startX = document.body.clientWidth - 110;
//        var jqq_startY = 150; //500;
//        var jqq_ns = (navigator.appName.indexOf("Netscape") != -1);
//        var jqq_d = document;
//        function jqq_ml(id) {
//            var jqq_el = jqq_d.getElementById ? jqq_d.getElementById(id) : jqq_d.all ? jqq_d.all[id] : jqq_d.layers[id];
//            if (jqq_d.layers) jqq_el.style = jqq_el;
//            jqq_el.sP = function (x, y) { this.style.left = x; this.style.top = y; };
//            jqq_el.x = jqq_startX;
//            if (ZHCverticalpos == "fromtop")
//                jqq_el.y = jqq_startY;
//            else {
//                jqq_el.y = jqq_ns ? pageYOffset + innerHeight : document.body.scrollTop + document.body.clientHeight;
//                jqq_el.y -= jqq_startY;
//            }
//            return jqq_el;
//        }
//        this.stayTopRight = function () {
//            if (ZHCverticalpos == "fromtop") {
//                var jqq_pY = jqq_ns ? pageYOffset : document.body.scrollTop;
//                jqq_ftlObj.y += (jqq_pY + jqq_startY - jqq_ftlObj.y) / 8;
//            }
//            else {
//                var jqq_pY = jqq_ns ? pageYOffset + innerHeight : document.body.scrollTop + document.body.clientHeight;
//                jqq_ftlObj.y += (jqq_pY - jqq_startY - jqq_ftlObj.y) / 8;
//            }
//            jqq_ftlObj.sP(jqq_ftlObj.x, jqq_ftlObj.y);
//            setTimeout("stayTopRight()", 7);
//        }
//        var jqq_ftlObj = jqq_ml("divStayTopRight");
//        stayTopRight();
//    }
//    ZHC_FloatTopDiv();
//}

///=======================================
//名称: WebHelper_ConfirmToUrl 提示string 语句,按确定则转向url，否则转向NOtUrl
//使用方法：$.WebHelper_ConfirmToUrl('是否打开搜索引擎','www.baidu.com','www.google.com')
//=======================================
$.extend({
    WebHelper_ConfirmToUrl: function (s, url, OtherUrl) {
        if (confirm(s) == true) {
            location.href = 'http://' + url;
        }
        else {
            location.href = 'http://' + OtherUrl;
        }
    }
});

///=======================================
//名称: WebHelper_ChangeDisplay 如果对象显示，则隐藏，如果隐藏则显示
//使用方法：$("#div").WebHelper_ChangeDisplay()
//=======================================
$.fn.extend({
    WebHelper_ChangeDisplay: function () {
        if ($(this).css("display") == "block")
            $(this).hide();
        else
            $(this).show();
    }
});

///=======================================
//名称: WebHelper_GetQueryString 获取url参数,name为参数名，defaultstring为获取不了参数时的默认值
//使用方法：$.WebHelper_GetQueryString("id","0")
//=======================================
$.extend({
    WebHelper_GetQueryString: function (name, defaultstring) {
        var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
        var r = window.location.search.substr(1).match(reg);
        if (r != null) return decodeURI(r[2]); 
        return defaultstring;
    }
});

///=======================================
//名称: 输入框获取焦点与焦点消失,Jquery扩展方法
//使用方法：$("#textbox1").WebHelper_RequiredTextBox({Required:true,onLoad:"请填写",onLoadCssObj:{ color: "#ff0011", background: "blue" },onFocusCssObj:{ color: "#ff0011", background: "blue" },onBlurCssObj:{ color: "#ff0011", background: "blue" }});
//=======================================
$.fn.extend({
    WebHelper_RequiredTextBox: function (inputArg) {
        if (inputArg.Required || inputArg.Required == undefined) {
            if ($(this).is("input") || $(this).is("textarea")) {
                //当文本框加载时的文字内容
                if (inputArg.onLoad != undefined) {
                    $(this).val(inputArg.onLoad);
                    if (inputArg.onLoadCssObj != undefined) $(this).css(inputArg.onLoadCssObj);
                }

                //绑定获得焦点事件
                $(this).bind("focus", function () {
                    if ($(this).val() == inputArg.onLoad) $(this).val("");
                    if (inputArg.onFocusCssObj != undefined) $(this).css(inputArg.onFocusCssObj);
                });

                //绑定失去焦点事件
                $(this).bind("blur", function () {
                    if ($(this).val() == undefined || $(this).val() == "") $(this).val(inputArg.onLoad);
                    if (inputArg.onBlurCssObj != undefined) $(this).css(inputArg.onBlurCssObj);
                });
            }
        }
    }
});

//把数据源绑定到模板，属于private方法，不对外发布
$.extend({
    WebHelper_DataBindTemplateByXml: function (TemplateString, DataSouceXml) {
        var RenderArray = new Array();
        var xmlDoc = $.parseXML(DataSouceXml);
        $(xmlDoc).children(0).children().each(function (i) {
            var RenderStr = "";
            var item = $(this);
            var ItemTemplateString = new String(TemplateString);
            var itemsCount = item.children().length; //获取当前记录的列数

            //1 遍历他的子节点
            item.children().each(function (j) {
                var ItemNodeName = this.tagName;
                var ItemNodeText = $(this).text();
                ItemTemplateString = ItemTemplateString.Replace("{$" + ItemNodeName.toLocaleLowerCase() + "$}", ItemNodeText);
                if (j == (itemsCount - 1)) RenderStr += ItemTemplateString;
            });

            //2 遍历该记录的所有属性
            if (!$.WebHelper_IsNullOrEmpty(RenderStr)) ItemTemplateString = new String(RenderStr);
            var AttrsCount = this.attributes.length;
            $.each(this.attributes, function (j, attrib) {
                ItemTemplateString = ItemTemplateString.Replace("{$" + attrib.name.toLocaleLowerCase() + "$}", attrib.value);
                if (j == (AttrsCount - 1)) RenderStr = ItemTemplateString;
            });
            RenderArray[i] = RenderStr;
        });
        return RenderArray;
    }
});

///=======================================
//名称: 仿.NET的Repeater控件，绑定数据源(*注意,模板内的输出字段必须以"{$id$}"的形式,字段名必须全部小写)
//使用方法: 页面代码：<div id="Repeater1">{$span$},{$a$}<br></div>
//          JS脚本：$("#Repeater1").WebHelper_DataBindRepeaterByXML("<div><p><span>aaa</span><a>bbb</a></p><p><span>aaa22222</span><a>bbb11111</a></p></div>");
//=======================================
$.fn.extend({
    WebHelper_DataBindRepeaterByXML: function (DataSouceXml) {
        var TemplateString = new String((this).html());
        var RenderArray = $.WebHelper_DataBindTemplateByXml(TemplateString, DataSouceXml);
        $(this).html(RenderArray.join(""));
    }
});

///=======================================
//名称: 仿.NET的Repeater控件，绑定数据源的URL地址(*注意,模板内的输出字段必须以"{$id$}"的形式,字段名必须全部小写)
//使用方法：页面代码：<div id="Repeater1">{$span$},{$a$}<br></div>
//         JS脚本：  $("#Repeater1").WebHelper_DataBindRepeaterByUrl("http://www.vgaia.com/test/03.aspx?act=getxml");
//=======================================
$.fn.extend({
    WebHelper_DataBindRepeaterByUrl: function (DataSouceUrl) {
        var DataSouceXml = $.ajax({
            type: "GET",
            url: DataSouceUrl,
            async: false,
            timeout: 60000,
            beforeSend: function (xmlHttp) {
                xmlHttp.setRequestHeader("If-Modified-Since", "0");
                xmlHttp.setRequestHeader("Cache-Control", "no-cache");
            }
        }).responseText;
        $(this).WebHelper_DataBindRepeaterByXML(DataSouceXml);
    }
});

///=======================================
//名称: 仿.NET的Repeater控件，绑定数据源的URL地址,带分页控件(*注意,模板内的输出字段必须以"{$id$}"的形式,字段名必须全部小写)
//使用方法：页面代码：<div id="Repeater1">{$id$},{$username$},{$password$}<br></div><div><iframe id="iframe1" name="iframe1" src="http://www.vgaia.com/test/Pager.aspx?PageSize=5&pageIndex=2&RecordCount=50" width="320" height="26" scrolling="no" frameborder="0"></iframe></div>
//         JS脚本：   $("#Repeater1").WebHelper_DataBindRepeaterForPagerByXML("<NewDataSet><Table id="121" username="ben.fs@163.com" password="1111111" /><Table id="122" username="dbh@QQ.com" password="000000" /></NewDataSet>", "AspNetPager1", "iframe1", 2, 5);
//=======================================
$.fn.extend({
    WebHelper_DataBindRepeaterForPagerByXML: function (DataSouceXml, AspNetPagerID, PagerIfameID, PageIndex, PageSize) {
        if ($(this).data("oldHTML") == null) $(this).data("oldHTML", (this).html());
        var TemplateString = new String($(this).data("oldHTML"));
        var RenderArray = $.WebHelper_DataBindTemplateByXml(TemplateString, DataSouceXml);

        var totleCount = RenderArray.length;
        var CurrentIndex = PageIndex - 1;
        var RenderArray2 = new Array();
        var j = 0;
        for (var i = (CurrentIndex * PageSize); i < (CurrentIndex + 1) * PageSize; i++) {
            if (RenderArray[i] == null) break;
            RenderArray2[j] = RenderArray[i];
            j++;
        }
        $(this).html(RenderArray2.join(""));

        var url = $("#" + PagerIfameID).attr("src");
        var ThisObj = $(this);
        $($("#" + PagerIfameID).attr("contentWindow")).ready(function () {

            var timeID = setInterval(function () {
                var dd = document.all(PagerIfameID).contentWindow.document;
                if (dd.getElementById(AspNetPagerID) != null) {
                    //dd.getElementById(AspNetPagerID).style.display = 'none';
                    clearInterval(timeID);
                    $(dd.getElementById(AspNetPagerID)).find("a").each(function (i) {
                        var href = new String($(this).attr("href"));
                        $(this).data("DataHref", href);
                        $(this).attr("href", "#");
                        $(this).click(function () {
                            var DataHref = $(this).data("DataHref");
                            var getPageIndex = DataHref.GetQueryString("pageIndex", "1");
                            url = url.Replace("pageIndex=" + PageIndex, "pageIndex=" + getPageIndex);
                            $("#" + PagerIfameID).attr("src", url);
                            ThisObj.WebHelper_DataBindRepeaterForPagerByXML(DataSouceXml, AspNetPagerID, PagerIfameID, getPageIndex, PageSize);
                        });
                    });
                }
                else
                    setInterval(this, 500);
            }, 500)

        });


        //......
    }
});

///=======================================
//名称: 仿.NET的Repeater控件，绑定数据源的URL地址,带分页控件(*注意,模板内的输出字段必须以"{$id$}"的形式,字段名必须全部小写)
//使用方法：页面代码：<div id="Repeater1">{$id$},{$username$},{$password$}<br><div><iframe id="iframe1" name="iframe1" src="http://www.vgaia.com/test/Pager.aspx?PageSize=5&pageIndex=2&RecordCount=50" width="320" height="26" scrolling="no" frameborder="0"></iframe></div>
//         JS脚本：   $("#Repeater1").WebHelper_DataBindRepeaterForPagerByUrl("http://www.vgaia.com/test/03.aspx?act=getxml", "AspNetPager1", "iframe1", 2, 5);
//=======================================
$.fn.extend({
    WebHelper_DataBindRepeaterForPagerByUrl: function (DataSouceUrl, AspNetPagerID, PagerIfameID, PageIndex, PageSize) {
        var DataSouceXml = $.ajax({
            type: "GET",
            url: DataSouceUrl,
            async: false,
            timeout: 60000,
            beforeSend: function (xmlHttp) {
                xmlHttp.setRequestHeader("If-Modified-Since", "0");
                xmlHttp.setRequestHeader("Cache-Control", "no-cache");
            }
        }).responseText;
        $(this).WebHelper_DataBindRepeaterForPagerByXML(DataSouceXml, AspNetPagerID, PagerIfameID, PageIndex, PageSize);
    }
});

///=======================================
//名称: 仿.NET的DataList控件，绑定数据源的URL地址(*注意,模板内的输出字段必须以"{$id$}"的形式,字段名必须全部小写)
//使用方法：页面代码：<div id="DataList1"><table cellpadding="0" cellspacing="0" width="100%"><tr><td>{$span$},{$a$}</td></tr></table></div>
//         JS脚本：  $("#DataList1").WebHelper_DataBindDataListByXML("<div><p><span>aaa</span><a>bbb</a></p><p><span>aaa22222</span><a>bbb11111</a></p></div>");
//=======================================
//$.fn.extend({
//    WebHelper_DataBindDataListByXML: function (DataSouceXml, ControlParams) {
//        var TemplateString = new String((this).html());
//        $(this).replaceWith("<table id=\"" + $(this).attr("id") + "\"></table>");
//      
//        var ResponseHtml = "";
//        var RepeateColumns = (ControlParams.RepeateColumns == undefined) ? 0 : ControlParams.RepeateColumns; //重复列数
//        var RepeateDirection = (ControlParams.RepeateDirection == undefined) ? 0 : ControlParams.RepeateDirection; //重复方向，0为横向，1为竖向（注意，此方法暂时考虑横向重复）
//        var CellPadding = (ControlParams.CellPadding == undefined) ? 0 : ControlParams.CellPadding;
//        var CellSpacing = (ControlParams.CellSpacing == undefined) ? 0 : ControlParams.CellSpacing;

//        var RenderArray = $.WebHelper_DataBindTemplateByXml(TemplateString, DataSouceXml);
//        

//    }
//});

///=======================================
//名称: 颜色渐变
//使用方法：var colorArray = $.WebHelper_ColorGradient("#c597ff", "#73e7a9", 5);
//=======================================
$.extend({
    WebHelper_ColorGradient: function (startColorStr, endColorStr, Step) {
        var func = new Object();
        //颜色字符串转成RGB数组
        func.ColorToRgbArray = function (colorStr) {
            var r = parseInt(colorStr.substr(1, 2), 16);
            var g = parseInt(colorStr.substr(3, 2), 16);
            var b = parseInt(colorStr.substr(5, 2), 16);
            return new Array(r, g, b);
        }
        //RGB数组转成字符串
        func.RgbArrayToColor = function (RgbArray) {
            var s = "#";
            for (var i = 0; i < 3; i++) {
                var c = Math.round(RgbArray[i]).toString(16);
                if (c.length == 1) c = '0' + c;
                s += c;
            }
            return s.toUpperCase();
        }

        var ColorGradientArray = new Array();
        var Gradient = new Array(3);
        var A = func.ColorToRgbArray(startColorStr);
        var B = func.ColorToRgbArray(endColorStr);

        for (var N = 0; N <= Step; N++) {
            for (var c = 0; c < 3; c++) {
                Gradient[c] = A[c] + (B[c] - A[c]) / Step * N;
            }
            ColorGradientArray[N] = func.RgbArrayToColor(Gradient);
        }
        return ColorGradientArray;
    }
});

var WebHelperEvents = new Object();
WebHelperEvents.ElementIsNotNull = "ElementIsNotNull"; //当html标签不为null时触发
WebHelperEvents.ObjectIsNotNull = "ObjectIsNotNull"; //当变量不为null时触发
WebHelperEvents.EnterFrame = "EnterFrame";

///=======================================
//名称: 添加监听器
//使用方法：
//            var lock1 = new Object();
//            var d1 = new Date();
//            function callback(sender, eventType) {
//                //上锁
//                if (lock1 != null) {
//                    lock1 = null;
//                    while (true) {
//                        if (new Date().getTime() - d1.getTime() > 3000) {
//                            alert('每隔三秒alert一次');
//                            d1 = new Date();
//                            lock1 = new Object();
//                            break;
//                        }
//                    }
//                }
//                return true; //返回false则中断监听
//            }
//          $.WebHelper_addListener("div1", WebHelperEvents.EnterFrame, callback);
//=======================================
$.extend({
    WebHelper_addListener: function (sender, eventType, func) {
        var timeID;
        var timerHandler2 = function (sender, e, func) {

            var anyFunc = function (sender, e, func) {
                //返回false则中断监听
                switch (e) {
                    case "ElementIsNotNull":
                        if (document.getElementById(sender) != null) {
                            func(sender, e);
                            return false;
                        }
                        return true;
                        break;
                    case "ObjectIsNotNull":
                        if (sender != null) {
                            func(sender, e);
                            return false;
                        }
                        return true;
                        break;
                    case "EnterFrame":
                        break;
                }
                return func(sender, e);
            };

            if (!anyFunc(sender, e, func))
                clearInterval(timeID);
            else
                setInterval(timerHandler2(sender, e, func), 500);
        };
        timeID = setInterval(timerHandler2(sender, eventType, func), 500);
    }
});

///=======================================
//名称: 获取框架子窗口对象
//使用方法：$("iframe1").WebHelper_CreateIframeObject();
//=======================================
/*
$.fn.extend({
    WebHelper_CreateIframeObject: function (callback) {
        if ($(this).is("iframe")) {
            var PagerIfameID = $(this).attr("id");
            //alert(12312312);
            $($("#" + PagerIfameID).attr("contentWindow")).ready(function () {
                var iframeObj = new Object();
                iframeObj.getThisObj = this;
                iframeObj.getChildDocument = function () {
                    return document.all(PagerIfameID).contentWindow.document;
                };

                iframeObj.getChildMethod = function (methodName) {
                    return document.getElementById(PagerIfameID).contentWindow[methodName];
                };
                callback(iframeObj);

            });
        }
    }
});*/

///=======================================
//名称: 滚动加载图片
//使用方法： 
/*   
html代码，情况1 <img class="scrollLoading" data-url="/img1.jpg" src="/loading.gif" height="101" width="78" border="0" />
          情况2 <div class="scrollLoading" data-url="loaded.html"><img src="http://www.zhangxinxu.com/study/image/loading.gif" style="margin:0 8px -8px 0;" />加载中...</div>
$(function () {
    $(".scrollLoading").scrollLoading();
});

*/
//=======================================
(function ($) {
    $.fn.scrollLoading = function (options) {
        var defaults = {
            attr: "data-url"
        };
        var params = $.extend({}, defaults, options || {});
        params.cache = [];
        $(this).each(function () {
            var node = this.nodeName.toLowerCase(), url = $(this).attr(params["attr"]);
            if (!url) { return; }
            //重组
            var data = {
                obj: $(this),
                tag: node,
                url: url
            };
            params.cache.push(data);
        });

        //动态显示数据
        var loading = function () {
            var st = $(window).scrollTop(), sth = st + $(window).height();
            $.each(params.cache, function (i, data) {
                var o = data.obj, tag = data.tag, url = data.url;
                if (o) {
                    post = o.position().top; posb = post + o.height();
                    if ((post > st && post < sth) || (posb > st && posb < sth)) {
                        //在浏览器窗口内
                        if (tag === "img") {
                            //图片，改变src
                            o.attr("src", url);
                        } 
                        else {
                            o.load(url);
                        }
                        data.obj = null;
                    }
                }
            });
            return false;
        };

        //事件触发
        //加载完毕即执行
        loading();
        //滚动执行
        $(window).bind("scroll", loading);
    };
})(jQuery);

///=======================================
//名称: 弹出消息框
//使用方法： 
        /*     
         var MSG1 = new $.WebHelper_CLASS_MSN_MESSAGE("aa", 200, 120, "短消息提示：", "您有新消息", "你的房间已经自动退租");
        MSG1.rect(null, null, null, screen.height - 50);
        MSG1.speed = 10;
        MSG1.step = 5;
        //alert(MSG1.top); 
        MSG1.show();*/
//=======================================
$.extend({
    WebHelper_CLASS_MSN_MESSAGE: function (id, width, height, caption, title, message, target, action) {
        this.id = id;
        this.title = title;
        this.caption = caption;
        this.message = message;
        this.target = target;
        this.action = action;
        this.width = width ? width : 200;
        this.height = height ? height : 120;
        this.timeout = 150;
        this.speed = 20;
        this.step = 1;
        this.right = screen.width - 1;
        this.bottom = screen.height;
        this.left = this.right - this.width;
        this.top = this.bottom - this.height;
        this.timer = 0;
        this.pause = false;
        this.close = false;
        this.autoHide = true;

        /**//* 
        *    隐藏消息方法 
        */
        this.hide = function () {
            if (this.onunload()) {

                var offset = this.height > this.bottom - this.top ? this.height : this.bottom - this.top;
                var me = this;

                if (this.timer > 0) {
                    window.clearInterval(me.timer);
                }

                var fun = function () {
                    if (me.pause == false || me.close) {
                        var x = me.left;
                        var y = 0;
                        var width = me.width;
                        var height = 0;
                        if (me.offset > 0) {
                            height = me.offset;
                        }

                        y = me.bottom - height;

                        if (y >= me.bottom) {
                            window.clearInterval(me.timer);
                            me.Pop.hide();
                        } else {
                            me.offset = me.offset - me.step;
                        }
                        me.Pop.show(x, y, width, height);
                    }
                }

                this.timer = window.setInterval(fun, this.speed)
            }
        }

        /**//* 
        *    消息卸载事件，可以重写 
        */
        this.onunload = function () {
            return true;
        }
        /**//* 
        *    消息命令事件，要实现自己的连接，请重写它 
        * 
        */
        this.oncommand = function () {
            //this.close = true;
            this.hide();
            window.open("<%= url %>", "mainFrame");

        }
        /**//* 
        *    消息显示方法 
        */
        this.show = function () {

            var oPopup = window.createPopup(); //IE5.5+ 
            this.Pop = oPopup;
            var w = this.width;
            var h = this.height;

            var str = "<DIV style='BORDER-RIGHT: #455690 1px solid; BORDER-TOP: #a6b4cf 1px solid; Z-INDEX: 99999; LEFT: 0px; BORDER-LEFT: #a6b4cf 1px solid; WIDTH: " + w + "px; BORDER-BOTTOM: #455690 1px solid; POSITION: absolute; TOP: 0px; HEIGHT: " + h + "px; BACKGROUND-COLOR: #c9d3f3'>"
            str += "<TABLE style='BORDER-TOP: #ffffff 1px solid; BORDER-LEFT: #ffffff 1px solid' cellSpacing=0 cellPadding=0 width='100%' bgColor=#cfdef4 border=0>"
            str += "<TR>"
            str += "<TD style='FONT-SIZE: 12px;COLOR: #0f2c8c' width=30 height=24></TD>"
            str += "<TD style='PADDING-LEFT: 4px; FONT-WEIGHT: normal; FONT-SIZE: 12px; COLOR: #1f336b; PADDING-TOP: 4px' valign=middle width='100%'>" + this.caption + "</TD>"
            str += "<TD style='PADDING-RIGHT: 2px; PADDING-TOP: 2px' valign=middle align=right width=19>"
            str += "<SPAN title=关闭 style='FONT-WEIGHT: bold; FONT-SIZE: 12px; CURSOR: hand; COLOR: red; MARGIN-RIGHT: 4px' id='btSysClose' >×</SPAN></TD>"
            str += "</TR>"
            str += "<TR>"
            str += "<TD style='PADDING-RIGHT: 1px;PADDING-BOTTOM: 1px' colSpan=3 height=" + (h - 28) + ">"
            str += "<DIV style='BORDER-RIGHT: #b9c9ef 1px solid; PADDING-RIGHT: 8px; BORDER-TOP: #728eb8 1px solid; PADDING-LEFT: 8px; FONT-SIZE: 12px; PADDING-BOTTOM: 8px; BORDER-LEFT: #728eb8 1px solid; WIDTH: 100%; COLOR: #1f336b; PADDING-TOP: 8px; BORDER-BOTTOM: #b9c9ef 1px solid; HEIGHT: 100%'>" + this.title + "<BR><BR>"
            str += "<DIV style='WORD-BREAK: break-all' align=left><A href='javascript:void(0)' hidefocus=false id='btCommand' target='mainFrame'><FONT color=#ff0000>" + this.message + "</FONT></A><A href='http://hi.baidu.com/stream1990' hidefocus=false id='ommand'><FONT color=#ff0000></FONT></A></DIV>"
            str += "</DIV>"
            str += "</TD>"
            str += "</TR>"
            str += "</TABLE>"
            str += "</DIV>"

            oPopup.document.body.innerHTML = str;


            this.offset = 0;
            var me = this;

            oPopup.document.body.onmouseover = function () { me.pause = true; }
            oPopup.document.body.onmouseout = function () { me.pause = false; }

            var fun = function () {
                var x = me.left;
                var y = 0;
                var width = me.width;
                var height = me.height;

                if (me.offset > me.height) {
                    height = me.height;
                } else {
                    height = me.offset;
                }

                y = me.bottom - me.offset;
                if (y <= me.top) {
                    me.timeout--;
                    if (me.timeout == 0) {
                        window.clearInterval(me.timer);
                        if (me.autoHide) {
                            me.hide();
                        }
                    }
                } else {
                    me.offset = me.offset + me.step;
                }
                me.Pop.show(x, y, width, height);

            }

            this.timer = window.setInterval(fun, this.speed)



            var btClose = oPopup.document.getElementById("btSysClose");

            btClose.onclick = function () {
                me.close = true;
                me.hide();
            }

            var btCommand = oPopup.document.getElementById("btCommand");
            btCommand.onclick = function () {
                me.oncommand();
            }
            var ommand = oPopup.document.getElementById("ommand");
            ommand.onclick = function () {
                //this.close = true;
                me.hide();
                window.open(ommand.href);
            }
        }
        /**//* 
        ** 设置速度方法 
        **/
        this.speed = function (s) {
            var t = 20;
            try {
                t = praseInt(s);
            } catch (e) { }
            this.speed = t;
        }
         /**//* 
        ** 设置步长方法 
        **/
        this.step = function (s) {
            var t = 1;
            try {
                t = praseInt(s);
            } catch (e) { }
            this.step = t;
        }

        this.rect = function (left, right, top, bottom) {
            try {
                this.left = left != null ? left : this.right - this.width;
                this.right = right != null ? right : this.left + this.width;
                this.bottom = bottom != null ? (bottom > screen.height ? screen.height : bottom) : screen.height;
                this.top = top != null ? top : this.bottom - this.height;
            } catch (e) { }
        }

    }
});



