
//=========================================================
//参数集对象
//=========================================================
function paramCollection()
{
	this.Items = new Array() ;
	this.add = function(param)
	{
		this.Items[this.Items.length] = param;
	}
	this.getByIndex =function(index)
	{
		return this.Items[index] ;
	}
	this.remove = function(index)
	{
		var len = this.Items.length ;
		for(i=index;i<len-1;i++)
		{   //向前移
			this.Items[i] = this.Items[i+1] ;
		}
		this.Items.length = len -1 ;
	}	
	this.moveUp = function(index)
	{
		var len = this.Items.length ;
		if (index == 0) //最上面与最下面交换
		{
			this.moveGo(index,len-1) ;
			for(i=1;i<len-1;i++)
			{
				this.moveGo(i,-1) ; 
			}
		}
		else
			this.moveGo(index,-1) ;
		
	} 
	this.moveDown = function(index) 
	{
		var len = this.Items.length ;
		if (index == len-1) //最下面与最上面交换
		{
			this.moveGo(index,-(len-1)) ;
			for(i=1;i<len-1;i++)
				this.moveGo(i,1) ;
		}
		else
			this.moveGo(index,1) ;
	}
	this.moveGo = function(index,pos)
	{
		var item = this.Items[index] ;
		this.Items[index] = this.Items[index+pos] ;
		this.Items[index+pos] = item ;
	}
	this.getCount = function()
	{
		return this.Items.length ;
	}
	
	this.toString = function()
	{
		var result = "" ;
		var len = this.Items.length ;
		for(i=0;i<len;i++)
			result = result + "," + this.Items[i] ;
		if (result != "")
			result = result.substr(1) ;
		return result ;	
	}
}
//=========================================================
//END参数集对象
//=========================================================

//=========================================================
//AJAX
//=========================================================
function createRequestObject() {
    var ro;
    var browser = navigator.appName;
    if(browser == "Microsoft Internet Explorer"){
        ro = new ActiveXObject("Microsoft.XMLHTTP");
    }else{
        ro = new XMLHttpRequest();
    }
    return ro;
}

var http = createRequestObject();

function sndReq(url,ev) {
	if(url.indexOf("?"))
		url = url + "&" ;
	else
		url = url + "?" ;
	url = url + "rand=" +  Math.random(); 
    http.open('get',url);
    http.onreadystatechange = ev;
    http.send(null);
}


function getAjaxResult(responseText){
	return responseText.indexOf("fail:") == -1 ;
}

function getAjaxMsg(responseText)
{
	var pos = responseText.indexOf(":") ;
	if (pos >-1)
		return responseText.substring(pos+1) ; 
	else
		return "" ;
}

function sendAjax(url,param,method,evSuccess)
{
    var option={
        parameters:param,
        method:method,
        onSuccess:function(transport){
            var response = transport.responseText;var result = getAjaxResult(response);var ajaxMsg = getAjaxMsg(response);
            if (result)
                new function(){evSuccess};
            else
                alert(ajaxMsg);
        },
        onFailure:function(transport){alert("ajaxError");}
    }
    var request=new Ajax.Request(url,option);
}

//=========================================================
//表单自动验证
//=========================================================
function checkForm(_form)
{
	if (_form == null)
		_form = document.forms[0] ;
	var els = _form.elements;
	//遍历所有表元素
	for(var i=0;i<els.length;i++)
	{
		if (checkElement(els[i]) == false)
			return false ;
 			
	}
	return true ;
}

//========================================
//验证值
//val:值   
//type: int date 
//========================================
function validValue(val,type)
{	
	if ((type == "") || (type == "noempty"))
		return val != "" ;

	var reg = new RegExp(getRegExp(type),"i");
	return reg.test(val) ;
}


