﻿/* ****************************************************************************************** */
/*  Global Variables                                                                          */
/* ****************************************************************************************** */

//#region 交通方式
var gTrafficTypeName = new Array();
gTrafficTypeName[0] = '';
gTrafficTypeName[1] = '飞机';
gTrafficTypeName[2] = '火车';
gTrafficTypeName[3] = '自驾';
gTrafficTypeName[4] = '公交/班车';
gTrafficTypeName[5] = '租车';
gTrafficTypeName[6] = '步行';
gTrafficTypeName[7] = '自行车';
//#endregion

//#region gWaitingCount gPlanWindow

var gPlanWindow = null; /*全局对创建行程窗口进行控制*/
try {
    if (window.opener)
        gPlanWindow = window.opener.gPlanWindow;
    else if (window.parent)
        gPlanWindow = window.parent.gPlanWindow;
} catch (e) { }
if (gPlanWindow == undefined)
    gPlanWindow = null;

var gOpenPlanWindow = function (tripID, idList, bd, ed, tname) {
    gfCloseInfoWindow();
    if (gPlanWindow && gPlanWindow.open && !gPlanWindow.closed) {
        gPlanWindow._addIDList(idList, bd, ed, tname);
    } else {
        gPlanWindow = window.open("",
			"billcreate", "");
    }
    gPlanWindow.focus();
}
//#endregion

//#region refresh Url ChangeUrl
//String.prototype.fulllen = function(){ return this.replace(/[0x00-0xff]/g, "aa").length; }
//Refresh url,added addtions key for no cache.
function refreshUrl(url) {
    var u = url;
    if (/mmkey=([\.\d]*)/i.test(u)) {
        u = u.replace(/mmkey=([\.\d]*)/g, 'mmkey=' + Math.random().toString());
    } else {
        if (/\?/i.test(u)) {
            u = u + "&mmkey=" + Math.random().toString();
        } else {
            u = u + "?mmkey=" + Math.random().toString();
        }
    }
    return u;
}

function gfRefresh() {
    //window.location.replace(window.location);
    window.location = refreshUrl(window.location.href);
}
function changeUrl(url, pname, pval) {
    if (!pname || !pval)
        return url;
    pname = $.trim(pname);
    var reg = new RegExp("[\?&]" + pname + "\=[^&#]*", "i");
    if (reg.test(url)) {
        var t1 = url.match(reg)[0];
        var t2 = t1.substring(0, 1);
        url = url.replace(reg, t2 + pname + "=" + pval);
    } else {
        if (/\?/i.test(url)) {
            url += "&" + pname + "=" + pval;
        } else {
            url += "?" + pname + "=" + pval;
        }
    }
    return url;
}
//#endregion
//#region Imags Size NoImg
function gfNoImg(obj) {
    obj.src = window.ROOT + 'themes/default/images/space.png';
}
function gfImgScale(src, width, height, addRoot) {
    if (addRoot == undefined) addRoot = true;
    if (src == null || src == undefined)
        return window.ROOT + 'themes/default/images/space.png';
    if (addRoot && /^http:|^\//i.test(src) == false) {
        src = window.ImgServer + 'upload/' + src;
    }
    var ext = '';
    if (/\.(img|png|bmp|jpg|gif)$/i.test(src)) {
        ext = RegExp.$1;
        src = src.substr(0, src.length - ext.length - 1);
        //alert(ext +" | "+ src);
    }
    else
    {
        //alert(src);
    }
    if (/(\.\d+X\d+\.?)$/i.test(src)) {
        var t = RegExp.$1;
        src = src.substr(0, src.length - t.length);
        //alert(t+" | "+ src);
    }
    if (!width && !height)
        src = src + "." + ext;
    else
        src = src + "." + width + "X" + height + "." + ext;
    //alert(src);
    return src;
}
function gfStaticMapScale(src,width,height)
{
    if(!src) return "";
    if(width==0||height==0) return src;
    if (/(\?|&)(size=\d+x\d+)/i.test(src))
        src = src.replace(RegExp.$2, 'size=' + width + 'x' + height);
//    else
//        src = gfImgScale(src, width, height);
    return src;
}
//延时加载图片，zwg添加
function lazyload(option) {
    var settings = {
        defObj: null,
        defHeight: 0,
        smarter:0
    };
    settings = $.extend(settings, option || {
    });
    var defHeight = settings.defHeight;
    var defObj = null;
    if (settings.smarter == 0)
        defObj = (typeof settings.defObj == "object") ? settings.defObj.find("img") : $(settings.defObj).find("img");
    else
        defObj = (typeof settings.defObj == "object") ? settings.defObj.find("img.lazyload") : $(settings.defObj).find("img.lazyload");
    var pageTop = function () {
        return document.documentElement.clientHeight + Math.max(document.documentElement.scrollTop, document.body.scrollTop) - settings.defHeight;
    };
    var imgLoad = function () {
        var iCount = 0;
        defObj.each(function () {
            var _self = $(this);
            if ($(this).offset().top <= pageTop()) {
                var lazysrc = $(this).attr("lazysrc");
                if (lazysrc) {
                    var img = new Image();
                    img.onload = function () {
                        _self.attr("src", lazysrc).removeAttr("lazysrc");
                    };
                    img.onerror = function () {
                        _self.removeAttr("lazysrc");
                    };
                    img.src = lazysrc;
                    //$(this).attr("src", lazysrc).removeAttr("lazysrc");
                }
                $(this).removeClass("lazyload");
                iCount++;
            }
        });
        if (iCount == 0) {
            $(window).unbind("scroll");
        }
    };
    imgLoad();
    $(window).bind("scroll", function () {
        imgLoad();
    });
}
function AutoResizeImage(maxWidth, maxHeight, objImg) {
    if (!objImg) return;
    var img = new Image();
    img.src = objImg.src;
    var hRatio;
    var wRatio;
    var Ratio = 1;
    if (img && img.width) {
        var w = img.width;
        var h = img.height;
        wRatio = maxWidth / w;
        hRatio = maxHeight / h;
        if (maxWidth == 0 && maxHeight == 0) { Ratio = 1; }
        else if (maxWidth == 0) { Ratio = hRatio; }
        else if (maxHeight == 0) { Ratio = wRatio; }
        else { Ratio = (wRatio <= hRatio ? wRatio : hRatio); }
        w = w * Ratio;
        h = h * Ratio;
        objImg.height = h;
        objImg.width = w;
    }
    else {
        objImg.width = w;
        objImg.height = h;
        objImg.src = 'noimage.100x100.jpg';
    }
}
//#endregion
//#region gSubstr
/************************************************************* 
Description    : 正确截取单字节和双字节混和字符串 
String str    : 要截取的字符串 
Number        : 截取长度 
*************************************************************/
function gSubstr(str, len) {
    //${fn:substring(news_temp,0,300)} //这个比较强大，需要测试一下
    if (!str || !len) {
        return '';
    }

    //预期计数：中文2字节，英文1字节 
    var a = 0;

    //循环计数 
    var i = 0;

    //临时字串 
    var temp = '';

    for (i = 0; i < str.length; i++) {
        if (str.charCodeAt(i) > 255) {
            //按照预期计数增加2 
            a += 2;
        } else {
            a++;
        }
        //如果增加计数后长度大于限定长度，就直接返回临时字符串 
        if (a > len) {
            return temp+'...';
        }

        //将当前内容加到临时字符串 
        temp += str.charAt(i);
    }
    //如果全部是单字节字符，就直接返回源字符串 
    return str;
}
//#endregion
//#region Email Check
//Email检查
function gIsEmail(em) {
    var reg = /^([a-zA-Z0-9_-]+|\.)+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$/;
    if (em == '' || !reg.test(em)) {
        return false;
    }
    return true;
}
//#endregion

//#region 计算距离的字符串
function HDistanceString(distance) {
    if (distance == undefined || distance <= 0) return "不详";
    if (distance < 1000) return distance + '米'; else return Math.round(distance / 1000) + '公里';
}
//#endregion
//#region 格式化价格显示
//格式话金额   
function HFormatMoney(s, n,nullstring)//将数字转换成逗号分隔的样式,保留两位小数s:value,n:小数位数     
{
    if (s == undefined || s == 0) {
        if (nullstring != undefined) return nullstring;
    }
    n = n > 0 && n <= 20 ? n : 2;
    s = parseFloat((s + "").replace(/[^\d\.-]/g, "")).toFixed(n) + "";
    var l = s.split(".")[0].split("").reverse(),
    r = s.split(".")[1];
    t = "";
    for (i = 0; i < l.length; i++) {
        t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? "," : "");
    }
    var t = t.split("").reverse().join("") + "." + r;
    return "¥" + t + "元";
}
//还原金额  
function HParseMoney(s) {
    return parseFloat(s.replace(/[^\d\.-]/g, ""));
}  
//#endregion

//#region ForDigit FormatNumber
/*  
*    ForDigit(Dight,How):数值格式化函数，Dight要  
*    格式化的  数字，How要保留的小数位数。  
*/
function ForDigit(Dight, How) {
    if (Dight && How)
        return Dight.toFixed(How);
    else
        return 0;
    /*Dight = Math.round(Dight * Math.pow(10, How)) / Math.pow(10, How);
    return Dight;*/
}
/**  
* 格式化数字显示方式   
* 用法  
* formatNumber(12345.999,'#,##0.00');  
* formatNumber(12345.999,'#,##0.##');  
* formatNumber(123,'000000');  
* @param num  
* @param pattern  
*/
function formatNumber(num, pattern) {
    var strarr = num ? num.toString().split('.') : ['0'];
    var fmtarr = pattern ? pattern.split('.') : [''];
    var retstr = '';

    // 整数部分   
    var str = strarr[0];
    var fmt = fmtarr[0];
    var i = str.length - 1;
    var comma = false;
    for (var f = fmt.length - 1; f >= 0; f--) {
        switch (fmt.substr(f, 1)) {
            case '#':
                if (i >= 0)
                    retstr = str.substr(i--, 1) + retstr;
                break;
            case '0':
                if (i >= 0)
                    retstr = str.substr(i--, 1) + retstr;
                else
                    retstr = '0' + retstr;
                break;
            case ',':
                comma = true;
                retstr = ',' + retstr;
                break;
        }
    }
    if (i >= 0) {
        if (comma) {
            var l = str.length;
            for (; i >= 0; i--) {
                retstr = str.substr(i, 1) + retstr;
                if (i > 0 && ((l - i) % 3) == 0)
                    retstr = ',' + retstr;
            }
        } else
            retstr = str.substr(0, i + 1) + retstr;
    }

    retstr = retstr + '.';
    // 处理小数部分   
    str = strarr.length > 1 ? strarr[1] : '';
    fmt = fmtarr.length > 1 ? fmtarr[1] : '';
    i = 0;
    for (var f = 0; f < fmt.length; f++) {
        switch (fmt.substr(f, 1)) {
            case '#':
                if (i < str.length)
                    retstr += str.substr(i++, 1);
                break;
            case '0':
                if (i < str.length)
                    retstr += str.substr(i++, 1);
                else
                    retstr += '0';
                break;
        }
    }
    return retstr.replace(/^,+/, '').replace(/\.$/, '');
}
//#endregion

