﻿//脚本扩展
//王文超 2006－2007
//用此脚本前提：
//1.页面必须提供一个Id为hidIsChange的隐藏域控件
//2.样式表必须提供两个类text和readonlyText
//3.配合utils.js使用
//-------------------------常用缩写,函数名凡全拼的参数为object,缩写的为id--------------------------------------
//检查对象是否存在
function $check(object)
{
    if(object!=null && object!="undefined")
        return true;
    return false;
}
//检查对象存在且值不为空
function $checkV(object)
{
    try
    {
        if($check(object) && object.value!="")
        {
            return true;
        }
        return false;
    }
    catch(ex)
    {
        return false;
    }
}
//window.document.getElementById方法简写
function $getId(id,context)
{
    try
    {
        if($check(context))
            return context.document.getElementById(id);
        else
            return $(id);
    }
    catch(ex)
    {
        alert("context doesn't have getElementById function.");
        return context.getElementById(id);
    }
}
//获得指定ID的元素，找不到会报错
function $id(id,context)
{
    var obj=$getId(id,context);
    if(!$check(obj))
        alert("Control '"+id+"' is't found!Maybe id is null.");
    return obj;
}
//检查指定ID是否存在
function $chk(id,context)
{
    try
    {
        var obj=$getId(id,context);
        if($check(obj))
            return true;
        return false;
    }
    catch(ex)
    {
        return false;
    }
}
//检查指定ID是否存在且值不为空
function $chkV(id,context)
{
    try
    {
        var obj=$getId(id,context);
        if($check(obj))
        {
            return true;
        }
        return false;
    }
    catch(ex)
    {
        return false;
    }
}
//获得Iframe的Document对象
function $frameDoc(id,context)
{
    if(!IsIE())
        return $id(id,context).contentDocument;
    else
        return $id(id,context).document;
}
//-------------------------实用函数，按骆峰命名--------------------------------------
var BrowseType;
//判断是否是IE
function IsIE()
{
    if($check(BrowseType)) return BrowseType;
    var TYPE=navigator.userAgent.indexOf("Firefox");
    if(TYPE>-1)
        BrowseType=false;
    else
        BrowseType=true;
    return BrowseType;
}
//按键全变大写，对于IE是被附加到onkeypress事件上,不要传control,对于Firefox附加到onkeyup事件上,要传control
function Upper(control)
{
    if(IsIE())
    {
        var code=UTIL.getEvent().keyCode
        if(code>96 & code<123)
        {
            if(UTIL.getEvent().keyCode)
                UTIL.getEvent().keyCode=code-32;
        }
        if(code==86)
        {
            if(control)
                control.value=control.value.toUpperCase();
        }
    }
    else
    {
        if(control)
            control.value=control.value.toUpperCase();
    }
    
}
//去空
function Trim(value)
{
    return value.replace(/(^\s*)|(\s*$)/g, ""); 
}
//检查日期型时间
function CheckDBTime(id)
{
    if($getId(id).value.length<5)
    {
        var tmp="0000"+$getId(id).value;
        if(parseInt(tmp.substr(tmp.length-2,2))<60 && parseInt(tmp.substr(tmp.length-4,2))<24)
            return true;
        else
        {
            alert("Your input is wrong!");
            return false;
        }
    }
    else
    {
        alert("Time length can't greater than 5!");
        return false;
    }
}