function checkElement(el)
{
		var sVal = getValue(el); //取元素的值
		var bIsNull	= true ;	//取得是否要验证 
		var sUsage = "" ;       //判断格式类型
		var sRegExp = "" ;      //正则表达式
		var sTip = "" ;
		var nMinLen = 0 ;
		var nMaxLen = 0 ;
	
		//得到是否要验证
		if (el.getAttribute("isnull") != null)
		{
			if (el.getAttribute("isnull") == "false")
				bIsNull = false ; 
		}
		
		if ((bIsNull) && (sUsage == "") && (sVal == "" )) //不需要验证
			return true  ; 
				
		//得到正则表达式
		if (el.getAttribute("usage") != null)
			sUsage = el.getAttribute("usage") ;
		else
			sUsage = "noempty" ;
			
		
	
		//字符串->正则表达式,不区分大小写	 
		var result = validValue(sVal,sUsage) ;
		if (sUsage == "date")
			result = ValidDate(sVal);
			
		if( result == false)
		{
			setError(el,getTip(sUsage)) ;
			return false ;
		}
		
		if (el.getAttribute("minlen") != null)
			nMinLen = el.getAttribute("minlen") ;
			
 		if (el.getAttribute("maxlen") != null)
			nMaxLen = el.getAttribute("maxlen") ;
		
		var exp ; 
		if ((nMinLen > 0 ) && (sVal.length < nMinLen) )
		{
			exp = "字符个数至少为[Len]个" 
			setError(el,exp.replace("[Len]",nMinLen)) ;
			return false ;
		}
		if ((nMaxLen > 0 ) && (sVal.length > nMaxLen) )
		{
			exp = "字符个数最多为[Len]个" 
			setError(el,exp.replace("[Len]",nMaxLen)) ;
			return false ;
		}
}

//报错
function setError(el,tip)
{
	tip = tip.replace("[ObjName]",getAttr(el,"tip"))
	alert(tip);
	if(el.disabled == false)
	   el.focus();
}

function getAttr(el,attrName)
{
	var val = "" ;
	if (el.getAttribute(attrName) != null)
		val = el.getAttribute(attrName) ;
	return val ;
}

//得到正则表达式
function getRegExp(usage)
{
	usage = usage.toLowerCase();
	switch(usage)
	{
		case "noempty" :
			return "^\\S+$" ;	
		case "int":
			return "^([+-]?)\\d+$" ;
		case "numeric" :
			return "^([+-]?)\\d*\\.?\\d+$" ;
		case "date":
			return "^\\d{4}(\\-|\\/|\.)\\d{1,2}\\1\\d{1,2}$" ;	
		case "email" :
			return "^\\w+((-\\w+)|(\\.\\w+))*\\@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+$" ;
		case "url" :
			return "^http[s]?:\\/\\/([\\w-]+\\.)+[\\w-]+([\\w-./?%&=]*)?$" ;
		case "zipcode" :
			return "([0-9]){6}" ;
		case "cardid" :
			return "([0-9]){15}|([0-9]){18}" ;
		case "tel": //0511-4405222 或者021-87888822 或者 021-44055520-555 或者 (0511)4405222
			return "((d{3,4})|d{3,4}-)?d{7,8}(-d{3})*" ; 
		case "ip" : 
			return "^\(([0-1]?\\d{0,2})|(2[0-5]{0,2}))\\.(([0-1]?\\d{0,2})|(2[0-5]{0,2}))\\.(([0-1]?\\d{0,2})|(2[0-5]{0,2}))\\.(([0-1]?\\d{0,2})|(2[0-5]{0,2}))$" ;
		case "rar" :
			return "(.*)\\.(rar|zip|zip|tgz)$" ;
		case "pic" :
			return "(.*)\\.(jpg|bmp|gif|ico|pcx|jpeg|tif|png|raw|tga)$" ;
		default :
			return "" ;
	}
}

