﻿/// <reference path="jqueryframe/jquery-1.2.3-intellisense.js" />
//// JScript 文件
//// Author:e玄峰
//// Web:http://www.ininnet.com
//// QQ:4513427
//// Update:2008-5-21

/*
使用方法：
var Popup = new JsPopup("Popup");
Popup.SetValues("登录成功",300,120,"内容",null,null,false,false,true);
Popup.ShowConfirm("进 入","User_LoginOk()","center","button");
Popup.Show();
*/

//移动图层
var currentMoveObj = null;    //当前拖动对象
var JsPopup_isDown = false;//鼠标是否按下去
var relLeft;    //鼠标按下位置相对对象位置
var relTop;
function f_mdown(e,event)
{
    if(JsPopup_isMax == true)return;
    var x = 0,y = 0;
    if(event != null)
    {
        var o = GetMousePoint(event);
        x = o.x;
        y = o.y;
        currentMoveObj = $(e);
    }else{
        x = e.clientX;
        y = e.clientY;
        if(GetSrcElement(arguments[0]).tagName == "DIV")
            currentMoveObj = $(GetSrcElement(arguments[0])).parent();
        else
        {
            if($.browser.msie)
                currentMoveObj = $(GetSrcElement(arguments[0])).parent().parent();
            else
                currentMoveObj = $(GetSrcElement(arguments[0])).parent().parent().parent();
        }
    }
    var offset = currentMoveObj.offset();
    relLeft = x - offset.left;
    relTop = y - offset.top;
    JsPopup_isDown = true;
    $(document).mousemove(f_move);
    return false;
}

$(function(){
    $().mouseup
    (
        function(e)
        {
            if(JsPopup_isDown)
            {
//                var offset = currentMoveObj.offset();
//                var l = offset.left;
//                var t = offset.top;
//                var w = currentMoveObj.width();
//                var h = currentMoveObj.height();
//                var sw = $(document).width();
//                var sh = $(document).height();
//                if(l > sw - 200)
//                    currentMoveObj.css("left",sw - 200);
//                else if(l < -200)
//                    currentMoveObj.css("left",-200);
//                if(t >sh-100)
//                    currentMoveObj.css("top",sh - 100 + document.documentElement.scrollTop);
//                else if(t <= 10)
//                    currentMoveObj.css("top",document.documentElement.scrollTop)
                JsPopup_isDown = false;
                $(document).unbind("mousemove",f_move);
            }
        }
    )
})
function f_move(e)
{
    if(JsPopup_isDown)
    {
        currentMoveObj.css("left",e.pageX - relLeft - document.documentElement.scrollLeft);
        currentMoveObj.css("top",e.pageY - relTop - document.documentElement.scrollTop);
    }
}
//控制滚动条
var BodyScrool=
{
    style:null,
    Reset:function()
    {
        $(document.body).css("overflow",BodyScrool.style)
    },
    Hide:function()
    {
        BodyScrool.style = $(document.body).css("overflow");
        $(document.body).css("overflow","hidden");
    }
}

