﻿//**********************************************************************
// 文件说明：
//     该类集合一些比较零散但是常用的JS函数。
// 版本：1.1
// 创建人：何斌
// 创建时间：2006.11.02
// 修改人：何斌
// 修改时间：2007.08.10
// 修改内容：
//		ShowCommonDlg函数中加入随机变量，修正缓存问题
//**********************************************************************

/***********************************************************************
* 修改时间：2007-08-11
* 修改人：何斌
* 修改内容：
*       加入GetCheckIDListInTable、GetCheckValueListInTable两个函数，
* 获取选中的CheckBox ID/Value列表；
*       加入ShowDialog函数
***********************************************************************/
function ShowCommonDlg(url)
{
	window.open(url, 'newwindow', 'toolbar=no, menubar=no, scrollbars=yes, resizable=yes, status=yes');
	
	//return ShowDialog(url, "", screen.width-80, screen.height-80);
}

function ShowDialog(url, dialogArgments, width, height)
{
	if(url != null && url != "")
	{
		if(url.indexOf('?')>0)
		{
			url = url + "&r=" + Math.random();
		}
		else
		{
			url = url + "?r=" +  Math.random();
		}
		var result = window.showModalDialog(url, dialogArgments, "dialogHeight:" + height + "px;dialogWidth:" + width + "px;status:no; help:no");
		return result;
	}	
}

//********************************************************
// 说明：设置Form中所有的CheckBox的值，用于全选/全不选
// 参数：Form		CheckBox所在的Form
//		 ChkValue	要设置CheckBox的值
//********************************************************
function CheckAllInForm(Form, ChkValue)
{
	for( var i=0; i<Form.elements.length; i++ )
	{
		if( Form.elements[i].type == "checkbox" )
		{
			Form.elements[i].checked = ChkValue;
		}
	}//for
}


//*******************************************************
// 说明：设置DataGrid中所有CheckBox的值，用于全选/全不选
// 参数：
//			ChkObj		CheckBox对象
//			ChkValue	要设置CheckBox的值
//********************************************************
function CheckAllInDataGrid(ChkObj, ChkValue)
{
	//先根据ChkObj，找到DataGrid对应的“Table”标签
	var tblObj = ChkObj;
	while(tblObj.tagName.toLowerCase() != "table" && tblObj != null) tblObj = tblObj.parentNode;
	if(tblObj == null)
		return;
		
	var el = tblObj.all.tags("input")
    var arr = [];
    //遍历所有input控件
    var i=0;
    for(i = 0; i < el.length; i++) 
    {
        if(el[i].type == "checkbox")
        {
			el[i].checked = ChkValue;
        }
    }
	
}

function CheckRowInTable(chkObj, chkValue)
{
	//根据chkObj，找到chkObj所在的行
	var trObj = chkObj;
	while(trObj != null && trObj.tagName.toLowerCase() != "tr") trObj = trObj.parentNode;
	if(trObj == null) return;
	
	var i=0;
	for(i=0; i<trObj.cells.length; i++)
	{
		var el = trObj.cells[i].all.tags("INPUT");
		var j=0;
		for(j=0; j<el.length; j++)
		{
			if(el[j].type == "checkbox")
			{
				el[j].checked = chkValue;
			}
		}
	}
}

//********************************************************
// 说明：全选/全不选Table指定列的CheckBox的值
// 参数：
//			chkObj		CheckBox对象
//			chkValue		要设置CheckBox的值（全选/全不选）
//********************************************************
function CheckColumnInTable(chkObj, chkValue)
{
	//根据chkObj，找到chkObj所在的列序号
	var tdObj = chkObj;
	while(tdObj != null && tdObj.tagName.toLowerCase() != "td") tdObj = tdObj.parentNode;
	if(tdObj == null) return;
	
	var tblObj = tdObj;
	while(tblObj != null && tblObj.tagName.toLowerCase() != "table") tblObj = tblObj.parentNode;
	if(tblObj == null) return;
	var i=0;
	for(i=0; i<tblObj.rows.length; i++)
	{
		var el = tblObj.rows[i].cells[tdObj.cellIndex].all.tags("INPUT");
		var j=0;
		for(j=0; j<el.length; j++)
		{
			if(el[j].type == "checkbox")
			{
				el[j].checked = chkValue;
			}
		}
	}	
}

//*******************************************************
// 说明：获取Table中选中的CheckBox ID列表，比如选择抄送单位时有用
// 参数：tableID	Table ID
// 返回值格式如：1,3,6,7
//********************************************************
function GetCheckIDListInTable(tableID)
{
	//先根据ChkObj，找到DataGrid对应的“Table”标签
	var tblObj = document.all[tableID];
	var result = "";
	while(tblObj.tagName.toLowerCase() != "table" && tblObj != null) tblObj = tblObj.parentNode;
	if(tblObj == null)
		return "";
		
	var el = tblObj.all.tags("input")
    var arr = [];
    //遍历所有input控件
    var i=0;
    for(i = 0; i < el.length; i++) 
    {
        if(el[i].type == "checkbox" && el[i].checked == true && el[i].id != "")
        {
			result += el[i].id + ",";
        }
    }
    
    if(result.length>1)	//去掉末尾的,
    {
		result = result.substring(0, result.length-1);
    }
    
    return result;
}