//#region 将文字拷贝到剪切板
var copy_to_clipboard = function (txt) {
    if (window.clipboardData) {
        window.clipboardData.clearData();
        window.clipboardData.setData("Text", txt);
    } else if (navigator.userAgent.indexOf("Opera") != -1) {
        window.location = txt;
    } else if (window.netscape) {
        try {
            netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
        } catch (e) {
            /*alert("您的firefox安全限制限制您进行剪贴板操作，请打开’about:config’将signed.applets.codebase_principal_support’设置为true’之后重启firefox，相对路径为firefox根目录/greprefs/all.js");*/
            gAlert("提示信息", "您的firefox安全限制限制您进行剪贴板操作，请打开’about:config’将signed.applets.codebase_principal_support’设置为true’之后重启firefox，相对路径为firefox根目录/greprefs/all.js", 3000, function () { });
            return false;
        }
        var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
        if (!clip)
            return;
        var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
        if (!trans)
            return;
        trans.addDataFlavor('text/unicode');
        var str = new Object();
        var len = new Object();
        var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
        var copytext = txt;
        str.data = copytext;
        trans.setTransferData("text/unicode", str, copytext.length * 2);
        var clipid = Components.interfaces.nsIClipboard;
        if (!clip)
            return false;
        clip.setData(trans, null, clipid.kGlobalClipboard);
    }
}
//#endregion

//#region cancelDiv
//取消层显示
function cancelDiv(divID, msg) {
    if (msg != null) {
        if (confirm(msg) == true)
            $(divID).empty().addClass("hide");
    } else {
        $(divID).empty().addClass("hide");
    }
}
//#endregion

//#region CenterDIV
function centerDiv(divID, relateDom, leftOffset, topOffset, zIndex, a_width, a_height) {
    var windowWidth = $(window).width();
    var windowHeight = $(window).height();
    var scrollTop = document.documentElement.scrollTop + document.body.scrollTop;
    var width,
	height;
    //centering
    if (/^(#|\.)/.test(divID) == false) {
        divID = "#" + divID;
    }
    if ($(divID).hasClass('hide'))
        $(divID).removeClass('hide');
    if (a_height == undefined)
        height = $(divID).height();
    else
        height = a_height == "" || a_height == "auto" ? 100 : a_height;
    if (a_width == undefined)
        width = $(divID).width();
    else
        width = a_width;
    var top = 0;
    var left = 0;
    if (relateDom) {
        if (relateDom == "__mouse__") {
            var ml = mousePos(event);
            top = ml.y + 20;
            left = ml.x + 20;
        } else {
            if (/^(#|\.)/.test(relateDom) == false) {
                relateDom = "#" + relateDom;
            }

            var t = $(relateDom).offset();
            var p = gGetWindowScroll();
            left = t.left; //+10; // +p.x;
            top = t.top + 30; // +p.y;
        }
        if (left + width > windowWidth) {
            left = windowWidth - width;
            if (left < 0)
                left = 0;
        }
    } else {
        top = windowHeight / 2 - height / 2 + scrollTop;
        left = windowWidth / 2 - width / 2;
        if (left <= 10) {
            left = windowWidth / 2 - 80;
        }
    }
    //alert(left + "=" + (windowWidth / 2) + " - " + (width / 2));
    if (topOffset)
        top += topOffset;
    if (leftOffset)
        left += leftOffset;
    if (a_height == '' || a_height == 'auto') {
        return $(divID).css({
            "position": "absolute",
            "top": top + "px",
            "left": left + "px",
            "width": width + "px",
            "height": "auto",
            "z-Index": (zIndex == undefined || zIndex == "" ? "10000" : zIndex)
        }); //.addClass("pop-box");
    } else {
        return $(divID).css({
            "position": "absolute",
            "top": top + "px",
            "left": left + "px",
            "width": width + "px",
            "height": height + "px",
            "z-Index": (zIndex == undefined || zIndex == "" ? "10000" : zIndex)
        }); //.addClass("pop-box");
    }
}
//#endregion

//#region gfCenterDiv
function gfCenterDiv(divID, a_width, a_height, relateDom, zIndex, leftOffset, topOffset) {
    var windowWidth = $(window).width();
    var windowHeight = $(window).height();
    var scrollTop = document.documentElement.scrollTop + document.body.scrollTop;
    var width,
	height;
    //centering
    if (/^(#|\.)/.test(divID) == false) {
        divID = "#" + divID;
    }
    if ($(divID).hasClass('hide'))
        $(divID).removeClass('hide');
    if (a_height == undefined)
        height = $(divID).height();
    else
        height = a_height == "" || a_height == "auto" ? 100 : a_height;
    if (a_width == undefined)
        width = $(divID).width();
    else
        width = a_width;
    var top = 0;
    var left = 0;
    if (relateDom) {
        if (relateDom == "__mouse__") {
            var ml = mousePos(event);
            top = ml.y + 20;
            left = ml.x + 20;
        } else {
            if (/^(#|\.)/.test(relateDom) == false) {
                relateDom = "#" + relateDom;
            }
            var t = $(relateDom).offset();
            var p = gGetWindowScroll();
            left = t.left; //+10; // +p.x;
            top = t.top + 30; // +p.y;
        }
        if (left + width > windowWidth) {
            left = windowWidth - width;
            if (left < 0)
                left = 0;
        }
    } else {
        top = windowHeight / 2 - height / 2 + scrollTop;
        left = windowWidth / 2 - width / 2;
        if (left <= 10) {
            left = windowWidth / 2 - 80;
        }
    }
    //alert(left + "=" + (windowWidth / 2) + " - " + (width / 2));
    if (topOffset)
        top += topOffset;
    if (leftOffset)
        left += leftOffset;
    if (a_height == '' || a_height == 'auto') {
        return $(divID).css({
            "position": "absolute",
            "top": top + "px",
            "left": left + "px",
            "width": width + "px",
            "height": "auto",
            "z-Index": (zIndex == undefined || zIndex == "" ? "10000" : zIndex)
        }); //.addClass("pop-box");
    } else {
        return $(divID).css({
            "position": "absolute",
            "top": top + "px",
            "left": left + "px",
            "width": width + "px",
            "height": height + "px",
            "z-Index": (zIndex == undefined || zIndex == "" ? "10000" : zIndex)
        }); //.addClass("pop-box");
    }
}
//#endregion


//#region IsNumeric
function IsNumeric(sText) {
    var ValidChars = "-0123456789.";
    var IsNumber = true;
    var Char;
    if (sText == undefined||sText==null) return false;
    for (i = 0; i < sText.length && IsNumber == true; i++) {
        Char = sText.charAt(i);
        if (ValidChars.indexOf(Char) == -1) {
            IsNumber = false;
        }
    }
    return IsNumber;
};
//#endregion

//#region gPreloadimg
/*************************************************************************/
/*  预加载图片                                                           */
/*  var div = document.getElementsByTagName("div")[0];                   */
/*  var input = document.getElementsByTagName("input");                  */
/*  gPreloadimg("/uploads/makeWeb/js/img/topBanner.gif", div, input[0]);  */
/*************************************************************************/
function gPreloadimg(url, obj, ipt) {
    var img = new Image();
    obj.innerHTML = "<p>图片加载中...</p>";
    img.onload = function () {
        obj.innerHTML = "";
        obj.style.width = String(img.width) + "px";
        ipt.style.width = String(img.width - 40) + "px";
        obj.appendChild(img);
    };
    img.onerror = function () {
        obj.innerHTML = "图片加载错误，请检查网络或URL地址！"
    };
    img.src = url; //img.src一定要写在img.onload之后，否则在IE中会出现问题
}
//#endregion

//#region DateAdd
/*   
*---------------   DateAdd(interval,number,date)   -----------------   
*   DateAdd(interval,number,date)     
*   功能:实现VBScript的DateAdd功能.   
*   参数:interval,字符串表达式，表示要添加的时间间隔.   
*   参数:number,数值表达式，表示要添加的时间间隔的个数.   
*   参数:date,时间对象.   
*   返回:新的时间对象.   
*   var   now   =   new   Date();   
*   var   newDate   =   DateAdd("d",5,now);   
*   author:wanghr100(灰豆宝宝.net)   
*   update:2004-5-28   11:46   
*---------------   DateAdd(interval,number,date)   -----------------   
*/
function HDateAdd(interval, number, adate) {

    var date = HDateParse(adate);
    switch (interval) {
        case "y":
            {
                date.setFullYear(date.getFullYear() + number);
                return date;
                break;
            }
        case "q":
            {
                date.setMonth(date.getMonth() + number * 3);
                return date;
                break;
            }
        case "m":
            {
                date.setMonth(date.getMonth() + number);
                return date;
                break;
            }
        case "w":
            {
                date.setDate(date.getDate() + number * 7);
                return date;
                break;
            }
        case "d":
            {
                date.setDate(date.getDate() + number);
                return date;
                break;
            }
        case "h":
            {
                date.setHours(date.getHours() + number);
                return date;
                break;
            }
        case "M":
            {
                date.setMinutes(date.getMinutes() + number);
                return date;
                break;
            }
        case "s":
            {
                date.setSeconds(date.getSeconds() + number);
                return date;
                break;
            }
        default:
            {
                date.setDate(date.getDate() + number);
                return date;
                break;
            }
    }
}
//#endregion

//#region HDateYear
function HDateYear(asDate) {
    if (asDate == undefined || asDate == null)
        return 0;
    if (!asDate.getYear) {
        asDate = HDateParse(asDate);
    }
    if (asDate.getYear) {
        var y = asDate.getYear();
        if (y > 1000)
            return y;
        else
            return y + 1900;
    }
    return 0;
}
//#endregion

//#region DateCompare HDateTimeCompare HDateCount
/*****************************************************************   
Name DateCompare   
Purpose计算两个字符(YYYY-MM-DD)日期相隔天数   
ParamasStartDate     起始日期   
asEndDate         终止日期   
Return 字符串   
*****************************************************************/
function HDateCompare(asStartDate, asEndDate) {
    var miStart = HDateParse(asStartDate);
    var miEnd = HDateParse(asEndDate);
    //return (miEnd - miStart) / (1000 * 24 * 3600);
    return HDateCompareD(miStart, miEnd);
}
function HDateTimeCompare(asStartDate, asEndDate) {
    var miStart = HDateParse(asStartDate);
    var miEnd = HDateParse(asEndDate);
    //return (miEnd - miStart) / (1000 * 24 * 3600);
    return HDateTimeCompareD(miStart, miEnd);
}
function HDateCompareD(miStart, miEnd) {
    var miStart1 = Date.parse(HDateFormat(miStart, 'yyyy/MM/dd'));
    var miEnd1 = Date.parse(HDateFormat(miEnd, 'yyyy/MM/dd'));
    return (miEnd1 - miStart1) / (1000 * 24 * 3600);
}
function HDateTimeCompareD(miStart, miEnd) {
    var miStart1 = Date.parse(HDateFormat(miStart, 'yyyy/MM/dd HH:mm:ss'));
    var miEnd1 = Date.parse(HDateFormat(miEnd, 'yyyy/MM/dd HH:mm:ss'));
    return miEnd1 - miStart1;
}
function HDateCount(minStart, minEnd) {
    //var miStart1 = HDateParse(HDateFormat(HDateParse(minStart), 'yyyy-MM-dd'));
    //var miEnd1 = HDateParse(HDateFormat(HDateParse(minEnd), 'yyyy-MM-dd'));
    var miStart1 = HDateParse(minStart);
    var miEnd1 = HDateParse(minEnd);
//    var daycount = 0;
//    if (miStart1 - miEnd1 < 0) {
//        while (miStart1 < miEnd1) {
//            miStart1 = HDateAdd('d', 1, miStart1);
//            daycount++;
//        }
//    }
//    else if(miStart1 - miEnd1 >0){
//        while (miEnd1 < miStart1) {
//            miEnd1 = HDateAdd('d', 1, miEnd1);
//            daycount++;
//        }
//        daycount = 0 - daycount;
//    }
//    return daycount;
    var h = (miEnd1 - miStart1) / (3600 * 1000);
    h += miStart1.getHours();
    var daycount = Math.floor(h / 24);
    if (h % 24 > 0)
        daycount++;
    miEnd1 = null;
    miStart1 = null;
    return daycount;
}
//只比较时间不比较日期
function HTimeCompareD(minStart, minEnd) {
    var miStart1 = HDateParse(minStart);
    var miEnd1 = HDateParse(minEnd);
    var h = miEnd1.getHours() - miStart1.getHours();
    var m = miEnd1.getMinutes() - miStart1.getMinutes();
    var s = miEnd1.getSeconds() - miStart1.getSeconds();
    var ms = miEnd1.getMilliseconds() - miStart1.getMilliseconds();
    miEnd1 = null;
    miStart1 = null;
    return h * 3600000 + m * 60000 + s * 1000 + ms;
}
//获得时间差的文字，精确到分
function HTimeSpanString(minStart, minEnd) {
    var miStart1 = HDateParse(minStart);
    var miEnd1 = HDateParse(minEnd);
    var m = (miEnd1 - miStart1) / (1000);
    return HTimeSpanFormat(m);
}
function HTimeSpanFormat(m) {
    miEnd1 = null;
    miStart1 = null;
    var ret = "";
    if (m == undefined) m = 0;
    m = m / 60;
    if (m < 0) {
        ret = "负";
        m = 0 - m;
    }
    var d = Math.floor(m / (60 * 24));
    var h = Math.floor((m - d * 24 * 60) / 60);
    var m = Math.floor(m % 60);
    miEnd1 = null;
    miStart1 = null;

    if (d != 0 && d >= 1 || d <= -1)
        ret += d + "天";
    if (d != 0 && h == 0)
        ret += "0小时";
    else if (h != 0)
        ret += h + "小时";
    if (m != 0)
        ret += m + "分钟";
    else {
        if ((d != 0 || h != 0)) {

        } else {
            ret += "0分钟";
        }
    }
    return ret;
}
//只比较时间不比较日期
function HTimeCompare(asBeginDate, asEndDate) {
    var miStart1 = HDateParse(asBeginDate);
    var miEnd1 = HDateParse(asEndDate);
    var h = miEnd1.getHours() - miStart1.getHours();
    var m = miEnd1.getMinutes() - miStart1.getMinutes();
    var s = miEnd1.getSeconds() - miStart1.getSeconds();
    var ms = miEnd1.getMilliseconds() - miStart1.getMilliseconds();
    miEnd1 = null;
    miStart1 = null;
    return h * 3600000 + m * 60000 + s * 1000 + ms;
}
//#endregion

//#region HDateParse
function HDateParse(asDate) {
    if (asDate == undefined || asDate == null)
        return new Date(1900, 1, 1, 8, 0, 0);
    else if (asDate.getYear) {
        return new Date(asDate);
    }
    var a = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(asDate);
    if (a) {
        return new Date(a[1], a[2] - 1, a[3], a[4], a[5], a[6]);
    }
    try {
        return new Date(Date.parse(asDate.replace(/\-/g, '/')));
    } catch (e) {
        return new Date(1900, 1, 1, 8, 0, 0);
    }
}
//#endregion

//#region HDateFormat
/**   
* 对Date的扩展，将 Date 转化为指定格式的String   
* 月(M)、日(d)、12小时(h)、24小时(H)、分(m)、秒(s)、周(E)、季度(q) 可以用 1-2 个占位符   
* 年(y)可以用 1-4 个占位符，毫秒(S)只能用 1 个占位符(是 1-3 位的数字)   
* eg:   
* (new Date()).pattern("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423   
* (new Date()).pattern("yyyy-MM-dd E HH:mm:ss") ==> 2009-03-10 二 20:09:04   
* (new Date()).pattern("yyyy-MM-dd EE hh:mm:ss") ==> 2009-03-10 周二 08:09:04   
* (new Date()).pattern("yyyy-MM-dd EEE hh:mm:ss") ==> 2009-03-10 星期二 08:09:04   
* (new Date()).pattern("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18   
*/
function HDateFormat(_this, fmt) {
    if (_this == undefined || _this == null || !_this.getYear) {
        //_this = HDateParse(_this);
        //if(_this.getDay()<=0)
        return fmt;
    }
    var o = {
        "M+": _this.getMonth() + 1, //月份      
        "d+": _this.getDate(), //日      
        "h+": _this.getHours(), // % 12 == 0 ? 12 : _this.getHours() % 12, //小时      
        "H+": _this.getHours(), //小时      
        "m+": _this.getMinutes(), //分      
        "s+": _this.getSeconds(), //秒      
        "q+": Math.floor((_this.getMonth() + 3) / 3), //季度      
        "S": _this.getMilliseconds() //毫秒      
    };
    var week = {
        "0": "\u65e5",
        "1": "\u4e00",
        "2": "\u4e8c",
        "3": "\u4e09",
        "4": "\u56db",
        "5": "\u4e94",
        "6": "\u516d"
    };
    if (/(y+)/.test(fmt)) {
        fmt = fmt.replace(RegExp.$1, (_this.getFullYear() + "").substr(4 - RegExp.$1.length));
    }
    if (/(E+)/.test(fmt)) {
        fmt = fmt.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? "\u661f\u671f" : "\u5468") : "") + week[_this.getDay() + ""]);
    }
    for (var k in o) {
        if (new RegExp("(" + k + ")").test(fmt)) {
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(("" + o[k]).length)));
        }
    }

    return fmt;
}
//#endregion