//得到系统的错误提示信息
function getTip(usage)
{
	usage = usage.toLowerCase();
	switch(usage)
	{
		case "noempty" :
			return "请输入[ObjName]" ;
		case "int":
			return "请输入整型数据[ObjName]" ;
		case "numeric" :
			return "请输入数字[ObjName]" ; ;
		case "date" :
			return "请输入正确日期[ObjName]" ;			
		case "email" :
			return "请输入EMAIL" ;
		case "url" :
			return "请输入正确的网址" ;
		case "zipcode" :
			return "请输入正确的邮政编码" ;
		case "ip" : 
			return "请输入IP地址" ;
		case "rar" :
			return "请选择压缩文件" ;
		case "pic" :
			return "请选择图片文件" ;
		default :
			return "请输入[ObjName]" ;
	}
}
//取得对象的值（对于单选多选框把其选择的个数作为需要验证的值）
function getValue(el)
{
	//取得表单元素的类型
	var sType = el.type;
	switch(sType)
	{
		//文本输入框,直接取值el.value
		case "text":
		case "hidden":
		case "password":
		case "file":
		case "textarea": return el.value;
		//单多下拉菜单,遍历所有选项取得被选中的个数返回结果"0"表示选中一个，"00"表示选中两个
		case "checkbox":
		case "radio": return getRadioValue(el);
		case "select-one":
		case "select-multiple": return getSelectValue(el);
	}
}
	
	
//=========================================================
//表单操作
//=========================================================	
		
//取得radio的选中数,用"0"来表示选中的个数,我们写正则的时候就可以通过0{1,}来表示选中个数
function getRadioValue(el)
{
	for( var i=0;i<el.length;i++)
	{
		if (el[i].checked == true)
		{
			return el[i].value ;
		}
	}
	return "" ;
}

//取得select的选中数,用"0"来表示选中的个数,我们写正则的时候就可以通过0{1,}来表示选中个数
function getSelectValue(el)
{
	var sValue = "";
	for(var i=0;i<el.options.length;i++)
	{
		//单选下拉框提示选项设置为value=""
		if(el.options[i].selected && el.options[i].value!="")
		{
			sValue += "0";
		}
	}
	return sValue;
}

function getSelectedValue(form,chkName) { 
	var selectedValue = getChkValue(form,chkName)
	if(selectedValue == "")
		alert( "请至少选择一条记录"); 			
	return selectedValue ; 
	
}    

function getChkValue(chkName)
{
	var selectedValue = "" ;
	var els=document.getElementsByName(chkName);
	for(var i=0;i<els.length;i++){ 
		var e= els[i] ; 
		if(e.checked){ 
			if (selectedValue == "" ) 
				selectedValue = e.value ; 
			else 
				selectedValue = selectedValue + "," + e.value ; 
		} 
	} 
	return selectedValue ; 
}

//得到列表框的值
function getLstValue(el,isAll)
{
	var val = "";
	isAll = isAll == null?true:isAll; //是否是全部的值，还是选中的值
	for(var i=0;i<el.options.length;i++)
	{
		if ((isAll == false) && (el.options[i].selected == false))
			continue ; //没有选中到下一条
		if (val != "")
			val = val + "," ;
		val = val + el.options[i].value ;
	}
	return val;
}

function getLstText(el,isAll)
{
	var val = "";
	isAll = isAll == null?true:isAll; //是否是全部的值，还是选中的值
	for(var i=0;i<el.options.length;i++)
	{
		if ((isAll == false) && (el.options[i].selected == false))
			continue ; //没有选中到下一条
		if (val != "")
			val = val + "," ;
		val = val + el.options[i].text ;
	}
	return val;
}


//得到某个对象在同名对象中的序号
function getIndex(obj)
{
	var els=document.getElementsByName(obj.name);
	for(i=0 ; i<els.length;i++)
	{
		if (els[i] == obj)
			return i ;
	}
	return -1 ;
}

//根据某个控件，得到同行的另一个控件（针对控件组 ）
// obj 当前控件 obj与destObjName是同一种
// destObjName 所要得到的控件
function getObj(obj,destObjName)
{
	getObjByPos(obj,destObjName,0);
}
function getObjByPos(obj,destObjName,pos)
{
	var objs = document.getElementsByName(obj.name) ;
	var currIndex = -1 ;
	for(i=0 ; i<objs.length;i++)
	{
		if (objs[i] == obj)
		{
			currIndex = i ;
			break ;
		}
	}
	if (currIndex > -1)
		return document.getElementsByName(destObjName)[currIndex+pos] ;
}