window.JsPopup_Count = 0;
function JsPopup(id){
/// <summary>JsPOP控件</summary>
/// <param name="id">控件ID</param>
    try{
        var obj = eval(id);
        obj.IsShowConfirm = false;
        return obj;
    }catch(e)
    {    
        eval("window." + id +"=this");
        var _tempObj = this;
        this.IsShowConfirm = false;
        this.IsShow = false;
        this.ID = id;        
        this.Title = "系统设置";
        this.Width = 300;
        this.Height = null;
        this.Content = "";
        this.ContentUrl = "";
        this.FooterText = "";
        this.IsShowCloseButton = false;
        this.IsShowFooter = false;
        this.IsAnimation = true;
       // this.ExeCode = null;
        
        //背景层
        this.DivPop_BG = $("<div>")
            .addClass("DivPop_BG")
            .attr("id","JsPopup_" + id)
            .css
            (
                {"position":"absolute","display":"none","overflow":"hidden","left":0,"top":0,"z-index":"9000"}
            )
            .css("width",$(document).width())
            .css("height",$(document).height())
            .bind("dragstart",function(){return false;})
            .bind("contextmenu",function(){return _tempObj.IsShowCloseButton;})
            .keydown
            (
                function(event)
                {
                    if(event.keyCode==27)
                    {
                        if(_tempObj.IsShowCloseButton == true)
                            _tempObj.Hide();
                    }
                }
            );
        this.DivPop_BG.appendTo(document.body);
        //Pop层
        this.DivPop_Body = $("<div>")
            .addClass("DivPop_Body")
            .css
            (
                {"position":"absolute","zIndex":1,"width":this.Width}
            )
        this.DivPop_Body.appendTo(this.DivPop_BG);
        //标题
        this.DivPop_Title = $("<div>")
            .addClass("DivPop_Title")
            .attr("name","DivPop_Title")
            .mousedown(f_mdown)
            .bind("dblclick",{obj:_tempObj},_tempObj.SizeChange)
            .bind("selectstart",function(){return false;})
            .css
            (
                {"height":"20px","overflow":"hidden"}
            )

         this.DivPop_Title.appendTo(this.DivPop_Body);
         //内容
         this.DivPop_Content = $("<div>")
            .css
            (
                {"margin":"5px","overflow":"auto"}
            )
         this.DivPop_Content.appendTo(this.DivPop_Body);
         //页脚
         this.DivPop_Footer = $("<div>")
            .addClass("DivPop_Footer")
            .bind("selectstart",function(){return false;})
            .css
            (
                {"padding":"3px","overflow":"hidden","height":"14px","white-space":"nowrap","text-overflow":"ellipsis"}
            )
         this.DivPop_Footer.appendTo(this.DivPop_Body);  
    } 
}
JsPopup.prototype.ExeCode = null;
JsPopup.prototype.SetValues = function(_title,_w,_h,_content,_url,_footertext,_isclose,_isfooter,_isAni){
/// <summary>Pop控件参数</summary>
/// <param name="_title">标题</param>
/// <param name="_w">宽度</param>
/// <param name="_h">高度</param>
/// <param name="_content">内容</param>
/// <param name="_url">使用URL内容</param>
/// <param name="_footertext">页脚文本</param>
/// <param name="_isclose">是否启用关闭按钮</param>
/// <param name="_isfooter">是否显示页脚</param>
/// <param name="_isAni">是否启用动画过程</param>
    this.Title = _title == null ? "系统设置" : _title;
    this.Width = _w == null ? 300 : _w;
    this.Height = _h;
    this.Content = _content;
    this.ContentUrl = _url;
    this.FooterText = _footertext;
    this.IsShowCloseButton = _isclose == null ? true :_isclose;
    this.IsShowFooter = _isfooter == null ? false : _isfooter;
    this.IsAnimation = _isAni == null ? true : _isAni;
}
JsPopup.prototype.ShowCloseButton = function(v){
/// <summary>是否显示关闭按钮</summary>
/// <param name="v">True显示 Flase关闭</param>
    this.IsShowCloseButton = v;
    document.getElementById(this.ID + "_CloseButton").style.display = (v == true) ? "" : "none";
}
JsPopup.prototype.SetWidth = function(v){
/// <summary>设置POP宽度</summary>
/// <param name="v">宽度值</param>
    if(v == null || v.length == 0)return;
    this.DivPop_Body.css("width",v);
    this.Width = v;
}
JsPopup.prototype.SetHeight = function(v){
/// <summary>设置POP高度</summary>
/// <param name="v">高度值</param>
    if(v == null || v.length == 0)return;
    this.DivPop_Content.css("height",v);
    if(v != this.Height)
        this.Height = v;
}
JsPopup.prototype.SetHeaderText = function(v){
/// <summary>设置POP标题</summary>
/// <param name="v">标题名称</param>
    var _str = "<span style='float:left;'>" + v + "</span>";
    _str += "<div id='" + this.ID + "_CloseButton' style='float:right;cursor:pointer;font-size:14px;font-weight:bold;display:" +(this.IsShowCloseButton == true ? "" :"none")+ ";' onclick='"+this.ID+".Hide()'>X</div>";
    this.DivPop_Title.children().remove();
    this.DivPop_Title.append(_str);
}
JsPopup.prototype.SetFooterText = function(v,sec){
/// <summary>设置页脚显示的内容</summary>
/// <param name="v">要显示的信息</param>
/// <param name="sec">关闭显示时间</param>
    if(v != null)
        this.DivPop_Footer.text(v);
    this.FooterText = v;
    if(sec != null)
    {
        var _tempOjb = this;
        setTimeout(function()
            {
                _tempOjb.SetFooterText("");
            },sec
        );
    }
}
JsPopup.prototype.ShowFooter = function(v){
/// <summary>设置页脚显示的内容</summary>
/// <param name="v">Url地址</param>
    this.DivPop_Footer.css("display",v == true ? "" : "none");
    this.IsShowFooter = v;
}
JsPopup.prototype.SetContent = function(v){
/// <summary>设置内容</summary>
/// <param name="v">内容</param>
    if(v != null)
    {
        if(typeof(v) == "object")
        {
            var dom = this.DivPop_Content.dom();
            dom.appendChild(v.dom(),dom);
            v.show();
        }else{
            if(v.length == 0)v="&nbsp;"
            this.DivPop_Content.html(v);
            this.ContentUrl = null;
        }
    }
    this.Content = v;
}
JsPopup.prototype.SetContentUrl = function(v){
/// <summary>设置内容连接的URL</summary>
/// <param name="v">Url地址</param>
    if(v != null)
    {
        this.DivPop_Content.children().remove();
        var divLogin = $("<div>")
            .attr("id",this.ID + "_divLogin")
            .html("<B>正在加载...</B>")
            .css
            (
                {"padding":"10px 20px 10px 20px","color":"red","border":"1px solid red","fontSize":"14px","position":"absolute","backgroundColor":"#FFFFFF","zIndex":2}
            )
        this.DivPop_Content.append(divLogin);
        divLogin.css("left",this.Width/2 - 60);
        divLogin.css("top",this.Height/2);
        var _tempObj = this;
        var IFRAME = $("<iframe frameBorder='0' scrolling='auto' style='width:100%;height:100%'></iframe>");
        this.DivPop_Content.append(IFRAME);
        var t = setTimeout(function()
        {
            IFRAME.attr("src",v + (v.indexOf("?") == -1 ? "?":"&") + "time=" + Math.random());
            IFRAME.load(function(){divLogin.remove();});
            clearTimeout(t);
        },400);
    }
    this.ContentUrl = v;
}
JsPopup.prototype.UnLoad = function(code){
/// <summary>窗体关闭执行的事件</summary>
/// <param name="code">要执行的事件</param>
    this.UnLoadCode = code;
}
JsPopup.prototype.ShowAnimation = function(v){
/// <summary>是否启用动画关闭</summary>
/// <param name="v">True启用 Flase关闭</param>
    this.IsAnimation = v;
}