//#region mousePos
function mousePos(e) {
    var x,
	y;
    var e = e || window.event;
    if (e.pageX || e.pageY) {
        return {
            x: e.pageX,
            y: e.pageY
        };
    }
    var pl = 0;
    var pt = 0;
    if (document.body != null) {
        pl = document.body.scrollLeft - document.body.clientLeft;
        pt = document.body.scrollTop - document.body.clientTop;
    }
    if (document.documentElement != null) {
        pl += document.documentElement.scrollLeft;
        pt += document.documentElement.scrollTop;
    }
    return {
        x: e.clientX + pl,
        y: e.clientY + pt
    };
}
//#endregion

//#region gGetWindowScroll
function gGetWindowScroll() {
    var pl = 0;
    var pt = 0;
    if (document.body != null) {
        pl = document.body.scrollLeft - document.body.clientLeft;
        pt = document.body.scrollTop - document.body.clientTop;
    }
    if (document.documentElement != null) {
        pl += document.documentElement.scrollLeft;
        pt += document.documentElement.scrollTop;
    }
    return {
        "x": pl,
        "y": pt
    };
}
//#endregion

//#region objClone
function objClone(obj, creator)
//obj为要克隆的对象，creator为该对象的构造方法   objClone(trip,HTrip)
{
    result = new creator();
    for (var i in obj)
        result[i] = obj[i]
    return result
}
//#endregion
//#region  检查是否移出了某个元素，主要是为了处理不同的浏览器的对事件处理的流程而写
function isMouseLeaveOrEnter(e, handler) {
    if (e.type != 'mouseout' && e.type != 'mouseover')
        return false;
    var reltg = e.relatedTarget ? e.relatedTarget : e.type == 'mouseout' ? e.toElement : e.fromElement;
    while (reltg && reltg != handler)
        reltg = reltg.parentNode;
    return (reltg != handler);
}
//#endregion

//#region show hide waiting gfShowWaiting HideWaiting

