﻿/*
******************************************************************
** 名: base  描述: parser基础库，兼容性、扩展性函数库
******************************************************************
*/

//**************初始化parser对象***********************************
if(typeof parser != "object") { var parser={}; }

//**************浏览器类型检测*************************************
var userAgent = navigator.userAgent.toLowerCase();
parser.browser = {
	safari: /webkit/.test(userAgent),
	opera: /opera/.test(userAgent),
	msie: /msie/.test(userAgent) && !/opera/.test(userAgent),
	mozilla: /mozilla/.test(userAgent) && !/(compatible|webkit)/.test(userAgent)
	
};
parser.ie = /msie/i.test(userAgent);
parser.mz = !parser.ie && /mozilla\/5/i.test(userAgent);
parser.op = !parser.ie && !parser.mz && /opera 5|opera\/5/i.test(userAgent);


//替代window.onload
parser.loads = [];
parser.loaded =  function( f ) {
	if ( f ) {
		parser.loads[parser.loads.length] = f;
	} else {
		for(var key in parser.loads) {			
			parser.loads[key].call(this);
		}	
	}	
};
parser.onload = function() {
	parser.loaded();
};
parser.doLoad = function() {
	if ( parser.browser.mozilla || parser.browser.opera ) {
		document.addEventListener( "DOMContentLoaded", parser.onload, false );
	} else if ( parser.browser.msie ) {
		document.write("<scr" + "ipt id=__ie_init defer=true " + 
			"src=//:><\/script>");
	
		var script = document.getElementById("__ie_init");
		script.onreadystatechange = function() {
			if ( this.readyState != "complete" ) return;
			this.parentNode.removeChild( this );
			parser.onload();
		};
	
		script = null;
	
	} else if ( parser.browser.safari ) {
		parser.safariTimer = setInterval(function(){
			if ( document.readyState == "loaded" || 
				document.readyState == "complete" ) {
	
				clearInterval( parser.safariTimer );
				parser.safariTimer = null;
	
				parser.onload();
			}
		}, 10);
	} 
};
parser.doLoad();


function go2(){}

//**************通过id调用DOM节点对象******************************
//get element by id
function $()
{
	var elements, element, oForm, i;
	
	if (arguments.length == 1)
	{
		return 	document.getElementById(arguments[0]);
	}
	else
	{
		if ( !arguments[1] ) {
			return 	document.getElementById(arguments[0]);	
		}
		
		if ( typeof arguments[1] == 'object' ) { //form下的对象
			oForm = arguments[1];
			for (i = 0; i < oForm.elements.length;i++) {
				if ( oForm.elements[i].id == arguments[0] ) {
					return 	oForm.elements[i];
				}
			}
			
		}
		else {
			elements = new Array();
			for (i = 0; i < arguments.length; i++)
			{
				element = arguments[i];
				if (typeof element == 'string')
				  element = document.getElementById(element);
				if (arguments.length == 1)
				  return element;
				elements.push(element);
			}
			return elements;
		
		}
	}
}
//get element by name
function $n(id) {
	return document.getElementsByName?document.getElementsByName(id):null;
}
//get element by tagName
function $tn(name) {
	return document.getElementsByTagName?document.getElementsByTagName(name):new Array()
}
//get element's children
function $c(element) {
	var children = [];
	var child = element.firstChild;
	while (child)
	{
		if (child.nodeType == 1)
			children.push(child);
		child = child.nextSibling;
	}
	return children;
}

function p$(_id) {
	return window.opener.document.getElementById(_id);
}
//**************dom的select/input或其他节点的选中值**************
function $$(_id,_getText, _type)
{
	if( _type == 'checkbox' || _type == 'radio' )
	{
		var eles = document.getElementsByName(_id);
		var v = '';
		for(var i=0;i<eles.length;i++)
		{
			if( eles[i].checked )
			{
				v += (v == ''?'':', ') + eles[i].value;
			}
		}
		return v;
	}
	
	var nodeType=$(_id).nodeName.toLowerCase();
	switch(nodeType)
	{
		case "input":
		case "textarea":return $(_id).value;
		case "select":
		{
			if( _getText ) return $(_id).options[$(_id).selectedIndex].text;
			else return $(_id).options[$(_id).selectedIndex].value;
		}		
		default:
		{
			if( _getText ) return $(_id).innerText;
			else return $(_id).innerHTML;
		}
	}	
}

	
//**************取得DOM节点绝对位置******************************
function getXY(e)
{
	var l=e.offsetLeft;
	var t=e.offsetTop;
	while(e=e.offsetParent)
	{  
		l+=e.offsetLeft;t+=e.offsetTop;
	}
	return {left:l,top:t}
}

//**************获取url查询参数*********************************
function getQuery(_p,url)
{
	if(url&&url=="") return "";
	var p=new RegExp("[&]{0,1}"+_p+"=([^&]*)","i");
	if(!url) url=location.search;
	url=url.match(p);
	if(url) return url[1];
	else return "";
}

//**************去字符串空格*********************************
//str 为输入字符串，trimType为类型，分别为　空-去除前后空格; 1-去前导空格; 2-去尾部空格