function copyValue(sourceObj,destObj)
{
	if ((sourceObj != undefined) &&(destObj != undefined))
		destObj.value = sourceObj.value ;
}

//================================================================
// 两个ListBox选项相互移动
//================================================================
function addLstItem(sVal,sText,p_oSel,pos)
{
	var length = p_oSel.length ;
	var bTag	= 0;
	for(j=0; j<length; j++)  //遍历 list 
	{
		if((sText==p_oSel.options[j].text) && (sVal==p_oSel.options[j].value))   //判断此项如果已经存在，不用添加
		{
			bTag	= 1 ; 
			break;
		}
		if((sVal=="")||(sText=="")) 
		{
			bTag	= 1 ; 
			break;
		}
	}
	if(bTag == 0) 
	{
		if (pos == null)
			pos = length ;;
		for(i=pos;i<length;i++)
			p_oSel.options[i+1] = p_oSel.options[i] ;
		p_oSel.options[pos]	= new Option(sText,length);
		p_oSel.options[pos].value	= sVal;
	}	
}

//================================================================
// 删除DROPLIST 选中的值
//================================================================
function delContent(theList)
{
	var nIndex	= theList.selectedIndex;

	if(nIndex<0)
	{
		return ;			
	}
	else
	{
		theList.options[nIndex]	= null;
		theList.selectedIndex	= -1;
	}
}

//================================================================
// 清除DROPLIST的值
//================================================================
function delAllContent(p_oSel)
{
	p_oSel.length	= 0 ;
}


//================================================================
// DROPLIST向上移动选中的值
//================================================================
function moveUp(p_oSel)
{
	if (p_oSel.options.selectedIndex == -1)
		return ;
	with (p_oSel)
	{
		if(0 == selectedIndex) //第一项
		{
			options[length]	= new Option(options[0].text,options[0].value) ;
			options[0]		= null ;
			selectedIndex	= length -1 ;
		}
		else if(selectedIndex > 0) 
		{
			moveGo(p_oSel,-1) ;
		}
	}
}

//================================================================
// DROPLIST向下移动选中的值
//================================================================
function moveDown(p_oSel)
{
	if (p_oSel.options.selectedIndex == -1)
		return ;
	with (p_oSel)
	{
		if(selectedIndex == (length-1) ) //最后一项
		{
			var i ;
			var sText	= options[selectedIndex].text ;
			var sVal	= options[selectedIndex].value ;

			for(i=selectedIndex; i>0; i--)
			{
				options[i].text		= options[i-1].text ;
				options[i].value	= options[i-1].value ;
			}
			options[i].text		= sText
			options[i].value	= sVal ;
			selectedIndex		= 0 ;
		}
		else
		{
			moveGo(p_oSel,+1) ;
		}
	}
}

//================================================================
// SELECT 相对移动
//================================================================
function moveGo(p_oSel,nOffset)
{
	with (p_oSel)

	{
		nDesIndex	= selectedIndex + nOffset ;
		var sText	= options[nDesIndex].text ;
		var sVal	= options[nDesIndex].value ;
		options[nDesIndex].text		= options[selectedIndex].text ;
		options[nDesIndex].value	= options[selectedIndex].value ;
		options[selectedIndex].text		= sText ;
		options[selectedIndex].value	= sVal ;
		selectedIndex	= nDesIndex ;
	}
}

//================================================================
// SELECT 上下移动
//================================================================
function changePos(obj,pos)
{
	var len = obj.options.length ;
	var index = obj.selectedIndex ;
	if ((index + pos) < 0) //最顶不能上移
		return ;
	if ((index + pos) >= len)//最下不能下移
		return ; 
	for(i=index;i<len-1;i++)
	{
		var item = obj.options[i] ;
		obj.options[i] = obj.options[i+pos] ;
		obj.options[i+pos] = item ;
	}
}