/**
* Start waiting
* @param opt {
*		message: "",		// waiting message
*		timer:,				// wait time: 
*		stopBtnEnable:,		// 
*		beforeStop:			// 
* }
* @param msg			wait msg
*/
//var gWaitingCount = 0; /*全局控制等待窗口的数据*/
//var gWaitingClosing = 0; /*用了防止闪烁*/
var gWaitingList = [];
function gfShowWaiting(opt,funname) {
    //if ($("#msglist").length == 0) {
    //    $("body").append("<div id='msglist'></div>");
   // }
    var caller = (funname == undefined || funname == null ? "noname" : funname);
    var msg = "", timer, stopBtnEnable = false, beforeStop = undefined;
    if (opt) {
        if (opt.message) {
            msg = opt.message;
        }
        if (opt.timer) {
            timer = opt.timer;
        }
        if (opt.stopBtnEnable) {
            stopBtnEnable = opt.stopBtnEnable;
        }
        if (opt.beforeStop) {
            beforeStop = opt.beforeStop;
        }
    }
    var dvBg1 = document.getElementById("waitDiv");
    if (null != dvBg1) {
        //document.body.removeChild(dvBg);
    }
    else {
        var dvBg = document.createElement("div");
        var dvMsg = document.createElement("div");

        var h = Math.max(
			document.documentElement.scrollHeight,
			document.body.scrollHeight
		);
        var w = Math.max(
			document.documentElement.scrollWidth,
			document.body.scrollWidth
		);

        dvBg.setAttribute('id', 'waitDiv');

        dvBg.style.height = h + "px";
        dvBg.style.width = w + "px";
        dvBg.style.zIndex = "1111";
        dvBg.style.top = 0;
        dvBg.style.left = 0;

        dvBg.style.background = "#A6BACC";
        dvBg.style.opacity = 0.5;
        dvBg.style.filter = "alpha(opacity=50)";

        dvBg.style.position = "absolute";
        document.body.appendChild(dvBg);


        dvMsg.style.position = "absolute";
        dvMsg.setAttribute('id', 'msgDiv');
        dvMsg.style.width = "280px";
        dvMsg.style.top = "50%";
        dvMsg.style.left = "50%";
        dvMsg.style.marginTop = "-50px";
        dvMsg.style.marginLeft = "-140px";
        dvMsg.style.zIndex = "1112";
        dvMsg.style.opacity = 0.5;
        dvMsg.style.filter = "alpha(opacity=50)";

        var html = "<center><img src='" + window.IMG + "waiting.gif'><br/><span style='font-weight:bold;font-size:10pt;'>";
        if (msg) {
            html += msg;
        }
        html += "</span>";
        if (stopBtnEnable) {
            html += "<br/><input type='button' value='Stop' onclick='stopWait(" + beforeStop + ");'>";
        }
        html += "</center>";

        dvMsg.innerHTML = html;

        document.body.appendChild(dvMsg);
    }
    //if(gWaitingCount<=0) gWaitingCount = 1
    //else gWaitingCount++;
    gWaitingList.push({ name: caller, show: 1, close: 0, wait: 0 });
    //$("#msglist").append("<div>show:"+jsonToString(gWaitingList)+'</div>');
    //$("#msglist").append("<div>show:gWaitingCount:" + gWaitingCount + ' gWaitingClosing:' + gWaitingClosing + "</div><div class='clear'></div>");
    //if (gWaitingClosing > 0) gWaitingClosing --;

    if (timer && !isNaN(timer)) {
        if (beforeStop == undefined)
            setTimeout("gfHideWaiting(undefined,'" + funname + "')", timer);
        else
            setTimeout("gfHideWaiting(" + beforeStop + ",'" + funname + "')", timer);
    }
    if (gWaitingList.length == 1) {
        setTimeout("gfHideWaiting(undefined,'" + funname + "')", 15000); //最多不过15秒
    }
}
/**
* Stop waiting.
*/
function gfHideWaiting(beforeStop, funname) {
    var caller = (funname == undefined || funname == null ? "noname" : funname);
    //$("#msglist").append(caller);
    //$("#msglist").append("<div>close:gWaitingCount:" + gWaitingCount + ' gWaitingClosing:' + gWaitingClosing + "</div><div class='clear'></div>");
    //if (gWaitingClosing == 0) gWaitingCount--;  //跳过延迟关闭的代码
   //$("#msglist").append("<div>close begin:"+jsonToString(gWaitingList)+'</div>');
    //gWaitingCount--;
    for (var k = gWaitingList.length-1; k >=0; k--) {
        var p = gWaitingList[k];
//        if (p.name == caller) {
            if (p.close > 0) {
                p.wait = 1;
                gWaitingList.splice(k, 1);
                break;
            }
            else {
                p.close = 1;
                if (beforeStop == undefined || beforeStop == null) {
                    setTimeout("gfHideWaiting(undefined,'" + funname + "')", 300);
                }
                else {
                    setTimeout("gfHideWaiting(" + beforeStop + ",'" + funname + "')", 300);
                }
                //$("#msglist").append("<div>close wait:gWaitingCount:" + gWaitingCount + ' gWaitingClosing:' + gWaitingClosing + "</div><div class='clear'></div>");
                break;
            }
        //}
    }
    //$("#msglist").append("close:done "+jsonToString(gWaitingList));
    if (gWaitingList.length == 0) {
        var dvBg = document.getElementById("waitDiv");
        if (null != dvBg) {
            if (beforeStop) {
                beforeStop();
            }
            document.body.removeChild(dvBg);
        }
        var dvMsg = document.getElementById("msgDiv");
        if (null != dvMsg) {
            document.body.removeChild(dvMsg);
        }
        //$("#msglist").append("<div>close comp:gWaitingCount:" + gWaitingCount + ' gWaitingClosing:' + gWaitingClosing + "</div><div class='clear'></div>");
    }
}
//#endregion

//#region _gfDocumentBounds
function _gfDocumentBounds() {
    if (document.documentElement && document.compatMode == "CSS1Compat") {
        return {
            st: document.documentElement.scrollTop,
            sl: document.documentElement.scrollLeft,
            sw: document.documentElement.scrollWidth,
            sh: document.documentElement.scrollHeight,
            cw: document.documentElement.clientWidth,
            ch: document.documentElement.clientHeight
        }
    } else if (document.body) {
        return {
            st: document.body.scrollTop,
            sl: document.body.scrollLeft,
            sw: document.body.scrollWidth,
            sh: document.body.scrollHeight,
            cw: document.body.clientWidth,
            ch: document.body.clientHeight
        }
    }
}
function gfViewportHeight() {
    var height = 0;
    if (window.innerHeight) {
        height = window.innerHeight;
    } else if (document.documentElement && document.documentElement.clientHeight) {
        height = document.documentElement.clientHeight;
    } else if (document.body && document.body.clientHeight) {
        height = document.body.clientHeight;
    }
    return height;

}


//#endregion

//#region show hide waiting gfShowWaitingB HideWaitingB
var gWaitingListB = [];
function gfShowWaitingB() {
    var dvBg1 = document.getElementById("msgDivB");
    if (null != dvBg1) {
        //document.body.removeChild(dvBg);
    }
    else {
        var dvMsg = document.createElement("div");

        var dc = _gfDocumentBounds();

        //dc.ch = gfViewportHeight();
        dvMsg.style.position = "fixed";
        dvMsg.setAttribute('id', 'msgDivB');
        dvMsg.style.width = (dc.cw - 10)+"px"; // "280px";
        dvMsg.style.height = "48px";
        dvMsg.style.top = dc.ch+"px";  //h - 50;
        dvMsg.style.left = "0px"; // "50%";
        dvMsg.style.marginTop = "-50px";
        dvMsg.style.marginLeft = "5px"; // "-140px";
        dvMsg.style.zIndex = "1112";
        dvMsg.style.opacity = 0.5;
        dvMsg.style.background = "gray";
        dvMsg.style.filter = "alpha(opacity=80)";

        var html = "<center><img src='" + window.IMG + "waiting.gif'><br/><span style='font-weight:bold;font-size:10pt;'></span></center>";

        dvMsg.innerHTML = html;
        document.body.appendChild(dvMsg);
        if ($.browser.safari) {
            $('#msgDivB').css('top', window.innerHeight + window.scrollY + "px");
            $("#msgDivB").everyTime("200ms", 'gotop1', function () {
                $('#msgDivB').css('top', window.innerHeight + window.scrollY + "px");
            });
        }
    }
    gWaitingListB.push({ show: 1, close: 0, wait: 0 });

}
function gfHideWaitingB(beforeStop, funname) {
    for (var k = gWaitingListB.length - 1; k >= 0; k--) {
        var p = gWaitingListB[k];
        if (p.close > 0) {
            p.wait = 1;
            gWaitingListB.splice(k, 1);
            break;
        }
        else {
            p.close = 1;
            setTimeout("gfHideWaitingB()", 300);
            break;
        }
        //}
    }
    if (gWaitingListB.length == 0) {
        var dvMsg = document.getElementById("msgDivB");
        if ($.browser.safari) {
            $("#msgDivB").stopTime('gotop1');
        }
        if (null != dvMsg) {
            document.body.removeChild(dvMsg);
        }
    }
    else {
        setTimeout("gfHideWaitingB()", 10000);
    }
}
//#endregion

//#region gfGetSubstr
gfGetSubstr = function (desc, len) {
    if (desc == null || desc == undefined)
        return "";
    desc = desc.replace(/<.*>/gm, '');
    if (desc.length > len && len > 3) {
        return desc.substring(0, len - 3) + "...";
    } else
        return desc;
}
//#endregion

//#region gfBuildRateIcon 获得评级的图标
gfBuildRateIcon = function (rate) {
    /*var i = 0;
    var j = rate / 2;
    var result = "";
    for (i = 0; i < j; i++)
    result += "<img src='" + window.IMG + "ico_1.jpg'>";
    if (j * 2 < rate)
    result += "<img src='" + window.IMG + "ico_2.jpg'>";
    for (; i < 5; i++)
    result += "<img src='" + window.IMG + "ico_4.jpg'>";
    return result;*/
    return gfBuildHotelRateIcon(rate);
}
//#endregion
//#region gfBuildHotelRateIcon
gfBuildHotelRateIcon = function (rate) {
    var result = [];
    var index = 0;
    for (var i = 0; i < rate; i++)
        result[index++] = "<img src='" + window.SkinPath + "images/star.gif'>";
    return result.join("");
}
//#endregion
//#region Async Operation
/******************** Javascript 异步调用框架 ****************************/
Async = {
    Operation: function () {
        var callbackQueue = [];
        this.result = undefined;
        this.state = "running";
        this.completed = false;

        this.yield = function (result) {
            var self = this;
            setTimeout(function () {
                self.result = result;
                self.state = "completed";
                self.completed = true;
                while (callbackQueue.length > 0) {
                    var callback = callbackQueue.shift();
                    callbackResult = callback(self.result);
                    self.result = callbackResult;
                    if (callbackResult && callbackResult instanceof Async.Operation) {
                        innerChain = Async.chain();
                        while (callbackQueue.length > 0) {
                            innerChain.next(callbackQueue.shift());
                        }
                        innerChain.next(function (result) {
                            self.result = result;
                            self.state = "completed";
                            self.completed = true;
                            return result;
                        });
                        callbackResult.addCallback(function (result) {
                            self.result = result;
                            innerChain.go(result);
                        });
                    }
                }
            }, 1);
            return this;
        };

        this.addCallback = function (callback) {
            callbackQueue.push(callback);
            if (this.completed) {
                this.yield(this.result);
            }
            return this;
        };
        this.go = function (initialArgument) {
            return this.yield(initialArgument);
        };

        this.next = function (nextFunction) {
            return this.addCallback(nextFunction);
        };
    }

};
Async.wait = function (delay, context) {
    var operation = new Async.Operation();
    setTimeout(function () {
        operation.yield(context);
    }, delay);
    return operation;
};

Async.Operation.prototype.wait = function (delay, context) {
    this.next(function (context) {
        return Async.wait(delay, context);
    });
}
Async.chain = function () {
    var chain = new Async.Operation({
        chain: true
    });
    return chain;
};

Async.go = function (initialArgument) {
    return Async.chain().go(initialArgument);
}
//#endregion
//#region gFUnload
function gFUnload() {

}
//#endregion

