



/**
* @ author	jtao.hide
*/


var Xone = new Object();
/**
* 返回按指定位数进行四舍五入的数值。
* @ param	f	float	原始数据
* @ parem	i	int	保留位数 【可选】 默认 2 位
* @ return	float
*/
Xone.round = function(f,i){
	if(arguments.length == 1) i = 2;
	for(var s = 1;i > 0;i--) s *= 10;
	return Math.round(f*s)/s;
}

Xone.roundFormat = function(f,i) {
	
	var num,str,iLen,resultStr
	var flag = false;
	num = parseFloat(f);
	if(isNaN(num))return '0.00';
	if(i==null) i = 2;
	str = ''+Math.round(num*Math.pow(10,i));
	if(str.indexOf("-")==0){
		str = str.substring(1);
		flag = true;
	}
	ilen = str.length;
	resultStr = '';
	if(ilen<=i){
		resultStr = '0.'
		for(;ilen<i;ilen++) resultStr += '0';
		resultStr += str;
	}else{
		resultStr = str.substring(0, ilen-i);
		resultStr += '.';
		resultStr += str.substring(ilen-i);
	}
	if(flag){
		return "-" + resultStr;
	}
	return resultStr;
}


/**
* 控制CHECKBOX全选
* @ param	s1	 String	控制全选的CHECKBOX ID
* @ parem	s2	 String	被选择的CHECKBOX NAME
* @ parem	b1	 Boolean 是否选中行变色,默认TRUE
* @ return	void
*/
Xone.selectAll = function(s1,s2,b1) {
	try {
        	if(arguments.length == 2) b1 = true;
		var oCtrl = Xone.findObject(s1); //
		var oChecks = document.getElementsByName(s2);
		if(oCtrl == null || oCtrl.tagName != "INPUT" || oCtrl.type != "checkbox") {
			//throw Xone.createError("未找到 id 为 "+s1+" 的 checkbox");
			return ;
		}
		var hasonclick = false;
		if(oCtrl.onclick){
			oCtrl.setAttribute("doclick",oCtrl.onclick.toString().replace("function anonymous()","").replace(/[\{\}\s]*/g,"").replace(/[\']/g,"\""));
			hasonclick = true;
		}
		oCtrl.onclick = function() {
			for(var i = 0;oChecks.length > i;i++) {
				if(!oChecks[i].getAttribute("readonly")) {
					oChecks[i].checked = oCtrl.checked;
                                        tr(oChecks[i]);
				}
			}
			if(hasonclick)eval(this.doclick);
		}
		for(var i = 0;oChecks.length > i;i++) {
			oChecks[i].onclick = function() {
                        	if(this.getAttribute("readonly")) return false;
                                tr(this);
				var b = true;
				for(var l = 0;oChecks.length > l;l++) {
					if(!oChecks[l].checked) b = false;
				}
				oCtrl.checked = b;
			}
		}
	} catch (e) {
		alert(e.description);
	}
}
function tr(o) {
	var color = o.checked?"#DAE6F9":"";
        var b = !o.checked;
	while(o!=null && o.tagName!="TR") {
        	o = o.parentNode;
        }
        if(o!=null){
        		o.bgColor=color;
                	o.setAttribute("event",b);
        }
}

/**
* 创建一个Error对象
* @ param	desc	 【可选】	Error对象的 description 属性
* @ return	Error对象引用
*/
Xone.createError = function(desc) {
	var e = new Error(0,desc);
	return e;
}

/**
* 转换数据金额为中文大写
* @ param	s1	 String	原始数字对象 NAME 或 ID
* @ parem	s2	 String	显示大写中文对象 NAME 或 ID
* @ return	void
*/
Xone.sumConvert = function(s1,s2) {
	var sum = Xone.findObject(s1);
	var sumCn = Xone.findObject(s2);
	try {
		if(sum == null || sumCn == null) throw createError("未找到对象!");
		var b = sum.tagName=="INPUT";
		var convert = Xone.numberConvert(b?sum.value:sum.innerText);
		if(b)sum.attachEvent("onchange",new Function("Xone.sumConvert('"+s1+"','"+s2+"')"));
		with(sumCn) {
			if(tagName=="INPUT") value = convert;
			else innerText = convert;
		}
	} catch(e) {
		alert(e.description);
	}
}


/**
* 根据对象 id 或 name 查找对象 ID 优先
* @ param	s1	 String  the NAME or ID attribute of object
*/
Xone.findObject = function(s1) {
	if(typeof(s1)=="object") return s1;
	var _o = document.getElementById(s1);
	if(_o == null) {
		_o = document.getElementsByName(s1);
		if(_o.length != 0) _o = _o[0];
		else _o = null;
	}
	return _o;
}



/**
 * 抄来的,待改.
 */


Xone.numberConvert = function(Num) {
	for(i=Num.length-1;i>=0;i--) {
		Num = Num.replace(",","")	//替换tomoney()中的“,”
		Num = Num.replace(" ","")	//替换tomoney()中的空格
	}
	Num = Num.replace("￥","")	 //替换掉可能出现的￥字符
	if(isNaN(Num)) {	//验证输入的字符是否为数字
  		alert("请检查小写金额是否正确");
  		return;
	}
	var fu = "";
	if(Num.indexOf("-") == 0) {
		fu = "负"
		Num = Num.substring(1);
	}
	part = String(Num).split(".");
	newchar = "";
	for(i=part[0].length-1;i>=0;i--){
		if(part[0].length > 12){ alert("位数过大，无法计算");return "";}//若数量超过拾亿单位，提示
			tmpnewchar = ""
			perchar = part[0].charAt(i);
		switch(perchar) {
			case "0": tmpnewchar="零" + tmpnewchar ;break;
			case "1": tmpnewchar="壹" + tmpnewchar ;break;
			case "2": tmpnewchar="贰" + tmpnewchar ;break;
			case "3": tmpnewchar="叁" + tmpnewchar ;break;
			case "4": tmpnewchar="肆" + tmpnewchar ;break;
			case "5": tmpnewchar="伍" + tmpnewchar ;break;
			case "6": tmpnewchar="陆" + tmpnewchar ;break;
			case "7": tmpnewchar="柒" + tmpnewchar ;break;
			case "8": tmpnewchar="捌" + tmpnewchar ;break;
			case "9": tmpnewchar="玖" + tmpnewchar ;break;
		}
		switch(part[0].length-i-1) {
			case 0: tmpnewchar = tmpnewchar +"圆" ;break;
			case 1: if(perchar!=0)tmpnewchar= tmpnewchar +"拾" ;break;
			case 2: if(perchar!=0)tmpnewchar= tmpnewchar +"佰" ;break;
			case 3: if(perchar!=0)tmpnewchar= tmpnewchar +"仟" ;break;
			case 4: tmpnewchar= tmpnewchar +"万" ;break;
			case 5: if(perchar!=0)tmpnewchar= tmpnewchar +"拾" ;break;
			case 6: if(perchar!=0)tmpnewchar= tmpnewchar +"佰" ;break;
			case 7: if(perchar!=0)tmpnewchar= tmpnewchar +"仟" ;break;
			case 8: tmpnewchar= tmpnewchar +"亿" ;break;
			case 9: if(perchar!=0)tmpnewchar = tmpnewchar +"拾" ;break;
			case 10: if(perchar!=0)tmpnewchar= tmpnewchar +"佰" ;break;
			case 11: if(perchar!=0)tmpnewchar= tmpnewchar +"仟" ;break;
		}
		newchar = tmpnewchar + newchar;
	}
	//小数点之后进行转化
	if(Num.indexOf(".")!=-1){
	if(part[1].length > 2) {
		//alert("小数点之后只能保留两位,系统将自动截断");
		part[1] = part[1].substr(0,2)
	}
	for(i=0;part[1].length>i;i++){
		tmpnewchar = ""
		perchar = part[1].charAt(i)
		switch(perchar){
			case "0": tmpnewchar="零" + tmpnewchar ;break;
			case "1": tmpnewchar="壹" + tmpnewchar ;break;
			case "2": tmpnewchar="贰" + tmpnewchar ;break;
			case "3": tmpnewchar="叁" + tmpnewchar ;break;
			case "4": tmpnewchar="肆" + tmpnewchar ;break;
			case "5": tmpnewchar="伍" + tmpnewchar ;break;
			case "6": tmpnewchar="陆" + tmpnewchar ;break;
			case "7": tmpnewchar="柒" + tmpnewchar ;break;
			case "8": tmpnewchar="捌" + tmpnewchar ;break;
			case "9": tmpnewchar="玖" + tmpnewchar ;break;
		}
		if(i==0) tmpnewchar =tmpnewchar + "角";
		if(i==1) tmpnewchar = tmpnewchar + "分";
		newchar = newchar + tmpnewchar;
		}
	}
 //替换所有无用汉字
	while(newchar.search("零零") != -1)
	newchar = newchar.replace("零零", "零");
	newchar = newchar.replace("零亿", "亿");
	newchar = newchar.replace("亿万", "亿");
	newchar = newchar.replace("零万", "万");
	newchar = newchar.replace("零圆", "圆");
	newchar = newchar.replace("零角", "");
	newchar = newchar.replace("零分", "");

	if (newchar.charAt(newchar.length-1) == "圆")
	newchar = newchar+"整"
      	if(newchar == "圆整") return "";
	return fu+newchar;
}

Xone.window = new Object();


/**
* 为弹出窗口resizeTo,并且窗口居中,用以替换Xone.window.resizeTo
* @ param	w	 int	宽
* @ parem	h	 int	高
* @ return	void
*/

Xone.window.resizeTo = function(w,h) {
	if(opener){
		var l=(screen.width-w)/2;
		var t=(screen.height-h)/2;
		window.resizeTo(w,h);
		window.moveTo(l,t);
	}
}

Xone.print = function() {
	var o = document.getElementById("print");
//	var param = 'top=0,left=0,toolbar=0,location=0,status=0,menubar=0,resizable=1, scrollbars=1,width='+window.screen.availWidth+',height='+window.screen.availHeight+''
	var param = 'top='+ (window.screen.availHeight-550)/2+',left='+(window.screen.availWidth-750)/2+',toolbar=0,location=0,status=0,menubar=0,resizable=1, scrollbars=1,width=750,height=550'
	var win = window.open("about:blank","print",param);
	var s = "<p align=\"center\"><input type='button' value='打印' onclick='this.parentNode.style.display=\"none\";document.execCommand(\"print\");this.parentNode.style.display=\"\"'> <input type='button' value='关闭' onclick='window.close()'></p>";
//	var s = "<script> document.execCommand('print');window.close()</script>";
	win.document.write(s+ o.innerHTML );
	//win.document.body.innerHTML = o.innerHTML + s;
	win.document.createStyleSheet(window.serverContextPath + "/_pub/print.css");
}

/**
48 - 57  = key:0-9
189 = key:-
96 - 105 = micro-key:0-9
109 = micro-key:-
8 =  key:back
190 = key:.
37 = key:left
39 = key:right
46 = key:delete
110 = micro-key:.
*/
Xone.numberOnly = function(round) {
	event.srcElement.ondrag = function() {event.returnValue = "";} //	禁止拖拽
	var k = event.keyCode;
	var round = typeof(round) == "undefined"?false:round;
	var value = event.srcElement.value;
	var rng = document.selection.createRange(); // 创建光标对象（注意不能从event.srcElement创建，input type=text 不支持）
	var rngText = rng.text;	// 被选择的字符
	rng.moveToPoint(event.x,event.y);	
	rng.moveEnd("character",value.length); // 为获得光标位置而移动光标，注意此操作会改变rng.text属性
	var rngPos = value.length - rng.text.length;	// 光标位置（选择范围的起始位置）
	if (event.shiftKey || !((k >= 48 && k <= 57) || (k >= 96 && 105 >= k  )))  {	// 非数字、delete、退格、方向
		if (k == 8 || k==9 || k == 37 || k == 39 || k == 46) return // 操作键 左、右方向，退格和删除，TAB任何情况下可执行
		else if((k == 110 || k == 190) && round != 0) {	// 小数点且不限制为整数
			if(value.indexOf(".")!=-1 && rngText.indexOf(".")==-1) event.returnValue = ""; // 只能有一个小数点
			if(round) { // 如果有对小数位数限制
				if((rng.text.length - rngText.length) > round) event.returnValue = ""; // 
			}
			// 允许小数点输入在第一位: 表示个位数为0
			// 允许小数点输入在最后: 考虑到输入顺序
		} else if (k == 189 || k == 109) {	 // 负号
			if(rngPos!=0 || (value.indexOf("-")!=-1 && rngText.indexOf("-")==-1)) event.returnValue = ""; // 负号必须在第一个且只能有一个负号
		}
		else event.returnValue = "";
	} else {
		var subRng = value.substring(0,rngPos); // 光标之前的字符
		if(subRng=="0" || subRng=="-0") event.returnValue = ""; // 值由0或-0起始时，后面只能输入小数点
		if(round) { // 有对小数位数限制
			if(subRng.indexOf(".")!=-1 && (value.length - value.indexOf(".") - rngText.length) > round) event.returnValue = "";	// 小数点在光标之前时则小数点之后位数不能大于round
		}
	}
}