//================================================================
// SELECT 选中相互移动
//================================================================
function moveLst(sourceLst,destLst)
{
    var length	= sourceLst.length;
	for(i=length-1;i>-1;i--)
	{
		if (sourceLst.options[i].selected)
		{
			destLst.options[destLst.length]	=  new Option(sourceLst.options[i].text,sourceLst.options[i].value,destLst.length); 
			sourceLst.options[i]	= null;
		}
	}    
}

//================================================================
// SELECT 全部相互移动
//================================================================
function moveLstAll(sourceLst,destLst)
{
    var length	= sourceLst.length;
	for(i=0;i<length;i++)
	{
		destLst.options[destLst.length]	=  new Option(sourceLst.options[i].text,sourceLst.options[i].value,destLst.length); 
	}   
	sourceLst.length = 0 ;
}


function delLst(theList)
{
	var count =  theList.length - 1;
	for(i=count;i>=0;i--)
	{
		if(theList.options[i].selected ==true )
		{
			theList.options[i]	= null;
		}
	}
	theList.selectedIndex	= -1;
	return ;

}

function checkAll(chk_Id,chk_All)
{
	var ml = document.forms[0];
	var len = ml.elements.length;
	var els = document.getElementsByName(chk_Id) ;
	for (var i = 0; i < els.length; i++) {
		var e = els[i] ;
		check(e,chk_All.checked) ;
	}
}

function checkValues(chk_Id,selectedId)
{

	if (selectedId == "")
		return ;
	selectedId = "," + selectedId + "," ;
	var els = document.getElementsByName(chk_Id) ;
	for (var i = 0; i < els.length; i++) {
		var e = els[i] ;
		check(e,selectedId.indexOf("," + e.value+",") > -1) ;
	}
}

function checkLike(chk_Id,chk_All)
{
	var els = document.forms[0].elements;
	for (var i = 0; i < els.length; i++) {
		var e = els[i] ;
		if (e.name.indexOf(chk_Id) > -1) {
			e.checked = chk_All.checked ; 
		}
	}
}

function checked(e)
{
	var e = document.getElementById(e) ;
	check(e,!e.checked) ;
}

function check(e,isCheck)
{
	var r = null ;
	r = e.parentElement.parentElement;
	e.checked = isCheck ;
	if (isCheck)
		setTRClass(r,"tblSelect"); 
	else
		setTRClass(r,"tblItem"); 	 
}

function setTRClass(tr,className)
{
	var len = tr.cells.length ;
	for (var i = 0; i < len; i++) 
		tr.cells[i].className = className ;
}


//=========================================================
//字符串类
//=========================================================
//除去左右空格
function trim(vInString)
{
    var strTemp=""+vInString+"";
	while(strTemp.charAt(0)==" ")
	{
		strTemp=strTemp.substring(1);
	}
	while(strTemp.charAt(strTemp.length-1)==" ")
	{
		strTemp=strTemp.substring(0,strTemp.length-1);
	}
	return strTemp;
}

//由 1|jc,2|wlweng 得到 jc,wlweng
function getItemStr(exp,index,spObject,spItem)
{
	spObject = spObject==null?",":spObject ;
	spItem = spItem==null?"|":spItem ;
	var arrObj = exp.split(spObject) ;
	var result = "" ;
	for(i=0 ;i<arrObj.length;i++)
	{
		var arrItem = arrObj[i].split(spItem) ;
		if (result != "")
			result = result + "," ;
		result = result + arrItem[index] ;
	}
	return result ;
}