//控件显示与隐藏
function showDetailPanel(panelname, bshow){
	var panel=window.document.getElementById(panelname);
	if (bshow==true)
	{
		panel.style.visibility="visible";
	}
	else if (bshow==false)
	{
		panel.style.visibility="hidden";
	}
}
//-------------------------附加事件，按骆峰命名--------------------------------------
var Attach=
{
    //增加onchange事件,原有的事件会保留
    OnChange:function(srcElem,newfunc)
    {
        if(!$check(srcElem)) return;
	    if(srcElem.type== 'text' || srcElem.type== 'select-one' || srcElem.type== 'textarea' || srcElem.type== 'checkbox')
	    {
		    if($check(srcElem.onchange))
			    var oldfunc=srcElem.onchange.toString();
		    else
			    var oldfunc="";
		    srcElem.onchange=new Function(newfunc+oldfunc.substring(oldfunc.indexOf('{')+1,oldfunc.lastIndexOf('}')));
	    }
    },
    //增加onclick事件,原有的事件会保留
    OnClick:function(srcElem,newfunc)
    {
        if(!$check(srcElem)) return;
	    if(srcElem.type== 'text' || srcElem.type== 'select-one' || srcElem.type== 'textarea' || srcElem.type== 'checkbox')
	    {
	        if($check(srcElem.onclick))
		        var oldfunc=srcElem.onclick.toString();
	        else
		        var oldfunc="";
	        srcElem.onclick=new Function(newfunc+oldfunc.substring(oldfunc.indexOf('{')+1,oldfunc.lastIndexOf('}')));
	    }
    },
    //增加onkeypress事件,原有的事件会保留
    OnKeyPress:function(srcElem,newfunc)
    {
        if(!$check(srcElem)) return;
	    if(srcElem.type== 'text' || srcElem.type== 'select-one' || srcElem.type== 'textarea' || srcElem.type== 'checkbox')
	    {
	        if($check(srcElem.onkeypress))
		        var oldfunc=srcElem.onkeypress.toString();
	        else
		        var oldfunc="";
	        srcElem.onkeypress=new Function(newfunc+oldfunc.substring(oldfunc.indexOf('{')+1,oldfunc.lastIndexOf('}')));
	    }
    },
    //增加onkeyup事件,原有的事件会保留
    OnKeyUp:function(srcElem,newfunc)
    {
        if(!$check(srcElem)) return;
	    if(srcElem.type== 'text' || srcElem.type== 'select-one' || srcElem.type== 'textarea' || srcElem.type== 'checkbox')
	    {
	        if($check(srcElem.onkeyup))
		        var oldfunc=srcElem.onkeyup.toString();
	        else
		        var oldfunc="";
	        srcElem.onkeyup=new Function(newfunc+oldfunc.substring(oldfunc.indexOf('{')+1,oldfunc.lastIndexOf('}')));
	    }
    },
    //表格行选择事件
    RowSelectEvent:function(gridId,ClickEvent,dblClickEvent)
    {
        grid=$id(gridId);
        if(grid==null || grid==undefined || grid.rows.length<2 ) return;//防止无数据出错
        try
        {
	        for(i=1;i<grid.rows.length;i++)
	        {
	            for(j=0;j<grid.rows[i].cells.length;j++)
	            {
	                Attach.OnClick(grid.rows[i].cells[j],ClickEvent);
	            }
	        }
        }
        catch(e)
        {
        }
    }
}
//-------------------------控件变化函数，一般被附加到具体事件上，按骆峰命名--------------------------------------
var CONTROL=
{
    //关闭窗体
    DoClose:function()
    {
        window.close();
    },
    //退出事件，会提示
    UnLoad:function()
    {
        if($chkV("hidIsChange"))
        {
            UTIL.getEvent().returnValue=UTIL.getMessage("CLTMSG_BE_LOST_CHANGE");
        }
        else
        {
            UTIL.getEvent().keyCode="13";
        }
    },
    //值变化的效果
    DoOnChange:function(srcElem)
    {
        if(!$check(srcElem)) return;
        //在此修改想要的效果
	    switch(srcElem.type)
	    {
		    case 'text':
		    case 'textarea':
		    case 'checkbox':
			    srcElem.style.border='1 solid #FFCC99';
			    $id("hidIsChange").value="true";
			    break;
	    }
    },
    //焦点变化时的效果
    DoOnKeyPress:function(srcElem)
    {
        if(!$check(srcElem)) return;
        
	    if(srcElem.type=="text" || srcElem.type=="textarea" || srcElem.type=="checkbox" || srcElem.type=="select-one")
	    {
            //onkeypress,输入变大写,且改变修改状态
            var newfunc="Upper();$getId('hidIsChange').value='true';";//在此修改想要的效果

            if($check(srcElem.onkeypress))
	            var oldfunc=srcElem.onkeypress.toString();
            else
	            var oldfunc="";
            Attach.OnKeyPress(srcElem,newfunc);
	    }
    },
    //焦点变化时的效果
    DoOnKeyUp:function(srcElem)
    {
        if(!$check(srcElem)) return;
        
	    if(srcElem.type=="text" || srcElem.type=="textarea" || srcElem.type=="checkbox" || srcElem.type=="select-one")
	    {
            //onkeypress,输入变大写,且改变修改状态
            var newfunc="Upper(this);$getId('hidIsChange').value='true';";//在此修改想要的效果

            if($check(srcElem.onkeyup))
	            var oldfunc=srcElem.onkeyup.toString();
            else
	            var oldfunc="";
            Attach.OnKeyUp(srcElem,newfunc);
	    }
    },
    //焦点变化时的效果,需要样式表样式支持(readonlyText,text)
    DoOnFocusOrBlur:function(srcElem)
    {
        if(!$check(srcElem)) return;
        if(srcElem.type=='text' || srcElem.type=='textarea' || srcElem.type=='select-one')
	    {
	        if(srcElem==null) return;
	        if(srcElem.className=="hidden")return;
            srcElem.className="readonlyText";//在此修改想要的效果

            if(srcElem.onfocus!=null)
	            var oldfocus=srcElem.onfocus.toString();
	        else
	            var oldfocus="";
	        if(srcElem.onblur!=null)
	            var oldblur=srcElem.onblur.toString();
	        else
	            var oldblur="";
	        //在此修改想要的效果
	        srcElem.onfocus=new Function("this.className='text';"+oldfocus.substring(oldfocus.indexOf('{')+1,oldfocus.lastIndexOf('}')));
	        srcElem.onblur=new Function("this.className='readonlyText';"+oldblur.substring(oldblur.indexOf('{')+1,oldblur.lastIndexOf('}')));
	    }
    },
    //以下这个函数解决TEXTAREA最大内容长度不能用的问题,请在onkeyup调用即可.
    SetMaxLength:function(control,length)
    {
        if(control.value)
        {
            if(control.value.length>=length)
            {
                control.value=control.value.substr(0,length);
            }
        }
    },
    //常用附加事件，根据项目而改动
    Attach:function()
    {
	    var objForm=document.forms[0];
	    for(var i=0;i<objForm.length;i++)
	    {
		    if(objForm[i].id !=undefined && objForm[i].id!='')
		    {
		        //在此修改想要的效果
			    CONTROL.DoOnKeyPress(objForm[i]);//ie转大写
			    CONTROL.DoOnKeyUp(objForm[i]);//firefox转大写
			    CONTROL.DoOnFocusOrBlur(objForm[i]);
			    Attach.OnChange(objForm[i],"DoOnChange(this);")
		    }
	    }
    }
}
//-------------------------刷新事件，按骆峰命名--------------------------------------
var REFRESH=
{
    //刷新源窗体
    Opener:function()
    {
        if($check(window.opener))
            window.opener.location.replace(window.opener.location.href);
        else
            window.alert("Can't find opener!");
    },
    //刷新源窗体指定帧
    OpenerFrame:function(id)
    {
        if($check(window.opener))
            try
            {
                $iframeDoc(id,window.opener).location.replace($iframeDoc(id,window.opener).location.href);
            }
            catch(ex)
            {
                window.alert("Opener's iframe:"+id+" has losted!");
            }
        else
            window.alert("Can't find opener!");
    },
    //刷新父窗体
    Parent:function()
    {
        if($check(window.parent))
            window.parent.location.replace(window.parent.location.href);
        else
            window.alert("Can't find Parent!");
    },
    //刷新父窗体指定帧
    ParentFrame:function(id)
    {
        if($check(window.parent))
            try
            {
                $iframeDoc(id,window.parent).location.replace($iframeDoc(id,window.parent).location.href);
            }
            catch(ex)
            {
                window.alert("Parent's iframe:"+id+" has losted!");
            }
        else
            window.alert("Can't find Parent!");
    }
}
var GRIDX=
{
    //将两列的值配对起来写进某控件
    GetGridRowIndex:function(gridId,hidId,column1,column2)
    {
        grid=$id(gridId);
        if(grid==null || grid==undefined || grid.rows.length<2 ) return;//防止无数据出错

        try
        {
            $id(hidId).value="";
	        for(i=1;i<grid.rows.length;i++)
	        {
	            $id(hidId).value+=grid.rows[i].cells[column1].innerHTML+";"+grid.rows[i].cells[column2].innerHTML+";";
	        }
        }
        catch(e)
        {
        }
    },
    //将表格的指定行上移
    RowUp:function(tableId,rowIdx,cellIdx)
    {
        if(rowIdx>1)
        {
            var tb=$id(tableId);
            var row=tb.rows[rowIdx];
            var val=row.cells[cellIdx].innerHTML;
            row.swapNode(tb.rows(rowIdx-1));
            tb.rows[rowIdx-1].cells[cellIdx].innerHTML=tb.rows[rowIdx].cells[cellIdx].innerHTML;
            tb.rows[rowIdx].cells[cellIdx].innerHTML=val;
            return true;
        }
        return false;
    },
    //将表格的指定行下移
    RowDown:function(tableId,rowIdx,cellIdx)
    {
        var tb=window.document.getElementById(tableId);
        if(rowIdx>0 && rowIdx<tb.rows.length-1)
        {
            var row=tb.rows[rowIdx];
            var val=row.cells[cellIdx].innerHTML;
            row.swapNode(tb.rows(rowIdx+1));
            tb.rows[rowIdx+1].cells[cellIdx].innerHTML=tb.rows[rowIdx].cells[cellIdx].innerHTML;
            tb.rows[rowIdx].cells[cellIdx].innerHTML=val;
            return true;
        }
        return false;
    },
    //targetControlName值保存的控件
    SelectRowValueToControl:function(gridId,columnIndex,targetControl)
    {
        grid=$id(gridId);
        for(var i=1;i<grid.rows.length;i++)
        {
		    grid.rows[i].className = 'gridItem';
        }
        if(UTIL.getEvent().srcElement.parentElement.className=='gridItem')
	        UTIL.getEvent().srcElement.parentElement.className="gridSelected";
	    else
            UTIL.getEvent().srcElement.parentElement.parentElement.className="gridSelected";
        for(var i=1;i<grid.rows.length;i++)
        {
	        if(grid.rows[i].className == 'gridSelected')
	        {
	            targetControl.value=grid.rows[i].cells[columnIndex].innerText;
		    }
        }
    }
}
