
/*********************************************************/
/*          
        Fenrir脚本库 V1.0 兼容IE6、IE7、FF浏览器
        作者：风无羁                                
        QQ：46820                                   
        Email：fenrir@vip.qq.com                    
        如有使用中遇到BUG或有什么有趣的想法和建议
        则请发送到此Email或QQ。    
        
        PS：自定义控件不支持XHTML 1.0标准会出现变形，所以请勿在页面加上以下声明(一般默认新建页面都会有)：
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
                                                        */
/********************************************************/

/************************ Fenrir **************************/
var Fenrir = new Object();

Fenrir.IsIE = document.all != null;
Fenrir.IsLoad = false;  //脚本加载完毕

//字符串
Fenrir.SR = new Object();

//属性名称
Fenrir.SR.PROPERTYNAME_Width = "width";
Fenrir.SR.PROPERTYNAME_Height = "height";
Fenrir.SR.PROPERTYNAME_Name = "name";
Fenrir.SR.PROPERTYNAME_Id = "id";
Fenrir.SR.PROPERTYNAME_ItemHeight = 'ItemHeight';
Fenrir.SR.PROPERTYNAME_MaxDropDownItems = 'MaxDropDownItems';
Fenrir.SR.PROPERTYNAME_DropDownArrImageWidth = 'DropDownArrImageWidth';
Fenrir.SR.PROPERTYNAME_AutoUpdateSelectedIndexByText = 'AutoUpdateSelectedIndexByText';
Fenrir.SR.PROPERTYNAME_BorderColor = "BorderColor";
Fenrir.SR.PROPERTYNAME_DropDownStyle = 'DropDownStyle';
Fenrir.SR.PROPERTYNAME_DropDownArrImageUrl = 'DropDownArrImageUrl';
Fenrir.SR.PROPERTYNAME_ItemValue = "ItemValue";
Fenrir.SR.PROPERTYNAME_SelectedIndex = "SelectedIndex";
Fenrir.SR.PROPERTYNAME_Title = "Title";
Fenrir.SR.PROPERTYNAME_MaxButton = "MaxButton";
Fenrir.SR.PROPERTYNAME_MinButton = "MinButton";
Fenrir.SR.PROPERTYNAME_CloseButton = "CloseButton";
Fenrir.SR.PROPERTYNAME_AcceptButton = "AcceptButton";
Fenrir.SR.PROPERTYNAME_YesButton = "YesButton";
Fenrir.SR.PROPERTYNAME_NoButton = "NoButton";
Fenrir.SR.PROPERTYNAME_CancelButton = "CancelButton";

//样式名称
Fenrir.SR.CSSNAME_FontSize = "fontSize";
Fenrir.SR.CSSNAME_FontFamily = "fontFamily";
Fenrir.SR.CSSNAME_UserSelect = "user-select";
Fenrir.SR.CSSNAME_MozUserSelect = "-moz-user-select";
Fenrir.SR.CSSNAME_KhtmlUserSelect = "-khtml-user-select";

//样式值
Fenrir.SR.CSSVALUE_None = "none";
Fenrir.SR.CSSVALUE_Move = "move";

//异常说明
Fenrir.SR.EXCEPTION_NotImplemented = "未实现此方法";
Fenrir.SR.EXCEPTION_NullReference = "未将对象引用设置到对象的实例";
Fenrir.SR.EXCEPTION_EventNameCanNotNull = "事件名不可为空";
Fenrir.SR.EXCEPTION_Type_NotMatch = "类型不匹配";
Fenrir.SR.EXCEPTION_DataSource_Type = "数据源类型异常";

//ComboBox特定元素名称
Fenrir.SR.COMBOBOX_Name_DropDownArr = "DropDownArr";
Fenrir.SR.COMBOBOX_Name_Items = "Items";


//模拟窗体特定元素名称
Fenrir.SR.FORMS_Name_RowTitle = "tr_forms_Title";
Fenrir.SR.FORMS_Name_RowFooter = "tr_forms_footer";
Fenrir.SR.FORMS_Name_RowContent = "tr_forms_Content";
Fenrir.SR.FORMS_Name_BtnAccept = "btn_forms_Accept";
Fenrir.SR.FORMS_Name_LabContent = "lab_forms_Content";
Fenrir.SR.FORMS_Name_IfmContent = "ifm_forms_Content";
Fenrir.SR.FORMS_Name_LabTitle = "lab_forms_Title";
Fenrir.SR.FORMS_Name_BtnClose = "btn_forms_Close";
Fenrir.SR.FORMS_Name_BtnMax = "btn_forms_Max";
Fenrir.SR.FORMS_Name_BtnMin = "btn_forms_Min";
Fenrir.SR.FORMS_Name_BtnYes = "btn_forms_Yes";
Fenrir.SR.FORMS_Name_BtnNo = "btn_forms_No";
Fenrir.SR.FORMS_Name_BtnCancel = "btn_forms_Cancel";
Fenrir.SR.FORMS_Id_DivInsulateTier = "div_forms_InsulateTier";
Fenrir.SR.FORMS_Name_DivMain = "div_forms_main";
Fenrir.SR.FROMS_SR_Accept = '确定';
Fenrir.SR.FROMS_SR_Yes = '是';
Fenrir.SR.FROMS_SR_No = '否';
Fenrir.SR.FROMS_SR_Cancel = '取消';
Fenrir.SR.FROMS_SR_Confirm = '确认操作';
Fenrir.SR.FROMS_SR_Select = '选择操作';
Fenrir.SR.FROMS_SR_Tip = '提示';
Fenrir.SR.FROMS_SR_Warning = '警告';
Fenrir.SR.FORMS_SR_Moving = "重庆鸡公煲 - 加盟鸡公煲 - 鸡公煲";

//事件名称
Fenrir.SR.EVENTNAME_Click = "click";
Fenrir.SR.EVENTNAME_DblClick = "dblclick";
Fenrir.SR.EVENTNAME_MouseDown = "mousedown";
Fenrir.SR.EVENTNAME_MouseOut = "mouseout";
Fenrir.SR.EVENTNAME_MouseOver = "mouseover";
Fenrir.SR.EVENTNAME_MouseUp = "mouseup";
Fenrir.SR.EVENTNAME_MouseMove = "mousemove";
Fenrir.SR.EVENTNAME_Keydown = "keydown";
Fenrir.SR.EVENTNAME_Keypress = "keypress";
Fenrir.SR.EVENTNAME_Keyup = "keyup";
Fenrir.SR.EVENTNAME_Load = "load";
Fenrir.SR.EVENTNAME_Unload = "unload";
Fenrir.SR.EVENTNAME_Abort = "abort";
Fenrir.SR.EVENTNAME_Error = "error";
Fenrir.SR.EVENTNAME_Select = "select";
Fenrir.SR.EVENTNAME_Change = "change";
Fenrir.SR.EVENTNAME_Submit = "submit";
Fenrir.SR.EVENTNAME_Reset = "reset";
Fenrir.SR.EVENTNAME_Resize = "resize";
Fenrir.SR.EVENTNAME_Scroll = "scroll";
Fenrir.SR.EVENTNAME_Focus = "focus";
Fenrir.SR.EVENTNAME_Blur = "blur";
Fenrir.SR.EVENTNAME_SelectStart = "selectstart";
Fenrir.SR.EVENTNAME_SelectedIndexChanged = "SelectedIndexChanged";
Fenrir.SR.EVENTNAME_Closing = "Closing";
Fenrir.SR.EVENTNAME_Closed = "Closed";
Fenrir.SR.EVENTNAME_WindowStateChanged = "WindowStateChanged";
Fenrir.SR.EVENTNAME_MoveStart = "MoveStart";
Fenrir.SR.EVENTNAME_Moving = "Moving";
Fenrir.SR.EVENTNAME_MoveEnd = "MoveEnd";
Fenrir.SR.EVENTNAME_TextChanged = "TextChanged";
    

//取得当前类型名称
Object.prototype.GetTypeName = function()
{
    var rex = new RegExp(/function([ ]|\r|\n|\t)+\w+\(/);
    var result, temp;
    
    result = rex.exec(this.constructor);
    
    if(result == null) return String.Empty;

    temp = result[0];
    temp = temp.substring(8, temp.length - 1).Trim();
    
    return temp;
}

Fenrir.Drawing = new Object();

//表示一个点
Fenrir.Drawing.Point = function(x, y)
{
    this.X = x;
    this.Y = y;
}

//表示一个大小
Fenrir.Drawing.Size = function(width, height)
{
    this.Width = width;
    this.Height = height;
}

//表示一个矩形
Fenrir.Drawing.Rectangle = function(x, y, width, height)
{
	x=x/2;
	y=y/2;
    this.Location = new Fenrir.Drawing.Point(x, y);
    this.Size = new Fenrir.Drawing.Size(width, height);
    
    this.LeftTop = this.Location;
    this.LeftDown = new Fenrir.Drawing.Point(x, y + height);
    this.RightTop = new Fenrir.Drawing.Point(x + width, y);
    this.RightDown = new Fenrir.Drawing.Point(x + width, y + height);
    
    if(Fenrir.Drawing.Rectangle._Initialized == undefined)
    {
        Fenrir.Drawing.Rectangle.prototype.IntersectsWith = function(rgRange)
        {
            //左上角
            if((rgRange.LeftTop.X >= this.LeftTop.X && rgRange.LeftTop.X < this.RightTop.X && 
                rgRange.LeftTop.Y >= this.LeftTop.Y && rgRange.LeftTop.Y < this.RightDown.Y) || 
            //左下角
                (rgRange.LeftDown.X >= this.LeftTop.X && rgRange.LeftDown.X < this.RightTop.X && 
                 rgRange.LeftDown.Y >= this.LeftTop.Y && rgRange.LeftDown.Y < this.RightDown.Y) || 
            //右上角
                (rgRange.RightTop.X >= this.LeftTop.X && rgRange.RightTop.X < this.RightTop.X && 
                 rgRange.RightTop.Y >= this.LeftTop.Y && rgRange.RightTop.Y < this.RightDown.Y) || 
            //右下角
                (rgRange.RightDown.X >= this.LeftTop.X && rgRange.RightDown.X < this.RightTop.X && 
                 rgRange.RightDown.Y >= this.LeftTop.Y && rgRange.RightDown.Y < this.RightDown.Y))
            {
                return true;
            }
            else
            {
                return false; 
            }
        }
        
        Fenrir.Drawing.Rectangle._Initialized = true;
    }
}

/****************************** 异常 *************************/
Fenrir.Exception = new Object();
//方法未实现
Fenrir.Exception.NotImplementedException = function()
{
    throw Fenrir.SR.EXCEPTION_NotImplemented;
}

//对象无实例
Fenrir.Exception.NullReferenceException = function()
{
    throw Fenrir.SR.EXCEPTION_NullReference;
}
//事件名不可为空
Fenrir.Exception.EventNameCanNotNullException = function()
{
    throw Fenrir.SR.EXCEPTION_EventNameCanNotNull;
}
//类型不匹配
Fenrir.Exception.TypeNotMatchException = function()
{
    throw Fenrir.SR.EXCEPTION_Type_NotMatch;
}
//数据源类型错误
Fenrir.Exception.DataSourceTypeException = function()
{
    throw Fenrir.SR.EXCEPTION_DataSource_Type;
}

/************************ Fenrir.Collections **************************/


//集合对象
Fenrir.Collections = new Object();

//名值对集合
Fenrir.Collections.NameValueCollection = function(ignoreCase)
{
    this.Keys = new Array();//键值数组
    this.Values = new Array();//对象数组
    this.Count = 0; //数量
    this.IgnoreCase = ignoreCase == null ? false : true;
    
    
    //初始化函数
    if(Fenrir.Collections.NameValueCollection._Initialized == undefined)
    {

        Fenrir.Collections.NameValueCollection.prototype.Clear = function()
        {
            this.Keys.Clear();
            this.Values.Clear();
            this.Count = 0;
        }
        
        //根据键值取得索引
        Fenrir.Collections.NameValueCollection.prototype.IndexOfKey = function(sName)
        {
            return this.Keys.IndexOf(sName, this.IgnoreCase);
        }
        
        //根据值取得索引
        Fenrir.Collections.NameValueCollection.prototype.IndexOfValue = function(oValue)
        {
            return this.Values.IndexOf(oValue);
        }
        
        //是否包含键值
        Fenrir.Collections.NameValueCollection.prototype.ContainsKey = function(sName)
        {
            return this.Keys.Contains(sName, this.IgnoreCase);
        }
        
        //是否包含值
        Fenrir.Collections.NameValueCollection.prototype.ContainsValue = function(oValue)
        {
            return this.Values.Contains(oValue);
        }
        
        //生成名称
        Fenrir.Collections.NameValueCollection.prototype.BuildName = function(sPrefixName)
        {
            if(sPrefixName == null) sPrefixName = "_EmptyName_";
            
            for(var i = 1;;i++)
            {
                var tempName = sPrefixName + i;
                
                if(this.ContainsKey(tempName) == false)
                {
                    return tempName;
                }
            }
        }
        
        //添加
        Fenrir.Collections.NameValueCollection.prototype.Add = function(sName, oValue)
        {
            var values;
            
            //名称为空则自动生成一个名称
            if(String.IsNullOrEmpty(sName) == true)
            {
                sName = this.BuildName(sName);
            }
            
            if(this.ContainsKey(sName))
            {
                values = this.GetValues(sName);
                
            }
            else
            {
                this.Count = this.Keys.Add(sName);
                values = new Array();
                this.Values.Add(values);
            }
            
            values.Add(oValue);
            
            return this.Keys.length;
        }
        
        //删除
        Fenrir.Collections.NameValueCollection.prototype.Remove = function(sName)
        {
            var index;
            
            index = typeof(sName) == "number" ? sName : this.IndexOfKey(sName); //取得键值所在索引
            
            if(index == -1) return;
            
            this.Count = this.Keys.RemoveByIndex(index); //移除键值
            this.Values.RemoveByIndex(index);   //移除值
            
            return this.Keys.length;
        }
        
        
        //删除
        Fenrir.Collections.NameValueCollection.prototype.RemoveValue = function(sName, oValue)
        {
            var index;
            
            index = typeof(sName) == "number" ? sName : this.IndexOfKey(sName); //取得键值所在索引
            
            if(index == -1) return;
            
            var values = this.Values[index];
            
            for(var i=0; i<values.length; i++)
            {
                //值相等则移除
                if(values[i] == oValue)
                {
                    values.RemoveByIndex(i);
                    i--;
                }
            }
        }
        
        //删除
        Fenrir.Collections.NameValueCollection.prototype.RemoveValueByIndex = function(sName, iIndex)
        {
            var index;
            
            index = typeof(sName) == "number" ? sName : this.IndexOfKey(sName); //取得键值所在索引
            
            if(index == -1) return;
            
            values.RemoveByIndex(iIndex);
           
        }
        
        //设置值
        Fenrir.Collections.NameValueCollection.prototype.SetValue = function(key, oValue, iValueIndex)
        {
            var index;
            
            //名称为空则跳过
            if(String.IsNullOrEmpty(key) == true) return false;
            
            index = typeof(key) == "number" ? key : this.IndexOfKey(key); //取得键值所在索引
            
            //键值不存在则改用添加
            if(index == -1)
            {
                this.Add(key, oValue);
                return;
            }
            
            if(iValueIndex == null) iValueIndex = 0;
            
            this.Values[index][iValueIndex] = oValue;
        }
        
        //取得值
        Fenrir.Collections.NameValueCollection.prototype.GetKey = function(index)
        {
            return this.Keys[index];
        }
        
        //取得值
        Fenrir.Collections.NameValueCollection.prototype.GetValue = function(key, iValueIndex)
        {
            var index;
            
            index = typeof(key) == "number" ? key : this.IndexOfKey(key, this.IgnoreCase); //取得键值所在索引
            
            if(iValueIndex == null) iValueIndex = 0;
            
            return this.Values[index] == null ? null : this.Values[index][iValueIndex];
        }
        
        //取得值
        Fenrir.Collections.NameValueCollection.prototype.GetValues = function(key)
        {
            var index;
            
            index = typeof(key) == "number" ? key : this.IndexOfKey(key, this.IgnoreCase); //取得键值所在索引
            
            return this.Values[index];
        }
        
        
        Fenrir.Collections.NameValueCollection.prototype.GetBoolean = function(key) 
        {
            var val = this.GetValue(key);
            
            return val == null ? null :  Fenrir.Convert.ToBoolean(val.toString());
        }
        
        Fenrir.Collections.NameValueCollection.prototype.GetInt32 = function(key)
        {
            var val = this.GetValue(key);
            
            return val == null ? null :  Fenrir.Convert.ToInt32(val.toString());
        }
        
        Fenrir.Collections.NameValueCollection.prototype.GetDateTime = function(key)
        {
            var val = this.GetValue(key);
            
            return val == null ? null : Fenrir.Convert.ToDateTime(val.toString());
        }
        
        //取得集合值数量
        Fenrir.Collections.NameValueCollection.prototype.GetCount = function()
        {
            return this.Keys.length;
        }
        
        Fenrir.Collections.NameValueCollection._Initialized = true;
    }
}

//检查是否包含指定值
Array.prototype.Contains = function(oValue, ignoreCase)
{
    return this.IndexOf(oValue, ignoreCase) != -1;
}

//根据值取得索引
Array.prototype.IndexOf = function(oValue, ignoreCase)
{
    var count = this.length, ValueIsString, value;
    
    ValueIsString = typeof(oValue) == "string";
    value = oValue.toString();
    
    for(var i=0; i<count; i++)
    {
        if((ignoreCase == true && ValueIsString && oValue.toLowerCase() == this[i].toLowerCase()) || this[i] == oValue)
        {
            return i;
        }
    }
    
    return -1;
}

//清除项
Array.prototype.Clear = function()
{
    this.splice(0, this.length);
}

//根据索引移除
Array.prototype.RemoveByIndex = function(iStartIndex, iDeleteCount)
{
    if(iDeleteCount == null) iDeleteCount = 1;
    
    this.splice(iStartIndex, iDeleteCount);
    
    return this.length;
}

//移除项
Array.prototype.Remove = function(oValue)
{
    var index = this.IndexOf(oValue);
    
    return this.RemoveByIndex(index);
}

//添加对象
Array.prototype.Add = function(oValue)
{
    this.push(oValue);
    return this.length;
}

//合并数组
Array.prototype.Unite = function(arValues)
{
    if(arValues instanceof Array == false) return;
    
    var count = arValues.length;
    
    for(var i=0; i<count; i++)
    {
        this.Add(arValues[i]);
    }
}

//添加多个值
Array.prototype.AddRange = function(values)
{
    var count = arguments.length;
    
    for(var i=0; i<count; i++)
    {
        this.Add(arguments[i]);
    }
}

//裁减数组
Array.Slice = function(arObject, startIndex, endIndex)
{
    var count;
    
    count = arObject.length;
    
    if(count == null) Fenrir.Exception.TypeNotMatchException();
    
    if(arObject instanceof Array)
    {
        if(endIndex == null) endIndex = count + 1;
        
        return arObject.slice(startIndex, endIndex);
    }
    else
    {
        var newArray = new Array();
        
        if(endIndex == null || endIndex>count) endIndex = count;
        
        for(var i=startIndex; i<endIndex; i++)
        {
            newArray.Add(arObject[i]);
        }  
        
        return newArray;
    }
}

/************************ Fenrir.Convert **************************/


Fenrir.Convert = new Object();

//将字符串转换为Date
Fenrir.Convert.ToDate = function(str) 
{ 
     var r = str.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/); 
     
     //解析为Date
     var d = new Date(r[1], r[3]-1, r[4]);
     if(d.getFullYear() == r[1]&& (d.getMonth()+1) == r[3] && d.getDate() == r[4])
     {
        return d;
     }
     return null;
}
   
//将字符串转换为DateTime
Fenrir.Convert.ToDateTime = function(str) 
{ 
     var r; 

     r = str.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/); 
     if(r==null) return null; 
     var dd = new Date();
     var d = new Date(r[1], r[3]-1, r[4], r[5], r[6], r[7]);
     if(d.getFullYear() == r[1 ]&& (d.getMonth()+1) == r[3] && d.getDate() == r[4] && d.getHours() == r[5] && d.getMinutes() == r[6] && d.getSeconds() == r[7])
     {
        return d;
     }
     
     return null;
}
    
//将字符串转换成Boolean
Fenrir.Convert.ToBoolean = function(value)
{
    var Resutl;

    if(value == null) return false;
    Resutl = value.toString().toLowerCase();
    if(Resutl == "true" || Resutl == "1" || Resutl == "yes") return true;
    if(Resutl == "false" || Resutl == "0" || Resutl == "no") return false;
    
    return null;
}
     
//将字符串转换为Byte
Fenrir.Convert.ToByte = function (value)
{
    var r;
    
    r = Fenrir.Convert.ToInt(value);
    
    if(r == null) return null;
    if(r < 0 || r > 255) return null;
    
    return r;
}
    
//将字符串转换为Int
Fenrir.Convert.ToInt = function(str)
{
    var val = parseInt(str);
     
     return isNaN(val) == true ? null : val;
}
    
//检查值是否为Int16
Fenrir.Convert.ToInt16 = function (str)
{
    var r;
    
    r = Fenrir.Convert.ToInt(str);
    
    if(r == null) return null;
    if(r < -32768 || r > 32767) return null;
    
    return r;
}
    
//将字符串转换为Int32
Fenrir.Convert.ToInt32 = function(str)
{
    return Fenrir.Convert.ToInt(str);
}
   
//将字符串转换为Int64
Fenrir.Convert.ToInt64 = function(str)
{
    return Fenrir.Convert.ToInt(str);
}

    
//将字符串转换为SByte
Fenrir.Convert.ToSByte = function (value)
{
    var r;
    
    r = Fenrir.Convert.ToInt(value);
    
    if(r == null) return null;
    if(r < -128 || r > 127) return null;
    
    return r;
}

//检查值是否为Single
Fenrir.Convert.ToSingle = function (str)
{
    return Fenrir.Convert.ToFloat(str);
}

 
//检查值是否为UInt16
Fenrir.Convert.ToUInt16 = function (value)
{
    var r;
    
    r = Fenrir.Convert.ToInt(value);
    
    if(r == null) return null;
    if(r < 0 || r > 65535) return null;
    
    return r;
}