//#region HTime 时间选择控件 选择时间，只精确到小时与分
var gTimeWindowActive = 0;
function HTime(txtInput, innerDiv) {
    //var _self = this;
    this.bInner = false;
    this.containerName = txtInput + "_SelectTime";
    if (innerDiv != undefined && innerDiv != null && $("#" + innerDiv).length > 0) {
        this.containerName = innerDiv;
        this.bInner = true;
    }

    this.buildTime = function () {
        if (this.bInner || $("#" + this.containerName).length == 0) {
            var tr = $("#" + txtInput).offset();
            var left = tr.left - 10; /* +p.x;*/
            var top = tr.top + 25; /* +p.y;*/

            $("#" + this.containerName).empty();
            var t = $("<div id=\"" + txtInput + "_Hour\" class='hourbox' ><div class='selecttimetitle'>选择时间：</div></div>");
            if (!this.bInner) {
                t.append("<div class='selecttimeclose'><a onclick='$(\"#" + this.containerName + "\").addClass(\"hide\");' style='cursor:pointer;'>关闭</a></div>");
            }
            t.append("<div class='hourtitle'><span class=\"hourtitle\">小时 --</span></div>");

            var t1 = $("<div class='hourtitlebox'></div>");
            for (var k = 0; k < 24; k++) {
                t1.append("<span id=\"" + txtInput + "_HourD_" + (k < 10 ? "0" + k : k) + "\" class=\"hour\">" + (k < 10 ? "0" + k : k) + "</span>");
            }
            t.append(t1);

            var tT = $("<div id=\"" + txtInput + "_Time\" ><div class='mintitle'><span class=\"minutetitle\">分钟 --</span></div></div>");
            var t2 = $("<div class='mintitlebox'></div>");
            for (var k = 0; k < 59; k = k + 5) {
                t2.append("<span id=\"" + txtInput + "_MinuteD_" + (k < 10 ? "0" + k : k) + "\" class=\"minute\">" + (k < 10 ? "0" + k : k) + "</span>");
            }
            tT.append(t2);
            var p = $("#" + this.containerName);
            if ($("#" + this.containerName).length == 0)
                p = $("<div id=\"" + this.containerName + "\" class=\"selecttime\" style=\"position: absolute;left:"+left+"px;top:"+top+"px;\" ></div>").appendTo($("body")); ;
            p.append(t).append(tT);

        } else {
            $("#" + this.containerName).removeClass("hide");
        }

        $("span[id^='" + txtInput + "_HourD_']").removeClass("timeselected").click(function (e) {
            var id = this.id;
            RegExp.lastIndex = 0;

            if (/HourD_(\d+)/ig.test(id)) {
                var h1 = RegExp.$1;
                var v = $("#" + txtInput).val();
                if (/(\d+):(\d+)(:(\d+))?/ig.test(v)) {
                    v = h1 + ":" + RegExp.$2 + RegExp.$3;
                }
                $("#" + txtInput).val(v);
                $(".timeselected[id^='" + txtInput + "_HourD_']").removeClass("timeselected");
                $("#" + id).addClass("timeselected");

            }
        });
        $("span[id^='" + txtInput + "_MinuteD_']").removeClass("timeselected").click(function (e) {
            var id = this.id;
            RegExp.lastIndex = 0;
            if (/MinuteD_(\d+)/ig.test(id)) {
                var h1 = RegExp.$1;
                var v = $("#" + txtInput).val();
                if (/(\d+):(\d+)(:(\d+))?/ig.test(v)) {
                    v = RegExp.$1 + ":" + h1 + RegExp.$3;
                }
                $("#" + txtInput).val(v);
                $(".timeselected[id^='" + txtInput + "_MinuteD_']").removeClass("timeselected");
                $("#" + id).addClass("timeselected");
            }
        });

        var v = $("#" + txtInput).val();
        RegExp.lastIndex = 0;
        if (/(\d+):(\d+)(:(\d+))?/i.test(v)) {
            var h = RegExp.$1;
            var m = RegExp.$2;
            $("#" + txtInput + "_HourD_" + (h.length < 2 ? "0" + h : h)).addClass("timeselected");
            $("#" + txtInput + "_MinuteD_" + (m.length < 2 ? "0" + m : m)).addClass("timeselected");
        }
        if (!this.bInner) {
            var _self2 = this;
            var tr = $("#" + txtInput).offset();
            var left = tr.left - 10; /* +p.x;*/
            var top = tr.top + 25; /* +p.y;*/
            $("#" + _self2.containerName).css({
                "left": left + "px",
                "top": top + "px",
                "z-Index": "200001",
                "position": "absolute"
            }).mouseout(function (event) {
                if (isMouseLeaveOrEnter(event, this)) {

                    setTimeout(function () {
                        if (gTimeWindowActive > 0)
                            return;
                        $("#" + _self2.containerName).addClass("hide");
                    }, 1000);

                    gTimeWindowActive = 0;
                }
            }).mouseover(function (event) {
                gTimeWindowActive = 1;
            });
            
            setTimeout(function () {
                if (gTimeWindowActive > 0)
                    return;
                $("#" + _self2.containerName).addClass("hide");
            }, 1500);

            gTimeWindowActive = 0;
        }
    }
    this.setTime = function (t) {

    }
    if (!this.bInner) {
        var _self = this;
        $("#" + txtInput)/*.focus(function (e) {
            _self.buildTime();
        })*/.click(function (e) {
            _self.buildTime();
        }).blur(function (e) {
            RegExp.lastIndex = 0;
            if (/^(\d+):(\d+)(:(\d+))?/i.test($(this).val()) == false) {
                if (confirm("输入时间不合法，是否取消输入？")) {
                    $(this).val("09:00:00");
                }
            }
        });
    } else {
        this.buildTime();
    }
}
//#endregion

//#region HMoveControl 
function HMoveControl(containerID, headID, drag) {
    if (drag == undefined)
        drag = "true";
    var Drag_ID = document.getElementById(containerID),
	DragHead = document.getElementById(headID);
    var cw = document.documentElement.clientWidth,
	ch = document.documentElement.clientHeight,
	est = document.documentElement.scrollTop;
    var _version = $.browser.version;
    var moveX = 0,
	moveY = 0,
	moveTop,
	moveLeft = 0,
	moveable = false;
    if (_version == 6.0) {
        moveTop = est;
    } else {
        moveTop = 0;
    }

    var sw = Drag_ID.scrollWidth,
	sh = Drag_ID.scrollHeight;
    DragHead.onmouseover = function (e) {
        if (drag == "true" || drag == true) {
            DragHead.style.cursor = "move";
        } else {
            DragHead.style.cursor = "default";
        }
    };

    DragHead.onmousedown = function (e) {
        if (drag == "true" || drag == true) {
            moveable = true;
        } else {
            moveable = false;
        }
        e = window.event ? window.event : e;
        var ol = Drag_ID.offsetLeft,
		ot = Drag_ID.offsetTop - moveTop;
        moveX = e.clientX - ol;
        moveY = e.clientY - ot;
        document.onmousemove = function (e) {
            if (moveable) {
                e = window.event ? window.event : e;
                var x = e.clientX - moveX;
                var y = e.clientY - moveY;
                if (x > 0 && (x + sw < cw) && y > 0 && (y + sh < ch)) {
                    Drag_ID.style.left = x + "px";
                    Drag_ID.style.top = parseInt(y + moveTop) + "px";
                    Drag_ID.style.margin = "auto";
                }
            }
        }
        document.onmouseup = function () {
            moveable = false;
        };
        Drag_ID.onselectstart = function (e) {
            return false;
        };
    };

}
//#endregion
//#region gLoadJs
function gLoadJS(options, index) {
    if (!options)
        return;
    if (options.src) {
        $.getScript(options.src);
        //var s = document.createElement('script');
        //s.type = 'text/javascript';
        //s.src = options.src;
        //document.body.appendChild(s);
    } else if (options.length > 0) {
        var c = options.length;
        if (index == undefined) index = 0;
        if (index < options.length) {
            $.getScript(options[index].src, function () {
                gLoadJS(options, index + 1);
            });
            //var k = index;
            //        for (var k = 0; k < c; k++) {

            //var s = document.createElement('script');
            //s.type = 'text/javascript';
            //s.src = options[k].src;
            //s.charset = 'utf-8';
            //s.onload = function () {

            //}
            //s.onreadystatechange = function () {
            //    if (this.readyState == "loaded") {
            //        gLoadJS(options, index + 1);
            //    }
            //    //alert("t2");
                //fun_call();
            //}
            //document.body.appendChild(s);
        }
    }
}
/*
function _GetJsData(url, callback) {
    var scripts = document.createElement("script");
    document.body.appendChild(scripts);

    scripts.onload = function () {
        callback();
        document.body.removeChild(this);
    };
    scripts.onreadystatechange = function () {
        if (this.readyState == "loaded") {
            callback();
            document.body.removeChild(this);
        }
    };
    scripts.charset = "utf-8";
    scripts.src = url;
}*/
//#endregion
//#region gDataStatus
function gDataStatus(status) {
    if (status == -1)
        return "已删除";
    else if (status == 1)
        return "已经审核";
    else if (status == 0)
        return "编辑中";
    else
        return "未知状态";
}

//#endregion

//#region Json2String String2Json
/* Json => string */