function trim(str,trimType)
{
	var i,tempStr;
	//去前空格
	if(!trimType || trimType==1)
	{
		i=-1; tempStr=' ';
		while(tempStr==' '||tempStr=='　')
		{
			i++; tempStr=str.substr(i,1);
		}
		str=str.substring(i);
	}
	if(!trimType || trimType==2)
	{
		i=str.length;tempStr=' ';
		while(tempStr==' '||tempStr=='　')
		{
			--i; tempStr=str.substr(i,1);	
		}
		str=str.substring(0,i+1);
	}
	return str;
}
function countWords(_coID, _doID)
{
	$(_doID).innerHTML = $$( _coID ).length;
}





//**************添加下级节点*************************************
function appendChild(_parent,_child)
{
	if(parser.ie) _parent.add(_child);
	else if(parser.mz || parser.op) _parent.appendChild(_child);
}

//**************删除select的所有option*****************************
function removeAllOption(o)
{
	var oLen=o.options.length;
	for(i=oLen-1;i>=0;i--)
	{
		o.remove(i);
	}
	o.reset
}

function addEventListener(element, eventType, handler, capture)
{
	try
	{
		if (element.addEventListener)
			element.addEventListener(eventType, handler, capture);
		else if (element.attachEvent)
			element.attachEvent("on" + eventType, handler);
	}
	catch (e) {}
}
function removeEventListener(element, eventType, handler, capture)
{
	try
	{
		if (element.removeEventListener)
			element.removeEventListener(eventType, handler, capture);
		else if (element.detachEvent)
			element.detachEvent("on" + eventType, handler);
	}
	catch (e) {}
}

/****************************************************************** 
** 名: transform  属于JFC － Jax Foundation Class
** 创建：welsham 2006-7-8  修改: welsham 2006-7-8
** 描述: 数据转换
** 修改描述: 
******************************************************************/
//**************编辑框数据转换*************************************
//换行、空格
function covHtml(str)
{
	str = str.replace(/&/g,"&amp;");
	str = str.replace(/  /g,"&nbsp;&nbsp;");
	str = str.replace(/\</g,"&lt;");
	str = str.replace(/>/g,"&gt;");	
	str = str.replace(/\r\n/g,"<br />");
	return str;
}
function unCovHtml(str)
{
	str = str.replace(/\<br>/gi,"\n");
	str = str.replace(/\<br \/>/gi,"\n");
	str = str.replace(/&nbsp;&nbsp;/g,"  ");
	str = str.replace(/&lt;/g,"<");
	str = str.replace(/&gt;/g,">");
	str = str.replace(/&amp;/g,"&");
	return str;
}

//**************class－样式****************************************
function hasClassName(ele, className)
{
	if (!ele || !className || !ele.className || ele.className.search(new RegExp("\\b" + className + "\\b")) == -1)
	{
		return false;
	}
	return true;
};
function addClassName(ele, className)
{
	if (!ele || !className || (ele.className && ele.className.search(new RegExp("\\b" + className + "\\b")) != -1))
		return;
	ele.className += (ele.className ? " " : "") + className;
}
function removeClassName(ele, className)
{
	if (!ele || !className || (ele.className && ele.className.search(new RegExp("\\b" + className + "\\b")) == -1))
		return;
	ele.className = ele.className.replace(new RegExp("\\s*\\b" + className + "\\b", "g"), "");
}

/****************************************************************** 
** 名: JSON  属于JFC － Jax Foundation Class
** 创建：welsham 2006-7-8  修改: welsham 2006-7-8
** 描述: JSON的解析
** 修改描述: 
******************************************************************/
//**************初始化JSON对象*************************************
if(typeof parser.JSON != "object") { parser.JSON={}; }

//**************JSON某一节点的子节点*********************************
//_node:当前节点键,空时为DD的子节点；isSD:是否标准JSON，false(用于DD)，true(用于tree等);order：排序属性；返回“键”
parser.JSON.childNodes=function(DD, _node, isSD, order)
{
	var key,nodes=[],orders,isASC;
	if(isSD)
	{
		for(key in DD)
		{
			if( DD[key].parent == _node) nodes[nodes.length]=key;
		}
	}
	else
	{
		//不限的子项，剔除
		if(_node=="0") return nodes;
		//一级子项,_node为空
		if(!_node) _node="0";
		for(key in DD)
		{
			if(!DD[key].parent || DD[key].parent==_node) nodes[nodes.length]=key;
		}
	}
	if( order && nodes.length > 0)
	{
		orders = order.split("_");
		order = orders[0];
		if ( DD[nodes[0]][order] ) {
			if( orders[1]=="DESC" ) isASC=false;
			else isASC=true;
			nodes.sort(
					   function(a,b){ 
							if( isASC ) return DD[a][order]-DD[b][order];
							else return DD[b][order]-DD[a][order];
					   }
					   )
		}
	}
	return nodes;
};
parser.JSON.childNode=function(DD,_node)
{
	
};

parser.JSON.nameTree=function(DD, key, hasSelf)
{
	var parent, nameString;
	parent = DD[key].parent;
	nameString = '';
	while (parent && DD[parent])
	{
		nameString = DD[parent].value + (nameString == ''? '' : '→') + nameString;
		parent = DD[parent].parent;
	}
	if (hasSelf) nameString += (nameString == ''? '' : '→') + DD[key].value;
	return nameString;
};