﻿/**
 * @Copyright (C), 2008, baisheng. Co., Ltd.
 * @FileName:      js1.js
 * @Author:        david<dongxuhua@yahoo.com>
 * @Date:          2008-04-25
 * @modified:	   modify1(2008-04-25)
 * @Description:   js常用函数库
 * @remark:		   代码不是很满足规范！
 */
/**
 * @Description:用$替代document.getElementById
 * @param:id:DOM对象的id
 */
function gd(id){
	return document.getElementById(id);
}
//取父窗口的对象
function gPd(id){
	return window.parent.document.getElementById(id);
}
/**
 * @Description:判断是否为IE浏览器
 */
function isIe(){
	var browserCls=navigator.userAgent.toLowerCase().indexOf("msie");
	return browserCls>=0;
}
/**
 * @Description:判断是否为Firefox浏览器
 */
function isFirefox(){
	var browserCls=navigator.userAgent.toLowerCase().indexOf("firefox");
	return browserCls>=0;
}
/**
 * @Description:创建浏览器兼容的xmlhttp对象
 */
function createxmlhttp(){
	var xmlhttp;
	try{
		xmlhttp=new ActiveXObject('Msxm12.XMLHTTP');
		return xmlhttp;
	}catch(e){
		try{
			xmlhttp=new ActiveXObject('Microsoft.XMLHTTP');
			return xmlhttp;
		}catch(e){
			try{
				xmlhttp=new XMLHttpRequest();
				return xmlhttp;
			}catch(e){}
		}
	}
	return null;
}
/**
 * @Description:IE中创建DOMDocument对象
 */
function createDomDoc(){
	var signatures=["Msxm12.DOMDocument.5.0",
					"Msxm12.DOMDocument.4.0",
					"Msxm12.DOMDocument.3.0",
					"Msxm12.DOMDocument",
					"Microsoft.XmlDom"];
	for(var i=0;i<signatures.length;i++){
		try{
			var domDoc=new ActiveXObject(signatures[i]);
			return domDoc;
		}catch(e){//忽略错误，继续循环尝试下一个版本
		}
	}
	return null;
}
/**
 * @Description:清除因浏览器而异的空白结点//daley:continue:暂不能循环处理子元素！
 */
function cleanWhitespace(element){
	var eleL=element.childNodes.length;
	//遍历element的子结点
	for(var i=0;i<eleL;i++){
		var node=element.childNodes[i];
		//判断是否是空白文本结点或注释，如果是，则删除该结点
		if((node.nodeType==3 && !/\S/.test(node.nodeValue)) || node.nodeType==8){
			element.removeChild(node);
			//daley:notice:删除元素后，子节点长度和遍历的i发生变化
			eleL--;i--;
		}			
	}
	//处理后的元素的子节点长度
	return eleL;
}
/**
 * @Description:从传入的XML文件中获取下拉菜单值
 */