//=========================================================
//窗体类
//=========================================================
function newWindow(mypage,myname,w,h,scroll,resize){
	w = w == null?screen.width:w;
	h = h == null?screen.height:h;
	LeftPosition = (screen.width) ? (screen.width-w)/2 : 0;
	TopPosition = (screen.height) ? (screen.height-h)/2 : 0;
	settings = 'height='+h+',width='+w+',top='+TopPosition+',left='+LeftPosition+'';
	if(scroll)
		settings = settings+',scrollbars='+scroll+'';
	if(resize)
		settings = settings+',resizable='+resize+'';
	
	openWin(mypage,myname,settings) ;
} 

var win ;
function openWin(mypage,myname,settings){ 
	win = window.open(mypage,myname,settings);
	if (win != null)
		win.focus();
} 

//打开对话框
function dialog(url,varValue,width,height,scroll,resize)
{
	var settings = "dialogWidth=" + width + "px;dialogHeight=" + height + "px" ;
	if(scroll)
		settings = settings+';scroll='+scroll+'';
	if(resize)
		settings = settings+';resizable='+resize+'';
	var rv=window.showModalDialog(url,varValue,settings);
	return rv ;
}

function confirmDelete()
{
	return confirm("您确定要删除吗？");
}

function zoomPhoto(oImg,width )
{
	var img = new Image();
	img.src = oImg.src ;
	if(img.width>width)
	{
		oImg.width=width;
		oImg.height = width * img.height / img.width ;
	}
}

function isMoney(val)
{
	return true ;
}

//统计值
var currValue ; 
var isTotal ;
//取原值
function getTotal(aInputValue)
{
	aInputValue.select();
	isTotal = isMoney(aInputValue.value);
	if (isTotal == false)
		return ;
	currValue = parseFloat(aInputValue.value) ;
}
//将变化后的值到合计中
function setTotal(aInputValue,aInputTotal)
{
	if (isTotal == false)
		return ;
		
	var val = aInputValue.value ;
	//没有变化
	if (parseFloat(aInputValue.value) == currValue)
		return ; 
		
	var total = aInputTotal.value ;
	if (total == "")
		total = 0 ;
	aInputTotal.value = toValue(parseFloat(total) + parseFloat(aInputValue.value) - parseFloat(currValue)) ;
}
function toValue(value)
{
    return Math.round(value*100)/100  	
}

//Tab Select
function tabSelect(o,index)
{
	var els = o.document.getElementsByTagName("li");
	for(i=0;i<els.length;i++)
	{
		els[i].className = "" ;
	}
	els[index].className = "selected" ;
}
function SetSelectedMenu(obj,selectMenu,cssName,cssSelectedName)
{
	var els = obj.getElementsByTagName("li");
	for(var i=0;i<els.length;i++){
		var e = els[i] ;
		if(e.id == selectMenu){
			e.className = cssSelectedName ;
		}
		else
		{
			e.className = cssName ;
		}
	}
	
}

function SetSelectedMenu2(obj,cssName,cssSelectedName)
{
	var els = obj.parentElement.getElementsByTagName("li");
	for(var i=0;i<els.length;i++){
		var e = els[i] ;
		if(e == obj){
			e.className = cssSelectedName ;
		}
		else
		{
			e.className = cssName ;
		}
	}
}

function SetSelectedMenu3(obj,cssName,cssSelectedName)
{
	var els = document.getElementsByTagName("li");
	for(var i=0;i<els.length;i++){
		var e = els[i] ;
		if(e == obj){
			e.className = cssSelectedName ;
		}
		else
		{
			e.className = cssName ;
		}
	}
}

//Table Select
function SetSelectedRow(otr,cssName,cssSelectedName,firstRowIndex)
{
    if (firstRowIndex == null)
        firstRowIndex = 0 ;
    if (cssName == null)
        cssName = "tblItem" ;
    if (cssSelectedName == null)
        cssSelectedName = "tblSelect" ;        
	var els = otr.parentElement.getElementsByTagName("tr");
	for(var i=firstRowIndex;i<els.length;i++){
		var e = els[i] ;
		if(e == otr) 
			setTRClass(e,cssSelectedName); 
		else
			setTRClass(e,cssName); 
	}
}