//*******************************************************
// 说明：获取Table中选中的CheckBox Value列表
// 参数：tableID	Table ID
// 返回值格式如：北京,广州,上海
//********************************************************
function GetCheckValueListInTable(tableID)
{
	//先根据ChkObj，找到DataGrid对应的“Table”标签
	var tblObj = document.all[tableID];
	var result = "";
	while(tblObj.tagName.toLowerCase() != "table" && tblObj != null) tblObj = tblObj.parentNode;
	if(tblObj == null)
		return "";
		
	var el = tblObj.all.tags("input")
    var arr = [];
    //遍历所有input控件
    var i=0;
    for(i = 0; i < el.length; i++) 
    {
        if(el[i].type == "checkbox" && el[i].checked == true && el[i].id != "" && el[i].value != "")
        {
			result += el[i].value + ",";
        }
    }
    
    if(result.length>1)	//去掉末尾的,
    {
		result = result.substring(0, result.length-1);
    }
    
    return result;
}

//*******************************************************
//说明：复制文本框内容到粘贴板
//参数：Obj		控件ID
//*******************************************************
function CopyCode(Obj)
{ 
    var rng = document.body.createTextRange(); 
    rng.moveToElementText(Obj); 
    rng.scrollIntoView(); 
    rng.select();	//选中文本框
    rng.execCommand("Copy"); 
    rng.collapse(false); 
} 

//************************************************************
// 移动ListBox中的选项，从左边移动到右边，从右边移动到左边
//************************************************************
function ListBoxMoveItem(dest, source)
{
	var dest   = ( typeof dest == "string" ? document.getElementById(dest): dest );
	var source = ( typeof source  == "string" ? document.getElementById(source) : source );

	if( source.tagName.toLowerCase() != "select" || dest.tagName.toLowerCase() != "select" )
		return;

	for ( index=source.length - 1; index >= 0; index-- ) 
	{
		if( source[index].selected ) 
		{
			dest.length++;                    
			dest[dest.length-1].id		= source[index].id;
			dest[dest.length-1].value	= source[index].value;
			dest[dest.length-1].text	= source[index].text;
			source[index] = null;
		}
	}
}

//************************************************************* 
// 获取Cookies
//*************************************************************
function GetCookies(name)
{
	var cookieValue = "";   
    var search = name + "=";
    if(document.cookie.length > 0)
    {
    	offset = document.cookie.indexOf(search);   
		if(offset != -1)
		{
			offset += search.length;
			end = document.cookie.indexOf(";", offset);
			if(end == -1)
				end = document.cookie.length;
			cookieValue = unescape(document.cookie.substring(offset, end));
		}
	}
	return cookieValue;
}

//************************************************************* 
// 设置Cookies
//*************************************************************	
function SetCookies(name, value, hours)
{
	var expire = "";
	if(hours != null)
	{
		expire = new Date((new Date()).getTime() + hours * 3600000);
		expire = "; expires=" + expire.toGMTString();
	}
	document.cookie = name + "=" + escape(value) + expire;
}




    /**构造函数
/* oElementToDrag：被拖曳的元素
/* oSrcElement：触发事件的元素，比如要拖曳整个表格可设置此参数为表格的第一行
 */
var DragElement;
DragElement = function(oElementToDrag, oSrcElement)
{
    this.elementToDrag = oElementToDrag;
    this.srcElement = oSrcElement;
    //当鼠标按下时设该值为true，松开鼠标时设该值为false
    this.isDragging = false;                
    //拖曳前鼠标的位置
    this.originalMouseX = 0;                
    this.originalMouseY = 0;
    //拖曳前被拖曳元素的位置
    this.originalElementLeft = 0;
    this.originalElementTop = 0;
}
//调用时要运行的方法，将各动作绑定到事件
DragElement.prototype.addEvent = function()
{
    //为所有指定事件函数的元素添加一个属性parentObj，指定为当前类，目的是为了能在事件函数中得到类的引用
    this.elementToDrag.parentObj = this.srcElement.parentObj = document.body.parentObj = this;
    this.srcElement.onmousedown =  this.srcElement.onmouseup = document.body.onmousemove = this.srcElement.onselectstart = DragElement.allEvent;
	//如果触发事件的元素处于被拖曳元素中的frame中
    if(this.srcElement.ownerDocument != this.elementToDrag.ownerDocument)
    {
    	this.srcElement.ownerDocument.body.onmousemove = DragElement.allEvent;
    }
}
DragElement.allEvent = function()
{
    switch(this.ownerDocument.parentWindow.event.type)
    {
        case "mousedown":
            this.parentObj.isDragging = true;
            //保存拖曳前鼠标的屏幕位置
            this.parentObj.originalMouseX = this.ownerDocument.parentWindow.event.screenX;
            this.parentObj.originalMouseY = this.ownerDocument.parentWindow.event.screenY;
            //保存拖曳前被拖曳元素的相对位置
            this.parentObj.originalElementLeft = this.parentObj.elementToDrag.style.pixelLeft;
            this.parentObj.originalElementTop = this.parentObj.elementToDrag.style.pixelTop;
            break;
        case "mouseup":
            this.parentObj.isDragging = false;
            break;
        case "mousemove":
			//如果触发事件的元素没有parentObj属性，则断定它处于被拖曳元素中的frame中，此时它负责以编程方式激发父框架中body的onmousemove事件
			if(this.parentObj == null)
			{
				this.ownerDocument.parentWindow.parent.document.body.fireEvent("onmousemove");
			}
			else
			{
				if(this.parentObj.isDragging)
				{
					//让被拖曳元素与鼠标移动相同的方向和距离
					this.parentObj.elementToDrag.style.left = this.parentObj.originalElementLeft + event.screenX - this.parentObj.originalMouseX;
					this.parentObj.elementToDrag.style.top = this.parentObj.originalElementTop + event.screenY - this.parentObj.originalMouseY;
				}
            }
            break;
        case "selectstart":
            return false;
            break;
    }
}