﻿/*
******************************************************************
** 名: base  描述: parser基础库，兼容性、扩展性函数库
******************************************************************
*/

//**************初始化parser对象***********************************
if(typeof parser != "object") { var parser={}; }

function go2()
{
}
//**************通过id调用DOM节点对象******************************
//get element by id
function $()
{
	if (arguments.length ==1)
	{
		return 	document.getElementById(arguments[0]);
	}
	else
	{
		var elements = new Array();
		for (var i = 0; i < arguments.length; i++)
		{
		var 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)
{
	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;
}

/****************************************************************** 
** 名: Compatible  属于JFC － Jax Foundation Class
** 创建：welsham 2006-7-8  修改: welsham 2006-7-8
** 描述: 兼容处理
** 修改描述:
******************************************************************/
//**************浏览器类型检测*************************************
parser.ie = /msie/i.test(navigator.userAgent);
parser.mz = !parser.ie && /mozilla\/5/i.test(navigator.userAgent);
parser.op = !parser.ie && !parser.mz && /opera 5|opera\/5/i.test(navigator.userAgent);

//**************添加下级节点*************************************
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) {}
}

/****************************************************************** 
** 名: transform  属于JFC － Jax Foundation Class
** 创建：welsham 2006-7-8  修改: welsham 2006-7-8
** 描述: 数据转换
** 修改描述: 
******************************************************************/
//**************编辑框数据转换*************************************
//换行、空格
function covHtml(str)
{
	str = str.replace(/  /g,"&nbsp;&nbsp;");
	str = str.replace(/\</g,"&lt;");
	str = str.replace(/>/g,"&gt;");
	str = str.replace(/&/g,"&amp;");
	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&&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)
	{
		orders = order.split("_");
		order=orders[0];
		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)
	{
		nameString = DD[parent].value + (nameString == ''? '' : '→') + nameString;
		parent = DD[parent].parent;
	}
	if (hasSelf) nameString += (nameString == ''? '' : '→') + DD[key].value;
	return nameString;
};