//将字符串转换为UInt32
Fenrir.Convert.ToUInt32 = function(str)
{
    var r;
    
    r = Fenrir.Convert.ToInt(value);
    if(r < 0) return null;
    
    return Fenrir.Convert.ToInt(value);
}
   
//将字符串转换为UInt64
Fenrir.Convert.ToUInt64 = function(str)
{
    var r;
    
    r = Fenrir.Convert.ToInt(value);
    if(r < 0) return null;
    
    return Fenrir.Convert.ToInt(value);
}

//将字符串转换成Numeric
Fenrir.Convert.ToNumeric = function (str)
{
     return Fenrir.Convert.ToFloat(str);
}

//将字符串转换为Decimal
Fenrir.Convert.ToDecimal = function(str)
{
     return Fenrir.Convert.ToFloat(str);
}

    //将字符串转换为Decimal
Fenrir.Convert.ToDouble = function(str)
{
     return Fenrir.Convert.ToFloat(str);
}
   
//将字符串转换为Float
Fenrir.Convert.ToFloat = function(str)
{
    var val;
    
    val = parseFloat(str);
     return isNaN(val) == true ? null : val;
}

//转换成数组
Fenrir.Convert.ToArray = function(oObj)
{
    if(oObj == null) oObj = this;
    
    if(oObj instanceof Array) return this;
    
    var ar = new Array();
    
    if(oObj.length != null)
    {
        for(var i=0; i<oObj.length; i++)
        {
            ar.Add(oObj[i]);
            
        }
    }
    else
    {
        for(var p in oObj)
        {
            if(typeof(this[p] != "function"))
            {
                ar.Add(this[p]);
            }
        }
    }
    
    return ar;
}

/************************ Fenrir.Event **************************/


Fenrir.Event = new Object();

//事件类型，FF需要对应类型才能激活
Fenrir.Event.EventType = new Object();
Fenrir.Event.EventType.UIEvents = "UIEvents";
Fenrir.Event.EventType.MouseEvents = "MouseEvents";
Fenrir.Event.EventType.MutationEvents = "MutationEvents";
Fenrir.Event.EventType.HTMLEvents = "HTMLEvents";
Fenrir.Event.EventType.TextEvents = "TextEvents";
Fenrir.Event.EventType.KeyEvents = "KeyEvents";
Fenrir.Event.EventType.Events = "Events";
Fenrir.Event.EventType.SVGEvents = "SVGEvents";
Fenrir.Event.EventType.MessageEvent = "MessageEvent";
Fenrir.Event.EventType.MouseScrollEvents = "MouseScrollEvents";
Fenrir.Event.EventType.PopupEvents = "PopupEvents";
Fenrir.Event.EventType.PopupBlockedEvents = "PopupBlockedEvents";
Fenrir.Event.EventType.XULCommandEvents = "XULCommandEvents";


//事件列表
Fenrir.Event.EventList = function()
{
    this.EventNameList = new Array();
    this.EventHandlerList = new Array();
    this.ParameterList = new Array();
    
    if(Fenrir.Event.EventList._Initialized == undefined)
    {
        Fenrir.Event.EventList.prototype.ContainsEventName = function(sEventName)
        {
            return this.EventNameList.Contains(sEventName);
        }
        
        Fenrir.Event.EventList.prototype.Add = function(sEventName, fnHandler, arParameters)
        {
            var handlers, parameters, index;
            
            if(String.IsNullOrEmpty(sEventName)) Fenrir.Exception.EventNameCanNotNullException();
            if(fnHandler == null) Fenrir.Exception.NullReferenceException();
            
            //不包含则初始化该事件处理列表
            if(!this.EventNameList.Contains(sEventName))
            {
                this.EventNameList.Add(sEventName);
                this.EventHandlerList.Add(new Array());
                this.ParameterList.Add(new Array());
            }
            
            index = this.EventNameList.IndexOf(sEventName, true);
            
            handlers = this.EventHandlerList[index];
            parameters = this.ParameterList[index];
            
            handlers.Add(fnHandler);
            parameters.Add(arParameters);
        }
        
        Fenrir.Event.EventList.prototype.Remove = function(sEventName, fnHandler)
        {
            var index, handlers, index2, parameters;
            
            index = this.EventNameList.IndexOf(sEventName, true);
            
            if(index < 0) return;
            
            handlers = this.EventHandlerList[index];
            index2 = handlers.IndexOf(fnHandler);
            
            if(index2 < 0) return;
            
            parameters = this.ParameterList[index2];
            handlers.RemoveByIndex(index2);
            parameters.RemoveByIndex(index2);
        }
        
        Fenrir.Event.EventList.prototype.IndexOf = function(sEventName)
        {
            return this.EventNameList.IndexOf(sEventName);
        }
        
        Fenrir.Event.EventList.prototype.GetEventHandlersByName = function(sEventName)
        {
            var index;
            
            index = this.IndexOf(sEventName);
            
            return index < 0 ? null : this.EventHandlerList[index];
        }
        
        Fenrir.Event.EventList.prototype.GetParametersByName = function(sEventName)
        {
            var index;
            
            index = this.IndexOf(sEventName);
            
            return index < 0 ? null : this.ParameterList[index];
        }
        
        Fenrir.Event.EventList.prototype.ActiveEvent = function(sEventName, oSource, args)
        {
            var fnHandlers, arParameters, count;
            
            fnHandlers = this.GetEventHandlersByName(sEventName);
            arParameters = this.GetParametersByName(sEventName);
            
            if(fnHandlers == null) return args;
            
            count = fnHandlers.length;
            
            for(var i=0; i<count; i++)
            {
                var fnHandler = fnHandlers[i], parameters = arParameters[i];
                
                args.Parameters = parameters;
                args.PrevReturnValue = fnHandler(oSource, args);
                
                if(args.IsCancel) break;
            }
            
            return args;
        }
        
        Fenrir.Event.EventList.prototype.Dispose = function()
        {
            this.EventNameList.Clear();
            this.EventHandlerList.Clear();
            this.ParameterList.Clear();
        }
        
        Fenrir.Event.EventList._Initialized = true;
    }
}

Fenrir.Event.Empty = new Object();


//事件参数
Fenrir.Event.EventArgs = function(event, source)
{
    this.PrevReturnValue = null;
    this.IsCanacel = false;
    
    if(Fenrir.IsLoad &&  !Fenrir.Event.EventArgs.DisabledTraceSource)
    {
        this.Event = event == null ? Fenrir.Event.GetEvent() : event;
    
        this.SrcElement = Fenrir.Event.EventArgs.DisabledTraceSource ? Fenrir.Event.EventArgs.PrevSrcElement : Fenrir.Event.GetEventSource(this.Event);
    
        Fenrir.Event.EventArgs.PrevSrcElement = this.SrcElement;
    }
}

Fenrir.Event.EventArgs.DisabledTraceSource = false; //禁止跟踪事件源
Fenrir.Event.EventArgs.PrevSrcElement = null;   //上一个事件源

//激发事件
Fenrir.Event.Active = function(oTarget, eventName)
{
    if(Fenrir.IsIE)
    {
        oTarget.fireEvent("on"+eventName);
    }
    else
    {
        var eventType, evt;

        //取得事件类型
        eventType = Fenrir.Event.GetEventType(eventName);
        //创建事件
        evt = Fenrir.Context.Current.Window.document.createEvent(eventType);
        //初始化事件
        evt.initEvent(eventName, true, true);
        //激活事件
        element.dispatchEvent(evt);
    }
} 

//添加事件处理函数
Fenrir.Event.AddEventHandler = function(oTarget, sEventName, fnHandler)
{
    if(Fenrir.IsIE)
        oTarget.attachEvent("on" + sEventName, fnHandler);
    else
        oTarget.addEventListener(sEventName, fnHandler, false);
}

//取得事件
Fenrir.Event.GetEvent = function()
{
    var caller = Fenrir.Event.GetEvent.caller, callBackDepth = 0;
    
    while(caller != null)
    {
        if(callBackDepth++ > (Fenrir.IsLoad ? Fenrir.Context.Current.Config.MaxCallerCount : 10)) throw 1;
        
        if(caller.arguments[0] != null && (Fenrir.IsIE ? caller.arguments[0].srcElement : caller.arguments[0].target) != null) return caller.arguments[0];
        
        caller = caller.caller;
    }
    return null;
}

//取得事件
function GetEvent()
{
    return Fenrir.Event.GetEvent();
}

//取得引发事件的对象
Fenrir.Event.GetEventSource = function(event)
{
    if(event == null) event = Fenrir.Event.GetEvent();
    
    return event == null ? null : Fenrir.IsIE ? event.srcElement : event.target;
}

//取得引发事件的对象
function GetEventSource()
{
    return Fenrir.Event.GetEventSource();
}

//删除事件处理函数
Fenrir.Event.RemoveEventHandler = function(oTarget, sEventName, fnHandler)
{
    if(Fenrir.IsIE)
        oTarget.detachEvent("on" + sEventName, fnHandler);
    else
        oTarget.removeEventListener(sEventName, fnHandler, false);
}

//取得事件类型
Fenrir.Event.GetEventType = function(eventName)
{
    var _eventName = eventName.toLowerCase();
    
    switch(_eventName)
    {
        //鼠标事件
        case Fenrir.SR.EVENTNAME_Click:
        case Fenrir.SR.EVENTNAME_DblClick:
        case Fenrir.SR.EVENTNAME_MouseDown:
        case Fenrir.SR.EVENTNAME_MouseOut:
        case Fenrir.SR.EVENTNAME_MouseOver:
        case Fenrir.SR.EVENTNAME_MouseUp:
        case Fenrir.SR.EVENTNAME_MouseMove:
            return Fenrir.Event.EventType.MouseEvents;
            
        //键盘事件
        case Fenrir.SR.EVENTNAME_Keydown:
        case Fenrir.SR.EVENTNAME_Keypress:
        case Fenrir.SR.EVENTNAME_Keyup:
            return Fenrir.Event.EventType.KeyEvents;
            
        //HTML事件
        case Fenrir.SR.EVENTNAME_Load:
        case Fenrir.SR.EVENTNAME_Unload:
        case Fenrir.SR.EVENTNAME_Abort:
        case Fenrir.SR.EVENTNAME_Error:
        case Fenrir.SR.EVENTNAME_Select:
        case Fenrir.SR.EVENTNAME_Change:
        case Fenrir.SR.EVENTNAME_Submit:
        case Fenrir.SR.EVENTNAME_Reset:
        case Fenrir.SR.EVENTNAME_Resize:
        case Fenrir.SR.EVENTNAME_Scroll:
        case Fenrir.SR.EVENTNAME_Focus:
        case Fenrir.SR.EVENTNAME_Blur:
            return Fenrir.Event.EventType.HTMLEvents;
            
        //默认事件
        default : 
            return Fenrir.Event.EventType.Events;
    }
}

//激发事件
function ActiveEvent(oTarget, eventName)
{
    Fenrir.Event.Active(oTarget, eventName);
}

//添加事件处理函数
function AddEventHandler(oTarget, sEventName, fnHandler)
{   
    Fenrir.Event.AddEventHandler(oTarget, sEventName, fnHandler);
}

//删除事件处理函数
function RemoveEventHandler(oTarget, sEventName, fnHandler)
{
    Fenrir.Event.RemoveEventHandler(oTarget, sEventName, fnHandler);
}

//取得事件类型
function GetEventType(sEventName)
{
    return Fenrir.Event.GetEventType(sEventName);
}

/************************ Fenrir.Fill **************************/


Fenrir.Fill = new Object();

//填充下拉框
Fenrir.Fill.ToDropDownList = function(ddl, dataSource, dataTextField, dataValueField, clearItems)
{
    var text, value, hasObjectValue, count;
    
    if(clearItems == null) clearItems = true;
    if(clearItems == true) RemoveAllChildElement(ddl);
    
    if(dataSource instanceof Array)
    {
        count = dataSource.length;
        
        if(count == 0) return;
        hasObjectValue = dataSource[0] instanceof Object;
        
        for(var i=0; i<count; i++)
        {
            var data = dataSource[i];
            
            if(hasObjectValue == true)
            {
                eval(String.Format("text = data.{0};value = data.{1};", dataTextField, dataValueField));
                
            }
            else
            {
                text = data;
                value = data;
            }
        
            AppendOptionElement(ddl, text, value, data);
        }
        
    }
    else if(dataSource instanceof Fenrir.Collections.NameValueCollection)
    {
        count = dataSource.Count;
        
        if(count == 0) return;
        hasObjectValue = dataSource.Values[0] instanceof Object;
        
        for(var i=0; i<count; i++)
        {
            var data = dataSource.Values[i];
            
            if(dataTextField == "Key")
            {
                text = dataSource.Keys[i];
            }
            else if(hasObjectValue == true)
            {
                eval(String.Format("text = data.{0};", dataTextField));
            }
            else
            {
                text = data;
            }
              
            if(dataValueField == "Key")
            {
                value = dataSource.Keys[i];
            }
            else if(hasObjectValue == true)
            {
                eval(String.Format("value = data.{0};", dataValueField));
            }
            else
            {
                value = data;
            }
        
            AppendOptionElement(ddl, text, value, data);
        }
    }
    else
    {
        Fenrir.Exception.DataSourceTypeException();
    }
}

//填充下拉框
function FillToDropDownList(ddl, dataSource, dataTextField, dataValueField, clearItems)
{
    Fenrir.Fill.ToDropDownList(dll, dataSource, dataTextField, dataValueField, clearItems);
}

/************************ Fenrir.Format **************************/

Fenrir.Format = new Object();

//格式化数字小数位
Fenrir.Format.FixedDecimal = function(numValue, iCount, iBound)
{
    var Radix, Temp, Result;
    
    //要求的小数位数
    if(iCount == null) iCount = 0;
    //取舍范围
    if(iBound == null) iBound = 5;
    
    Radix = Math.pow(10, iCount);
    Temp = Math.floor(numValue * Radix * 10) % 10;
    Result = Math.floor(numValue * Radix) + (Temp < iBound ? 0:1);
    
    return (Result / Radix).toFixed(iCount);
}
    
//裁切字符串
Fenrir.Format.SubString = function(str, Length, ElideChat, StartIndex)
{
    if(str.length <= Length) return str;
    if(StartIndex == null) StartIndex = 0;
    if(ElideChat == null)   ElideChat = "...";
    return str.substr(StartIndex, Length)+ElideChat;
}

Number.prototype.FixedDecimal = function(Count, Bound)
{
    return Fenrir.Format.FixedDecimal(this, Count, Bound);
}


/************************ Fenrir.Text **************************/


//字符串类
Fenrir.Text = new Object();

//判断字符串是否相等
Fenrir.Text.Equals = function(sValue1, sValue2, bIgnoreCase)
{
    if(bIgnoreCase == true) 
    {
        sValue1 = sValue1.toLowerCase();
        sValue2 = sValue2.toLowerCase();
    }
    
    if(sValue1 == null || sValue2 == null) return false;
    
    return sValue1.localeCompare(sValue2) == 0 ? true : false;
}

//给字符串类的原型添加比较函数
String.prototype.Equals = function(sValue, bIgnoreCase)
{
    return Fenrir.Text.Equals(this, sValue, bIgnoreCase);
}

//解析参数字符串
Fenrir.Text.ParseParameters = function(str, key)
{
   var exp, result, regExp, type;
    
    exp = key == null ? "([^\\n\\r(;|,|&)+\\s]+)\\s?(:|=)+([^\\n\\r(;|,|&)+]+);?" : "\\b" + key +"\\b\\s?(:|=)([^\\n\\r(;|,|&)]+);?";
    
    regExp = new RegExp(exp, "gi");
    
    if(regExp.test(str) == false) return key == null ? new Fenrir.Collections.NameValueCollection(true) : null;
    regExp.lastIndex = 0;
    
    if(key == null)
    {
        result = new Fenrir.Collections.NameValueCollection(true);
        var item;
        
        item = regExp.exec(str);
        while(item != null)
        {
            var value, key;
            
            if(item.length != 4)
            {
                item = regExp.exec(str);
                continue;
            }
            key = item[1].toLowerCase();
            value = item[3];
            
            result.Add(key, value);
            
            item = regExp.exec(str);
        }
        
        return result;
    }
    else
    {
        result = regExp.exec(str);
        return result[2];
    }
}

function ParseParameters(str, key)
{
    return Fenrir.Text.ParseParameters(str, key);
}

//字符串生成器
Fenrir.Text.StringBuilder = function()
{
    this._strArray = new Array();
    
    if(Fenrir.Text.StringBuilder._Initialized == undefined)
    {
        Fenrir.Text.StringBuilder.prototype.Append = function(str)
        {
            this._strArray.push(str);
            
            return this;
        };
        
        Fenrir.Text.StringBuilder.prototype.toString = Fenrir.Text.StringBuilder.prototype.ToString = function()
        {
            return this._strArray.join("");
        };
        
        Fenrir.Text.StringBuilder.prototype.AppendFormat = function(str,  parameters)
        {
            var count = arguments.length - 1, temp;
            
            temp = str;
            for(var i=0; i<count; i++)
            {
                var rex;
                
                eval("rex = /\\{" + i + "\\}/g");
                temp = temp.replace(rex, arguments[i + 1]);
            };
              
            return this.Append(temp);
            
        };
        
        Fenrir.Text.StringBuilder._Initialized = true;
    }
}

//格式化字符串
String.Format = function(str, parameters)
{
    var count = arguments.length - 1, temp;
            
    temp = str;
    for(var i=0; i<count; i++)
    {
        var rex;
        
        eval("rex = /\\{" + i + "\\}/g");
        temp = temp.replace(rex, arguments[i + 1]);
    };
            
    return temp;
};

//判断字符串是否为空或无字符
String.IsNullOrEmpty = function(str)
{
    return (str == null || str == '') ? true : false;
}

String.Empty = "";

String.prototype.TrimStart = function()
{
    return this.replace(/(^\s*)/, '');
}

String.prototype.TrimEnd = function()
{
    return this.replace(/(\s*$)/, '');
    
}

String.prototype.Trim = function()
{
    return this.replace(/(^\s*)|(\s*$)/g,"");
}

/************************ Fenrir.Valid **************************/

Fenrir.Valid = new Object();

//检查值是否为布尔值
Fenrir.Valid.IsBoolean = function (value)
{
    return Fenrir.Convert.ToBoolean(value) == null ? false : true;
}

//检查值是否为Byte
Fenrir.Valid.IsByte = function (value)
{
    return Fenrir.Convert.ToByte(value) == null ? false : true;
}

//检查值是否为Char
Fenrir.Valid.IsChar = function (value)
{
    return (value instanceof String && value.length == 1) ? false : true;
}

//检查值是否为Char
Fenrir.Valid.IsDateTime = function (value)
{
    return Fenrir.Convert.ToSmallDateTime(value) == null ? false : true;
}

Fenrir.Valid.IsDecimal = function(value)
{
    return Fenrir.Convert.ToDecimal(value) == null ? false : true;
}

Fenrir.Valid.IsDouble = function(value)
{
    return Fenrir.Convert.ToDouble(value) == null ? false : true;
}

Fenrir.Valid.IsInt16 = function(value)
{
    return Fenrir.Convert.ToInt16(value) == null ? false : true;
}

Fenrir.Valid.IsInt32 = function(value)
{
    return Fenrir.Convert.ToInt32(value) == null ? false : true;
}

Fenrir.Valid.IsInt64 = function(value)
{
    return Fenrir.Convert.ToInt64(value) == null ? false : true;
}

Fenrir.Valid.IsSByte = function(value)
{
    return Fenrir.Convert.ToSByte(value) == null ? false : true;
}

Fenrir.Valid.IsSingle = function(value)
{
    return Fenrir.Convert.ToSingle(value) == null ? false : true;
}

Fenrir.Valid.IsUInt16 = function(value)
{
    return Fenrir.Convert.ToUInt16(value) == null ? false : true;
}

Fenrir.Valid.IsUInt32 = function(value)
{
    return Fenrir.Convert.ToUInt32(value) == null ? false : true;
}

Fenrir.Valid.IsUInt64 = function(value)
{
    return Fenrir.Convert.ToUInt64(value) == null ? false : true;
}

//**********************************************//
//                   值比较                     //
//**********************************************//

//相等
Fenrir.Valid.IsEqual = function(value, compareValue, fnCompare)
{
    return fnCompare == null ? value == compareValue : fnCompare(value, compareValue);
}

//大于
Fenrir.Valid.IsGreaterThan = function(value, compareValue, fnCompare)
{
    return fnCompare == null ? value > compareValue : fnCompare(value, compareValue);
}

//大于或等于
Fenrir.Valid.IsGreaterThanEqual = function(value, compareValue, fnCompare)
{
    return fnCompare == null ? value >= compareValue : fnCompare(value, compareValue);
}

//小于
Fenrir.Valid.IsLessThan = function(value, compareValue, fnCompare)
{
    return fnCompare == null ? value < compareValue : fnCompare(value, compareValue);
}

//小于或等于
Fenrir.Valid.IsLessThanEqual = function(value, compareValue, fnCompare)
{
    return fnCompare == null ? value <= compareValue : fnCompare(value, compareValue);
}

//不等于
Fenrir.Valid.IsNotEqual = function(value, compareValue, fnCompare, fnCompare)
{
    return fnCompare == null ? value != compareValue : fnCompare(value, compareValue);
}
    


/************************ Fenrir.Window **************************/


//对窗体的调用
Fenrir.Window = new Object();

//隐藏方式
Fenrir.Window.ElementHideMode = new Object()
Fenrir.Window.ElementHideMode.Visibility = 1;
Fenrir.Window.ElementHideMode.Display = 2;

//取得含有Fenrir的主窗口
Fenrir.Window.GetMainWindowByFenrir = function()
{
    var mainWindow, _window;
    
    mainWindow = window;
    
    _window = mainWindow;
    while(_window.parent != _window)
    {
        _window = _window.parent;
      
        if(_window.Fenrir != null)
        {
            mainWindow = _window;
        }
    }
    
    return mainWindow;
}

//取得主窗口
Fenrir.Window.GetMainWindow = function()
{
    var mainWindow;
    
    mainWindow = Fenrir.Context.Current.Window;
    
    while(mainWindow.parent != mainWindow)
    {
        mainWindow = mainWindow.parent;
       
    }
    
    return mainWindow;
}