function jsonToString(obj) {
    switch (typeof (obj)) {
        case 'string':
            return '"' + obj.replace(/(["\\])/g, '\\$1') + '"';
        case 'array':
            return '[' + obj.map(jsonToString).join(',') + ']';
        case 'object':
            if (obj instanceof Array) {
                var strArr = [];
                var len = obj.length;
                for (var i = 0; i < len; i++) {
                    strArr.push(jsonToString(obj[i]));
                }
                return '[' + strArr.join(',') + ']';
            } else if (obj == null) {
                return 'null';

            } else {
                var string = [];
                for (var property in obj)
                    string.push(jsonToString(property) + ':' + jsonToString(obj[property]));
                return '{' + string.join(',') + '}';
            }
            break;
        case 'number':
            return obj;
        case false:
        default:
            return obj;
    }
}
function stringToJSON(obj) {
    if (obj == null || obj == undefined)
        return undefined;
    else if (typeof (obj) == 'object')
        return obj;
    else if (typeof (obj) != 'string')
        return undefined;
    else {
        if ($.trim(obj).length == 0)
            return undefined;
        else {
            try {
                return eval('(' + obj + ')');
            } catch (e) {
                return undefined;
            }
        }
    }
}
//#endregion
//#region UrlEncode Decode
function UrlEncode(str) {
    return encodeURIComponent(str);
    var ret = "";
    var strSpecial = "!\"#$%&()*+,/:;<=>?[]^`{|}~%";
    var tt = "";
    for (var i = 0; i < str.length; i++) {
        var chr = str.charAt(i);
        var c = str2asc(chr);
        tt += chr + ":" + c + "n";
        if (parseInt("0x" + c) > 0x7f) {
            ret += "%" + c.slice(0, 2) + "%" + c.slice(-2);
        } else {
            if (chr == " ")
                ret += "+";
            else if (strSpecial.indexOf(chr) != -1)
                ret += "%" + c.toString(16);
            else
                ret += chr;
        }
    }
    return ret;
}
function UrlDecode(str) {
    return decodeURIComponent(str);
    var ret = "";
    for (var i = 0; i < str.length; i++) {
        var chr = str.charAt(i);
        if (chr == "+") {
            ret += " ";
        } else if (chr == "%") {
            var asc = str.substring(i + 1, i + 3);
            if (parseInt("0x" + asc) > 0x7f) {
                ret += asc2str(parseInt("0x" + asc + str.substring(i + 4, i + 6)));
                i += 5;
            } else {
                ret += asc2str(parseInt("0x" + asc));
                i += 2;
            }
        } else {
            ret += chr;
        }
    }
    return ret;
}
//#endregion

//#region jmodal
// JQuery 提示控件
/*   $.fn.jmodal({  
title: 'Information',  
content: 'Hi,you displayed me?',  
buttonText: 'Yes,It\'s me',  
okEvent: function(e) {  
alert('jmodal\'ll be closed after u click me:-)');  
} 
*/

$.extend($.fn, {
    jmodal: function (setting) {
        var ps = $.fn.extend({
            data: {
            },
            buttonText: 'OK',
            cancelBtn: "",
            okEvent: function (e) {
            },
            cancelEvent: function (e) { },
            middleEvent: function (e) { },
            initWidth: 400,
            title: '提示信息',
            content: 'This is a jquery plusin!',
            docWidth: $(document).width(),
            docHeight: $(document).height(),
            overlayCss: {
                'position': 'absolute',
                'left': '0',
                'top': '0',
                'background-color': '#7f7f7f',
                'opacity': '0',
                'z-index': '10001'
            },
            jmodalbgCss: {
                'z-index': '1001',
                'position': 'absolute',
                'background-color': '#555'
            },
            jmodalCss: {
                'z-index': '10002',
                'height': 'auto',
                'position': 'absolute',
                'opacity': '0'
            },
            closeCss: {
                'position': 'absolute',
                'right': '5px',
                'top': '5px',
                'width': '16px',
                'height': '16px',
                'font-weight': 'bold',
                'color': '#fff',
                'text-align': 'center',
                'line-height': '16px',
                'display': 'block',
                'text-decoration': 'none'
            },
            titleCss: {
                'height': '30px',
                'background-color': '#4682B4',
                'font-weight': 'bold',
                'text-indent': '10px',
                'color': '#fff',
                'line-height': '30px',
                'border-bottom': 'groove 2px #4682B4'
            },
            contentCss: {
                'height': 'auto',
                'background-color': '#F5FFFA',
                'padding': '20px 10px'
            },
            bottomCss: {
                'background-color': '#eee',
                'border-top': '1px solid #ccc',
                'padding': '5px',
                'text-align': 'right'
            },
            buttonCss: {
                'background-color': '#005EAC',
                'border-color': '#B8D4E8 #124680 #124680 #B8D4E8',
                'border-style': 'solid',
                'border-width': '1px',
                'color': '#FFFFFF',
                'cursor': 'pointer',
                'font-size': '12px',
                'padding': '2px 15px',
                'text-align': 'center',
                'margin-left': '5px',
                'font-family': 'Calibri'
            }
        }, setting);
        function hideModal() {
            $('#jmodal-overlay').animate({
                opacity: 0
            }, function () {
                $(this).css('display', 'none')
            });
            $('#jquery-jmodal-bg').animate({
                opacity: 0
            }, function () {
                $(this).css('display', 'none')
            });
            $('#jquery-jmodal').animate({
                opacity: 0
            }, function () {
                $(this).css('display', 'none')
            });
            gAlertWindow = null;
        }
        if ($('#jquery-jmodal').length > 0) {
            $('#jquery-jmodal').remove();
        }
        if ($('#jquery-jmodal').length == 0) {
            var html = [];
            html.push('<div id="jmodal-overlay" style="left:0px;top:0px;" />');
            html.push('<div id="jquery-jmodal-bg" style="left:0px;top:0px;" />');
            html.push('<div id="jquery-jmodal" style="left:0px;top:0px;">');
            html.push('<a href="javascript:void(0)" id="jquery-jmodal-close" title="关闭">X</a>');
            html.push('<div id="jmodal-container-title" />');
            html.push('<div  id="jmodal-container-content" />');
            html.push('<div id="jmodal-container-bottom">');
            html.push('<button id="jmodal-bottom-okbutton" ></button>');
            if (ps.cancelBtn && ps.cancelBtn.length > 0) {
                html.push('<button id="jmodal-bottom-cancelbutton" ></button>');
            }
            html.push('</div>');
            $(document.body).append(html.join("\r\n"));
        } else {
            $('#jmodal-overlay').css({
                opacity: 0,
                'display': 'block'
            });
            $('#jquery-jmodal-bg').css({
                opacity: 0,
                'display': 'block'
            });
            $('#jquery-jmodal').css({
                opacity: 0,
                'display': 'block'
            });
        }
        $('#jmodal-overlay').css(ps.overlayCss).css({
            width: ps.docWidth - 7,
            height: ps.docHeight - 7
        }).animate({
            opacity: 0.5
        });
        $('#jquery-jmodal').css(ps.jmodalCss).css({
            width: ps.initWidth,
            left: (ps.docWidth - ps.initWidth) / 2,
            top: (240 + document.documentElement.scrollTop + document.body.scrollTop)
        }).animate({
            opacity: 1
        }, function () {
            var me = this;
            $('#jquery-jmodal-bg').css(ps.jmodalbgCss).css({
                width: ps.initWidth + 20,
                left: (ps.docWidth - ps.initWidth) / 2 - 10,
                height: $(me).height() + 20,
                opacity: 0.5,
                top: (230 + document.documentElement.scrollTop + document.body.scrollTop)
            });
        });
        $('#jquery-jmodal-close').css(ps.closeCss).hover(function () {
            $(this).css({
                'background-color': '#F0FFF0',
                'color': '#000'
            });
        }, function () {
            $(this).css({
                'background-color': 'transparent',
                'color': '#fff'
            });
        }).one('click', function (e) {
            if (ps.cancelEvent) ps.cancelEvent(ps.data);
            hideModal();
        });
        //.mouseup();
        $('#jmodal-container-title')
			.css(ps.titleCss)
			.html(ps.title)
			.next()
			.css(ps.contentCss)
			.html(ps.content)
			.next()
			.css(ps.bottomCss)
			.children('#jmodal-bottom-okbutton')
			.text(ps.buttonText)
			.css(ps.buttonCss)
			.one('click', function (e) {
			    ps.okEvent(ps.data);
			    hideModal();
			});
        if (ps.cancelBtn && ps.cancelBtn.length > 0) {
            $('#jmodal-bottom-cancelbutton')
            .text(ps.cancelBtn)
            .css(ps.buttonCss)
            .one('click', function (e) {
                ps.cancelEvent(ps.data);
                hideModal();
            });
        }
        else {
            $('#jmodal-bottom-cancelbutton').addClass("hide");
        }
    }
});
//#endregion
//#region gAlert
function gAlert(title, msg, ticks, fun, cancelBtn) {
    if (title == '' || title == null)
        title = "提示窗口";

    var gAlertWindow = $.fn.jmodal({
        title: title,
        content: msg,
        buttonText: '确定',
        fixed: true,
        cancelBtn: cancelBtn,
        okEvent: function (e) {
            if (fun != null && fun != undefined)
                fun(e);
        }
    });

    if (ticks != undefined && ticks > 0) {
        if (gAlertWindow)
            setTimeout(function () {
                gAlertWindow.hideModal();
                if (fun != null && fun != undefined)
                    fun();
            }
            , ticks);
            else {
        /*
            setTimeout(function () {
                $('#jmodal-overlay').animate({
                    opacity: 0
                }, function () {
                    $(this).css('display', 'none')
                });
                $('#jquery-jmodal-bg').animate({
                    opacity: 0
                }, function () {
                    $(this).css('display', 'none')
                });
                $('#jquery-jmodal').animate({
                    opacity: 0
                }, function () {
                    $(this).css('display', 'none')
                });
                if (fun != null && fun != undefined)
                    fun();
            }, ticks);*/
        }

    }
}

//#endregion
//#region gfUploadImg
//fun_do(objectid,objecttype,type,imgurl,fullpath);
///************************************************************/
///* Bind Upload button                                       */
///* divName 按钮容器                                         */
///* imgdesc 文件描述                                         */
///* imgtype 文件类型，如Logo,Cover等，将对应存储的位置       */
///* objectid                                                 */
///* objecttype                                               */
///* targetimgid 上传成功后，需要显示的位置                   */
///************************************************************/
var gfUploadImg = function (options, fun_do) {
    if (window.ImgService == undefined)
        window.ImgService = window.ROOT + 'Service.asmx/AjaxUpload';
    var defaultParas = {
        "divname": "uploadimgdiv",
        "desc": "景点封面",
        "type": "cover",
        "objectid": "0",
        "objecttype": "1",
        "thnmatedesc": "28X28,70X70,35X35,64X64,133X133,155X155,150X182,155X0,170X170,190X0,0X100,300X300,520X0,60X60-5,88X88-5,129X100-5",
        "iscutgif": "0",
        "cutmode": 0,
        "uploadurl": window.ImgService,
        "imgid": "",
        "width": 300,
        "height": 300,
        "sizelimit": "8192 KB",
        'watermarker': 0,
        'x': 0,
        'y': 0,
        'autoclose': false
    };

    var paras = {};
    if (options != null && options != undefined) {
        jQuery.extend(paras, defaultParas, options);
    } else
        paras = defaultParas;

    var divname = '#' + paras.divname;
    //#region BuildHmtl
    if ($(divname).length > 0) {
        $(divname).removeClass('hide');
        $("#uploadimgsample").attr("src", "");
    } else {
        var html1 = [];
        var hindex = 0;

        html1.push('<DIV id="' + paras.divname + '">');
        html1.push('    <DIV id="uploadpad">');
        html1.push('        <DIV style="WIDTH: 265px;min-height:40px;height:auto; DISPLAY: block; FLOAT: left;" id=fsUploadProgress1121 class="fieldset flash"></DIV>');
        html1.push('        <DIV style="PADDING-LEFT: 5px; WIDTH: 160px; FLOAT: right; PADDING-TOP: 15px">');
        html1.push('            <span id="uploaddiv_over"></span>');
        html1.push('            <INPUT style="HEIGHT: 22px; MARGIN-LEFT: 2px; FONT-SIZE: 8pt" id=btnCancel1 disabled onclick=cancelQueue(upload); value=取消上传 type=button ></input>');
        html1.push('        </DIV>');
        html1.push('        <DIV class=float_bottom></div>');
        html1.push('    </div>');
        html1.push('    <DIV style="MIN-HEIGHT: 280px; WIDTH: 302px; FLOAT: left; HEIGHT: auto">');
        html1.push('         <IMG id=uploadimgsample src="' + gfImgScale(window.SkinPath + 'images/blankimage.100X100.jpg', 100, 100) + '" style="width:300px;height:300px;">');
        html1.push('    </DIV>');
        html1.push('    <DIV class=user-tx-box>请在上传完成后，点击确定完成上传工作.<BR><A style="MARGIN-TOP: 40px" id=uploadimgok disabled href="#">保存</A> <A id=uploadimgclose href="#" >取消</A> ');
        html1.push('          <DIV style="WIDTH: 0px; DISPLAY: none; FLOAT: left" id=uploadimagelist><INPUT id=uploadsrclist type=hidden><input id="uploadimgsrc" type="hidden"></DIV>');
        html1.push('    </DIV>');
        html1.push('</DIV>');


        $('body').append(html1.join(""));
    }
    //#endregion
    $("#uploadimgclose").unbind("click").click(function (e) {
        $(divname).addClass('hide');
    });
    //#region OK ClickEvent
    $("#uploadimgok").unbind("click").click(function (e) {
        var src = $("#uploadimgsrc").val();
        var full = $("#uploadimgsample").attr("src");
        var wh = $("#uploadimgwh").val();
        if (src && src.length > 0) {
            if (fun_do) fun_do(paras.objectid, paras.objecttype, paras.type, src, full, [], wh);
            $(divname).addClass('hide');
        }
        else {
            alert("没有可以选择的图片。");
        }
        //panel.remove();
        return false;
    });
    //#endregion

    if (paras.imgid != undefined && paras.imgid != '') {
        var imgsrc = $("#" + paras.imgid).attr("src");
        if (imgsrc == undefined || imgsrc == null)
            $("#uploadimgsample").attr("src", '');
        else
            $("#uploadimgsample").attr("src", imgsrc);
    };
    //#region addnewpiclist
    function addnewpiclist(json) {
        if (json == undefined || json == null) return;
        var v = $("#uploadsrclist").val();
        var imgs = [];
        if (v == null || v == "") imgs = [];
        else {
            try {
                imgs = stringToJSON(v);
            }
            catch (e) {
                imgs = [];
            }
        }
        var wh = json.wh;
        var width = 0;
        var height = 0;
        if (wh) {
            if (/(\d+)(X|\*)(\d+)/i.test(wh)) {
                width = parseInt(RegExp.$1);
                height = parseInt(RegExp.$3);
            }
        }
        imgs.push({ Url: json.src, Width: width, Height: height });
        $("#uploadsrclist").val(jsonToString(imgs));
    };
    //#endregion
    //#region addpicshow
    function addpicshow(json) {
        var html = [];
        var index = 0;
        var fullpath = "";
        if (/^\//i.test(json.src)) {
            fullpath = window.ROOT + json.src.substring(0, json.src.length - 1);
        }
        else {
            fullpath = window.UploadFilePath + json.src;
        }
        html[index++] = '<img src="' + gfImgScale(fullpath, 35, 35) + '" rel="" />';
        var t = $(html.join("")).appendTo("#uploadimagelist");
    };
    //#endregion
    //#region _upload_success_handler
    function _upload_success_handler(file, serverData, progress) {

        var res = eval('(' + serverData + ')');
        if (res.s <= 0) {
            if (res.msg == '' || res.msg == undefined)
                res.msg = "上传文件失败！";
            if (gAlert) {
                gAlert('错误信息', res.msg);
            }
            else
                alert(res.msg);
            return;
        } else {
            var fullpath = "";
            RegExp.lastIndex = 0;
            for (var k = 0; k < res.pics.length; k++) {
                var resItem = res.pics[k];
                if (/^\//i.test(paras.type)) {
                    //RegExp.lastIndex = 0;
                    //fullpath = paras.type + '/' + resItem.src;
                    fullpath = resItem.src;
                } else {
                    fullpath = window.UploadFilePath + resItem.src;
                    //fullpath = window.UploadFilePath + paras.type + '/' + resItem.src;
                }
                var f = fullpath;
                var r = new RegExp("^" + window.ROOT | "^http://", "i");
                RegExp.lastIndex = 0;
                if (r.test(fullpath) == false) {
                    RegExp.lastIndex = 0;
                    if (/^\//i.test(fullpath)) {
                        fullpath = fullpath.substring(1, fullpath.length);
                    }
                    f = window.ROOT + fullpath;
                }
                resItem.fullpath = f;
                resItem.fullsrc = resItem.src;
            }
            $("#uploadimgsample").attr("src", gfImgScale(res.pics[0].fullpath, 155, 155)); //.css({ width: "155px", height: "155px;" });
            $("#uploadimgsrc").val(res.pics[0].fullsrc);
            $("#uploadimgwh").val(res.pics[0].wh);
            addnewpiclist(res.pics[0]);
            //addpicshow(res.pics[0]);
            $("#uploadimgok").removeAttr('disabled');
            //为了适应原来的接口，被迫加了此参数功能，最有效的是最后一个参数。
            fun_do(paras.objectid, paras.objecttype, paras.type, res.pics[0].fullsrc, res.pics[0].fullpath, res.pics, res.pics[0].wh);

            if (progress) disappear.disappear(); //不能移到前面，否则数据会被Release
            if (paras.autoclose)
                $(divname).addClass("hide");
        }

    };
    //#endregion
    centerDiv(divname, undefined, undefined, undefined, 10000);
    //#region Create UploadControl
    try {
        var upload = new SWFUpload({
            upload_url: paras.uploadurl + '?cut=' + paras.iscut, //&w=170&h=170
            post_params: {
                act: paras.type,
                W: paras.width,
                H: paras.height,
                T: paras.thnmatedesc,
                WM: paras.watermarker,
                MODE: paras.cutmode,
                CUTGIF: paras.iscutgif,
                X: paras.x,
                Y: paras.y
            },
            custom_settings: {
                progressTarget: "fsUploadProgress1121",
                cancelButtonId: "btnCancel1",
                success_call: _upload_success_handler
            },
            file_size_limit: paras.sizelimit,
            file_types: '*.jpg;*.gif;*.png;*.jpeg;*.doc;*.rar;',
            file_types_description: paras.desc,
            flash_url: window.ROOT + "js/swfupload/swfupload.swf",
            file_upload_limit: 100, //上传文件限制 
            button_placeholder_id: "uploaddiv_over",
            button_image_url: window.ROOT + "js/swfupload/upload.png",
            button_width: 100,
            button_height: 22,
            button_action: -110,
            upload_start_handler: uploadStart,
            upload_complete_handler: uploadComplete,
            file_queued_handler: fileQueued,
            file_dialog_complete_handler: function (numFilesSelected, numFilesQueued) {
                if (numFilesQueued > 0) {
                    this.startUpload();
                }
                $("#_uploadcount").text("(" + numFilesQueued + "/" + numFilesSelected + ")");
            },
            file_queue_error_handler: function (file, errorCode, message) {
                switch (errorCode) {
                    case -110:
                        alert('文件不能大于' + paras.sizelimit);
                        break;
                    default:
                        if (gAlert) {
                            gAlert('错误信息', errorMsg);
                        }
                        else
                            alert(errorMsg);
                        break
                }
            },
            upload_success_handler: uploadSuccess,
            upload_progress_handler: uploadProgress

        });
    } catch (ex) {
        //alert(ex);
    }
    //#endregion

};

            
//#endregion

//#region // 数字处理函数
//补零函数
function roize(val) {

    return formatnumber(val, 2);
    /*
    var str = "";
    if (val != "" && val != "undefined") {
    var val = val.toString();
    if (val.lastIndexOf(".") == -1) {
    str = ".";
    for (var i = val.lastIndexOf("."); i < 1; i++) {
    str += "0";
    }
    }
    }
    return (val + str);
    */
}
//新补零函数
function formatnumber(value, num) {
    var a, b, c, i;
    a = value.toString();
    b = a.indexOf(".");
    c = a.length;
    if (num == 0) {
        if (b != -1) {
            a = a.substring(0, b);
        }
    } else {
        if (b == -1) {
            a = a + ".";
            for (i = 1; i <= num; i++) {
                a = a + "0";
            }
        } else {
            a = a.substring(0, b + num + 1);
            for (i = c; i <= b + num; i++) {
                a = a + "0";
            }
        }
    }
    return a;
}
//对数字进行四舍五入计算
function round(num, n) {
    var dd = 1;
    var tempnum;
    for (i = 0; i < n; i++) {
        dd *= 10;
    }
    tempnum = num * dd;
    tempnum = Math.round(tempnum);
    return formatnumber(tempnum / dd, n);
}
//#endregion

//#region // 状态提示

function HideClue() {
    $("#overLay").remove();
    $.powerFloat.hide();
}

function ShowClue(msg) {

    $("<span id=\"targetFixed\" class=\"target_fixed\"></span>").appendTo("body");

    if (!window.XMLHttpRequest) {
        $("#targetFixed").css("top", $(document).scrollTop() + 2);
    }

    if (!$("#overLay").size()) {
        $('<div id="overLay"></div>').prependTo($("body"));
    }

    $("#targetFixed").powerFloat({
        eventType: null,
        targetMode: "doing",
        target: "正在" + msg + "中...",
        position: "1-2"
    });

    //    setTimeout(function () {
    //        if ($("#overLay").length > 0) {
    //            //if (!confirm("继续等待么？")) {
    //                $("#overLay").remove();
    //                $.powerFloat.hide();
    //            //}
    //        }
    //    }, 10000);

}
//#endregion

//#region 用 Javascript 实现锚点(Anchor)间平滑跳转 
/*用法：scroller('header_5', 800);*/
function intval(v) { v = parseInt(v); return isNaN(v) ? 0 : v; }
/* 获取元素信息*/
function getAnchorPos(e) {
    var l = 0; var t = 0; 
    var w = intval(e.style.width);
    var h = intval(e.style.height); 
    var wb = e.offsetWidth; 
    var hb = e.offsetHeight;
    while (e.offsetParent) {
        l += e.offsetLeft + (e.currentStyle ? intval(e.currentStyle.borderLeftWidth) : 0);
        t += e.offsetTop + (e.currentStyle ? intval(e.currentStyle.borderTopWidth) : 0); 
        e = e.offsetParent;
    }
    l += e.offsetLeft + (e.currentStyle ? intval(e.currentStyle.borderLeftWidth) : 0); 
    t += e.offsetTop + (e.currentStyle ? intval(e.currentStyle.borderTopWidth) : 0);
    return { x: l, y: t, w: w, h: h, wb: wb, hb: hb };
}
/* 获取滚动条信息 */
function getAnchorScroll() {
    var t, l, w, h;
    if (document.documentElement && document.documentElement.scrollTop) {
        t = document.documentElement.scrollTop; 
        l = document.documentElement.scrollLeft;
        w = document.documentElement.scrollWidth; 
        h = document.documentElement.scrollHeight;
    } else if (document.body) {
        t = document.body.scrollTop; 
        l = document.body.scrollLeft;
        w = document.body.scrollWidth; 
        h = document.body.scrollHeight;
    } return { t: t, l: l, w: w, h: h };
}
/* 锚点(Anchor)间平滑跳转*/
function scroller(el, duration) {
    if (typeof el != 'object') { el = document.getElementById(el); }
    if (!el) return; var z = this;
    z.el = el; z.p = getAnchorPos(el);
    z.s = getAnchorScroll();
    z.clear = function () { window.clearInterval(z.timer); z.timer = null }; 
    z.t = (new Date).getTime();
    z.step = function () {
        var t = (new Date).getTime(); var p = (t - z.t) / duration;
        if (t >= duration + z.t) { z.clear();/* window.setTimeout(function () { z.scroll(z.p.y, z.p.x) }, 13);*/ }
        else {
            st = ((-Math.cos(p * Math.PI) / 2) + 0.5) * (z.p.y - z.s.t) + z.s.t; sl = ((-Math.cos(p * Math.PI) / 2) + 0.5) * (z.p.x - z.s.l) + z.s.l;
            z.scroll(st, sl);
        }
    }; z.scroll = function (t, l) { window.scrollTo(l, t) }; z.timer = window.setInterval(function () { z.step(); }, 13);
}
//#endregion

//#region splashDiv
function splashDiv(divid) {
    $(divid).addClass("hishow");
    setTimeout(function (e) {
        $(divid).removeClass("hishow");
    }, 500);
}
//#endregion


//#region SelectRegion
function HRegionS(fun_call) {
    var html = [];
    var ai = 0;
    html[ai++] = '<div style="" class="ju-popup-wrapper">';
    html[ai++] = '   <div class="ju-popup-mask"></div>';
    html[ai++] = '   <div class="ju-popup pop-city" style="width: 598px; opacity: 1; ">';
    html[ai++] = '       <div class="hd"><h3>选择城市</h3></div>';
    html[ai++] = '       <div class="bd">        <div class="city-choose">            <span class="label">选择所在的城市</span>            <span>首字母查询: </span> ';
    html[ai++] = '           <ul class="city-initials"><li><a href="#">全部</a></li>';
    for (var i = 65; i < 91; i++) {
        html[ai++] = '<li><a href="#">' + String.fromCharCode(i) + '</a></li>';
    }
    html[ai++] = '</ul>        </div> ';
    html[ai++] = '<ul class="pop-city-cont clearfix">        	<li data-initial="Q"><a href="http://ju.taobao.com/tg/home.htm">全国</a></li>';
    html[ai++] = '<li data-initial="S" n-data="10"><a href="http://ju.taobao.com/suzhou">苏州</a></li> ';
    html[ai++] = '</ul>   </div>';
    html[ai++] = '<div class="ft"><div class="buttons" style="display: none; "></div><a href="#" title="关闭此窗口" class="btn-close">×</a></div></div></div>';

    var h = new Boxy(html.join(''),
    { title: "", center: true, modal: false, closeable: true, fixed: false, show: true,
        unloadOnHide: true, draggable: true
    }
    );
    $(".btn-close").click(function (e) {
        h.hide();
    });
    $(".city-initials > li").unbind("click").bind("click", function (e) {
        var c = $(this).text();
        $(".pop-city-cont > li").addClass("hide");
        $(".pop-city-cont > li[data-initial='" + c + "']").removeClass("hide");
    });
    $(".pop-city-cont > li").unbind("click").bind('click', function (e) {
        var r = $(this).attr("n-data");
        var rn = $(this).find("a").text();
        fun_call(r, rn);
        h.hide();
    });
}
//#endregion
//#region scrollPager
function scrollPager(option) {
    var settings = { name: "pager", timer: "500ms", posFix: 10, itemSelector: '.feed', pageSize: 10, navSelector: '#page-nav', currPageNum: 0, callfun: undefined, isDone: false, isStop: false };
    settings = $.extend(settings, option || {});
    var pageTop = function () {
        return document.documentElement.clientHeight + Math.max(document.documentElement.scrollTop, document.body.scrollTop) - settings.posFix;
    };
    var _nearbottom = function () {
        var pixelsFromWindowBottomToBottom = 0 + $(document).height() - ($(window).scrollTop()) - $(window).height();
        var pixelsFromNavToBottom = $(document).height() - $(settings.navSelector).offset().top;
        // if distance remaining in the scroll (including buffer) is less than the orignal nav to bottom....
        var ret = (pixelsFromWindowBottomToBottom - settings.posFix < pixelsFromNavToBottom);
        if (!ret) {
            settings.isDone = false;
        }
        return ret;
    }
    $(settings.navSelector).stopTime(settings.name);
    if (settings.isStop) return;
    $(settings.navSelector).everyTime(settings.timer, settings.name, function () { //这里的everyTime 定义了一个定时器，每隔500m秒执行一次。
        if (!_nearbottom()) return;
        if (settings.isDone) return;
        settings.currPageNum++;
        if (settings.callfun) {
            settings.isDone = true;
            settings.callfun(settings.currPageNum, function () {
                if (settings.itemSelector) {
                    if ($(settings.itemSelector).length < settings.pageSize * settings.currPageNum) { //已经到最后一页了
                        $(settings.navSelector).stopTime(settings.name);
                    }
                }
            });
        }
    });
}
//#endregion

//#region 输入邮箱时的自动提示配置 zwg添加
var availableTags = [
			"@gmail.com",
            "@163.com",
            "@qq.com",
			"@sina.com",
			"@126.com",
            "@hotmail.com",
			"@yahoo.com",
            "@263.com"
		];
//#endregion

//#regiion 给数组添加 indexOf 方法
//[ ].indexOf || (Array.prototype.indexOf = function (v) {
//    for (var i = this.length; i-- && this[i] !== v; );
//    return i;
//});
//#endregion


//#region  获取地址栏参数
function gfUrlPara(paraName) {
    var sUrl = location.href;
    var sReg = "(?:\\?|&){1}" + paraName + "=([^&]*)"
    var re = new RegExp(sReg, "gi");
    re.exec(sUrl);
    return RegExp.$1;
}
//#endregion
//#region 图片批量上传
jQuery.ImgBathUpload = function (options) {
    var _h = [];
    _h.push('<div class="fieldset flash" id="fsUploadProgress1">');
    _h.push('    <span class="legend">多图片上传</span>');
    _h.push('</div>');
    _h.push('<div style="padding-left: 5px;">');
    _h.push('    <span id="spanButtonPlaceholder1"></span>');
    _h.push('    <input id="btnCancel1" type="button" value="取消上传" onclick="cancelQueue(upload1);" disabled="disabled" style="margin-left: 2px; height: 22px; font-size: 8pt;" />');
    _h.push('    <br />');
    _h.push('</div>');
    $("#" + options.setobj).html(_h.join(""));

    if (window.ImgService == undefined)
        window.ImgService = '/Service.asmx/AjaxUpload';

    var paras = {};
    paras.type = options.type;
    paras.desc = options.desc;
    paras.iscut = options.iscut;
    paras.thnmatedesc = options.thnmatedesc;
    paras.MODE = options.MODE;
    paras.sizelimit = options.sizelimit;
    paras.width = options.width;
    paras.height = options.height;
    paras.file_upload_limit = options.file_upload_limit;

    var _success_call = upload_sc;

    var upload1 = new SWFUpload({
        upload_url: window.ImgService,
        post_params: {
            act: paras.type,
            W: paras.width,
            H: paras.height,
            T: paras.thnmatedesc
        },

        // File Upload Settings
        file_size_limit: "2400", // 100MB
        file_types: "*.*",
        file_types_description: "All Files",
        file_upload_limit: paras.file_upload_limit || 20,
        file_queue_limit: "0",

        // Event Handler Settings (all my handlers are in the Handler.js file)
        file_dialog_start_handler: fileDialogStart,
        file_queued_handler: fileQueued,
        file_queue_error_handler: fileQueueError,
        file_dialog_complete_handler: fileDialogComplete,
        upload_start_handler: uploadStart,
        upload_progress_handler: uploadProgress,
        upload_error_handler: uploadError,
        upload_success_handler: uploadSuccess,
        upload_complete_handler: uploadComplete,

        // Button Settings
        button_image_url: window.JsPath + "swfupload/xpbuttonuploadtext_61x22.png",
        button_placeholder_id: "spanButtonPlaceholder1",
        button_width: 61,
        button_height: 22,

        // Flash Settings
        flash_url: window.JsPath + "swfupload/swfupload.swf",

        custom_settings: {
            progressTarget: "fsUploadProgress1",
            cancelButtonId: "btnCancel1",
            success_call: _success_call
        },

        // Debug Settings
        debug: false
    });

};
//#endregion

//#region gfTrafficIcon
function gfTrafficIcon(tf, cn, mapurl,isbig) {
    var ret = '';
    if (isbig == undefined || isbig == null) isbig = true;
    switch (tf) {
        case 1:
            ret = window.SkinPath + (isbig ? 'images/fj1.jpg' : 'images/fj2.jpg');
            break;
        case 2:
            if (cn && cn.length >= 0) {
                cn = cn.toLowerCase();
                if (cn.indexOf("d") >= 0 || cn.indexOf("g") >= 0) {
                    ret = window.SkinPath + (isbig ? 'images/hc1.jpg' : 'images/hc2.jpg');
                }
                else {
                    ret = window.SkinPath + (isbig ? 'images/hc1.jpg' : 'images/hc2.jpg');
                }
            }
            else {
                ret = window.SkinPath + (isbig ? 'images/hc1.jpg' : 'images/hc2.jpg');
            }
            break;
        case 3:
        case 4:
            if (mapurl && mapurl.length > 0)
                ret = mapurl;
            else
                ret = window.SkinPath + 'images/c1.jpg';
            break;
        case 6: //步行
            if (mapurl && mapurl.length > 0)
                ret = mapurl;
            else
                ret = window.SkinPath + (isbig ? 'images/bx.jpg' : 'images/bx2.jpg');
            break;
        default:
            if (mapurl && mapurl.length > 0)
                ret = mapurl;
            else
                ret = window.SkinPath + 'images/c1.jpg';
            break;
    }
    return ret;
}
//#endregion
