/**
 * JavaScript 浏览器兼容性代码
 *
 * @since 2007-5-24 15:06
 * @auther SkyObscure.姜枫渔火
 * @version 1.0.0
 */

// 如果不存在Node对象，则定义一个Node对象，采用下列属性和值
// 注意，这些只是HTML节点类型，对于XML专有的节点，需要才此处添加其他常量。
// 主要是为了针对IE(包括ie6)没有定义nodeType节点属性常量的问题
if ( !window.Node ) {
	var Node = {
		ELEMENT_NODE : 1,
		ATTRIBUTE_NODE : 2,
		TEXT_NODE : 3,
		CDATA_SECTION_NODE : 4,
		ENTITY_REFERENCE_NODE : 5,
		ENTITY_NODE : 6,
		PROCESSING_INSTRUCTION_NODE : 7,
		COMMENT_NODE : 8,
		DOCUMENT_NODE : 9,
		DOCUMENT_TYPE_NODE : 10,
		DOCUMENT_FRAGMENT_NODE : 11,
		NOTATION_NODE : 12
	};
}

/**
 * 取得Node的类型名称
 *
 * @param nodeType <code>number</code>
 * @return string
 */
function getNodeName( nodeid ) {
	switch ( nodeid ) {

		case Node.ELEMENT_NODE :
			return 'ELEMENT_NODE';

		case Node.ATTRIBUTE_NODE :
			return 'ATTRIBUTE_NODE';

		case Node.TEXT_NODE :
			return 'TEXT_NODE';

		case Node.CDATA_SECTION_NODE :
			return 'CDATA_SECTION_NODE';

		case Node.ENTITY_REFERENCE_NODE :
			return 'ENTITY_REFERENCE_NODE';

		case Node.ENTITY_NODE :
			return 'ENTITY_NODE';

		case Node.PROCESSING_INSTRUCTION_NODE :
			return 'PROCESSING_INSTRUCTION_NODE';

		case Node.COMMENT_NODE :
			return 'COMMENT_NODE';

		case Node.DOCUMENT_NODE :
			return 'DOCUMENT_NODE';

		case Node.DOCUMENT_TYPE_NODE :
			return 'DOCUMENT_TYPE_NODE';

		case Node.DOCUMENT_FRAGMENT_NODE :
			return 'DOCUMENT_FRAGMENT_NODE';

		case Node.NOTATION_NODE :
			return 'NOTATION_NODE';

		default :
			return 'OTHER_NODE';
	}
}

// 浏览器是否支持W3C DOM API
var dom = !!document.getElementById;
// 浏览器是否支持 IE 4 API
var ie4 = !!document.all;
// 浏览器是否支持 Netscape 4 API
var ns4 = !!document.layers;

/**
 * 取得document一个标签对象的方法，此方法做了一定的兼容功能
 *
 * @param id string 标签的id属性值
 * @return HTMLElement接口对象
 */
function getElementByID( id ) {
	if ( dom ) {   // 是否是遵守ＤＯＭ的浏览器
		return document.getElementById( id );

	} else if ( ie4 ) {       // 是否支持IE API
		return document.all[id];

	} else if ( ns4 ) {    // 是否是支持Netscape API
		return document.layers[id];

	}

	return null;
}

// 定义一些浏览器和操作系统的兼容性变量
var browserVersion = parseFloat( window.navigator.appVersion );
var isNetscape = window.navigator.userAgent.indexOf( "Netscape" ) != -1;
var isIE = window.navigator.appName.indexOf( "Microsoft" ) != -1;
var isFire = window.navigator.userAgent.indexOf( "Firefox" ) != -1;
var isOpera = window.navigator.userAgent.indexOf( "Opera" ) != -1;
var isWindows = window.navigator.userAgent.indexOf( "Win" ) != -1;
var isMac = window.navigator.userAgent.indexOf( "max" ) != -1;
var isUnix = window.navigator.userAgent.indexOf( "X11" ) != -1;

//
// JAVASCRIPT的版本兼容性
//
// <script language="javascript1.0" type="text/javascript"> var _version = 1.0; </script>
// <script language="javascript1.1" type="text/javascript"> var _version = 1.1; </script>
// <script language="javascript1.2" type="text/javascript"> var _version = 1.2; </script>
// <script language="javascript1.3" type="text/javascript"> var _version = 1.3; </script>
// <script language="javascript1.4" type="text/javascript"> var _version = 1.4; </script>
// <script language="javascript1.5" type="text/javascript"> var _version = 1.5; </script>
//

/**
 * encodeURIComponent和escape
 * decodeURIComponent和unescape
 * 之间的兼容性方法, escape和unescape方法在ECMAScript v3之前定义
 * ECMAScript v3之后不建议使用
 *
 * @param str 等待编码的字符串
 * @return string
 */
function encodeURIModule( str ) {
	if ( encodeURIComponent )
		return encodeURIComponent( str );

	return escape( str );
}

function decodeURIModule( str ) {
	if ( decodeURIComponent ) {
		return decodeURIComponent( str );
	}

	return escape( str );
}

var xmlhttp = null;

/**
 * 兼容AJAX的XMLHttpRequest对象创建
 *
 * @return bool;
 */
function createXMLHttpRequest() {
	if ( window.ActiveXObject ) {
		try {
			xmlhttp = new ActiveXObject( "Msxml2.XMLHTTP" );
			return true;
		} catch ( e ) {
			try {
				xmlhttp = new ActiveXObject( "Microsoft.XMLHTTP" );
				return true;
			} catch ( ex ) {
				return false;
			}
		}
	} else if ( window.XMLHttpRequest ) {
		try {
			xmlhttp = new XMLHttpRequest();
			return true;
		} catch ( e ) {
			return false;
		}
	} else {
		return false;
	}
}

// 用于标志是否已经导入这个JS文件
var COMPATIBILITY_INCLUDED = true;