//取得所属对话框
Fenrir.Window.GetOwnerDialogForms = function()
{
     if(Fenrir.Context.Current.Window == Fenrir.Context.Current.ParentWindow || Fenrir.Context.Current.ParentWindow.Fenrir == null) return;
    
    var fei, count;
    
    fei = Fenrir.Context.Current;
    count = fei.DialogFormsList.length;
    
    for(var i=0; i<count; i++)
    {
        var forms = fei.DialogForms[i];
        
        if(forms.ContentElement.contentWindow == Fenrir.Context.Current.Window)
        {
            return forms;
        }
    }
    
    return null;
}

//关闭对话框
Fenrir.Window.DialogFormsClose = function()
{
    
    var forms = Fenrir.Window.GetOwnerDialogForms();
    
    if(forms == null) return;
    forms.Close();
}

//关闭窗体
Fenrir.Window.Close = function(iDelaySec)
{
    if(iDelaySec == null)
    {
        if(Fenrir.Context.Current.Window != Fenrir.Context.Current.ParentWindow)
        {
            Fenrir.Window.DialogFormsClose();
        }
        else
        {
            Fenrir.Context.Current.Window.opener = null;
            Fenrir.Context.Current.Window.open("","_self");
            Fenrir.Context.Current.Window.close();
        }
    }
    else
    {
        setTimeout("Fenrir.Window.Close();", iDelaySec * 1000);
    }
}

//关闭窗体
function WindowClose(iDelaySec)
{
    Fenrir.Window.Close(iDelaySec);
}

//窗体当前位置信息
Fenrir.Window.Location = new Object();

//跳转页面
Fenrir.Window.Location.Redirect = function(url, iDelaySec)
{
    if(iDelaySec == null)
    {
        Fenrir.Context.Current.Window.location.href = url;
    }
    else
    {
        setTimeout(String.Format("window.location.href = '{0}';", url), iDelaySec * 1000);
    }
}

//跳转页面
function RedirectUrl(url, iDelaySec)
{
    Fenrir.Window.Location.Redirect(url, iDelaySec);
}

//窗体历史
Fenrir.Window.History = new Object();

//后退
Fenrir.Window.History.Back = function(iCount)
{
    if(iCount == null) iCount = -1;
    Fenrir.Context.Current.Window.history.back(iCount);
}

//后退
function Back()
{
    Fenrir.Window.History.Back();
}

  //取得客户端可视面积大小
Fenrir.Window.GetClientSize = function()
{
    var size;
    
    size = new Fenrir.Drawing.Size();
    size.Width = Fenrir.Context.Current.Window.document.body.clientWidth;
    size.Height = Fenrir.Context.Current.Window.document.body.clientHeight;
    
    return size;
}

  //取得页面大小
Fenrir.Window.GetPageSize = function()
{
    var size;
    
    size = new Fenrir.Drawing.Size();
    size.Width = Fenrir.Context.Current.Window.document.body.scrollWidth;
    size.Height = Fenrir.Context.Current.Window.document.body.scrollHeight;
    
    
    return size;
}

//显示对话框
Fenrir.Window.ShowMessageDialog = function(content, title, options, url, bCloseWindow)
{
    var forms = new Fenrir.Controls.MessageDialogForms(options);
    
    if(title == null) title = String.Empty;
    if(content == null) content = String.Empty;
    
    forms.SetTitle(title);
    
    forms.SetContent(content);
  
    if(String.IsNullOrEmpty(url) == false)
    {
        forms.AddClosingEventHandler(function(){  RedirectUrl(url); });
    }
    
    if(bCloseWindow == true)
    {
        forms.AddClosingEventHandler(function(){  WindowClose(); });
    }
    
    forms.Show(); 
    
    return forms;
}


//显示信息对话框
function ShowMessageDialog(content, title, options, url, bCloseWindow)
{
    return Fenrir.Window.ShowMessageDialog(content, title, options, url, bCloseWindow);
}

//警告对话框
function Warning(content, options, url, bCloseWindow)
{
    return Fenrir.Window.ShowMessageDialog(content, Fenrir.SR.FROMS_SR_Warning, options, url, bCloseWindow);
}


//显示确认对话框
Fenrir.Window.ShowConfirmDialog = function(content, title, options, fnYesHandler, fnNoHandler, fnCancelHandler, fnAnyHandler)
{
     var forms = new Fenrir.Controls.ConfirmDialogForms(options);
    
    if(title == null) title = String.Empty;
    if(content == null) content = String.Empty;
    forms.SetTitle(title);
    
    forms.SetContent(content);
    
    if(fnYesHandler != null) forms.AddClosingEventHandler(fnYesHandler, Fenrir.Controls.DialogResult.Yes);
    if(fnNoHandler != null) forms.AddClosingEventHandler(fnNoHandler, Fenrir.Controls.DialogResult.No);
    if(fnCancelHandler != null) forms.AddClosingEventHandler(fnCancelHandler, Fenrir.Controls.DialogResult.Cancel);
    if(fnAnyHandler != null) forms.AddClosingEventHandler(fnAnyHandler, Fenrir.Controls.DialogResult.Any);
    
    
    forms.Show(); 
    
    return forms;
}

//确认操作
function Confirm(content, options, fnYesHandler, fnNoHandler, fnCancelHandler, fnAnyHandler)
{
    return Fenrir.Window.ShowConfirmDialog(content, Fenrir.SR.FROMS_SR_Confirm, options, fnYesHandler, fnNoHandler, fnCancelHandler, fnAnyHandler);
}

//选择跳转
function ConfirmRedirect(content, options, sYesUrl, sNoUrl, sCancelUrl)
{
    var fnYesHandler, fnNoHandler, fnCancelHandler;
    
    fnYesHandler = String.IsNullOrEmpty(sYesUrl) == true ? null : function()
        {
            Fenrir.Window.Location.Redirect(sYesUrl);
        };
        
    fnNoHandler = String.IsNullOrEmpty(sNoUrl) == true ? null : function()
        {
            Fenrir.Window.Location.Redirect(sNoUrl);
        };
        
    fnCancelHandler = String.IsNullOrEmpty(sCancelUrl) == true ? null : function()
        {
            Fenrir.Window.Location.Redirect(sCancelUrl);
        };
        
        
    return Fenrir.Window.ShowConfirmDialogForms(content, Fenrir.SR.FROMS_SR_Select, options, fnYesHandler, fnNoHandler, fnCancelHandler);
}

//显示模态对话框
Fenrir.Window.ShowModalDialog = function(sUrl, sTitle, sOptions)
{
    var forms = new Fenrir.Controls.ModalDialogForms(sOptions);
    
    if(sTitle == null) sTitle = String.Empty;
    if(sUrl == null) sUrl = String.Empty;
    
    forms.SetTitle(sTitle);
    
    forms.SetContent(sUrl);
 
    forms.Show(); 
    
    return forms;
}
//显示模态对话框
function ShowModalDialog(sUrl, sTitle, sOptions)
{
    return Fenrir.Window.ShowModalDialog(sUrl, sTitle, sOptions);
}

//显示非模态对话框
Fenrir.Window.ShowModelessDialog = function(sUrl, sTitle, sOptions)
{
    var forms = new Fenrir.Controls.ModelessDialogForms(sOptions);
    
    if(sTitle == null) sTitle = String.Empty;
    if(sUrl == null) sUrl = String.Empty;
    
    forms.SetTitle(sTitle);
    forms.SetContent(sUrl);
    
    forms.Show(); 
    
    return forms;
}

//显示非模态对话框
function ShowModelessDialog(sUrl, sTitle, sOptions)
{
    return Fenrir.Window.ShowModelessDialog(sUrl, sTitle, sOptions);
    
}

//释放资源
Fenrir.Dispose = function(bDisposefei)
{
    Fenrir.Context.Current.Dispose();
    if(Fenrir.IsIE) CollectGarbage();
};

/************************ Fenrir.Window.Cookie **************************/

Fenrir.Window.Cookie = new Object();

Fenrir.Window.Cookie.SetValue = function(sName, sValue, tExpires, sPath, sDomain, bSecure)
{
    var cookie = sName + "=" + sValue;
    
    if(tExpires) { cookie += ";expires="+tExpires.toGMTString(); }
    if(sPath) { cookie += ";path="+sPath; }
    if(sDomain) { cookie += ";domain="+sDomain; }
    if(bSecure) { cookie += ";secure"; }
    
    document.cookie = cookie;
}

Fenrir.Window.Cookie.GetValue = function(sName)
{
    return ParseParameters(document.cookie, sName);
}

Fenrir.Window.Cookie.GetValues = function()
{
    return ParseParameters(document.cookie);
}

Fenrir.Window.Cookie.Delete = function(sName, sPath, sDomain, bSecure)
{
    Fenrir.Window.Cookie.SetValue(sName, "", new Date(0), sPath, sDomain, bSecure);
}
/************************ Fenrir.Window.Document **************************/


//取得document
Fenrir.Window.Document = new Object();

Fenrir.Window.Document.HasShieldActiveElement = false;    //是否已屏蔽控件

//根据元素ID取得元素
Fenrir.Window.Document.GetElementById = function(sId)
{
    return Fenrir.Context.Current.Window.document.getElementById(sId);
}

//根据元素ID取得元素
function $(sId)
{
    var count = arguments.length;
    
    if(count == 1)
    {
        return Fenrir.Window.Document.GetElementById(sId);
    }
    else
    {
        var result = new Fenrir.Collection.NameValueCollection();
        
        for(var i=0; i<count; i++)
        {
            var id = arguments[i];
            
            result.Add(id, Fenrir.Window.Document.GetElementById(id));
        }
        
        return result;
    }
}

//根据名称取得控件
function $N(sName)
{
    var count = arguments.length;
    
    if(count == 1)
    {
        return Fenrir.Window.Document.GetElementsByName(sName);
    }
    else
    {
         var result = new Fenrir.Collection.NameValueCollection();
        
        for(var i=0; i<count; i++)
        {
            var name = arguments[i], values;
            
            values = Fenrir.Window.Document.GetElementsByName(name);
            
            for(var j=0; j<values.length; j++)
            {
                var value = values[j];
                
                result.Add(name, value);
            }
        }
        
        return result;
    }
}

//根据标签名取得控件
function $TN(sName)
{
    var count = arguments.length;
    
    if(count == 1)
    {
        return Fenrir.Window.Document.GetElementsByTagName(sName);
    }
    else
    {
         var result = new Fenrir.Collection.NameValueCollection();
        
        var result = new Fenrir.Collection.NameValueCollection();
        
        for(var i=0; i<count; i++)
        {
            var name = arguments[i], values;
            
            values = Fenrir.Window.Document.GetElementsByTagName(name);
            
            for(var j=0; j<values.length; j++)
            {
                var value = values[j];
                
                result.Add(name, value);
            }
        }
        
        return result;
    }
}

//根据元素名取得元素
Fenrir.Window.Document.GetElementsByName = function(sName, container, funCompare)
{
    if(container == null)
    {
        return Fenrir.Convert.ToArray(Fenrir.Context.Current.Window.document.getElementsByName(sName));
    }
    else
    {
        var count = container.childNodes.length;
        var result = new Array();
        
        if(funCompare == null)
        {
            funCompare = Fenrir.Text.Equals;
        }
        
        for(var i=0; i<count; i++)
        {
            var element = container.childNodes[i], name;
            
            name = Fenrir.IsIE ? element.name : element.getAttribute == null ? null : element.getAttribute(Fenrir.SR.PROPERTYNAME_Name);
            
            if(!String.IsNullOrEmpty(name) && funCompare(name, sName))
            {
                result.Add(element);
            }
            
            if(element.childNodes.length > 0) result.Unite(Fenrir.Window.Document.GetElementsByName(sName, element, funCompare));
        }
        
        return result;
    }
}

Fenrir.Window.Document.GetParentElementByTagName = function(sTagName, eElement)
{
    var parent = eElement.parentNode;
    
    sTagName = sTagName.toLowerCase();
    
    while(parent != null)
    {
        if(parent.tagName.toLowerCase() == sTagName) return parent;
        
        parent = parent.parentNode;
    }
    
    return null;
}


Fenrir.Window.Document.GetElementByClassName = function(sClassName, eElement)
{
    var count;
    
    sClassName = sClassName.toLowerCase();
    count = eElement.childNodes.length;
    
    for(var i=0; i<count; i++)
    {
        var childElement = eElement.childNode[i];
        
        if(!String.IsNullOrEmpty(childElement.className))
        {
            var classNames = childElement.className.toLowerCase().split(' '), count, result;
            
            count = classNames.length;
            
            for(var i=0; i<count; i++)
            {
                var className = classNames[i];
                
                if(className == sClassName) return childElement;
            }
            
            result = Fenrir.Window.Document.GetElementByClassName(sClassName, childElement);
            
            if(result != null) return result;
        }
    }
  
    return null;
}

Fenrir.Window.Document.GetParentElementByClassName = function(sClassName, eElement)
{
    var parent = eElement.parentNode;
    
    sClassName = sClassName.toLowerCase();
    
    while(parent != null)
    {
        if(!String.IsNullOrEmpty(parent.className))
        {
            var classNames = parent.className.toLowerCase().split(' '), count;
            
            count = classNames.length;
            
            for(var i=0; i<count; i++)
            {
                var className = classNames[i];
                
                if(className == sClassName) return parent;
            }
        }
        parent = parent.parentNode;
    }
    
    return null;
}

//根据标签名取得元素
Fenrir.Window.Document.GetElementsByTagName = function(sName, container, funCompare)
{
    if(container == null)
    {
        return Fenrir.Convert.ToArray(Fenrir.Context.Current.Window.document.getElementsByTagName(sName));
    }
    else
    {
        return Fenrir.Convert.ToArray(container.getElementsByTagName(sName));
    }
}


//根据范围取得Select控件
Fenrir.Window.Document.GetSelectElementsByRange = function(rgRange)
{
    var selects = Fenrir.Window.Document.GetSelectElements();
    var count, result;
    
    count = selects.length;
    result = new Array();
    
    for(var i=0; i<count; i++)
    {
        var select = selects[i];
        var selRange;
        
        selRange = Fenrir.Window.Document.GetElementRange(select);
        
        if(rgRange.IntersectsWith(selRange) == true)
        {
            result.Add(select);
        }
    }
    
    return result;
}

//取得所有Select控件
Fenrir.Window.Document.GetSelectElements = function()
{
    var controls;
    
    controls = Fenrir.Window.Document.GetElementsByTagName("SELECT");
    
    return controls;
}

Fenrir.Window.Document.DisableSelectStartControl = function(control)
{
    var element;
    
    element = control instanceof Fenrir.Controls.CustomControl ? control.RelHtmlElement : control;
    
    if(Fenrir.IsIE)
    {
        element.DisableSelectStartHandler = function(){ return false;};
        Fenrir.Event.AddEventHandler(element, Fenrir.SR.EVENTNAME_SelectStart, element.DisableSelectStartHandler);
    }
    else
    {
        element.UserSelect = element.style.getPropertyValue(Fenrir.SR.CSSNAME_UserSelect);
        element.MozUserSelect = element.style.getPropertyValue(Fenrir.SR.CSSNAME_MozUserSelect);
        element.KhtmlUserSelect = element.style.getPropertyValue(Fenrir.SR.CSSNAME_KhtmlUserSelect);
        
        if(element.UserSelect != Fenrir.SR.CSSVALUE_None) element.style.setProperty(Fenrir.SR.CSSNAME_UserSelect, Fenrir.SR.CSSVALUE_None, "");
        if(element.MozUserSelect != Fenrir.SR.CSSVALUE_None) element.style.setProperty(Fenrir.SR.CSSNAME_MozUserSelect, Fenrir.SR.CSSVALUE_None, "");
        if(element.KhtmlUserSelect != Fenrir.SR.CSSVALUE_None) element.style.setProperty(Fenrir.SR.CSSNAME_KhtmlUserSelect, Fenrir.SR.CSSVALUE_None, "");
    }
}

Fenrir.Window.Document.RevertDisableSelectStartControl = function(control)
{
     var element;
    
    element = control instanceof Fenrir.Controls.CustomControl ? control.RelHtmlElement : control;
    
    if(Fenrir.IsIE)
    {
        Fenrir.Event.RemoveEventHandler(element, Fenrir.SR.EVENTNAME_SelectStart, element.DisableSelectStartHandler);
    }
    else
    {
        if(element.UserSelect != null) element.style.setProperty(Fenrir.SR.CSSNAME_UserSelect, element.UserSelect, "");
        if(element.MozUserSelect != null) element.style.setProperty(Fenrir.SR.CSSNAME_MozUserSelect, element.MozUserSelect, "");
        if(element.KhtmlUserSelect != null) element.style.setProperty(Fenrir.SR.CSSNAME_KhtmlUserSelect, element.KhtmlUserSelect, "");
    }
}

//显示控件
Fenrir.Window.Document.ShowControl = function(control, hideMode, value)
{
    if(hideMode == null) hideMode = Fenrir.Window.ElementHideMode.Visibility;
    
    var _control = control instanceof Fenrir.Controls.CustomControl ? control.RefHtmlElement : control;
        
    if(hideMode == Fenrir.Window.ElementHideMode.Display)
    {
        _control.style.display = value == null ? 'block' : value;
    }
    else
    {
        _control.style.visibility = "hidden";
    }
}

Fenrir.Window.Document.HideControls = function(controls, hideMode)
{
    var count = controls.length, _els;
    
    _els = new Array();
    
    for(var i=0; i<count; i++)
    {
        var control = controls[i];
        
        if(Fenrir.Window.Document.HideControl(control, hideMode))
        {
            _els.Add(control);
        }
    }
    
    return _els;
}

//隐藏控件
Fenrir.Window.Document.HideControl = function(control, hideMode)
{
    if(hideMode == null) hideMode = Fenrir.Window.ElementHideMode.Visibility;
    
    var _control = control instanceof Fenrir.Controls.CustomControl ? control.RefHtmlElement : control;
    
    if(hideMode == Fenrir.Window.ElementHideMode.Display)
    {
        if(_control.style.display == "none") return false;
        
        _control._display = _control.style.display;
        _control.style.display = "none";
    }
    else
    {
        if(_control.style.visibility == "hidden") return false;
        
        _control._visibility = _control.style.visibility;
        _control.style.visibility = "hidden";
    }
    _control.HasChange = true;
    
    return true;
}

//还原隐藏控件
Fenrir.Window.Document.RevertHideControl = function(control, hideMode)
{
    if(hideMode == null) hideMode = Fenrir.Window.ElementHideMode.Visibility;
    
    var _control = control instanceof Fenrir.Controls.CustomControl ? control.RefHtmlElement : control;
    
    if(_control.HasChange)
    {
      if(hideMode == Fenrir.Window.ElementHideMode.Display)
        {
            if(_control.style.display != "none") return false;
            
            _control.style.display = _control._display;
        }
        else
        {
            if(_control.style.visibility != "hidden") return false;
            
            _control.style.visibility = _control._visibility;
            _control._visibility = null;
        }
        _control.HasChange = false;
    }
    
}

Fenrir.Window.Document.RevertHideControls = function(elElements)
{
    var count = elElements.length;
    
    for(var i=0; i<count; i++)
    {
        var element = elElements[i];
        
        Fenrir.Window.Document.RevertHideControl(element);
    }
}

//隐藏所有Select控件
Fenrir.Window.Document.HideSelectElements = function(elements)
{
    var count, hideElements;
    
    if(elements == null) elements = Fenrir.Window.Document.GetSelectElements();
    count = controls.length;
    
    hideElements = new Array();
    for(var i=0; i<count; i++)
    {
        var element = elements[i];
        
        if(Fenrir.Window.Document.HideControl(element)) hideControls.Add(element);
    }
    
    return hideControls;
}

//还原隐藏的下拉框
Fenrir.Window.Document.RevertHideSelectElements = function(elements)
{
    var count, reverElements;
    
    if(elements == null) elements = Fenrir.Window.Document.GetSelectElements();
    count = elements.length;
    
    reverElements = new Array();
    for(var i=0; i<count; i++)
    {
        var element = elements[i];
        
        if(Fenrir.Window.Document.RevertHideControl(element)) reverElements.Add(element);
    }
    
    return reverElements;
}


//隐藏滚动条
Fenrir.Window.Document.HideScroll = function()
{
    if(Fenrir.Context.Current.Window.document.body._overflow == null)
    {
        Fenrir.Context.Current.Window.document.body._overflow = Fenrir.Context.Current.Window.document.body.style.overflow;
        Fenrir.Context.Current.Window.document.body.style.overflow = "hidden";
        Fenrir.Context.Current.Window.document.body.HasChange = true;
        
    }
    
    return Fenrir.Context.Current.Window.document.body.OriginalOverflow;
}

//还原隐藏的滚动条
Fenrir.Window.Document.RevertHideScroll = function()
{
    if(Fenrir.Context.Current.Window.document.body.HasChange)
    {
        Fenrir.Context.Current.Window.document.body.style.overflow = Fenrir.Context.Current.Window.document.body._overflow;
        Fenrir.Context.Current.Window.document.body._overflow = null;
        Fenrir.Context.Current.Window.document.body.HasChange = false;
    }
    
}

Fenrir.Window.Document.IsElement = function(node)
{
    return node.tagName != null;
}

//取得控件在父级中的索引
Fenrir.Window.Document.GetNodeIndex = function(node)
{
    var nodes, count, j;
    
    if(node.parentNode == null) return -1;
    
    nodes = node.parentNode.childNodes;
    count = nodes.length;
    
    for(var i=0; i<count; i++)
    {
        if(nodes[i] == node) return i;
    }
    
    return -1;
}

//取得元素的所有子元素
Fenrir.Window.Document.GetChildElements = function(element)
{
    var elements = new Array(), count;
    
    count = element.childNodes.length;
    
    for(var i=0; i<count; i++)
    {
        var node = elements.childNodes[i];
        
        if(Fenrir.Window.Document.IsElement(node))
        {
            elements.Add(node);
        }
    }
    
    return elements;
}

//取得元素的上一个平行元素
Fenrir.Window.Document.GetPrevElement = function(element)
{
    return Fenrir.Window.Document.GetPrevNode(element, true);
}

//取得控件的上一个平行节点
Fenrir.Window.Document.GetPrevNode = function(node, mustElement)
{
    var index, parent;
    
    index = Fenrir.Window.Document.GetNodeIndex (node);
    parent = node.parentNode;
    
    return Fenrir.Window.Document.GetPrevNodeByIndex(parent, index, mustElement);
}

//取得控件的下一个平行控件
Fenrir.Window.Document.GetNextElement = function(control)
{
    return Fenrir.Window.Document.GetNextNode(control, true);
}