function forSelectOptions(xmlpath){
	if(isIe()){
		var domDoc=createDomDoc();
		domDoc.async=false;//非异步调用
		domDoc.load(xmlpath);
		var root=domDoc.documentElement;
		for(var i=0;i<root.childNodes.length;i++){
			//alert(root.childNodes.item(i).getAttribute("value"));
			document.write("<option value="+root.childNodes.item(i).getAttribute("value")+">"+root.childNodes.item(i).text+"</option>");
		}
	}
	if(isFirefox()){//cleanWhitespace($("menu1"));
		var doc=document.implementation.createDocument("", "", null); 
		doc.async=false; 
		doc.load(xmlpath);	
		var root=doc.documentElement;
		cleanWhitespace(root);
		for(var i=0;i<root.childNodes.length;i++){
		document.write("<option value="+root.childNodes.item(i).getAttribute("value")+">"+root.childNodes.item(i).textContent+"</option>");
		}
	}
}
/*得到地址栏传递参数的函数--------------------------------------------------*/
function get(key){
    var value = "";    
    var sURL = window.document.URL;
   if (sURL.indexOf("?") > 0)
   {
       var arrayParams = sURL.split("?");       
       var arrayURLParams = arrayParams[1].split("&");       
       for (var i = 0; i < arrayURLParams.length; i++)
       {
          var sParam =  arrayURLParams[i].split("=");          
          if ((sParam[0] == key) && (sParam[1] != ""))
          {
              value = sParam[1];
              break;
          }
       }  
    }
    return value;
}
/*得到地址栏传递参数的函数-------------------------------------------------*/
//复制数据到剪贴板
//cue:不能复制时的提示.nocue:无提示
copy=function(txt,cue){
	if(cue=='')
		cue="温馨提示：\n您的firefox安全限制限制您进行剪贴板操作，请打开’about:config’将signed.applets.codebase_principal_support’设置为true’之后重试（相对路径为firefox根目录/greprefs/all.js）\n您也可以手动复制所需要的数据。";
	if(window.clipboardData){
		window.clipboardData.clearData();
		window.clipboardData.setData("Text",txt);
		alert('复制成功');
		return true;
	}
	else if(navigator.userAgent.indexOf("Opera")!=-1){
		window.location=txt;
		alert('复制成功');
		return true;
	}
	else if(window.netscape){
		try{
			netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
		}
		catch(e){
			if(cue!='nocue')
				alert(cue);
			return false;
		}
		var clip=Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
		if(!clip)return;
		var trans=Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
		if(!trans)return;
		trans.addDataFlavor('text/unicode');
		var str=new Object();
		var len=new Object();
		var str=Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
		var copytext=txt;str.data=copytext;
		trans.setTransferData("text/unicode",str,copytext.length*2);
		var clipid=Components.interfaces.nsIClipboard;
		if(!clip)return false;
		clip.setData(trans,null,clipid.kGlobalClipboard);
		alert('复制成功');
		return true;
	}
}
//判断值是否在数组中
function inArray(needle,haystack){
	type=typeof(needle);
	if(type=='string' || type=='number'){
		for(var i in haystack){
			if(haystack[i]==needle)
				return true;
		}
	}
	return false;
}
//daley:扩展:光标移动到最后，输入框onfocus时适用
function cursorLast(){
	var e=event.srcElement;
	var r=e.createTextRange();
	r.moveStart('character',e.value.length);
	r.collapse(true);
	r.select();
}
//检测数据：专用做检测表单/可写DIV提交数据
//rule:['user','notNull',5,60,/^\d+$/]型，数据规则
//v:要提交的数据
//n:对应v的提示
function checkData(rule,v,n){
	if(rule[1]=='notNull'){
		if(/^\s*$/.test(v)){
			alert('请输入“'+n+'”！');
			return false;
		}				
	}
	if(rule[2]!=0){
		if(v.length<rule[2]){
			alert('“'+n+'”长度应不小于'+rule[2]+'个字符！');
			return false;
		}
	}
	if(rule[3]!=0){
		if(v.length>rule[3]){
			alert('“'+n+'”长度应不超过'+rule[3]+'个字符！');
			return false;
		}
	}
	if(rule[4]!=''){
		if(/^\d+-\d+$/.test(rule[4])){//数字范围
			if(!(/^\d+$/.test(v))){
				alert('“'+n+'”应为数字！');
				return false;
			}
			var tmp=rule[4].match(/^(\d+)-(\d+)$/);
			v=parseFloat(v);
			if(v<tmp[1]){
				alert('“'+n+'”应不小于'+tmp[1]+'！');
				return false;
			}
			if(v>tmp[2]){
				alert('“'+n+'”应不超过'+tmp[2]+'！');
				return false;
			}					
		}
		else if(!(rule[4].test(v))){//正则
			alert('“'+n+'”的内容不合格式！');
			return false;
		}
	}
	return true;
}
//取数字对应的中文
//$n:0-9的数字
function getCnNum(n){
switch(n){
	case 0:
		return '零';
	case 1:
		return '一';
	case 2:
		return '二';
	case 3:
		return '三';
	case 4:
		return '四';
	case 5:
		return '五';
	case 6:
		return '六';
	case 7:
		return '七';
	case 8:
		return '八';
	case 9:
		return '九';
	case 10:
		return '十';
	default:
		return n;
}
}
//清空输入框初始值
function clearInput(it,v){
	if(it.value==v)
		it.value='';
}
// 说明：用 Javascript 获取指定页面元素的位置
// 整理：http://www.codebit.cn
// 来源：YUI DOM
function getElementPos(elementId){
	var ua = navigator.userAgent.toLowerCase();
	var isOpera = (ua.indexOf('opera') != -1);
	var isIE = (ua.indexOf('msie') != -1 && !isOpera); // not opera spoof
	//daley:add:
	if(typeof(elementId)=='string')
		var el = document.getElementById(elementId);
	else
		var el=elementId;
	if(el.parentNode === null || el.style.display == 'none')
		return false;
	var parent = null;
	var pos = [];
	var box;
	if(el.getBoundingClientRect){ //IE
		box = el.getBoundingClientRect();
		var scrollTop = Math.max(document.documentElement.scrollTop, document.body.scrollTop);
		var scrollLeft = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft);
		return {x:box.left + scrollLeft, y:box.top + scrollTop};
	}
	else if(document.getBoxObjectFor){ // gecko
		box = document.getBoxObjectFor(el);
		var borderLeft = (el.style.borderLeftWidth)?parseInt(el.style.borderLeftWidth):0;
		var borderTop = (el.style.borderTopWidth)?parseInt(el.style.borderTopWidth):0;
		pos = [box.x - borderLeft, box.y - borderTop];
	}
	else{ // safari & opera
		pos = [el.offsetLeft, el.offsetTop];
		parent = el.offsetParent;
		if (parent != el) {
			while (parent) {
				pos[0] += parent.offsetLeft;
				pos[1] += parent.offsetTop;
				parent = parent.offsetParent;
			}
		}
		if (ua.indexOf('opera') != -1 || ( ua.indexOf('safari') != -1 && el.style.position == 'absolute' )){
			pos[pan>0] -= document.body.offsetLeft;
			pos[1] -= document.body.offsetTop;
		}
	}
	if (el.parentNode)
		parent = el.parentNode;
	else
		parent = null;
	while (parent && parent.tagName != 'BODY' && parent.tagName != 'HTML'){ // account for any scrolled ancestors
		pos[0] -= parent.scrollLeft;
		pos[1] -= parent.scrollTop;
		if (parent.parentNode)
			parent = parent.parentNode;
		else
			parent = null;
	}
	return {x:pos[0], y:pos[1]};
}
//给firefox定义contains()方法，ie下不起作用
function addContainsForFF(){
	if(typeof(HTMLElement)!="undefined"){
		HTMLElement.prototype.contains=function(obj){   
			while(obj!=null&&typeof(obj.tagName)!="undefind"){//通过循环对比来判断是不是obj的父元素
				if(obj==this)  return true;   
				obj=obj.parentNode;
			}   
			return false;   
		};   
	}
}