JsPopup.prototype.Show = function(){
/// <summary>显示POP值</summary>
    this.SetHeaderText(this.Title);
    this.SetWidth(this.Width);
    this.SetHeight(this.Height);
    this.SetFooterText(this.FooterText);
    this.ShowCloseButton(this.IsShowCloseButton);
    this.ShowFooter(this.IsShowFooter);
    
    if(this.IsShowConfirm != true)
    {
        this.SetContent(this.Content);
        this.SetContentUrl(this.ContentUrl);
    }
    if(this.IsAnimation == true)
        this.DivPop_BG.fadeIn(300);
    else    
        this.DivPop_BG.show();
    this.ReLocation();
    var offset = this.DivPop_Body.offset();
    if(offset.top < 0)
    {
        this.DivPop_Body.css("top","0px");
        this.oldHeightStart = this.Height;
        this.SetHeight($(document.body).height()-18);
    }
    
    if(JsPopup_Count < 0)JsPopup_Count=0;
    JsPopup_Count++;
    BodyScrool.Hide();
    this.DivPop_Content.scroll(0);
    var _body = this.DivPop_Body;
    if(window.event != null)
        this.DivPop_Body.focus();
    else
        setTimeout(function(){_body.focus();},1);
}
JsPopup.prototype.ReLocation = function()
{
    var _windowW = $(window).width();
    var _meW = this.DivPop_Body.width();
    var _left = (_windowW/2) - (_meW/2) + document.documentElement.scrollLeft;
    this.DivPop_Body.css("left",_left);
    
    var _windowH = $(window).height();
    var _meH = this.DivPop_Body.height();
    if(_meH > _windowH)
    {
        _meH = _windowH - 10;
        this.SetHeight(_meH - this.DivPop_Title.height());
    }
    var _top = (_windowH/2) - (_meH/2) + document.documentElement.scrollTop;
    this.DivPop_Body.css("top",_top);
}
JsPopup.prototype.ShowConfirm = function(btnTitle,Act,align,className){
/// <summary>显示Button事件按钮</summary>
/// <param name="IsShow">是否显示/隐藏</param>
/// <param name="btnTitle">按钮标题</param>
/// <param name="Act">要执行的事件</param>
/// <param name="align">内容对齐方向</param>
/// <param name="className">按钮使用的样式</param>
    var _temp = this;
    this.IsShowConfirm = true;
    this.SetContent(this.Content);
    
    var input = $("<input type='button'></input>");
    input.val(btnTitle);
    if(Act != null)
        input.click(Act);
    else
        input.click(function(){_temp.Hide()});
    input.addClass(className == null ? "button" : className);
    this.DivPop_Content.css("textAlign",align == null ? "center" : align);
    this.DivPop_Content.append($("<hr/>"));
    this.DivPop_Content.append(input);
    $(document).keydown
    (
        function(event)
        {
            if(event.keyCode == 27)
            {
                _temp.Hide();
                $(document).unbind("keydown");
            }
        }
    )
}