//取得控件的下一个平行节点
Fenrir.Window.Document.GetNextNode = function(control, mustElement)
{
    var index, parent;
    
    index = Fenrir.Window.Document.GetNodeIndex (control);
    parent = control.parentNode;
    
    return Fenrir.Window.Document.GetNextNodeByIndex(parent, index, mustElement);
}

//根据Index取得上一个平行节点
Fenrir.Window.Document.GetPrevNodeByIndex = function(parent, index, mustElement)
{
    var childCount;
    
    childCount = parent.childNodes.length;
    
    if(index < 0) return null;

    for(var i=index-1; i> - 1; i--)
    {
        var childNode = parent.childNodes[i];
        
        if(mustElement == true && Fenrir.Window.Document.IsElement(childNode)) continue;
        
        return childNode;
    }
   
    return null;
}

//根据Index取得上下个平行节点
Fenrir.Window.Document.GetNextNodeByIndex = function(parent, index, mustElement)
{
    var childCount;
    
    childCount = parent.childNodes.length;
    
    if(index == -1 || index == (childCount - 1)) return null;
    
    for(var i=index+1; i<childCount; i++)
    {
        var childNode = parent.childNodes[i];
        
        if(mustElement == true && Fenrir.Window.Document.IsElement(childNode)) continue;
        
        return childNode;
    }
   
    return null;
}

//根据index取得子元素
Fenrir.Window.Document.GetChildElementByIndex = function(parent, index)
{
    var childCount, nodes;
    
    nodes = parent.childNodes;
    childCount = nodes.length;
    
    for(var i=0, j=0; i<childCount; i++)
    {
        var node = nodes[i];
        
        if(!Fenrir.Window.Document.IsElement(node)) continue;
        
        if(j == index) return node;
        
        j++;
    }
    
    return null;
}

//插入元素
Fenrir.Window.Document.InsertChild = function(childElement, parent, index, byElement)
{
    var parentNode, refChildElement, childCount;
    
    if(childElement == null || parent == null) NullReferenceException();
    
    //如果是自定义控件则使用控件自身的插入方法
    if(childElement instanceof Fenrir.Controls.CustomControl)
    {
        childElement.InsertTo(parent);
        return;
    }
    
    if(index == null) index = 0;
    childCount = parent.childNodes.length;
    
    if(index >= childCount)
    {
        Fenrir.Window.Document.AppendChild(childElement, parent);
    }
    else
    {
        if(index < 0) index = 0;
        refChildElement = byElement ? Fenrir.Window.Document.GetChildElementByIndex(parent, index) : parent.childNodes[index];
       
        Fenrir.Window.Document.InsertBeforeChild(childElement, refChildElement);
    }
}

//插入元素
Fenrir.Window.Document.InsertBeforeChild = function(newChlid, refChild)
{
    var parentNode;
    
    if(newChlid == null || refChild == null) NullReferenceException();
    
    //如果是自定义控件则使用控件自身的插入方法
    if(newChlid instanceof Fenrir.Controls.CustomControl)
    {
        newChlid.InsertBeforeTo(refChild);
        return;
    }
        
    parentNode = refChild.parentNode;
    
    if(refChild.tagName == 'BODY')
    {
        if(refChild.childNodes.length == 0)
        {
            Fenrir.Window.Document.AppendChild(newChlid, refChild);
        }
        else
        {
            Fenrir.Window.Document.InsertBeforeChild(newChlid, refChild.childNodes[0]);
        }
        
    }
    else
    {
        
        parentNode.insertBefore(newChlid, refChild);
    }
    
}

//插入元素
function InsertBeforeChildElement(newChild, refChild)
{
    Fenrir.Window.Document.InsertBeforeChild(newChild, refChild);
}

//添加子元素
Fenrir.Window.Document.AppendChild = function(child, parent)
{
    //如果是自定义控件则使用控件自身的添加方法
    if(child instanceof Fenrir.Controls.CustomControl)
    {
        child.AddTo(parent);
        return;
    }
        
    parent.appendChild(child);
}

//添加元素
function AppendChildElement(child, parent)
{
    Fenrir.Window.Document.AppendChild(child, parent);
}

//创建标签元素
Fenrir.Window.Document.CreateElement = function(tagName)
{
    return Fenrir.Context.Current.Window.document.createElement(tagName);
}

//创建标签元素
function CreateElement(tagName)
{
    return Fenrir.Window.Document.CreateElement(tagName);
}

//移除元素
Fenrir.Window.Document.RemoveElement = function(element)
{
    element.parentNode.removeChild(element);
}

//移除元素
function RemoveElement(element)
{
    Fenrir.Window.Document.RemoveElement(element);
}

//移除所有子元素
Fenrir.Window.Document.RemoveAllChildElement = function(parentElement)
{
    while(parentElement.childNodes.length != 0)
    {
        Fenrir.Window.Document.RemoveElement(parentElement.childNodes[0]);
    }
}

function RemoveAllChildElement(parentElement)
{
    Fenrir.Window.Document.RemoveAllChildElement(parentElement);
}

//移除所有行
Fenrir.Window.Document.RemoveAllRowElement = function(table)
{
    while(table.rows.length != 0)
    {
        table.deleteRow(0);
    }
}

function RemoveAllRowElement(table)
{
    Fenrir.Window.Document.RemoveAllRowElement(table);
}

//添加Option
Fenrir.Window.Document.AppendOptionElement = function(ddl, text, value, data)
{
    var item = new Option();
    
    item.innerHTML = text;
    item.value = value;
    item.DataInfo = data;
    
    AppendChildElement(item, ddl);
}

function AppendOptionElement(ddl, text, value, data)
{
    Fenrir.Window.Document.AppendOptionElement(ddl, text, value, data);
}

//取得元素所占范围
Fenrir.Window.Document.GetElementRange = function(element)
{
    var location, size; 
    
    location = Fenrir.Window.Document.GetElementLocation(element);
    size = new Fenrir.Drawing.Size(element.offsetWidth, element.offsetHeight);
    
    return new Fenrir.Drawing.Rectangle(location.X, location.Y, size.Width, size.Height);
}

//取得事件元素与鼠标点的偏移量
Fenrir.Window.Document.GetEventSrcElementOffset = function(offsetX, offsetY)
{
    var event;
    
    if(offsetX == null) offsetX = 0;
    if(offsetY == null) offsetY = 0;
    
    event = Fenrir.Event.GetEvent();
    
    if(Fenrir.IsIE)
    {
        var location = new Fenrir.Drawing.Point(event.offsetX + offsetX, event.offsetY + offsetY);
        
        return location;
    }
    else
    {
        var location = Fenrir.Window.Document.GetEventSrcElementLocation(), event;
        
        return new Fenrir.Drawing.Point(event.pageX - location.X + offsetX, event.pageY - location.Y + offsetY); 
    }
}

//取得当前事件元素所在位置
Fenrir.Window.Document.GetEventSrcElementLocation = function()
{
    var location, srcElement;
    
    srcElement = Fenrir.Event.GetEventSource();
    
    location = Fenrir.Window.Document.GetElementLocation(srcElement);
    
    return location;
}

//取得元素所在位置
Fenrir.Window.Document.GetElementLocation = function(element, bAbs)
{
    var x, y;
    
    if(bAbs)
    {
        return new Fenrir.Drawing.Point(parseInt(element.style.left), parseInt(element.style.top));
    }
    else
    {
        x = element.offsetLeft;
        y = element.offsetTop;
        while(element = element.offsetParent)
        {
            x += element.offsetLeft;
            y += element.offsetTop;
        }
        return new Fenrir.Drawing.Point(x, y);
    }
}

//取得鼠标所在位置
Fenrir.Window.Document.GetMousePageLocation = function(event)
{
    if(Fenrir.IsIE)
    {
        var p1 = Fenrir.Window.Document.GetElementLocation(event.srcElement);
        
        return new Fenrir.Drawing.Point( p1.X + event.offsetX, p1.Y + event.offsetY);
    } 
    else
    {
        return new Fenrir.Drawing.Point(event.pageX, event.pageY);
    }
}

 //取得所有下拉框
Fenrir.Window.Document.GetAllSelectElements = function(win)
{
     var count, frames, selElements, _currWin;
            
    if(win == null) win = Fenrir.Context.Current.MainWindow;
    
    _currWin = Fenrir.Context.Current.Window;
    Fenrir.Context.Current.Window = win;
    
    selElements = new Array();
    
    selElements.Unite(Fenrir.Window.Document.GetSelectElements());
    
    frames = win.frames;
    count = frames.length;
    
    for(var i=0; i<count; i++)
    {
        var frame = frames[i], sels;
        
        if(frame == null || frame.document == null) continue;
        
        sels = Fenrir.Window.Document.GetAllSelectElements(frame);
        
        selElements.Unite(sels);
    }
    
    Fenrir.Context.Current.Window = _currWin;
    
    return selElements;
}


/*************************************Fenrir.Context************************/

//窗体环境变量
Fenrir.Context = function()
{
    if(Fenrir.Context._Initialized == undefined)
    {
    
        //取得所有对话框
        Fenrir.Context.prototype.GetActiveDialogForms = function()
        {
           var count, dfs, _dfsActs;
           
           dfs = this.DialogFormsList;
           count = dfs.length;
           _dfsActs = new Array();
           
           for(var i=0; i<count; i++)
           {
                var df = dfs[i];
                
                if(df.HasShow != true || df.ShowIndex < (this.InsulateTier == null ? 0 : this.InsulateTier.ShowIndex)) continue;
                
                _dfsActs.Add(df);
           }
           
           return _dfsActs;
        }
        
        //隐藏所有下拉框元素
        Fenrir.Context.prototype.HideSelectElements = function()
        {
            var dfs, sels, count;
            
            if(this.DialogFormsList.length == 0) return;
            
            dfs = this.GetActiveDialogForms();
            sels = Fenrir.Window.Document.GetAllSelectElements();
            
            this.HideElements = new Array();
            Fenrir.Window.Document.HideControls(sels);
            this.HideElements.Unite(sels);
            
            count = dfs.length;
            
            for(var i=0; i<count; i++)
            {
                var df = dfs[i], dfRange, hasIntersects = false;
                
                dfRange = df.GetRange();
                
                for(var j=0; j<count; j++)
                {
                    var df2 = dfs[j], df2Range;
                    
                    if(i == j) continue;
                    df2Range = df2.GetRange();
                    
                    if(df.ShowIndex < df2.ShowIndex && dfRange.IntersectsWith(df2Range))
                    {
                        hasIntersects = true;
                    }
                }
                
                if(!hasIntersects)
                {
                    Fenrir.Window.Document.RevertHideControls(df.GetInnerSelectElements());
                }
            }
            
        }
        
        Fenrir.Context.prototype.RevertHideSelectElements = function()
        {
            if(this.HideElements == null) return;
            
            Fenrir.Window.Document.RevertHideControls(this.HideElements);
            
            this.HideElements.Clear();
            this.HideSelectElements();
        }
        
        Fenrir.Context.prototype.AddDialogForms = function(fmForms)
        {
            this.DialogFormsList.Add(fmForms);
        }
        
        //移除窗体
        Fenrir.Context.prototype.RemoveDialogForms = function(fmForms)
        {
            this.DialogFormsList.Remove(fmForms);
        }
        
        //取得新窗体索引
        Fenrir.Context.prototype.GetNewTierIndex = function()
        {
            var index, mainWindow;
            
            index = this.CurrentTierIndex;
            mainWindow = this.MainWindow;
            
            mainWindow.Fenrir.Context.Current.CurrentTierIndex++;
            
            return Fenrir.Context.Current.CurrentTierIndex;
        }
        
        //取得隔离层
        Fenrir.Context.prototype.GetInsulateTier = function()
        {
            var InsulateTier;
            
            InsulateTier = this.InsulateTier == null ? 
                this.MainWindow.Fenrir.Context.Current == null ? 
                    new Fenrir.Controls.InsulateTier() : this.MainWindow.Fenrir.Context.Current.InsulateTier 
                    : this.InsulateTier;
           
           if(InsulateTier == null) InsulateTier = new Fenrir.Controls.InsulateTier();
           
           this.InsulateTier = InsulateTier;
            return InsulateTier;
        }
        
        Fenrir.Context.prototype.OnResize = function()
        {
            var count, formsList;
            
            formsList = Fenrir.Context.Current.DialogFormsList;
            count = formsList.length;
            
            for(var i=0; i<count; i++)
            {
                var dialogForms = formsList[i];
                
                if(dialogForms.Resize != null) dialogForms.Resize();
            }
        }
        
        Fenrir.Context.prototype.Dispose = function()
        {
            this.DialogFormsList.Clear();
            this.ComboBoxList.Clear();
            delete this.DialogFormsList;
            delete this.MainWindow;
            if( this.InsulateTier != null)  this.InsulateTier.Dispose();
            delete this.InsulateTier;
            delete this.Window;
            delete this.ParentWindow;
            delete this.Config;
        }
        
        Fenrir.Context._Initialized == true;
    }
    
    this.DialogFormsList= new Array();    //窗体集合
    this.MainWindow = window;
    this.ComboBoxList = new Array();    //ComboBox集合
    this.CurrentTierIndex = 901;   //当前层索引
    this.InsulateTier = null; //隔离层
    this.Config = new Fenrir.Config();
    this.Window = window;
    this.ParentWindow = window.parent;
    
    
    Fenrir.Event.AddEventHandler(this.MainWindow, Fenrir.SR.EVENTNAME_Unload, Fenrir.Dispose);
    Fenrir.Event.AddEventHandler(this.MainWindow, Fenrir.SR.EVENTNAME_Resize, this.OnResize);
    
}

//取得当前窗体环境变量
Fenrir.Context.GetCurrentContext = function()
{
    var MainWindow = Fenrir.Window.GetMainWindowByFenrir();
    var CurrentContext;
    
    CurrentContext = MainWindow.Fenrir.Context.Current == null ? 
        new Fenrir.Context() : MainWindow.Fenrir.Context.Current;
        
    return CurrentContext;
}

/************************ Fenrir.Control **************************/


Fenrir.Controls = new Object();

Fenrir.Controls.SetAttributes = function(control, nvAttribute)
{
    var count, element;
    
    if(control == null || nvAttribute == null) return;
    element = control instanceof Fenrir.Controls.CustomControl ? element.RelHtmlElement : control;
    
    count = nvAttribute.Count;
    
    for(var i=0; i<count; i++)
    {
        var key, value;
        
        key = nvAttribute.GetKey(i);
        value = nvAttribute.GetValue(i);
        
        element.setAttribute(key, value);
    }
}
//创建控件
Fenrir.Controls.CreateControl = function(TagName, sOptions)
{
    var Control, options, count;
    
    Control = Fenrir.Window.Document.CreateElement(TagName);
    
    if(String.IsNullOrEmpty(options) == false)
    {
        options = ParseParameters(sOptions);
        
        Fenrir.Controls.SetAttributes(options);
    }
    
    return Control;
} 

//创建文本框
Fenrir.Controls.CreateTextBox = function(sOptions, text)
{
    var TextBox;
    
    TextBox = Fenrir.Controls.CreateControl("input", sOptions);
    if(String.IsNullOrEmpty(text) == false) TextBox.value = text;
   
    return TextBox;
}

function CreateTextBox(sOptions, text)
{
    return Fenrir.Controls.CreateTextBox(sOptions, text);
}

//复选框
Fenrir.Controls.CreateCheckBox = function(sOptions, onclickHandler)
{
    var CheckBox;
    
    //创建复选框
    CheckBox = Fenrir.Controls.CreateControl("input", sOptions);
    //设置类型
    CheckBox.setAttribute("type", "checkbox");
    
    if(onclickHandler != null) Fenrir.Event.AddEventHandler(CheckBox, Fenrir.SR.EVENTNAME_Click, onclickHandler);
    
    return CheckBox;
}

function CreateCheckBox(sOptions, onclickHandler)
{
    return Fenrir.Controls.CreateCheckBox(sOptions, onclickHandler);
}

//标签
Fenrir.Controls.CreateLabel = function(sOptions, text)
{
    var Label;
    
    //创建复选框
    Label = Fenrir.Controls.CreateControl("label", sOptions);
    if(String.IsNullOrEmpty(text) == false) Label.innerHTML = text;
    
    return Label;
}

function CreateLabel(sOptions, text)
{
    return Fenrir.Controls.CreateLabel(sOptions, text);
}

//连接
Fenrir.Controls.CreateA = function(sOptions, url)
{
    var A;
    
    A = Fenrir.Controls.CreateControl("a", sOptions);
    if(String.IsNullOrEmpty(url) == false) A.href = Url;
    
    return A;
}

function CreateA(sOptions, url)
{
    return Fenrir.Controls.CreateA(sOptions, url);
}

//图片
Fenrir.Controls.CreateImg = function(sOptions, src)
{
    var Img;
    
    Img = Fenrir.Controls.CreateControl("img", sOptions);
    if(String.IsNullOrEmpty(src) == false) Img.src = src;
    
    return Img;
}

function CreateImg(sOptions, src)
{
    return Fenrir.Controls.CreateImg(sOptions, src);
}

//层
Fenrir.Controls.CreateDiv = function(sOptions)
{
    var Div;
    
    Div = Fenrir.Controls.CreateControl("div", sOptions);
    
    return Div;
}

function CreateDiv(sOptions)
{
    return Fenrir.Controls.CreateDiv(sOptions);
}

//按钮
Fenrir.Controls.CreateButton = function(sOptions, text, onclickHandler)
{
    var Button;
    
    Button = Fenrir.Controls.CreateControl("button", sOptions);
    if(String.IsNullOrEmpty(text) == false) Button.innerHTML = text;
    
    if(onclickHandler != null) Fenrir.Event.AddEventHandler(Button, Fenrir.SR.EVENTNAME_Click, onclickHandler);
    
    return Button;
    
}

function CreateButton(sOptions, text, onclickHandler)
{
    return Fenrir.Controls.CreateButton(sOptions, text, onclickHandler);
}
    
//下拉框
Fenrir.Controls.CreateDropDownList = function(sOptions)
{
    var DropDownList;
    
    DropDownList = Fenrir.Controls.CreateControl("Select", sOptions);
    
    return DropDownList;
}

//下拉框
function CreateDropDownList(sOptions)
{
    return Fenrir.Controls.CreateDropDownList(sOptions);
}

//表格
Fenrir.Controls.CreateTable = function(sOptions)
{
    var Table;
    
    Table = Fenrir.Controls.CreateControl("Table", sOptions);
    
    return Table;
}

function CreateTable(sOptions)
{
    return Fenrir.Controls.CreateTable(sOptions);
}
     
//表格行
Fenrir.Controls.CreateTableRow = function(table)
{
    return Fenrir.IsIE ? table.insertRow() :  table.insertRow(table.rows.length);
}

//表格行
function CreateTableRow(table)
{
    return Fenrir.Controls.CreateTableRow(table);
}

//表格单元
Fenrir.Controls.CreateTableCell = function(row)
{
    return Fenrir.IsIE ? row.insertCell() :  row.insertCell(row.cells.length);
}

//表格单元
function CreateTableCell(row)
{
    return Fenrir.Controls.CreateTableCell(row);
}


Fenrir.Controls.CustomControl = function()
{
    
    if(Fenrir.Controls.CustomControl._Initialized == undefined)
    {
        
        Fenrir.Controls.CustomControl.prototype.ParseOptionsString = function(sOptions)
        {
            return ParseParameters(sOptions);
        }
        
        Fenrir.Controls.CustomControl.prototype.AddTo = function(oParentElement)
        {
            this.BindEvent();
            Fenrir.Window.Document.AppendChild(this.RelHtmlElement, oParentElement);
        }
        
        Fenrir.Controls.CustomControl.prototype.InsertTo = function(oParentElement, index, byElement)
        {
            this.BindEvent();
            Fenrir.Window.Document.InsertChild(this.RelHtmlElement, oParentElement, index, byElement);
        }
        
        Fenrir.Controls.CustomControl.prototype.InsertBeforeTo = function(refNode)
        {
            this.BindEvent();
            Fenrir.Window.Document.InsertBeforeChild(this.RelHtmlElement, refNode);
        }
        
        Fenrir.Controls.CustomControl.prototype.AddEventHandler = function(sEventName, fnHandler, arParameters)
        {
            if(this.Events == null) this.Events = new Fenrir.Event.EventList();
            this.Events.Add(sEventName, fnHandler, arParameters);
        }
        
        Fenrir.Controls.CustomControl.prototype.AddClickEventHandler = function(fnHandler, arParameters)
        {
            this.AddEventHandler(Fenrir.SR.EVENTNAME_Click, fnHandler, arParameters);
        }
        
        Fenrir.Controls.CustomControl.prototype.BindEvent = function()
        {
            if(this.BindEvented) return;
            this._BindEvent();
            this.BindEvented = true;
        }
        
        Fenrir.Controls.CustomControl.prototype._BindEvent = function()
        {
            Fenrir.Exception.NotImplementedException();
        }
        
        Fenrir.Controls.CustomControl.prototype.OnEvent = function(sEventName, args)
        {
            if(args == null) args = new Fenrir.Event.EventArgs();
            
            if(this.Events == null) return args;
            
            return this.Events.ActiveEvent(sEventName, this, args);
        }
        
        Fenrir.Controls.CustomControl._Initialized = true;
        
    }
    
    this.BindEvented = false;
    this.RelHtmlElement = null;
    
}

Fenrir.Controls.CustomControl.GetEventSourceControl = function(sTagName, elSource)
{
    if(elSource == null) elSource = Fenrir.Event.GetEventSource();
    
    return elSource == null ? null : Fenrir.Controls.CustomControl.GetControlByElement(sTagName, elSource);
}

Fenrir.Controls.CustomControl.GetControlByElement = function(tagName, element)
{
    var parentElement = Fenrir.Window.Document.GetParentElementByClassName(tagName, element);
    
    return parentElement.OwnerControl;
}

