/*
******************************************************************
** 名: 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);


//浏览器类型
var userAgent = navigator.userAgent.toLowerCase();
var is_opera = userAgent.indexOf('opera') != -1 && opera.version();
var is_moz = (navigator.product == 'Gecko') && userAgent.substr(userAgent.indexOf('firefox') + 8, 3);
var is_ie = (userAgent.indexOf('msie') != -1 && !is_opera) && userAgent.substr(userAgent.indexOf('msie') + 5, 3);
var is_mac = userAgent.indexOf('mac') != -1;


//替代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"), "");
}


//Cookie
//获取cookie值
//获取cookie值
function getCookie( name ){
	var cookie_start = document.cookie.indexOf(name);
	var cookie_end = document.cookie.indexOf(";", cookie_start);
	return cookie_start == -1 ? '' : unescape(document.cookie.substring(cookie_start + name.length + 1, (cookie_end > cookie_start ? cookie_end : document.cookie.length)));
}
//写入Cookie
function setCookie( cookieName, cookieValue, seconds, path, domain, secure) {
	var expires = new Date();
	expires.setTime(expires.getTime() + seconds * 1000);
	document.cookie = escape(cookieName) + '=' + escape(cookieValue)
		+ (expires ? '; expires=' + expires.toGMTString() : '')
		+ (path ? '; path=' + path : '/')
		+ (domain ? '; domain=' + domain : '')
		+ (secure ? '; secure' : '');
}



/****************************************************************** 
** 名: 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;
};


// ** Flash  ** //
function AC_FL_RunContent(o, args) {
	var ret = AC_GetArgs(args, "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000", "application/x-shockwave-flash");
	var str = '';
	if(is_ie && !is_opera) {
		str += '<object ';
		for (var i in ret.objAttrs) {
			str += i + '="' + ret.objAttrs[i] + '" ';
		}
		str += '>';
		for (var i in ret.params) {
			str += '<param name="' + i + '" value="' + ret.params[i] + '" /> ';
		}
		str += '</object>';
	} else {
		str += '<embed ';
		for (var i in ret.embedAttrs) {
			str += i + '="' + ret.embedAttrs[i] + '" ';
		}
		str += '></embed>';
	}
	if ( o ) {
		o.innerHTML = str;
	} else {
		return str;
	}
}
function AC_GetArgs(args, classid, mimeType) {
	args["pluginspage"] = "";
	args["codebase"] = "";
	var ret = new Object();
	ret.embedAttrs = new Object();
	ret.params = new Object();
	ret.objAttrs = new Object();
	for (var key in args){
		var key = key.toLowerCase();
		switch (key){
			case "classid":break;
			case "pluginspage":ret.embedAttrs[key] = 'http://www.macromedia.com/go/getflashplayer';break;
			case "src":ret.embedAttrs[key] = args[key];ret.params["movie"] = args[key];break;
			case "values":ret.embedAttrs["flashvars"] = args[key];ret.params["FlashVars"] = args[key];break;
			case "codebase":ret.objAttrs[key] = 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0';break;
			case "onafterupdate":case "onbeforeupdate":case "onblur":case "oncellchange":case "onclick":case "ondblclick":case "ondrag":case "ondragend":
			case "ondragenter":case "ondragleave":case "ondragover":case "ondrop":case "onfinish":case "onfocus":case "onhelp":case "onmousedown":
			case "onmouseup":case "onmouseover":case "onmousemove":case "onmouseout":case "onkeypress":case "onkeydown":case "onkeyup":case "onload":
			case "onlosecapture":case "onpropertychange":case "onreadystatechange":case "onrowsdelete":case "onrowenter":case "onrowexit":case "onrowsinserted":case "onstart":
			case "onscroll":case "onbeforeeditfocus":case "onactivate":case "onbeforedeactivate":case "ondeactivate":case "type":
			case "id":ret.objAttrs[key] = args[key];break;
			case "width":case "height":case "align":case "vspace": case "hspace":case "class":case "title":case "accesskey":case "name":
			case "tabindex":ret.embedAttrs[key] = ret.objAttrs[key] = args[key];break;
			default:ret.embedAttrs[key] = ret.params[key] = args[key];
		}
	}
	ret.objAttrs["classid"] = classid;
	if(mimeType) {
		ret.embedAttrs["type"] = mimeType;
	}
	return ret;
}