JsPopup.prototype.Hide = function(){
/// <summary>隐藏POP值</summary>
    var _this = this;
    if(_this.UnLoadCode != null)
    {
        _this.UnLoadCode();
    }    
    if(_this.IsAnimation == true)
    {
        _this.DivPop_BG.fadeOut(300);
    }else{
        _this.DivPop_BG.hide();
    }
    JsPopup_Count--;
    _this.IsShow = false;
    JsPopup_isMax = false;
    BodyScrool.Reset();
}
JsPopup.prototype.Close = function(isAni){
/// <summary>隐藏POP值</summary>
/// <param name="isAni">是否以动画模式关闭 默认为true</param>
    this.IsAnimation = isAni==false ? false : true;
    this.Hide();
}
JsPopup_isMax = false;
JsPopup.prototype.SizeChange = function(event)
{
    var _this = this;
    if(event != null)
        _this = event.data.obj;
    if(_this.IsShowCloseButton == false)return;
    if(JsPopup_isMax == false)
    {
        JsPopup_isMax = true;
        _this.oldLeft = _this.DivPop_Body.offset().left;
        _this.oldTop = _this.DivPop_Body.offset().top;
        _this.oldHeight = _this.oldHeightStart == null ? (_this.Height == null ?_this.DivPop_Body.height():_this.Height):_this.oldHeightStart;
        _this.DivPop_Body.css("left",0);
        _this.DivPop_Body.css("top",0);
        _this.DivPop_Body.css("width",$(document.body).width() -1);
        _this.SetHeight($(document.body).height() - _this.DivPop_Title.height() - (_this.IsShowFooter ? _this.DivPop_Footer.height() + 2 : 0));
        $(parent).bind("resize",{obj:_this},_this.BigSize);
    }else{
        JsPopup_isMax = false;
        _this.DivPop_Body.css("left",_this.oldLeft);
        _this.DivPop_Body.css("top",_this.oldTop);
        _this.DivPop_Body.css("width",_this.Width);
        _this.SetHeight(_this.oldHeight);
        $(parent).unbind("resize");
    }
}
JsPopup.prototype.BigSize = function(event)
{
    if(JsPopup_isMax)
    {
        var _this = event.data.obj;
        _this.DivPop_Body.css("width",$(document).width()-1);
        _this.SetHeight($(document.body).height()-18);
    }
}