Fenrir.Controls.ComboBoxStyle = new Object();
Fenrir.Controls.ComboBoxStyle.Simple = 0;
Fenrir.Controls.ComboBoxStyle.DropDown = 1;
Fenrir.Controls.ComboBoxStyle.DropDownList = 2;
//创建组合框
Fenrir.Controls.ComboBox = function(sOptions, eRelHtmlElement)
{
    var comboBox, cbxHtml;
    
    
    if(Fenrir.Controls.ComboBox._Initialized == undefined)
    {
    
        Fenrir.Controls.ComboBox.TagName = "ComboBox";
        Fenrir.Controls.ComboBox.prototype.ParseOptionsString = function(sOptions)
        {
            var options = ParseParameters(sOptions);
            var width, height, itemHeight, maxDropDownItems, dropDownArrImageUrl;
    
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_Width)) options.SetValue(Fenrir.SR.PROPERTYNAME_Width, Fenrir.Context.Current.Config.ComboBox_Width);
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_Height)) options.SetValue(Fenrir.SR.PROPERTYNAME_Height, Fenrir.Context.Current.Config.ComboBox_Height);
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_ItemHeight)) options.SetValue(Fenrir.SR.PROPERTYNAME_ItemHeight, Fenrir.Context.Current.Config.ComboBox_ItemHeight);
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_MaxDropDownItems)) options.SetValue(Fenrir.SR.PROPERTYNAME_MaxDropDownItems, Fenrir.Context.Current.Config.ComboBox_MaxDropDownItems);
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_DropDownArrImageUrl)) options.SetValue(Fenrir.SR.PROPERTYNAME_DropDownArrImageUrl, Fenrir.Context.Current.Config.ComboBox_DropDownArrImageUrl);
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_DropDownArrImageWidth)) options.SetValue(Fenrir.SR.PROPERTYNAME_DropDownArrImageWidth, Fenrir.Context.Current.Config.ComboBox_DropDownArrImageWidth);
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_DropDownStyle)) options.SetValue(Fenrir.SR.PROPERTYNAME_DropDownStyle, Fenrir.Controls.ComboBoxStyle.DropDown);
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_BorderColor)) options.SetValue(Fenrir.SR.PROPERTYNAME_BorderColor, Fenrir.Context.Current.Config.ComboBox_BorderColor);
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_AutoUpdateSelectedIndexByText)) options.SetValue(Fenrir.SR.PROPERTYNAME_AutoUpdateSelectedIndexByText, true);
            
            maxDropDownItems = options.ContainsKey(Fenrir.SR.PROPERTYNAME_MaxDropDownItems) ? parseInt(options.GetValue(Fenrir.SR.PROPERTYNAME_MaxDropDownItems)) : Fenrir.Context.Current.Config.ComboBox_MaxDropDownItems;
            
            dropDownArrImageUrl = options.ContainsKey(Fenrir.SR.PROPERTYNAME_DropDownArrImageUrl) ? options.GetValue(Fenrir.SR.PROPERTYNAME_DropDownArrImageUrl) : Fenrir.Context.Current.Config.ComboBox_DropDownArrImageUrl;
            
            return options;
        }
        
        Fenrir.Controls.ComboBox.prototype.CreateHtmlElement = function()
        {
            var id, name, control, width, height, itemHeight, borderColor, maxDorpDownItems, dropDownArrImageUrl, dropDownArrImageWidth, dropDownItemsHeight, borderWidth = 2, autoUpdateSelectedIndexByText;
            
            width = this.Options.GetInt32(Fenrir.SR.PROPERTYNAME_Width);
            height = this.Options.GetInt32(Fenrir.SR.PROPERTYNAME_Height);
            itemHeight = this.Options.GetInt32(Fenrir.SR.PROPERTYNAME_ItemHeight);
            maxDorpDownItems = this.Options.GetInt32(Fenrir.SR.PROPERTYNAME_MaxDropDownItems);
            dropDownArrImageUrl = this.Options.GetValue(Fenrir.SR.PROPERTYNAME_DropDownArrImageUrl);
            dropDownArrImageWidth = this.Options.GetInt32(Fenrir.SR.PROPERTYNAME_DropDownArrImageWidth);
            borderColor = this.Options.GetValue(Fenrir.SR.PROPERTYNAME_BorderColor);
            dropDownItemsHeight = (itemHeight + 2) * maxDorpDownItems;
            id = this.Options.GetValue(Fenrir.SR.PROPERTYNAME_Id);
            name = this.Options.GetValue(Fenrir.SR.PROPERTYNAME_Name);
            autoUpdateSelectedIndexByText = this.Options.GetBoolean(Fenrir.SR.PROPERTYNAME_AutoUpdateSelectedIndexByText);
            
            cbxHtml = new Fenrir.Text.StringBuilder();
            
            cbxHtml.AppendFormat("<div class='combobox' id='{0}' style='border-color:{1};'><table cellpadding='0' cellspacing='0' border='0' width='{2}px' style='display:inline;'>",
                id, borderColor, width);
                
            cbxHtml.AppendFormat("<tr><td style='border: 1px solid {0};'><table cellpadding='0' cellspacing='0' border='0' width='100%'>", borderColor);
            cbxHtml.AppendFormat("<tr><td style='height:{0}'><input type='text' style='width:{1}px;cursor:{2}' name='{3}ItemText' {4} /><input type='hidden' name='{3}ItemValue' /><input type='hidden' name='{3}ItemIndex' />", 
                height,
                this.DropDownStyle == Fenrir.Controls.ComboBoxStyle.Simple ? 
                    width - borderWidth : (width - dropDownArrImageWidth - borderWidth),
                    this.DropDownStyle == Fenrir.Controls.ComboBoxStyle.DropDownList ? "default" : "text",
                    String.IsNullOrEmpty(name) ? String.Empty : this.Options.GetValue(Fenrir.SR.PROPERTYNAME_Name) + "_",
                    this.DropDownStyle == Fenrir.Controls.ComboBoxStyle.DropDownList ? "readonly" : String.Empty);
            
            cbxHtml.AppendFormat("</td><td class='DropDown_arr' name='DropDownArr' style='width:{0}px;height:{1}px;display:{2};background-image:url({3});'><div style='width:100%;height:100%;border:0;cursor:default'></div></td></tr></table></td></tr>", 
                dropDownArrImageWidth,
                height,
                this.DropDownStyle == Fenrir.Controls.ComboBoxStyle.Simple ? 'none' : 'block',
                dropDownArrImageUrl);
                
            cbxHtml.AppendFormat("<tr><td><div name='Items' style='width:{0}px;;position:{1}; display:{2};border-color:{3};' class='ListItemCellection'>", 
                width - (Fenrir.IsIE ? 0 : borderWidth), 
                this.DropDownStyle == Fenrir.Controls.ComboBoxStyle.Simple ? 'static' : 'absolute',
                this.DropDownStyle == Fenrir.Controls.ComboBoxStyle.Simple ? 'block' : 'none',
                borderColor);
                
            cbxHtml.AppendFormat("<table cellpadding='0' cellspacing='0' border='0' width='100%'>");
            cbxHtml.AppendFormat("</table></div></td></tr></table></div>");
            
            control = Fenrir.Controls.CreateControl(Fenrir.Controls.ComboBox.TagName);
            control.innerHTML = cbxHtml.ToString();
            
            return control;
        }
        
        Fenrir.Controls.ComboBox.prototype.CreateListItemCellection = function()
        {
            return new Fenrir.Controls.ListItemCellection(this);
        }
        
        Fenrir.Controls.ComboBox.prototype.SelectedIndex_Changed = function(source, args)
        {
            if(source.SelectedIndex != -1)
            {
                source.SelectedItem = source.Items.GetItemByIndex(source.SelectedIndex);
                source.SelectedText = source.SelectedItem.Text;
                source.SelectedValue = source.SelectedItem.Value;
            }
            else
            {
                source.SelectedItem = null;
                source.SelectedText = source._ItemTextContainer.value;
                source.SelectedValue = null;
            }
            
            source._ItemTextContainer.value = source.SelectedText;
            source._ItemValueContainer.value = source.SelectedValue;
            source._ItemIndexContainer.value = source.SelectedIndex;
        }
        
        Fenrir.Controls.ComboBox.prototype.OnSelectedIndexChanged = function(args)
        {
            this.OnEvent(Fenrir.SR.EVENTNAME_SelectedIndexChanged, args);
            
        }
        
        Fenrir.Controls.ComboBox.prototype.DropDownArr_Click = function(source, args)
        {
            var control;
            
            control = source;
            
            if(control.DropDownStyle == Fenrir.Controls.ComboBoxStyle.Simple) return;
            
            if(control.DropDownStyle == Fenrir.Controls.ComboBoxStyle.DropDown && args.SrcElement != control._DropDownArr.childNodes[0]) return;
            
            if(control.HasShowItems) control.HideItems(); else control.ShowItems();
        }
        
        Fenrir.Controls.ComboBox.prototype.ShowItems = function()
        {
            if(this.HasShowItems) return;
            
            Fenrir.Window.Document.ShowControl(this._ItemsContainer, Fenrir.Window.ElementHideMode.Display);
            
            this._ItemsContainer.style.zIndex = Fenrir.Context.Current.GetNewTierIndex();
            
            this.HasShowItems = true;
        }
        
        Fenrir.Controls.ComboBox.prototype.HideItems = function()
        {
            if(!this.HasShowItems) return;
            Fenrir.Window.Document.HideControl(this._ItemsContainer, Fenrir.Window.ElementHideMode.Display);
            this.HasShowItems = false;
        }
        
        Fenrir.Controls.ComboBox.prototype.LoadOptionsByRelHtmlElementAttribute = function()
        {
            var options = new Fenrir.Collections.NameValueCollection(true);
            var id, name, control, width, height, itemHeight, maxDorpDownItems, dropDownArrImageUrl, dropDownArrImageWidth, dropDownItemsHeight, dropDownStyle, borderColor, autoUpdateSelectedIndexByText;
            
            id = this.RelHtmlElement.getAttribute(Fenrir.SR.PROPERTYNAME_Id);
            name = this.RelHtmlElement.getAttribute(Fenrir.SR.PROPERTYNAME_Name);
            width = this.RelHtmlElement.getAttribute(Fenrir.SR.PROPERTYNAME_Width);
            height = this.RelHtmlElement.getAttribute(Fenrir.SR.PROPERTYNAME_Height);
            itemHeight = this.RelHtmlElement.getAttribute(Fenrir.SR.PROPERTYNAME_ItemHeight);
            maxDorpDownItems = this.RelHtmlElement.getAttribute(Fenrir.SR.PROPERTYNAME_MaxDropDownItems);
            dropDownArrImageUrl = this.RelHtmlElement.getAttribute(Fenrir.SR.PROPERTYNAME_DropDownArrImageUrl);
            dropDownArrImageWidth = this.RelHtmlElement.getAttribute(Fenrir.SR.PROPERTYNAME_DropDownArrImageWidth);
            dropDownStyle = this.RelHtmlElement.getAttribute(Fenrir.SR.PROPERTYNAME_DropDownStyle);
            borderColor = this.RelHtmlElement.getAttribute(Fenrir.SR.PROPERTYNAME_BorderColor);
            autoUpdateSelectedIndexByText = this.RelHtmlElement.getAttribute(Fenrir.SR.PROPERTYNAME_AutoUpdateSelectedIndexByText);
            
            if(id != null) options.Add(Fenrir.SR.PROPERTYNAME_Id, id);
            if(name != null) options.Add(Fenrir.SR.PROPERTYNAME_Id, name);
            
            options.Add(Fenrir.SR.PROPERTYNAME_Width, width == null ? Fenrir.Context.Current.Config.ComboBox_Width : width);
            options.Add(Fenrir.SR.PROPERTYNAME_Height, height == null ? Fenrir.Context.Current.Config.ComboBox_Height : height);
            options.Add(Fenrir.SR.PROPERTYNAME_ItemHeight, itemHeight == null ? Fenrir.Context.Current.Config.ComboBox_ItemHeight : itemHeight);
            options.Add(Fenrir.SR.PROPERTYNAME_MaxDropDownItems, maxDorpDownItems == null ? Fenrir.Context.Current.Config.ComboBox_MaxDropDownItems : maxDorpDownItems);
            options.Add(Fenrir.SR.PROPERTYNAME_DropDownArrImageUrl, dropDownArrImageUrl == null ? Fenrir.Context.Current.Config.ComboBox_DropDownArrImageUrl : dropDownArrImageUrl);
            options.Add(Fenrir.SR.PROPERTYNAME_DropDownArrImageWidth, dropDownArrImageWidth == null ? Fenrir.Context.Current.Config.ComboBox_DropDownArrImageWidth : dropDownArrImageWidth);
            options.Add(Fenrir.SR.PROPERTYNAME_DropDownStyle, dropDownStyle == null ? Fenrir.Controls.ComboBoxStyle.DropDown : dropDownStyle);
            options.Add(Fenrir.SR.PROPERTYNAME_BorderColor, borderColor == null ? Fenrir.Context.Current.Config.PROPERTYNAME_BorderColor : borderColor);
            options.Add(Fenrir.SR.PROPERTYNAME_AutoUpdateSelectedIndexByText, autoUpdateSelectedIndexByText == null ? true : autoUpdateSelectedIndexByText);

            return options;
        }
     
        Fenrir.Controls.ComboBox.prototype.ReItemsHeight = function()
        {
            var itemsHeight = this.GetItemsHeight();
            
            this._ItemsContainer.style.height = itemsHeight;
            
        }   
        
        Fenrir.Controls.ComboBox.prototype.GetItemsHeight = function()
        {
            var itemCount, itemsHeight;
            
            itemCount = this.Items.Count > this.MaxDropDownItems || this.Items.Count == 0 ? this.MaxDropDownItems : this.Items.Count;
            itemHeight = this.Options.GetInt32(Fenrir.SR.PROPERTYNAME_ItemHeight);
            itemsHeight = (itemHeight) * itemCount + 1;
            
            return itemsHeight;
        }
        
        Fenrir.Controls.ComboBox.prototype.Item_TextChanged = function(source, args)
        {
            var control, text, selectedIndex;

            control = source;
            
            if(control.DropDownStyle == Fenrir.Controls.ComboBoxStyle.DropDownList) return;
            
            text = args.SrcElement.value;
            
            if(control.AutoUpdateSelectedIndexByText)
            {
                var item = control.Items.FindByText(text);

                selectedIndex = item == null ? -1 : item.Index;
            }
            else
            {
                selectedIndex = -1;
            }
            
            if(control.SelectedIndex != selectedIndex)
            {
                control.SelectedIndex = selectedIndex;
                control.OnSelectedIndexChanged(control);
            }
        }
        
        Fenrir.Controls.ComboBox.prototype._BindEvent = function()
        {
            if(this.RelHtmlElement == null) Fenrir.Exception.NullReferenceException();
            
            //点击事件
            Fenrir.Event.AddEventHandler(this.RelHtmlElement, Fenrir.SR.EVENTNAME_Click, this.OnClick);
            Fenrir.Event.AddEventHandler(this._ItemTextContainer, Fenrir.SR.EVENTNAME_Change, this.OnTextChanged);
            //其他区域单击时隐藏下拉列表
            Fenrir.Event.AddEventHandler(document.body, Fenrir.SR.EVENTNAME_Click, Fenrir.Controls.ComboBox.HideAllItems);
        }
        
        Fenrir.Controls.ComboBox.prototype.OnTextChanged = function()
        {
            var control;
            
            control = Fenrir.Controls.CustomControl.GetEventSourceControl(Fenrir.Controls.ComboBox.TagName);
            
            control.OnEvent(Fenrir.SR.EVENTNAME_TextChanged);
        }
        
        Fenrir.Controls.ComboBox.prototype.OnClick = function()
        {
            var control;
            
            control = Fenrir.Controls.CustomControl.GetEventSourceControl(Fenrir.Controls.ComboBox.TagName);
            
            control.OnEvent(Fenrir.SR.EVENTNAME_Click);
        }
        
        Fenrir.Controls.ComboBox.prototype.AddTextChangedEventHandler = function(fnHandler, arParameter)
        {
            this.AddEventHandler(Fenrir.SR.EVENTNAME_TextChanged, fnHandler, arParameter);
        }
        
        Fenrir.Controls.ComboBox.prototype.AddSelectedIndexChangedEventHandler = function(fnHandler, arParameter)
        {
            this.AddEventHandler(Fenrir.SR.EVENTNAME_SelectedIndexChanged, fnHandler, arParameter);
        }
        
        Fenrir.Controls.ComboBox._Initialized = true;
        
    }
    
    var inputs, isLoadFromElement;

    isLoadFromElement = eRelHtmlElement != null;
    
    if(isLoadFromElement)
    {
        var selectedItem;
        
        this.RelHtmlElement = eRelHtmlElement;
        this.RelHtmlElement.OwnerControl = this;
        this.Options = this.LoadOptionsByRelHtmlElementAttribute();
        this.DropDownStyle = this.Options.GetInt32(Fenrir.SR.PROPERTYNAME_DropDownStyle);
        this.HasShowItems = this.DropDownStyle == Fenrir.Controls.ComboBoxStyle.Simple;
        this.SelectedIndex = eRelHtmlElement.getAttribute(Fenrir.SR.PROPERTYNAME_SelectedIndex) == null ? -1 : parseInt(eRelHtmlElement.getAttribute(Fenrir.SR.PROPERTYNAME_SelectedIndex));
        if(this.SelectedIndex == null) this.SelectedIndex = -1;
        
        this._ItemsContainer = Fenrir.Window.Document.GetElementsByName(Fenrir.SR.COMBOBOX_Name_Items, this.RelHtmlElement)[0];
        if(Fenrir.IsIE == false) this._ItemsContainer.style.width = parseInt(this._ItemsContainer.style.width) - 2;
        this.Items = Fenrir.Controls.ListItemCellection.Load(this);
        
    }
    else
    {
        this.SelectedIndex = -1;
        this.SelectedItem = null;
        this.SelectedValue = null;
        this.SelectedText = null;
        this.Options = this.ParseOptionsString(sOptions);
        
        this.DropDownStyle = this.Options.GetInt32(Fenrir.SR.PROPERTYNAME_DropDownStyle);
        this.HasShowItems = this.DropDownStyle == Fenrir.Controls.ComboBoxStyle.Simple;
        this.RelHtmlElement = this.CreateHtmlElement().childNodes[0];
        this.RelHtmlElement.OwnerControl = this;
        
        this._ItemsContainer = Fenrir.Window.Document.GetElementsByName(Fenrir.SR.COMBOBOX_Name_Items, this.RelHtmlElement)[0];
        this.Items = this.CreateListItemCellection();
    }
    
    inputs = Fenrir.Window.Document.GetElementsByTagName('input', this.RelHtmlElement);
    this.MaxDropDownItems = this.Options.GetInt32(Fenrir.SR.PROPERTYNAME_MaxDropDownItems);
    this._ItemTextContainer = inputs[0];
    this._ItemValueContainer = inputs[1];
    this._ItemIndexContainer = inputs[2];
    this.AutoUpdateSelectedIndexByText = this.Options.GetBoolean(Fenrir.SR.PROPERTYNAME_AutoUpdateSelectedIndexByText);
    this._DropDownArr = Fenrir.Window.Document.GetElementsByName(Fenrir.SR.COMBOBOX_Name_DropDownArr, this.RelHtmlElement)[0];
    
    
    //添加下拉箭头点击事件
    this.AddClickEventHandler(this.DropDownArr_Click);
    this.AddEventHandler(Fenrir.SR.EVENTNAME_Change, this.DropDownArr_Click);
    this.AddEventHandler(Fenrir.SR.EVENTNAME_SelectedIndexChanged, this.SelectedIndex_Changed);
    this.AddEventHandler(Fenrir.SR.EVENTNAME_TextChanged, this.Item_TextChanged);
    
    this.ReItemsHeight();
    
    //有默认选中项时触发索引改变事件
    if(this.SelectedIndex != -1)
    {
        this.OnSelectedIndexChanged(this);
    }
    
    //非从标签载入时设置文本框字体
    if(!isLoadFromElement)
    {
        var fontSize, fontFamily;
        
        fontSize = this.Options.GetValue(Fenrir.SR.CSSNAME_FontSize);
        fontFamily = this.Options.GetValue(Fenrir.SR.CSSNAME_FontFamily);
        
        if(fontSize != null) this._ItemTextContainer.style.fontSize = fontSize;
        if(fontFamily != null) this._ItemTextContainer.style.fontFamily = fontFamily;
    }
    
    Fenrir.Context.Current.ComboBoxList.Add(this); //添加到全局列表中
}

Fenrir.Controls.ComboBox.prototype = new Fenrir.Controls.CustomControl();

Fenrir.Controls.ComboBox.HideAllItems = function()
{
    var count, list, evnSource;
    
    list = Fenrir.Context.Current.ComboBoxList;
    count = list.length;
    evnSource = Fenrir.Event.GetEventSource();
    
    for(var i=0; i<count; i++)
    {
        var cbx = list[i];
        
        if(cbx.HasShowItems && cbx.DropDownStyle != Fenrir.Controls.ComboBoxStyle.Simple &&
            evnSource != cbx._DropDownArr.childNodes[0] && (
            cbx.DropDownStyle != Fenrir.Controls.ComboBoxStyle.DropDownList ||  
            evnSource != cbx._ItemTextContainer))
        {
            cbx.HideItems();
        }
    }
}

        
Fenrir.Controls.ComboBox.LoadById = function(id)
{
    var element = $(id), cbx;
    
    if(element == null) NullReferenceException();
    cbx = new Fenrir.Controls.ComboBox(null, element);
    cbx.BindEvent();
    return cbx;
}

Fenrir.Controls.ListItem = function(text, value)
{
    if(Fenrir.Controls.ListItem._Initialized == undefined)
    {
        Fenrir.Controls.ListItem.prototype.AcceptChanges = function()
        {
            if(this.RelHtmlElement == null) return;
            
            this.RelHtmlElement.childNodes[0].childNodes[0].innerHTML = this.Text;
        }
        
        /***************** 事件处理 *************/
        Fenrir.Controls.ListItem.prototype.OnMouseOver = function()
        {
            var control;
            
            control = Fenrir.Controls.CustomControl.GetEventSourceControl(Fenrir.Controls.ListItem.TagName);
            
            control.OnEvent(Fenrir.SR.EVENTNAME_MouseOver)
        }
        
        Fenrir.Controls.ListItem.prototype.OnMouseOut = function()
        {
            var control;
            
            control = Fenrir.Controls.CustomControl.GetEventSourceControl(Fenrir.Controls.ListItem.TagName);
            
            control.OnEvent(Fenrir.SR.EVENTNAME_MouseOut)
        }
        
        Fenrir.Controls.ListItem.prototype.OnClick = function()
        {
            var control;
            
            control = Fenrir.Controls.CustomControl.GetEventSourceControl(Fenrir.Controls.ListItem.TagName);
            
            control.OnEvent(Fenrir.SR.EVENTNAME_Click)
        }
        
        Fenrir.Controls.ListItem.prototype.Item_Click = function(source, args)
        {
            var row = args.SrcElement.parentNode, control = source;
            
            if(row == null) return;
            
            if(row.rowIndex != control._Container._Container.SelectedIndex)
            {
                control._Container._Container.SelectedIndex = row.rowIndex;
                
                control._Container._Container.OnSelectedIndexChanged(args);
            }
        }
        
        Fenrir.Controls.ListItem.prototype.Item_MouseOver = function(source, args)
        {
            var row = args.SrcElement.parentNode;
            
            row.cells[0].className = "MouseOver";
        }
        
        Fenrir.Controls.ListItem.prototype.Item_MouseOut = function(source, args)
        {
            var row = args.SrcElement.parentNode;
            
            row.cells[0].className = "";
        }
        
        Fenrir.Controls.ListItem.prototype._BindEvent = function()
        {
            Fenrir.Event.AddEventHandler(this.RelHtmlElement, Fenrir.SR.EVENTNAME_MouseOver, this.OnMouseOver);
            Fenrir.Event.AddEventHandler(this.RelHtmlElement, Fenrir.SR.EVENTNAME_MouseOut, this.OnMouseOut);
            Fenrir.Event.AddEventHandler(this.RelHtmlElement, Fenrir.SR.EVENTNAME_Click, this.OnClick);
        }
        
        Fenrir.Controls.ListItem._Initialized = true;
    }
    
    if(Fenrir.IsLoad)
    {
        this.Text = text;
        this.Value = value;
        this.Index = -1;
        this._Container = null;
        this.RelHtmlElement = null;
        
        this.AddClickEventHandler(this.Item_Click);
        this.AddEventHandler(Fenrir.SR.EVENTNAME_MouseOver, this.Item_MouseOver);
        this.AddEventHandler(Fenrir.SR.EVENTNAME_MouseOut, this.Item_MouseOut);
    }
}

Fenrir.Controls.ListItem.prototype = new Fenrir.Controls.CustomControl();
Fenrir.Controls.ListItem.TagName = "ListItem";

Fenrir.Controls.ListItem.Load = function(row, container)
{
    var item, text, value;
    
    text = row.cells[0].innerHTML;
    value = row.getAttribute(Fenrir.SR.PROPERTYNAME_ItemValue);
    item = new Fenrir.Controls.ListItem(text, value);
    item.RelHtmlElement = row;
    item._Container = container;
    row.OwnerControl = item;
    
    return item;
}

Fenrir.Controls.ListItemCellection = function(container)
{
    
    if(Fenrir.Controls.ListItemCellection._Initialized == undefined)
    {
    
        /*********** 操作项 ************/
        Fenrir.Controls.ListItemCellection.prototype.Add = function(text, value)
        {
            var item = new Fenrir.Controls.ListItem(text, value);
            
            item._Container = this;
            item.Index = this.Count;
            item.RelHtmlElement = this.CreateItemRelHtmlElement(item);
            item.RelHtmlElement.OwnerControl = item;
            item.BindEvent();
            this.Count = this._items.Add(item);
            this._Container.ReItemsHeight();
            
            return item;
        }
        
        Fenrir.Controls.ListItemCellection.prototype.FindByText = function(sText)
        {
            var count = this.Count;
            
            for(var i=0; i<count; i++)
            {
                var item = this._items[i];
                
                if(item.Text == sText) return item;
            }
            
            return null;
        }
        
        Fenrir.Controls.ListItemCellection.prototype.Remove = function(liItem)
        {
            this.RemoveByIndex(liItem.Index);
        }
        
        Fenrir.Controls.ListItemCellection.prototype.RemoveByIndex = function(iIndex)
        {
            var delItem;

            if(iIndex < 0 || iIndex >= this.Count) return;
            
            delItem = this._items[iIndex];
            this.Count = this._items.RemoveByIndex(iIndex);
            
            for(var i=0; i<this.Count; i++)
            {
                var item = this._items[i];
                
                item.Index = i;
            }
            
            if(this._Container.SelectedItem == delItem)
            {
                var args = new Fenrir.Event.EventArgs(Fenrir.Event.Empty, this);
                
                this._Container.SelectedIndex = -1;
                control._Container._Container.OnSelectedIndexChanged(args);
                return;
            }
            
            if(this._Container.SelectedIndex > iIndex)
            {
                this._Container.SelectedIndex -= 1;
                this._Container._ItemIndexContainer.value = this._Container.SelectedIndex;
            }
        }
        
        Fenrir.Controls.ListItemCellection.prototype.GetItemByIndex = function(iIndex)
        {
            return this._items[iIndex];
        }
        
        Fenrir.Controls.ListItemCellection.prototype.GetItemsTableElement = function()
        {
            return Fenrir.Window.Document.GetChildElementByIndex(this.RelHtmlElement, 0);
        }
        
        Fenrir.Controls.ListItemCellection.prototype.CreateItemRelHtmlElement = function(liItem)
        {
            var tr, td, fontSize, fontFamily;
            
            tr = Fenrir.Controls.CreateTableRow(this.GetItemsTableElement());
            tr.setAttribute(Fenrir.SR.PROPERTYNAME_ItemValue, liItem.Value);
            tr.className = "ListItem";
            //this.BindItemEvent(tr);
            td = Fenrir.Controls.CreateTableCell(tr);
            td.style.height = this._Container.Options.GetValue(Fenrir.SR.PROPERTYNAME_ItemHeight);
            
            fontSize = this._Container.Options.GetValue(Fenrir.SR.CSSNAME_FontSize);
            fontFamily = this._Container.Options.GetValue(Fenrir.SR.CSSNAME_FontFamily);
            
            if(fontSize != null) td.style.fontSize = fontSize;
            if(fontFamily != null) td.style.fontFamily = fontFamily;
            
            td.innerHTML = liItem.Text;
            
            return tr;
        }
        
        Fenrir.Controls.ListItemCellection.prototype._BindEvent = function()
        {
        }
        
        
        Fenrir.Controls.ListItemCellection._Initialized = true;
    }
    
    if(container == null) NullReferenceException();
    this.Count = 0;
    this._Container = container;
    this.RelHtmlElement = this._Container._ItemsContainer;
    this.RelHtmlElement.OwnerControl = this;
    this._items = new Array();
    
    
}

Fenrir.Controls.ListItemCellection.prototype = new Fenrir.Controls.CustomControl();
Fenrir.Controls.ListItemCellection.TagName = "ListItemCellection";
        
Fenrir.Controls.ListItemCellection.Load = function(container)
{
    var items = new Fenrir.Controls.ListItemCellection(container), table, count;
    
    table = items.GetItemsTableElement();
    count = table.rows.length;
    
    for(var i=0; i<count; i++)
    {
        var item, text, value, row;
        
        row = table.rows[i];
        item = Fenrir.Controls.ListItem.Load(row, items);
        item.Index = i;
        items._items.Add(item);
        item.BindEvent();
    }
    items.Count = count;
    return items;
}


//拖动对象信息
Fenrir.Controls.DragInfo = function(targetElement, moveElement, bAbs)
{
    if(targetElement == null) Fenrir.Exception.NullReferenceException();
    if(bAbs == null) bAbs = false;
    this.TargetElement = targetElement;
    this.MoveElement = moveElement == null ? targetElement : moveElement;
    this.Events = new Fenrir.Event.EventList();
    this.IsAbs = bAbs;
    
    if(Fenrir.Controls.DragInfo._Initialized == undefined)
    {
        Fenrir.Controls.DragInfo.prototype.RefreshLocation = function()
        {
            this.Location = Fenrir.Window.Document.GetElementLocation(this.MoveElement, this.IsAbs);
        }
        
        //添加事件
        Fenrir.Controls.DragInfo.prototype.AddEventHandler = function(sEventName, fnHandler, arParameter)
        {
            this.Events.Add(sEventName, fnHandler, arParameter);
        }
        
        Fenrir.Controls.DragInfo.prototype.AddMoveStartEventHandler = function(fnHandler, arParameter)
        {
            this.AddEventHandler(Fenrir.SR.EVENTNAME_MoveStart, fnHandler, arParameter);
        }
        
        Fenrir.Controls.DragInfo.prototype.AddMovingEventHandler = function(fnHandler, arParameter)
        {
            this.AddEventHandler(Fenrir.SR.EVENTNAME_Moving, fnHandler, arParameter);
        }
        
        Fenrir.Controls.DragInfo.prototype.AddMoveEndEventHandler = function(fnHandler, arParameter)
        {
            this.AddEventHandler(Fenrir.SR.EVENTNAME_MoveEnd, fnHandler, arParameter);
        }
        
        //删除事件
        Fenrir.Controls.DragInfo.prototype.RemoveEventHandler = function(sEventName, fnHandler)
        {
            this.Events.Remove(sEventName, fnHandler);
        }
        
        Fenrir.Controls.DragInfo.prototype.RemoveMoveStartEventHandler = function(fnHandler)
        {
            this.RemoveEventHandler(Fenrir.SR.EVENTNAME_MoveStart, fnHandler);
        }
        
        Fenrir.Controls.DragInfo.prototype.RemoveMovingEventHandler = function(fnHandler)
        {
            this.RemoveEventHandler(Fenrir.SR.EVENTNAME_Moving, fnHandler);
        }
        
        Fenrir.Controls.DragInfo.prototype.RemoveMoveEndEventHandler = function(fnHandler)
        {
            this.RemoveEventHandler(Fenrir.SR.EVENTNAME_MoveEnd, fnHandler);
        }
        
        //激活事件
        Fenrir.Controls.DragInfo.prototype.OnEvent = function(sEventName)
        {
            return this.Events.ActiveEvent(sEventName, this, new Fenrir.Event.EventArgs());
        }
        
        Fenrir.Controls.DragInfo.prototype.OnMoveStart = function()
        {
            return this.OnEvent(Fenrir.SR.EVENTNAME_MoveStart);
        }
        
        Fenrir.Controls.DragInfo.prototype.OnMoving = function()
        {
            return this.OnEvent(Fenrir.SR.EVENTNAME_Moving);
        }
        
        Fenrir.Controls.DragInfo.prototype.OnMoveEnd = function()
        {
            return this.OnEvent(Fenrir.SR.EVENTNAME_MoveEnd);
        }
        Fenrir.Controls.DragInfo._Initialized = true;
    }
}

//拖动对象信息
Fenrir.Controls.DragUtil = 
{
    DragList : new Array(),
    CurrentDragInfo : null,
    PrevPoint : null,
    
    ChangeLocation : function(locInfo)
    {
        var dragInfo = Fenrir.Controls.DragUtil.CurrentDragInfo;
        
        dragInfo.MoveElement.style.position = "absolute";
        dragInfo.MoveElement.style.left = locInfo.X;
        dragInfo.MoveElement.style.top = locInfo.Y;
        dragInfo.IsAbs = true;
        
    },
    
    MoveEnd : function()
    {
        var dragInfo = Fenrir.Controls.DragUtil.CurrentDragInfo, args;
        
        args = dragInfo.OnMoveEnd();
        if(args.IsCancel) return;
        
        dragInfo.TargetElement.style.cursor = dragInfo.TargetElement.Cursor;
        Fenrir.Window.Document.RevertDisableSelectStartControl(dragInfo.TargetElement);
        Fenrir.Event.RemoveEventHandler(dragInfo.TargetElement, Fenrir.SR.EVENTNAME_MouseOut, Fenrir.Controls.DragUtil.MoveEnd);
        Fenrir.Event.RemoveEventHandler(dragInfo.TargetElement.ownerDocument.body, Fenrir.SR.EVENTNAME_MouseUp, Fenrir.Controls.DragUtil.MoveEnd);
        Fenrir.Event.RemoveEventHandler(dragInfo.TargetElement.ownerDocument.body, Fenrir.SR.EVENTNAME_MouseMove, Fenrir.Controls.DragUtil.Moving);
        
        Fenrir.Controls.DragUtil.CurrentDragInfo == null;
    },
    
    Moving : function()
    {
        var dragInfo, location, event, currPoint, prevPoint, args;
        
        dragInfo = Fenrir.Controls.DragUtil.CurrentDragInfo;
        
        
        event = Fenrir.Event.GetEvent();
        currPoint = new Fenrir.Drawing.Point(event.clientX, event.clientY);
        prevPoint = Fenrir.Controls.DragUtil.PrevPoint;
        Fenrir.Controls.DragUtil.PrevPoint = currPoint;
        
        args = dragInfo.OnMoving();
        if(args.IsCancel) return;
        location = dragInfo.Location;
        
        location.X += currPoint.X - prevPoint.X;
        location.Y += currPoint.Y - prevPoint.Y;
        
        Fenrir.Controls.DragUtil.ChangeLocation(location);
        
    },
    
    MoveStart : function(index)
    {
        var dragInfo, event, args;
        
        event = Fenrir.Event.GetEvent();
        
        if(event.button != (Fenrir.IsIE ? 1 : 0)) return;
        
        dragInfo = Fenrir.Controls.DragUtil.DragList[index];
        
        if(dragInfo == null) return;//找不到对应信息则跳出
        
        args = dragInfo.OnMoveStart();
        if(args.IsCancel) return;
        
        Fenrir.Controls.DragUtil.CurrentDragInfo = dragInfo;
        
        Fenrir.Controls.DragUtil.PrevPoint = new Fenrir.Drawing.Point(event.clientX, event.clientY);
        dragInfo.RefreshLocation();
        
        Fenrir.Window.Document.DisableSelectStartControl(dragInfo.TargetElement);
        
        dragInfo.TargetElement.Cursor = dragInfo.TargetElement.style.cursor;
        dragInfo.TargetElement.style.cursor = Fenrir.SR.CSSVALUE_Move;
        
        Fenrir.Event.AddEventHandler(dragInfo.TargetElement, Fenrir.SR.EVENTNAME_MouseOut, Fenrir.Controls.DragUtil.MoveEnd);
        Fenrir.Event.AddEventHandler(dragInfo.TargetElement.ownerDocument.body, Fenrir.SR.EVENTNAME_MouseUp, Fenrir.Controls.DragUtil.MoveEnd);
        Fenrir.Event.AddEventHandler(dragInfo.TargetElement.ownerDocument.body, Fenrir.SR.EVENTNAME_MouseMove, Fenrir.Controls.DragUtil.Moving);
        
    },
    
    Add : function(diInfo)
    {
        var index;
        
        index = Fenrir.Controls.DragUtil.DragList.Add(diInfo) - 1;
        
        diInfo.DragStartHandler = function(){ Fenrir.Controls.DragUtil.MoveStart(index); }
        Fenrir.Event.AddEventHandler(diInfo.TargetElement, Fenrir.SR.EVENTNAME_MouseDown, diInfo.DragStartHandler );
        
        return  index;
    },
    
    Remove : function(diInfo)
    {
        Fenrir.Controls.DragUtil.DragList.Remove(diInfo);
        
        Fenrir.Event.RemoveEventHandler(diInfo.TargetElement, Fenrir.SR.EVENTNAME_MouseDown, diInfo.DragStartHandler);
        
        if(diInfo == Fenrir.Controls.DragUtil.CurrentDragInfo)
        {
            Fenrir.Controls.DragUtil.MoveEnd();
        }
    },
    
    RemoveByTargetElement : function(targetElement)
    {
        var count = Fenrir.Controls.DragUtil.DragList.length;
        
        for(var i=0; i<count; i++)
        {
            var dragInfo = Fenrir.Controls.DragUtil.DragList[i];
            
            if(dragInfo.TargetElement == targetElement)
            {
                Fenrir.Controls.DragUtil.Remove(dragInfo);
                return true;
            }
        }
        
        return false;
    }
}

//模拟对话框事件参数
Fenrir.Controls.DialogFormsEventArgs = function(iDialogResult, oReturnValue, event)
{
    this.DialogResult = iDialogResult;
    this.DialogReturnValue = oReturnValue;
    
    if(Fenrir.IsLoad && !Fenrir.Event.EventArgs.DisabledTraceSource)
    {
        this.Event = event == null ? Fenrir.Event.GetEvent() : event;
    
        this.SrcElement = Fenrir.Event.EventArgs.DisabledTraceSource ? Fenrir.Event.EventArgs.PrevSrcElement : Fenrir.Event.GetEventSource(this.Event);
    
        Fenrir.Event.EventArgs.PrevSrcElement = this.SrcElement;
    }
}

//继承于Fenrir.Event.EventArgs
Fenrir.Controls.DialogFormsEventArgs.prototype = new Fenrir.Event.EventArgs();

//窗体状态
Fenrir.Controls.FormWindowState = new Object();
Fenrir.Controls.FormWindowState.Normal  = 0;
Fenrir.Controls.FormWindowState.Minimized  = 1;
Fenrir.Controls.FormWindowState.Maximized  = 2;
    

//对话框结果
Fenrir.Controls.DialogResult = new Object()
Fenrir.Controls.DialogResult.None = 1; 
Fenrir.Controls.DialogResult.OK = 2; 
Fenrir.Controls.DialogResult.Cancel = 3; 
Fenrir.Controls.DialogResult.Abort = 4; 
Fenrir.Controls.DialogResult.Retry = 5; 
Fenrir.Controls.DialogResult.Ignore = 6; 
Fenrir.Controls.DialogResult.Yes = 7; 
Fenrir.Controls.DialogResult.No = 8; 
Fenrir.Controls.DialogResult.Any = 9; 

//模拟对话框基类 继承于 Fenrir.Controls.CustomControl
Fenrir.Controls.BaseDialogForms = function()
{
    
    //初始化函数
    if(Fenrir.Controls.BaseDialogForms._Initialized == undefined)
    {
        
        //取得对话框结果
        Fenrir.Controls.BaseDialogForms.prototype.GetDialogResult = function(){
            
            return this.DialogResult;
        }
        
        //取得返回值
        Fenrir.Controls.BaseDialogForms.prototype.GetDialogReturnValue = function(){
            
            return null;
        }
        //设置标题
        Fenrir.Controls.BaseDialogForms.prototype.SetTitle = function(sTitle){
        
            if(this.Inited == false) this.InitControl();    //初始化窗体
            if(this.TitleLabel == null) return;
            
            this.TitleLabel.innerHTML = sTitle;
        };
        
        //显示隔离层
        Fenrir.Controls.BaseDialogForms.prototype.ShowInsulateTier = function()
        {
            this.InsulateTier.Show(50);
        }
        
        //关闭隔离层
        Fenrir.Controls.BaseDialogForms.prototype.CloseInsulateTier = function()
        {
            this.InsulateTier.Close();
        }
        
        //添加关闭事件处理函数
        Fenrir.Controls.BaseDialogForms.prototype.AddClosingEventHandler = function(fnHandler, iResult)
        {
            var _fnHandler, parameters, __fnHandler;
            
            //将字符串自动转换为函数
            _fnHandler = typeof(fnHandler) == "string" ? function(source, args) { eval(fnHandler); } : fnHandler;
            //取得参数
            parameters = Array.Slice(arguments, 2);
            
            if(iResult == null) iResult = Fenrir.Controls.DialogResult.Any;
            
            __fnHandler = function(source, args){
                    
                    if(iResult == Fenrir.Controls.DialogResult.Any || iResult == args.DialogResult)
                    {
                        _fnHandler(source, args);
                    }
                }
                
            //添加进事件列表
            this.AddEventHandler(Fenrir.SR.EVENTNAME_Closed, __fnHandler, parameters);
        };
        
        //设置宽度
        Fenrir.Controls.BaseDialogForms.prototype.SetFormsWidth = function(iWidth)
        {
            this.RelHtmlElement.style.width = iWidth;
        }
        
        //设置高度
        Fenrir.Controls.BaseDialogForms.prototype.SetFormsHeight = function(iHeight)
        {
            this.RelHtmlElement.style.height = iHeight;
        }
        
        //刷新窗体显示索引
        Fenrir.Controls.BaseDialogForms.prototype.RefreshShowIndex = function()
        {
            this.ShowIndex = Fenrir.Context.Current.GetNewTierIndex();
            this.RelHtmlElement.style.zIndex = this.ShowIndex;
        }
        
        //取得所在范围
        Fenrir.Controls.BaseDialogForms.prototype.GetRange = function()
        {
            if(this.Range == null) this.Range = Fenrir.Window.Document.GetElementRange(this.RelHtmlElement);
            
            return this.Range;
        }
        
        //取得内容元素
        Fenrir.Controls.BaseDialogForms.prototype.GetContentElement = function()
        {
            Fenrir.Exception.NotImplementedException();
        }
        
        //初始化窗体
        Fenrir.Controls.BaseDialogForms.prototype.InitControl = function()
        {
            if(this.Inited) return;
        
            this.Options = this.ParseOptionsString(this.OptionsStr);
            
            this.RelHtmlElement = this.CreateHtmlElement();
            
            var bTitle, bMaxButton, bMinButton, bCloseButton, bAcceptButton, bYesButton, bNoButton, bCancelButton;
            
            bTitle = this.Options.GetBoolean(Fenrir.SR.PROPERTYNAME_Title);
            bMinButton = this.Options.GetBoolean(Fenrir.SR.PROPERTYNAME_MinButton);
            bMaxButton = this.Options.GetBoolean(Fenrir.SR.PROPERTYNAME_MaxButton);
            bCloseButton = this.Options.GetBoolean(Fenrir.SR.PROPERTYNAME_CloseButton);
            bAcceptButton = this.Options.GetBoolean(Fenrir.SR.PROPERTYNAME_AcceptButton);
            bYesButton = this.Options.GetBoolean(Fenrir.SR.PROPERTYNAME_YesButton);
            bNoButton = this.Options.GetBoolean(Fenrir.SR.PROPERTYNAME_NoButton);
            bCancelButton = this.Options.GetBoolean(Fenrir.SR.PROPERTYNAME_CancelButton);
            this.ShowHeader = bTitle;
            this.ShowFooter = bAcceptButton || bYesButton || bNoButton || bCancelButton;
            
            if(bTitle)
            {
                //取得标题行
                controls = Fenrir.Window.Document.GetElementsByName(Fenrir.SR.FORMS_Name_RowTitle, this.RelHtmlElement);
                this.TitleRow = controls.length == 0 ? null : controls[0];
                
                //取得标题
                controls = Fenrir.Window.Document.GetElementsByName(Fenrir.SR.FORMS_Name_LabTitle, this.RelHtmlElement);
                this.TitleLabel = controls.length == 0 ? null : controls[0];
                
                this.TitleCell = this.TitleRow.childNodes[0].childNodes[0].childNodes[0].childNodes[0].childNodes[1];
            
            }
            
            //取得内容行
            controls = Fenrir.Window.Document.GetElementsByName(Fenrir.SR.FORMS_Name_RowContent, this.RelHtmlElement);
            this.ContentRow = controls.length == 0 ? null : controls[0];
                
            //取得内容
            this.ContentElement = this.GetContentElement();
            
            
            if(bCloseButton)
            {
                //取得关闭按钮
                controls = Fenrir.Window.Document.GetElementsByName(Fenrir.SR.FORMS_Name_BtnClose, this.RelHtmlElement);
                this.CloseButton = controls.length == 0 ? null : controls[0];
             }
            
            if(bMaxButton)
            {
                //取得最大化按钮
                controls = Fenrir.Window.Document.GetElementsByName(Fenrir.SR.FORMS_Name_BtnMax, this.RelHtmlElement);
                this.MaxButton = controls.length == 0 ? null : controls[0];
            }
            
            if(bMinButton)
            {
                //取得最小化按钮
                controls = Fenrir.Window.Document.GetElementsByName(Fenrir.SR.FORMS_Name_BtnMin, this.RelHtmlElement);
                this.MinButton = controls.length == 0 ? null : controls[0];
            }
            
            if(bAcceptButton)
            {
                //取得确认按钮
                controls = Fenrir.Window.Document.GetElementsByName(Fenrir.SR.FORMS_Name_BtnAccept, this.RelHtmlElement);
                this.AcceptButton = controls.length == 0 ? null : controls[0];
            }
            
            if(bYesButton)
            {
                //取得同意按钮
                controls = Fenrir.Window.Document.GetElementsByName(Fenrir.SR.FORMS_Name_BtnYes, this.RelHtmlElement);
                this.YesButton = controls.length == 0 ? null : controls[0];
            }
            
            if(bNoButton)
            {
                //取得否决按钮
                controls = Fenrir.Window.Document.GetElementsByName(Fenrir.SR.FORMS_Name_BtnNo, this.RelHtmlElement);
                this.NoButton = controls.length == 0 ? null : controls[0];
            }
            
            if(bCancelButton)
            {
                //取得取消按钮控件
                controls = Fenrir.Window.Document.GetElementsByName(Fenrir.SR.FORMS_Name_BtnCancel, this.RelHtmlElement);
                this.CancelButton = controls.length == 0 ? null : controls[0];
                
            }
            
            if(this.ShowFooter)
            {
                controls = Fenrir.Window.Document.GetElementsByName(Fenrir.SR.FORMS_Name_RowFooter, this.RelHtmlElement);
                this.FooterRow = controls.length == 0 ? null : controls[0];
            }
            
            this.InsulateTier = Fenrir.Context.Current.GetInsulateTier();
            this.Inited = true;
            this.RelHtmlElement.OwnerControl = this;
            Fenrir.Context.Current.AddDialogForms(this);
        };
    
        //释放资源
        Fenrir.Controls.BaseDialogForms.prototype.Dispose = function()
        {
            Fenrir.Context.Current.RemoveDialogForms(this);
            
            
            delete this.ContentElement;
            delete this.RelHtmlElement;
            
            if(this.Events != null) this.Events.Dispose();
           
            delete this.Options;
            delete this.InsulateTier;
            delete this.DialogReturnValue;
            delete this.MaxButton;
            delete this.MinButton;
            delete this.CloseButton;
            delete this.AcceptButton;
            delete this.YesButton;
            delete this.NoButton;
            delete this.CancelButton;
            delete this.TitleLabel;
            
            if(Fenrir.IsIE) CollectGarbage();
        };
        
        
        Fenrir.Controls.BaseDialogForms.prototype.GetInnerSelectElements = function()
        {
            return new Array();
        }
        
        
        //隐藏下拉框
        Fenrir.Controls.BaseDialogForms.prototype.HideSelectElements = function()
        {
            Fenrir.Context.Current.HideSelectElements();
        }
        
        //还原隐藏下拉框
        Fenrir.Controls.BaseDialogForms.prototype.RevertHideSelectElements = function()
        {
            Fenrir.Context.Current.RevertHideSelectElements();
        }
        
        //显示窗体
        Fenrir.Controls.BaseDialogForms.prototype.Show = function()
        {
            if(this.HasShow == true) return;
            if(this.Inited == false) this.InitControl();    //初始化窗体
            
            this.ShowInsulateTier();    //显示隔离层
            this.RefreshShowIndex();    //刷新显示优先级
            if(Fenrir.IsIE) this.HideSelectElements();   //隐藏下拉框
            
            this.InsertTo(Fenrir.Context.Current.MainWindow.document.body); //插入对话框
           
            this.HasShow = true;
        };
        
        Fenrir.Controls.BaseDialogForms.prototype.GetTagName = function()
        {
            Fenrir.Exception.NotImplementedException();
        }
        
        Fenrir.Controls.BaseDialogForms.prototype.CreateContentHtmlElement = function()
        {
            Fenrir.Exception.NotImplementedException();
        }
        
        Fenrir.Controls.BaseDialogForms.prototype.GetCenterLocation = function()
        {
            var pageSize, scrollTop, scrollLeft, cenLoc, clientSize;
            
            pageSize = new Fenrir.Drawing.Size(Fenrir.Context.Current.MainWindow.document.body.offsetWidth, Fenrir.Context.Current.MainWindow.document.body.offsetHeight);
            clientSize = new Fenrir.Drawing.Size(Fenrir.Context.Current.MainWindow.document.body.clientWidth, Fenrir.Context.Current.MainWindow.document.body.clientHeight);
            scrollTop = Fenrir.Context.Current.MainWindow.document.body.scrollTop;
            scrollLeft = Fenrir.Context.Current.MainWindow.document.body.scrollLeft;
            
            
            cenLoc = new Fenrir.Drawing.Point(((pageSize.Width > clientSize.Width ? pageSize.Width : clientSize.Width) + scrollLeft - this.Options.GetInt32(Fenrir.SR.PROPERTYNAME_Width)) / 2,
                ((pageSize.Height > clientSize.Height ? pageSize.Height : clientSize.Height) + 
                scrollTop - this.Options.GetInt32(Fenrir.SR.PROPERTYNAME_Height)) / 2);
            
            if(cenLoc.X < 0) cenLoc.X = 0;
            if(cenLoc.Y < 0) cenLoc.Y = 0;
            
            return cenLoc;
        }
        
        Fenrir.Controls.BaseDialogForms.prototype.CreateHtmlElement = function()
        {
            var forms, dfsHtml, tagNames, tagName, width, height, bTitle, bMaxButton, bMinButton, bCloseButton;
            var bAcceptButton, bYesButton, bNoButton, bCancelButton, cenLoc, titleWidth;
            
            tagNames = this.GetTagName().split(' ');
            tagName = tagNames[tagNames.length - 1];
            
            width = this.Options.GetValue(Fenrir.SR.PROPERTYNAME_Width);
            height = this.Options.GetValue(Fenrir.SR.PROPERTYNAME_Height);
            bTitle = this.Options.GetBoolean(Fenrir.SR.PROPERTYNAME_Title)
            bMinButton = this.Options.GetBoolean(Fenrir.SR.PROPERTYNAME_MinButton);
            bMaxButton = this.Options.GetBoolean(Fenrir.SR.PROPERTYNAME_MaxButton);
            bCloseButton = this.Options.GetBoolean(Fenrir.SR.PROPERTYNAME_CloseButton);
            
            bAcceptButton = this.Options.GetBoolean(Fenrir.SR.PROPERTYNAME_AcceptButton);
            bYesButton = this.Options.GetBoolean(Fenrir.SR.PROPERTYNAME_YesButton);
            bNoButton = this.Options.GetBoolean(Fenrir.SR.PROPERTYNAME_NoButton);
            bCancelButton = this.Options.GetBoolean(Fenrir.SR.PROPERTYNAME_CancelButton);
            titleWidth = Fenrir.Convert.ToInt32(width) - 100;
            
            cenLoc = this.GetCenterLocation();
            
            forms = Fenrir.Controls.CreateControl(tagName);
            //生成HTML
            dfsHtml = new Fenrir.Text.StringBuilder();
                
            dfsHtml.AppendFormat("<div class='{0}' name='{1}' style='width:{2};height:{3};top:{4};left:{5};position:absolute' onselectstart='return false;'>", this.GetTagName(), Fenrir.SR.FORMS_Name_DivMain, width, height, cenLoc.Y, cenLoc.X);
            dfsHtml.Append("<table cellspacing='0' cellpadding='0' style='width:100%;height:100%'>", Fenrir.SR.FORMS_Name_RowTitle);
            
            if(bTitle)
            {
                dfsHtml.AppendFormat("<tr name='{0}'>", Fenrir.SR.FORMS_Name_RowTitle);
                dfsHtml.AppendFormat("<td valign='middle' class='title' style='background-image:url({0})'>", Fenrir.Context.Current.Config.FORMS_IMAGES_Bgi_Title);
                dfsHtml.Append("<table cellspacing='0' cellpadding='0'>");
                dfsHtml.AppendFormat("<tr><td width='20'><img src='{0}' align='absmiddle' /></td>", Fenrir.Context.Current.Config.FORMS_IMAGES_Ico_Title);
                dfsHtml.AppendFormat("<td><label name='{0}' style='width:{1}'></label></td><td width='60' align='right'>", Fenrir.SR.FORMS_Name_LabTitle, titleWidth);
                
                if(bMinButton)
                    dfsHtml.AppendFormat("<img src='{0}' name='{1}' />", Fenrir.Context.Current.Config.FORMS_IMAGES_Btn_Min, Fenrir.SR.FORMS_Name_BtnMin);
                    
                if(bMaxButton)
                    dfsHtml.AppendFormat("<img src='{0}' name='{1}' />", Fenrir.Context.Current.Config.FORMS_IMAGES_Btn_Max, Fenrir.SR.FORMS_Name_BtnMax);
                    
                if(bCloseButton)
                    dfsHtml.AppendFormat("<img src='{0}' name='{1}' />", Fenrir.Context.Current.Config.FORMS_IMAGES_Btn_Close, Fenrir.SR.FORMS_Name_BtnClose);
                    
                dfsHtml.Append("&nbsp;</td></tr></table></td></tr>");
            }
            
            //内容
            dfsHtml.AppendFormat("<tr name='{0}'><td valign='middle'>{1}</td></tr>", Fenrir.SR.FORMS_Name_RowContent, this.CreateContentHtmlElement());
            
            
            
            //页脚按钮
            if(bAcceptButton || bYesButton || bNoButton || bCancelButton)
            {
                dfsHtml.AppendFormat("<tr name='{0}'><td class='footer'>", Fenrir.SR.FORMS_Name_RowFooter);
                //确认按钮
                if(bAcceptButton)
                {
                    dfsHtml.AppendFormat("<button hidefocus='hidefocus' name='btn_forms_Accept'>{0}</button>", Fenrir.SR.FROMS_SR_Accept);
                }
                //同意按钮
                if(bYesButton)
                {
                    dfsHtml.AppendFormat("<button hidefocus='hidefocus' name='btn_forms_Yes'>{0}</button>", Fenrir.SR.FROMS_SR_Yes);
                }
                //否决按钮
                if(bNoButton)
                {
                    dfsHtml.AppendFormat("<button hidefocus='hidefocus' name='btn_forms_No'>{0}</button>", Fenrir.SR.FROMS_SR_No);
                }
                //取消按钮
                if(bCancelButton)
                {
                    dfsHtml.AppendFormat("<button hidefocus='hidefocus' name='btn_forms_Cancel'>{0}</button>", Fenrir.SR.FROMS_SR_Cancel);
                }
                dfsHtml.Append("</td></tr>");
            }
            
            dfsHtml.Append("</table></div>");
            
            
            forms.innerHTML = dfsHtml.ToString();
            
            return forms.childNodes[0];
        }
        
        //关闭窗体
        Fenrir.Controls.BaseDialogForms.prototype.Close = function()
        {
            this.OnClosing();
        }
        
        //聚焦
        Fenrir.Controls.BaseDialogForms.prototype.OnFocus = function()
        {
            var control;
            
            control = Fenrir.Controls.CustomControl.GetEventSourceControl(Fenrir.Controls.BaseDialogForms.TagName);
            
            control.Focus();
            
            control.OnEvent(Fenrir.SR.EVENTNAME_Focus);
        }
        
        Fenrir.Controls.BaseDialogForms.prototype.Focus = function()
        {   
            
            if(this.ShowIndex == Fenrir.Context.Current.CurrentTierIndex) return;
            
            this.RefreshShowIndex();
            Fenrir.Context.Current.RevertHideSelectElements();
        }
        
        Fenrir.Controls.BaseDialogForms.prototype.OnClosed = function(source, args)
        {
            var control;
            
            control = source;
            
            args = control.OnEvent(Fenrir.SR.EVENTNAME_Closed, args)
            
            if(args.IsCancel) return;
            
            Fenrir.Context.Current.MainWindow.RemoveElement(this.RelHtmlElement);    //移除对话框
            
            control.CloseInsulateTier();   //关闭隔离层
            
            control.HasShow = false;
            
            control.Dispose(); //释放资源
            if(Fenrir.IsIE) control.RevertHideSelectElements();
           
        }
        
        Fenrir.Controls.BaseDialogForms.prototype.OnEvent = function(sEventName, args)
        {
            if(args == null) args = new Fenrir.Controls.DialogFormsEventArgs(this.DialogResult, this.DialogReturnValue);
            
            if(this.Events == null) return args;
            
            return this.Events.ActiveEvent(sEventName, this, args);
        }
        
        Fenrir.Controls.BaseDialogForms.prototype._BindEvent = function()
        {
            if(this.AcceptButton) Fenrir.Event.AddEventHandler(this.AcceptButton, Fenrir.SR.EVENTNAME_Click, this.OnClosing);
            if(this.YesButton) Fenrir.Event.AddEventHandler(this.YesButton, Fenrir.SR.EVENTNAME_Click, this.OnClosing);
            if(this.NoButton) Fenrir.Event.AddEventHandler(this.NoButton, Fenrir.SR.EVENTNAME_Click, this.OnClosing);
            if(this.CancelButton) Fenrir.Event.AddEventHandler(this.CancelButton, Fenrir.SR.EVENTNAME_Click, this.OnClosing);
            
            if(this.MaxButton) Fenrir.Event.AddEventHandler(this.MaxButton, Fenrir.SR.EVENTNAME_Click, this.OnWindowStateChanged);
            if(this.MinButton) Fenrir.Event.AddEventHandler(this.MinButton, Fenrir.SR.EVENTNAME_Click, this.OnWindowStateChanged);
            if(this.CloseButton) Fenrir.Event.AddEventHandler(this.CloseButton, Fenrir.SR.EVENTNAME_Click, this.OnClosing);
            if(this.TitleCell)
            {
                var dragInfo;
                
                dragInfo = new Fenrir.Controls.DragInfo(this.TitleCell, this.RelHtmlElement, true);
                
                dragInfo.AddMoveStartEventHandler(this.Forms_MoveStart);
                dragInfo.AddMovingEventHandler(this.OnMoving);
                dragInfo.AddMoveEndEventHandler(this.Forms_MoveEnd);
                
                Fenrir.Controls.DragUtil.Add(dragInfo);
                
                Fenrir.Event.AddEventHandler(this.TitleCell, Fenrir.SR.EVENTNAME_DblClick, this.OnWindowStateChanged);
                Fenrir.Event.AddEventHandler(this.TitleCell, Fenrir.SR.EVENTNAME_Click, this.OnFocus);
            }
        }
        
        //开始移动窗体
        Fenrir.Controls.BaseDialogForms.prototype.Forms_MoveStart = function(diSource, args)
        {
            var control, args;
            
            if(diSource == null) return;
            control = Fenrir.Controls.CustomControl.GetEventSourceControl(Fenrir.Controls.BaseDialogForms.TagName, diSource.TargetElement);
            if(control == null) return;
            
            control._Title = control.TitleLabel.innerHTML;
            control.SetTitle(Fenrir.SR.FORMS_SR_Moving);
            Fenrir.Context.Current.MovingControl = control;
        }
        
        //移动窗体结束
        Fenrir.Controls.BaseDialogForms.prototype.Forms_MoveEnd = function(diSource, args)
        {
            var control, args;
            
            if(diSource == null) return;
            control = Fenrir.Controls.CustomControl.GetEventSourceControl(Fenrir.Controls.BaseDialogForms.TagName, diSource.TargetElement);
            if(control == null) return;
            
            control.SetTitle(control._Title);
            control._Title = "";
            
            this.Range = null;
            
            if(Fenrir.IsIE) Fenrir.Context.Current.RevertHideSelectElements();
        }
        
        //移动窗体中
        Fenrir.Controls.BaseDialogForms.prototype.OnMoving = function(diSource, args)
        {
            var control, args;
            
            if(diSource == null) return;
            control = Fenrir.Controls.CustomControl.GetEventSourceControl(Fenrir.Controls.BaseDialogForms.TagName, diSource.TargetElement);
            if(control == null) return;
            
            args = control.OnEvent(Fenrir.SR.EVENTNAME_Moving);
            
        }
        
        Fenrir.Controls.BaseDialogForms.prototype.OnClosing = function()
        {
            var control, args;
            
            
            control = Fenrir.Controls.CustomControl.GetEventSourceControl(Fenrir.Controls.BaseDialogForms.TagName);
            
            if(control.HasShow == false) return;
            
            control.DialogResult = control.GetDialogResult();
            control.DialogReturnValue = control.GetDialogReturnValue();
            
            args = control.OnEvent(Fenrir.SR.EVENTNAME_Closing)
            
            if(args.IsCancel) return;
            
            control.OnClosed(control, args);
        }
        
        
        Fenrir.Controls.BaseDialogForms.prototype.OnWindowStateChanged = function()
        {
            var windowState, width, height, control, args;
            
            control = Fenrir.Controls.CustomControl.GetEventSourceControl(Fenrir.Controls.BaseDialogForms.TagName);
            args = control.OnEvent(Fenrir.SR.EVENTNAME_WindowStateChanged);
            
            switch(args.SrcElement)
            {
                case control.MaxButton : 
                    windowState = Fenrir.Controls.FormWindowState.Maximized;
                    break;
                case control.MinButton :
                    windowState = Fenrir.Controls.FormWindowState.Minimized;
                    break;
                default :
                    windowState = Fenrir.Controls.FormWindowState.Normal;
                    break;
                    
            }
            
            if(windowState == Fenrir.Controls.FormWindowState.Normal) return;
            if(windowState == Fenrir.Controls.FormWindowState.Maximized && control.WindowState == Fenrir.Controls.FormWindowState.Maximized) windowState = Fenrir.Controls.FormWindowState.Normal;
            if(windowState == Fenrir.Controls.FormWindowState.Minimized && control.WindowState == Fenrir.Controls.FormWindowState.Minimized) windowState = Fenrir.Controls.FormWindowState.Normal;
            
            control.WindowState = windowState;
            control.Resize();
        }

        
        Fenrir.Controls.BaseDialogForms.prototype.ChangeLocation = function(piLoc)
        {
            this.RelHtmlElement.style.left = piLoc.X;
            this.RelHtmlElement.style.top = piLoc.Y;
        }
        
        Fenrir.Controls.BaseDialogForms.prototype.Resize = function()
        {
            var width, height;
            
            if(this.WindowState == Fenrir.Controls.FormWindowState.Maximized)
            {
                var size;
                
                Fenrir.Window.Document.HideScroll();
                size = Fenrir.Window.GetClientSize();
                width = size.Width - this.BorderWidth;
                height = size.Height;
                
                
                Fenrir.Window.Document.ShowControl(this.ContentRow, Fenrir.Window.ElementHideMode.Display);
                if(this.ShowFooter) Fenrir.Window.Document.ShowControl(this.FooterRow, Fenrir.Window.ElementHideMode.Display);
                this.ChangeLocation(new Fenrir.Drawing.Point(0, 0)); 
                this.DisabledMove = true;
                
            }
            else if(this.WindowState == Fenrir.Controls.FormWindowState.Normal)
            {
                
                width = this.Options.GetInt32(Fenrir.SR.PROPERTYNAME_Width);
                height = this.Options.GetInt32(Fenrir.SR.PROPERTYNAME_Height);
                
                this.DisabledMove = false;
                Fenrir.Window.Document.ShowControl(this.ContentRow, Fenrir.Window.ElementHideMode.Display);
                if(this.ShowFooter) Fenrir.Window.Document.ShowControl(this.FooterRow, Fenrir.Window.ElementHideMode.Display);
                this.ChangeLocation(this.GetCenterLocation()); 
                
                Fenrir.Window.Document.RevertHideScroll();
            }
            else
            {
                
                width = this.Options.GetInt32(Fenrir.SR.PROPERTYNAME_Width);
                height = this.HeaderHeight;
                
                this.DisabledMove = false;
                Fenrir.Window.Document.HideControl(this.ContentRow, Fenrir.Window.ElementHideMode.Display);
                if(this.ShowFooter) Fenrir.Window.Document.HideControl(this.FooterRow, Fenrir.Window.ElementHideMode.Display);
                var size = Fenrir.Window.GetClientSize();
                this.ChangeLocation(new Fenrir.Drawing.Point(0, size.Height - this.HeaderHeight - (Fenrir.IsIE ? 0 : 3))); 
                
                Fenrir.Window.Document.RevertHideScroll();
                
            }
            
            
            //FF时内容是IFRAME则定义其宽度 -- FF太恶心了。。。100%居然没用。。。
            if(!Fenrir.IsIE)
            {
                this.ContentRow.style.width = width;
                this.ContentRow.style.height = height - (this.WindowState == Fenrir.Controls.FormWindowState.Minimized ? 0 :(
                (this.ShowHeader ? this.HeaderHeight : 0) + (this.ShowFooter ? this.FooterHeight : 0) + this.BorderWidth));
                
                if(this.ContentElement.contentWindow != null)
                {
                    this.ContentElement.style.width = width - this.LeftWidth;
                    this.ContentElement.style.height = this.ContentRow.style.height;
                }
                else
                {
                    var cellspacing = 10;
                    
                    this.ContentElement.parentNode.style.width = width - this.LeftWidth;
                    this.ContentElement.parentNode.style.height = height - (this.WindowState == Fenrir.Controls.FormWindowState.Minimized ? 0 :(
                        (this.ShowHeader ? this.HeaderHeight : 0) + (this.ShowFooter ? this.FooterHeight : 0) + this.BorderWidth)) - cellspacing *2;
                        
                }
                
                if(this.ShowFooter)
                {
                    this.FooterRow.childNodes[0].style.width = width;
                    this.FooterRow.childNodes[0].style.height = this.FooterHeight;
                }
            }
            
            this.SetFormsWidth(width);
            this.SetFormsHeight(height);
            

        }
        
        Fenrir.Controls.BaseDialogForms._Initialized = true;
    }
    

    this.HasShow = false; //是否已显示对话框
    this.Inited = false;  //是否已初始化窗体
    this.InsulateTier = null;   //隔离层
    this.DialogResult = Fenrir.Controls.DialogResult.None;    //对话框结果
    this.DialogReturnValue = null;  //对话框返回值
    this.WindowState = Fenrir.Controls.FormWindowState.Normal;
    this.HeaderHeight = 25;
    this.FooterHeight = 40;
    this.BorderWidth = 2;
    this.DisabledMove = false;
   
}

Fenrir.Controls.BaseDialogForms.prototype = new Fenrir.Controls.CustomControl();
Fenrir.Controls.BaseDialogForms.TagName = "BaseDialogForms";


//信息对话框窗体
Fenrir.Controls.MessageDialogForms = function(sOptions)
{
    
    if(Fenrir.Controls.MessageDialogForms._Initialized == undefined)
    {
        
        Fenrir.Controls.MessageDialogForms.prototype.GetTagName = function()
        {
            return Fenrir.Controls.MessageDialogForms.TagName;
        }
        
        Fenrir.Controls.MessageDialogForms.prototype.ParseOptionsString = function(sOptions)
        {
            var options = ParseParameters(sOptions);

            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_Title)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_Title, true);
                
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_AcceptButton)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_AcceptButton, true);
                
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_YesButton)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_YesButton, false);
                
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_NoButton)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_NoButton, false);
                
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_CancelButton)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_CancelButton, false);
                
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_MaxButton)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_MaxButton, false);
                
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_MinButton)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_MinButton, false);
                
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_CloseButton)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_CloseButton, true);
                
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_Width)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_Width, Fenrir.Context.Current.Config.MessageDialogForms_Width);
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_Height)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_Height, Fenrir.Context.Current.Config.MessageDialogForms_Height);
                
            return options;
        }
        
        Fenrir.Controls.MessageDialogForms.prototype.CreateContentHtmlElement = function()
        {
            var cntHtml;
            
            //生成HTML
            cntHtml = new Fenrir.Text.StringBuilder();
            //内容
            cntHtml.Append("<table cellspacing='10' cellpadding='0' width='100%' height='100%'>");
            cntHtml.AppendFormat("<tr><td width='36'><img src='{0}' width='36' height='36' /></td>", Fenrir.Context.Current.Config.FORMS_IMAGES_Img_Tip);
            cntHtml.AppendFormat("<td><strong>{0}</strong>：<label name='lab_forms_Content'></label></td></tr></table>", Fenrir.SR.FROMS_SR_Tip);
            
            return cntHtml.ToString();
        }
        
        Fenrir.Controls.MessageDialogForms.prototype.GetContentElement = function(sContent)
        {
            return Fenrir.Window.Document.GetElementsByName(Fenrir.SR.FORMS_Name_LabContent, this.RelHtmlElement)[0];
        }
        
        //设置提示信息内容
        Fenrir.Controls.MessageDialogForms.prototype.SetContent = function(sContent){
        
            if(this.Inited == false) this.InitControl();    //初始化窗体
            this.ContentElement.innerHTML = sContent;
        };
        
        //显示隔离层
        Fenrir.Controls.MessageDialogForms.prototype.ShowInsulateTier = function()
        {
            //this.InsulateTier.Show(Fenrir.Context.Current.Config.MessageDialogForms_Opacity);
        };
        
        
        Fenrir.Controls.MessageDialogForms.prototype.GetDialogResult = function()
        {
            return Fenrir.Controls.DialogResult.Accept;
        }
        
        Fenrir.Controls.MessageDialogForms._Initialized = true;
    }
    
    if(Fenrir.IsLoad){ this.OptionsStr = sOptions; this.InitControl(); }
    
    this.LeftWidth = 66;
}

Fenrir.Controls.MessageDialogForms.prototype = new Fenrir.Controls.BaseDialogForms();
Fenrir.Controls.MessageDialogForms.TagName = Fenrir.Controls.BaseDialogForms.TagName + " MessageDialogForms";

//确认对话框窗体 继承于Fenrir.Controls.MessageDialogForms
Fenrir.Controls.ConfirmDialogForms = function(sOptions)
{

    if(Fenrir.Controls.ConfirmDialogForms._Initialized == undefined)
    {
        
        Fenrir.Controls.ConfirmDialogForms.prototype.GetTagName = function()
        {
            return Fenrir.Controls.ConfirmDialogForms.TagName;
        }
        
        Fenrir.Controls.ConfirmDialogForms.prototype.ParseOptionsString = function(sOptions)
        {
            var options = ParseParameters(sOptions);

            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_Title)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_Title, true);
    
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_AcceptButton)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_AcceptButton, false);
                
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_YesButton)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_YesButton, true);
                
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_NoButton)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_NoButton, true);
                
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_CancelButton)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_CancelButton, true);
                
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_MaxButton)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_MaxButton, false);
                
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_MinButton)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_MinButton, false);
                
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_CloseButton)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_CloseButton, true);
                
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_Width)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_Width, Fenrir.Context.Current.Config.ConfirmDialogForms_Width);
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_Height)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_Height, Fenrir.Context.Current.Config.ConfirmDialogForms_Height);
                
            
            return options;
        }
        
        Fenrir.Controls.ConfirmDialogForms.prototype.CreateContentHtmlElement = function()
        {
            var cntHtml;
            
            //生成HTML
            cntHtml = new Fenrir.Text.StringBuilder();
            //内容
            cntHtml.Append("<table cellspacing='10' cellpadding='0'><tbody>");
            cntHtml.AppendFormat("<tr><td width='36'><img src='{0}' width='36' height='36' /></td>", Fenrir.Context.Current.Config.FORMS_IMAGES_Img_Tip);
            cntHtml.AppendFormat("<td><strong>{0}</strong>：<label name='lab_forms_Content'></label></td></tr></tbody></table>", Fenrir.SR.FROMS_SR_Tip);
                    
            
            return cntHtml.ToString();
        }
        
        
        Fenrir.Controls.ConfirmDialogForms.prototype.GetDialogResult = function()
        {
            var src;
            
            src = Fenrir.Event.GetEventSource();
            
            switch(src)
            {
                case this.AcceptButton :
                    return Fenrir.Controls.DialogResult.Accept;
                case this.YesButton :
                    return Fenrir.Controls.DialogResult.Yes;
                case this.NoButton :
                    return Fenrir.Controls.DialogResult.No;
                case this.CancelButton :
                    return Fenrir.Controls.DialogResult.Cancel;
                default : 
                    return Fenrir.Controls.DialogResult.None;
            }
        }
        
        //显示隔离层
        Fenrir.Controls.ConfirmDialogForms.prototype.ShowInsulateTier = function()
        {
            this.InsulateTier.Show(Fenrir.Context.Current.Config.ConfirmDialogForms_Opacity);
        };
        
        Fenrir.Controls.ConfirmDialogForms._Initialized = true;
    }
    
    if(Fenrir.IsLoad){ this.OptionsStr = sOptions; this.InitControl(); }
    
}

Fenrir.Controls.ConfirmDialogForms.prototype = new Fenrir.Controls.MessageDialogForms();
Fenrir.Controls.ConfirmDialogForms.TagName = Fenrir.Controls.MessageDialogForms.TagName + " ConfirmDialogForms";


//模态对话框窗体
Fenrir.Controls.ModalDialogForms = function(sOptions)
{
    if(Fenrir.Controls.ModalDialogForms._Initialized == undefined)
    {
        
        Fenrir.Controls.ModalDialogForms.prototype.GetTagName = function()
        {
            return Fenrir.Controls.ModalDialogForms.TagName;
        }
        
        Fenrir.Controls.ModalDialogForms.prototype.ParseOptionsString = function(sOptions)
        {
            var options = ParseParameters(sOptions);
    
            options.SetValue(Fenrir.SR.PROPERTYNAME_Title, true);

            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_Title)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_Title, true);

            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_AcceptButton)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_AcceptButton, false);
                
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_YesButton)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_YesButton, false);
                
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_NoButton)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_NoButton, false);
                
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_CancelButton)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_CancelButton, false);
                
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_MaxButton)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_MaxButton, true);
                
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_MinButton)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_MinButton, true);
                
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_CloseButton)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_CloseButton, true);
                
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_Width)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_Width, Fenrir.Context.Current.Config.ModalDialogForms_Width);
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_Height)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_Height, Fenrir.Context.Current.Config.ModalDialogForms_Height);
            
            return options;
        }
        
        Fenrir.Controls.ModalDialogForms.prototype.CreateContentHtmlElement = function()
        {
            return "<iframe name='ifm_forms_Content' frameborder='0' width='100%' height='100%'></iframe>";
        }
        
        Fenrir.Controls.ModalDialogForms.prototype.GetContentElement = function(sContent)
        {
            return this.ContentRow.childNodes[0].childNodes[0];
        }
        
        //设置提示信息内容
        Fenrir.Controls.ModalDialogForms.prototype.SetContent = function(sUrl){
        
            if(this.Inited == false) this.InitControl();    //初始化窗体
            this.ContentElement.src = sUrl;
        };
        
        Fenrir.Controls.ModalDialogForms.prototype.GetInnerSelectElements = function()
        {
            var sels, _currWin;
            
            if(!this.HasShow || this.ContentElement.contentWindow == null || this.ContentElement.contentWindow.document == null) return new Array();
            
            _currWin = Fenrir.Context.Current.Window;
            Fenrir.Context.Current.Window = this.ContentElement.contentWindow;
            
            sels = Fenrir.Window.Document.GetSelectElements();
            
            Fenrir.Context.Current.Window = _currWin;
            
            return sels;
        }
        
        //取得返回值
        Fenrir.Controls.ModalDialogForms.prototype.GetDialogReturnValue = function(){
            
            if(this.HasShow != true || this.ContentElement.contentWindow == null) return null;
            
            return this.ContentElement.contentWindow.DialogReturnValue;
        }
        
        Fenrir.Controls.ModalDialogForms.prototype.GetDialogResult = function()
        {
            
            if(this.HasShow != true || this.ContentElement.contentWindow == null) return Fenrir.Controls.DialogResult.None;
            
            return this.ContentElement.contentWindow.DialogResult == null ? Fenrir.Controls.DialogResult.None : this.ContentElement.contentWindow.DialogResult;
         
        }
        
        //显示隔离层
        Fenrir.Controls.ModalDialogForms.prototype.ShowInsulateTier = function()
        {
            this.InsulateTier.Show(Fenrir.Context.Current.Config.ModalDialogForms_Opacity);
        };
        
        Fenrir.Controls.ModalDialogForms._Initialized = true;
    }
    
    if(Fenrir.IsLoad){ this.OptionsStr = sOptions; this.InitControl(); }
    
    this.LeftWidth = 0;
}

Fenrir.Controls.ModalDialogForms.prototype = new Fenrir.Controls.BaseDialogForms();
Fenrir.Controls.ModalDialogForms.TagName = Fenrir.Controls.BaseDialogForms.TagName + " ModalDialogForms";

//非模态对话框 继承于Fenrir.Controls.ModalDialogForms
Fenrir.Controls.ModelessDialogForms = function(sOptions)
{
    
    if(Fenrir.Controls.ModelessDialogForms._Initialized == undefined)
    {
    
        
        Fenrir.Controls.ModelessDialogForms.prototype.ParseOptionsString = function(sOptions)
        {
            var options = ParseParameters(sOptions);
    
            options.SetValue(Fenrir.SR.PROPERTYNAME_Title, true);

            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_Title)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_Title, true);

            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_AcceptButton)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_AcceptButton, false);
                
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_YesButton)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_YesButton, false);
                
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_NoButton)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_NoButton, false);
                
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_CancelButton)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_CancelButton, false);
                
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_MaxButton)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_MaxButton, true);
                
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_MinButton)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_MinButton, true);
                
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_CloseButton)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_CloseButton, true);
                
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_Width)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_Width, Fenrir.Context.Current.Config.ModelessDialogForms_Width);
            if(!options.ContainsKey(Fenrir.SR.PROPERTYNAME_Height)) 
                options.SetValue(Fenrir.SR.PROPERTYNAME_Height, Fenrir.Context.Current.Config.ModelessDialogForms_Height);
            
            return options;
        }
        
         //显示隔离层
        Fenrir.Controls.ModelessDialogForms.prototype.ShowInsulateTier = function()
        {
        }
        
         //显示隔离层
        Fenrir.Controls.ModelessDialogForms.prototype.GetTabName = function()
        {
            return Fenrir.Controls.ModelessDialogForms.TagName;
        }
        
        //关闭隔离层
        Fenrir.Controls.ModelessDialogForms.prototype.CloseInsulateTier = function()
        {
        }
        
        Fenrir.Controls.ModelessDialogForms._Initialized = true;
    }
    if(Fenrir.IsLoad){ this.OptionsStr = sOptions; this.InitControl(); }
}

Fenrir.Controls.ModelessDialogForms.prototype = new Fenrir.Controls.ModalDialogForms()
Fenrir.Controls.ModelessDialogForms.TagName = Fenrir.Controls.ModalDialogForms.TagName + " ModelessDialogForms";

       
//隔离层
Fenrir.Controls.InsulateTier = function()
{
    this.RelHtmlElement = null;
    this.HasShow = false;
    this.ShowIndexs = new Array();
    this.Forms = null;
    
     if(Fenrir.Controls.InsulateTier._Initialized == undefined)
     {
        Fenrir.Controls.InsulateTier.prototype.Dispose = function(iIndex)
        {
            delete this.RelHtmlElement;
            delete this.HasShow;
            delete this.ShowIndexs;
            delete this.Forms;
        }
        
        //设置显示索引
        Fenrir.Controls.InsulateTier.prototype.SetShowIndex = function(iIndex)
        {
            this.RelHtmlElement.style.zIndex = iIndex;
            this.ShowIndex = iIndex;
        }
        
        //隐藏滚动条
        Fenrir.Controls.InsulateTier.prototype.HideScroll = function()
        {
            Fenrir.Window.Document.HideScroll();
        }
        
        //还原隐藏的滚动条
        Fenrir.Controls.InsulateTier.prototype.RevertHideScroll = function()
        {
            Fenrir.Window.Document.RevertHideScroll();
        }
        
        //禁用活动控件
        Fenrir.Controls.InsulateTier.prototype.DisableActiveControl = function()
        {
            var controls;
            
            controls = Fenrir.Window.Document.DisableActiveControl();
            
            this.Forms.DisableControls = controls;
        };
        
        //还原禁用活动控件
        Fenrir.Controls.InsulateTier.prototype.RevertDisableActiveControl = function()
        {
            Fenrir.Window.Document.RevertDisableActiveControl(this.DisableControls);
            
            delete this.Forms.DisableControls;
        }
        
        //屏蔽控件
        Fenrir.Controls.InsulateTier.prototype.ShieldActiveElement = function(winWindow)
        {
            
            if(winWindow == null) winWindow = Fenrir.Context.Current.Window;
            //检查是否已屏蔽控件
            if((winWindow.Fenrir != null && winWindow.Fenrir.Window.Document.ShieldActiveElementFlag == null) || 
                (winWindow.Fenrir == null && winWindow.ShieldActiveElementFlag != null))
            {
                Fenrir.Context.Current.Window = winWindow;
                
                this.DisableActiveControl();//禁用活动控件
                this.HideScroll();
                
                if(winWindow.Fenrir != null) 
                    winWindow.Fenrir.Window.Document.HasShieldActiveElement = true;
                else
                    winWindow.HasShieldActiveElement = true;
                    
                Fenrir.Context.Current.Window = window;
            }
            
            //屏蔽各框架内的控件
            var count = winWindow.frames.length;
            
            for(var i=0; i<count; i++)
            {
                this.ShieldActiveElement(winWindow[i]);
            }
        }
        
        
        //屏蔽控件
        Fenrir.Controls.InsulateTier.prototype.RevertShieldActiveElement = function(winWindow)
        {
            if(winWindow == null) winWindow = Fenrir.Context.Current.Window;
            //检查是否已屏蔽控件
            if((winWindow.Fenrir != null && winWindow.Fenrir.Window.Document.HasShieldActiveElement == true) || 
                (winWindow.Fenrir == null && winWindow.HasShieldActiveElement == true))
            {
                Fenrir.Context.Current.Window = winWindow;
                
                this.RevertDisableActiveControl();//禁用活动控件
                this.RevertHideScroll();
                
                if(winWindow.Fenrir != null) 
                    winWindow.Fenrir.Window.Document.HasShieldActiveElement = false;
                else
                    winWindow.HasShieldActiveElement = false;
                    
                    
                Fenrir.Context.Current.Window = window;
            }
            
            //屏蔽各框架内的控件
            var count = winWindow.frames.length;
            
            for(var i=0; i<count; i++)
            {
                this.RevertShieldActiveElement(winWindow[i]);
            }
        }
        
                
        Fenrir.Controls.InsulateTier.prototype.CreateRelHtmlElement = function(dfForms, bBackImage)
        {
            var insulateTier;
            
            insulateTier = Fenrir.Controls.CreateControl("InsulateTier");
            
            insulateTier.innerHTML = "<div class='InsulateTier'></div>";
            
            return insulateTier.childNodes[0];
        }
        
        Fenrir.Controls.InsulateTier.prototype.InitControl = function()
        {
            if(this.Inited) return;
            
            var size;
            
            this.RelHtmlElement = this.CreateRelHtmlElement();

            InsertBeforeChildElement(this.RelHtmlElement, Fenrir.Context.Current.Window.document.body);  //插入隔离层
            
            this.Inited = true;
            
        }
        
        //刷新窗体显示索引
        Fenrir.Controls.InsulateTier.prototype.RefreshShowIndex = function(showIndex)
        {
            if(showIndex == null)
            {
                showIndex = Fenrir.Context.Current.GetNewTierIndex();
                this.ShowIndexs.Add(showIndex);
            }
            this.SetShowIndex(showIndex);
        }
        
        //显示隔离层
        Fenrir.Controls.InsulateTier.prototype.Show = function(iOpacity)
        {
            this.InitControl();
            
            if(Fenrir.IsIE)
            {   
                this.RelHtmlElement.style.filter = "alpha(opacity=" + iOpacity + ")";
            }
            else
            {
                this.RelHtmlElement.style.setProperty("-moz-opacity", iOpacity / 100, "");
            }
            //用于 禁用所有的活动控件 防止Tab键选中而造成隔离不彻底的问题 但由于资源消耗大 实用性不强暂时放弃
            //this.ShieldActiveElement(Fenrir.Context.Current.Window, dfForms); //屏蔽控件
            this.HideScroll();
            
            this.RefreshShowIndex();
            this.HasShow = true;
            //更新显示索引
        }
        
        //关闭隔离层
        Fenrir.Controls.InsulateTier.prototype.Close = function()
        {
            if(this.HasShow == false) return;
            
            this.ShowIndexs.pop();  //移除最后一项
                
            
            //this.RevertShieldActiveElement(Fenrir.Context.Current.Window, dfForms);
                
            //无引用时移除隔离层
            if(this.ShowIndexs.length == 0)
            {
                this.HasShow = false;
                this.Inited = false;
                RemoveElement(this.RelHtmlElement);    //移除隔离层
                this.RevertHideScroll();
                this.Dispose();
                Fenrir.Context.Current.InsulateTier = null;
            }
            else
            {
                this.RefreshShowIndex(this.ShowIndexs[this.ShowIndexs.length - 1]); //更新显示索引
            }
        }
        
        Fenrir.Controls.InsulateTier._Initialized = true;
     }
     
}

/****************************** 配置 *************************/
Fenrir.Config = function()
{
    this.MaxCallerCount = 100;
    //ComboBox控件默认设置
    this.ComboBox_Width = 100;
    this.ComboBox_Height = 20;
    this.ComboBox_ItemHeight = 18;
    this.ComboBox_BorderColor = "#246EEE";
    this.ComboBox_MaxDropDownItems = 8;
    this.ComboBox_DropDownArrImageUrl = '/images/ad/div_images/ComboBox_DropDownArrImage.gif';    //下拉箭头图片
    this.ComboBox_DropDownArrImageWidth = 16;
    
    //DialogForms
    this.FORMS_IMAGES_Bgi_Title = "/images/ad/div_images/Forms_Bgi_Title.gif";   //标题栏背景
    this.FORMS_IMAGES_Btn_Close = "/images/ad/div_images/Forms_Btn_Close.gif";   //关闭按钮图片
    this.FORMS_IMAGES_Btn_Max = "/images/ad/div_images/Forms_Btn_Max.gif";     //最大化按钮图片
    this.FORMS_IMAGES_Btn_Min = "/images/ad/div_images/Forms_Btn_Min.gif";     //最小化按钮图片
    this.FORMS_IMAGES_Ico_Title = "/images/ad/div_images/Forms_Ico_Title.gif";   //标题图标
    this.FORMS_IMAGES_Img_Tip = "/images/ad/div_images/Forms_Img_Tip.png";     //提示图标
    
    this.MessageDialogForms_Width = 320;    //默认宽度
    this.MessageDialogForms_Height = 240;   //默认高度
    this.MessageDialogForms_Opacity = 50;  //不透明性0 - 100
    
    this.ConfirmDialogForms_Width = 320;
    this.ConfirmDialogForms_Height = 240;
    this.ConfirmDialogForms_Opacity = 50;
    
    this.ModalDialogForms_Width = 600;
    this.ModalDialogForms_Height = 450;
    this.ModalDialogForms_Opacity = 50;
    
    this.ModelessDialogForms_Width = 600;
    this.ModelessDialogForms_Height = 450;
}


//当前窗体环境变量
Fenrir.Context.Current = Fenrir.Context.GetCurrentContext();

Fenrir.IsLoad = true;   //载入完毕

