﻿var ua      = navigator.userAgent;
var opera	= /opera [56789]|opera\/[56789]/i.test(ua);
var isIE    = !opera && /msie [56789]/i.test(ua);       // preventing opera to be identified as ie
var isMoz 	= !opera && /mozilla\/[56789]/i.test(ua);   // preventing opera to be identified as mz
//-------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------
//测字符串实际长度
String.prototype.Tlength = function(){var arr=this.match(/[^\x00-\xff]/ig);return this.length+(arr==null?0:arr.length);};
//字符串左取
String.prototype.left = function(num,mode){if(!/\d+/.test(num))return(this);var str = this.substr(0,num);if(!mode) return str;var n = str.Tlength() - str.length;num = num - parseInt(n/2);return this.substr(0,num);};
//字符串右取
String.prototype.right = function(num,mode){if(!/\d+/.test(num))return(this);var str = this.substr(this.length-num);if(!mode) return str;var n = str.Tlength() - str.length;num = num - parseInt(n/2);return this.substr(this.length-num);};
//字符串去除两端空字符
String.prototype.trim = function(){return this.replace(/(^\s*)|(\s*$)/g,"");};
String.prototype.Ltrim = function(){return this.replace(/(^\s*)/g, "");};
String.prototype.Rtrim = function(){return this.replace(/(\s*$)/g, "");};
String.prototype.Length = function(){return this.replace(/[^x00-xff]/g,"**").length;};
//-------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------
function isArray(obj){return (typeof obj=="object")&&(obj.constructor==Array);};
//-------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------
function prev(elem){
	do {
		elem = elem.previousSibling;
	} while(elem&&elem.nodeType!=1);
	return elem;
}
function next(elem){
	do{
		elem = elem.nextSibling;
	} while(elem&&elem.nodeType!=1);
	return elem;
};
function first(elem){
	elem = elem.firstChild;
	return elem&&elem.nodeType!=1 ? next(elem) : elem;
};
function last(elem){
	elem = elem.lastChild;
	return elem&&elem.nodeType!=1 ? prev(elem) : elem;
};
function par(elem,num){
	num = num || 1;
	for(var i=0;i<num;i++) 
		if(elem!=null)
			elem = elem.parentNode;
	return elem;
};

function id(name){return document.getElementById(name);};

function tag(name,elem){return (elem||document).getElementsByName(name);}

function create(name){
	return document.createElementNS ? 
		document.createElementNS('http://www.w3.org/1999/xhtml',name):
		document.createElement(name);
};

function before(parent,before,elem){
	if(elem==null){
		elem = before;
		before = parent;
		parent = before.parentNode;
	};
	
	var elems = checkElem(elem);
	
	for(vari=elems.length-1;i>=0;i--){
		parent.insertBefore(elems[i],before);
	};
};
function append(parent,elem){
	var elems = checkElem(elem);
	for (var i=0;i<elems.length;i++){
		parent.appendChild(elems[i]);
	};
};
function checkElem(a){
	var r = [];
	if (a.constructor!=Array) a = [a];
	for(var i=0;i<a.length;i++){
		if(a[i].constructor==String){
			var div = create("div");
			div.innerHTML = a[i];
			for(var j=0;j<div.childNodes.length;j++)
				r[r.length] = div.childNodes[j];
		} else if(a[i].length){//If it's an array
			for(var j=0;j<a[i].length;j++)
				r[r.length] = a[i][j];
		} else {
			r[r.length] = a[i];
		};
	};
	return r;
};
//获取一个元素文本内容的通用函数。
function text(e){
	var t="";
	e = e.childNodes || e;
	for (var j=0;j<e.length;j++){
		t += e[j].nodeType!=1? e[j].nodeValue : text(e[j].childNodes);
	};
	return t;
};
//检测元素是否有一个指定的特性
function hasAttribute(elem,name){
	return  elem.getAttribute(name)!=null;
};
//获取和设置元素特性的值
function attr(elem,name,value){
	if(!name||name.constructor!=String) return '';
	name = {'for':'htmlFor','class':'className'}[name]||name;
	if(typeof(value)!='undefined'){
		elem[name] = value;
		if(elem.setAttribute) elem.setAttribute(name,value);
	};
	//return elem[name] || elem.getAttribute(name) || '';
	return elem[name] || elem.getAttribute(name);
};

//删除一个独立的DOM节点
function remove(elem){
	if(elem) elem.parentNode.removeChild(elem);
};
//删除一个Dom元素中的所有子节点。
function empty(elem){
	while(elem.firstChild)
		remove(elem.firstChild);
};

//-------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------
function domReady(f){
	if (domReady.done) return f();
	if(domReady.timer){
		domReady.ready.push(f);
	}else{
		addEvent(window,"load",isDomReady);
		domReady.ready = [f];
		domReady.timer = setInterval(isDomReady,13);
	};
};
function isDomReady(){
	if(domReady.done) return false;
	if(document && document.getElementsByTagName && document.getElementById && document.body){
		clearInterval(domReady.timer);
		domReady.timer = null;
		for(var i=0;i<domReady.ready.length;i++)
			domReady.ready[i]();
		domReady.ready = null;
		domReady.done = true;
	}
};
Function.prototype.method = function(name,func){
	this.prototype[name] = func;
	return this;
};
//一个（相当复杂的）函数，允许你方便的从其他对象继承函数，
//同时仍然可以调用属于父对象的那些函数
Function.method('inherits',function(parent){
	//记录我们目前所在父层次的级数
	var depth = 0;
	//继承父对象的方法
	var proto = this.prototype = new parent();
	//创建一个新的名为'uber'的”特权“函数
	//调用它时会执行所有在继承时被重写的函数
	this.method('uber',function uber(name){
		var func;					//要执行的函数
		var ret;					//函数的返回值
		var v = parent.prototype;	//父对象的prototype
		//如果我们已经在某个‘UBER’函数之内
		if(depth){
			//上溯必要的depth，以找到原始的prototype
			for(var i=d;i>0;i++){
				v = v.constructor.prototype;
			}
			//从该prototype中获得函数
			func = v[name];
		//否则这就是'UBER'函数的第一次调用
		} else {
			// 从prototype获得要执行的函数
			func = proto[name];
			//如果此函数属于当前的prototype
			if(func==this[name]){
				//则改为调用父对象的prototype
				func = v[name];
			}
		}
		
		//记录我们在继承堆栈中所在位置的级数
		depth++;
		
		//使用除第一个以外所有的arguments调用此函数
		//（因为第一个参数是执行的函数名）
		ret = func.apply(this,Array.prototype.slice.apply(arguments,[1]));
		
		//恢复继承堆栈
		depth--;
		
		//返回执行过的函数的返回值
		return ret;
	});	
	return this;
});
//只继承父对象特定函数的函数。而非使用new parent()继承所有的函数
Function.method('swiss',function(parent){
	//遍历所有要继承的方法
	for(var i=1;i<argument.length;i++){
		var name = arguments[i];
		this.prototype[name] = parent.prototype[name];
	}
	return this;
});
//===================================================================================
//===================================================================================
//===================================================================================		
function ChkFileExit(strFileUrl){
	var xmlHttp = new xmlRequest();
	xmlHttp.open("GET",strFileUrl,false);
	xmlHttp.send();
	if(xmlHttp.readyState==4){   
		if(xmlHttp.status==200) return true; 
		else if(xmlHttp.status==404) return false;
		else return false;
	};
};
//===================================================================================		
function zxyAJAX(opt){
	var options = {
		 type 		: opt.type || "POST"			// HTTP 请求的类型
		,url 		: opt.url || ""					// 请求的URL
		,data		: opt.data || ""
		,timeout 	: opt.timeout || 20000			// 请求超时的时间
		,onProcess	: opt.onProcess || function(){}	//请求失败、成功或完成（不管成功还是失败都会调用的）时执行的函数
		,onComplete	: opt.onComplete || function(){}
		,onTimeOut	: opt.onTimeOut || function(){}
		,onSuccess	: opt.onSuccess || function(){}
	};
	//-----------------------------------------------------------------------
	var mFunClock;
	var timeoutLength = options.timeout;			// 请求后等待5秒，超时则放弃
	var requestDone = false;						// 记录请求是否成功完成
	//-----------------------------------------------------------------------
	try {
		// 初始化一个5秒后执行的回调函数，用于取消请求。
		options.onProcess();
		mFunClock = setTimeout(function(){
			options.onTimeOut();
			requestDone = true;
		},timeoutLength);
		
		var xml = new xmlRequest();					// 创建请求对象
		
		if (options.type.toLowerCase()=="get"){		// 初始化异步请求
			options.url+="?"+serialize(options.data);
		};
		
		xml.open(options.type,options.url,true);
		
		if (options.type.toLowerCase()=="post"){
			xml.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
			if(xml.overrideMineType) xml.setRequestHeader("Connection","close");
		};
		xml.send(serialize(options.data));
	} catch(e){alert(e.message);};
	
	xml.onreadystatechange = function(){
		//保持等待，直到数据完全加载，并保证请求未超时
		if (xml.readyState==4 && !requestDone){
			//检查是否请求成功
			if(httpSuccess(xml)){
				// 以服务器返回的数据作为参数调用"成功回调函数"
				var objData = httpData(xml,options.type);
				options.onSuccess(objData);
			};
			options.onComplete();//调用完成回调函数
			xml = null;
			clearTimeout(mFunClock);
		};
		if(requestDone){
			xml.abort();
			xml = null;
		};
	};
	
	function httpSuccess(r){
		try{
			return !r.status &&location.protocol=="files:"||
			(r.status>=200 && r.status<300)||
			r.status==304||
			navigator.userAgent.indexOf("Safari")>=0 && typeof r.status=="undefined";
		} catch(e){}
		return false;
	};
	function httpData(r,type){
		var ct = r.getResponseHeader("content-type");
		var data=!type&&ct&&ct.indexof("xml")>=0;
		data = (type=="xml"||data)?r.resposneXML:r.responseText;
		if(type=="script")
			eval.call(window,data);
		return data;
	};
	
	function serialize(a){
		var s = [];//串行化结果的集合
		if (a.constructor==Array){//若传入的参数是数组，假定他们是表单元素的数组。
			for (var i=0;i<a.length;i++)//串行化表单元素
				s.push(a[i].name+"="+encodeURIComponent(a[i].value));
		} else {
			for (var j in a)//串行化键值对
				s.push(j+"="+encodeURIComponent(a[j]));
		};
		return s.join("&");
	};
};

function xmlRequest(){
	if (window.ActiveXObject) {
        var arrSignatures = ["Microsoft.XMLHTTP"
							 ,"MSXML2.XMLHTTP"
							 ,"MSXML2.XMLHTTP.3.0"
							 ,"MSXML2.XMLHTTP.4.0"
							 ,"MSXML2.XMLHTTP.5.0"];
		for (var i=0;i<arrSignatures.length;i++){
			try{
				var oRequest = new ActiveXObject(arrSignatures[i]);
				return oRequest;
			} catch (oError){/*ignore*/};
		};
    } else if (window.XMLHttpRequest) {
        var oRequest = new XMLHttpRequest();
		return oRequest;
    };
	throw new Error("MSXML is not installed on your system!");
};

function XmlDom() {
    //通过对象/属性检测法，判断是IE来是Mozilla
    if (window.ActiveXObject) {
        var arrSignatures = ["Microsoft.XmlDom"
							,"MSXML2.DOMDocument"
							,"MSXML2.DOMDocument.3.0"
							,"MSXML2.DOMDocument.4.0"
							,"MSXML2.DOMDocument.5.0"];
        for (var i=0; i < arrSignatures.length; i++) {
            try {
                var oXmlDom = new ActiveXObject(arrSignatures[i]);
                return oXmlDom;
             } catch (oError){};
         };
        throw new Error("MSXML is not installed on your system."); 
     
	 } else if (document.implementation && document.implementation.createDocument) {
        var oXmlDom = document.implementation.createDocument("","",null);
        //创建Mozilla版本的parseError对象
         oXmlDom.parseError = {
             valueOf: function () { return this.errorCode; },
             toString: function () { return this.errorCode.toString() }
         };
        //初始化parseError对象
         oXmlDom.__initError__();
         oXmlDom.addEventListener("load", function () {
            this.__checkForErrors__();
            this.__changeReadyState__(4);
         }, false);
        return oXmlDom;        
     } else {
        throw new Error("Your browser doesn't support an XML DOM object.");
     };
};

if (isMoz) {
     Document.prototype.readyState = 0;
     Document.prototype.onreadystatechange = null;

    
     Document.prototype.__changeReadyState__ = function (iReadyState) {
        this.readyState = iReadyState;

        if (typeof this.onreadystatechange == "function") {
            this.onreadystatechange();
         };
     };
    //初始化parseError对象
     Document.prototype.__initError__ = function () {
        this.parseError.errorCode = 0;
        this.parseError.filepos = -1;
        this.parseError.line = -1;
        this.parseError.linepos = -1;
        this.parseError.reason = null;
        this.parseError.srcText = null;
        this.parseError.url = null;
     };
    
     Document.prototype.__checkForErrors__ = function () {

        if (this.documentElement.tagName == "parsererror") {

			var reError = />([\s\S]*?)Location:([\s\S]*?)Line Number (\d+), Column (\d+):<sourcetext>([\s\S]*?)(?:\-*\^)/;
			
			reError.test(this.xml);
            
            this.parseError.errorCode = -999999;
            this.parseError.reason = RegExp.$1;
            this.parseError.url = RegExp.$2;
            this.parseError.line = parseInt(RegExp.$3);
            this.parseError.linepos = parseInt(RegExp.$4);
            this.parseError.srcText = RegExp.$5;
         };
     };
    
     //定义Mozilla的loadXML方法   
     Document.prototype.loadXML = function (sXml) {
    
        this.__initError__();
    
        this.__changeReadyState__(1);
    
        var oParser = new DOMParser();
        var oXmlDom = oParser.parseFromString(sXml, "text/xml");

        while (this.firstChild) {
			this.removeChild(this.firstChild);
		};

		for (var i=0; i < oXmlDom.childNodes.length; i++) {
			var oNewNode = this.importNode(oXmlDom.childNodes[i], true);
			this.appendChild(oNewNode);
		};
        
        //载入后检查错误
        this.__checkForErrors__();
        
        //没有问题，设置readyState属性为4
        this.__changeReadyState__(4);

     };
    
     Document.prototype.__load__ = Document.prototype.load;

     Document.prototype.load = function (sURL) {
        this.__initError__();
        this.__changeReadyState__(1);
        this.__load__(sURL);
     };
    
     Node.prototype.__defineGetter__("xml", function () {
        var oSerializer = new XMLSerializer();
        return oSerializer.serializeToString(this, "text/xml");
     });
};

//===================================================================================
//===================================================================================
//===================================================================================

function addEvent(element,type,handler){
	//为每一个事件处理函数赋予一个独立的ID
	if(!handler.$$guid) handler.$$guid=addEvent.guid++;
	//为元素建立一个事件类型的散列表
	if(!element.events) element.events = {};
	//为每对元素/事件建立一个事件处理函数的散列表
	var handlers = element.events[type];
	if(!handlers){
		handlers = element.events[type]={};
		//存储已有的事件处理函数（如果已存在一个）
		if(element["on"+type]){
			handlers[0] = element["on"+type];
		}
	};
	//在散列表中存储该事件处理函数
	handlers[handler.$$guid] = handler;
	//赋予一个全局事件处理函数来处理所有工作
	element["on"+type] = handleEvent;
};
//创建独立ID的计数器
addEvent.guid = 1;

function removeEvent(element,type,handler){
	//从散列表中删除事件处理函数
	if (element.events && element.events[type]){
		delete element.events[type][handler.$$guid];
	};
};

function handleEvent(event){
	var returnValue = true;
	//获取事件对象（IE使用全局的事件对象）
	event = event || fixEvent(window.event);
	//获取时间处理函数山列表的引用
	var handlers = this.events[event.type];
	//依次执行每个事件处理函数
	for(var i in handlers){
		this.$$handleEvent = handlers[i];
		if(this.$$handleEvent(event)===false){
			returnValue = false;
		};
	};
	return returnValue;
};

//增加一些IE事件对象缺乏的方法
function fixEvent(event){
	//增加W3C标准事件方法
	event.preventDefault = fixEvent.preventDefault;
	event.stopPropagation = fixEvent.stopPropagation;
	return event;
};
fixEvent.preventDefault = function(){
	this.returnValue = false;
};
fixEvent.stopPropagation = function(){
	this.cancelBubble = true;
};

//===================================================================================
//======= 实现拖放功能相关程序 ==========================================================
//===================================================================================

//获取指定元素（element）的样式属性（name）
function getStyle(elem,name){
	//如果属性存在于style[]中，那么它已经被设置了。
	if (typeof(elem)=="object"){
		if(elem.style[name])
			return elem.style[name];
		//如果没有，尝试使用IE的方法。
		else if(elem.currentStyle)
			return elem.currentStyle[name];
		//或者W3C的方法，如果存在的话。
		else if(document.defaultView && document.defaultView.getComputedStyle){
			//它使用的是通过'text-align'的样式规则而非'textAlign'
			name = name.replace(/([A-Z])/g,"-$1");
			name = name.toLowerCase();
			
			//获取样式对象并获取属性（存在的话）值
			var s = document.defaultView.getComputedStyle(elem," ");
			return s&&s.getPropertyValue(name);
		} else
			return null;
	} else 
		return null;
}

//两个确定元素相对于整个文档的X和Y位置的辅助函数
function pageX(elem){
	return elem.offsetParent?
		elem.offsetLeft + pageX(elem.offsetParent):
		elem.offsetLeft;
}
function pageY(elem){
	return elem.offsetParent?
		elem.offsetTop+pageY(elem.offsetParent):
		elem.offsetTop;
}

//确定元素相对于父亲的位置的两个函数
function parentX(elem){
	return elem.parentNode == elem.offsetParent?
		elem.offsetLeft :
		pageX(elem)-pageX(elem.parentNode);
}
function parentY(elem){
	return elem.parentNode == elem.offsetParent?
		elem.offsetTop :
		pageY(elem)-pageY(elem.parentNode);
}
//元素的左端和顶端位置
function posX(elem){
	return parseInt(getStyle(elem,"left"));
}
function posY(elem){
	return parseInt(getStyle(elem,"top"));
}
//设置元素的左端和顶端位置
function setX(elem,pos){
	elem.style.left = pos + "px";
}
function setY(elem,pos){
	elem.style.top = pos + "px";
}
//调整元素相对于当前位置的距离的一对函数
function addX(elem,pos){
	setX(posX(elem)+pos);
}
function addY(elem,pos){
	setY(posY(elem)+pos);
}
//获取元素当前的高度和宽度
function getHeight(elem){
	return parseInt(getStyle(elem,"height"));
}
function getWidth(elem){
	return parseInt(getStyle(elem,"width"));
}
//获取元素完整的、可能的高度
function fullHeight(elem){
	getHeight();
	if(getStyle(elem,"display")!="none")
		return elem.offsetHeight||getHeight(elem);
	var old = resetCSS(elem,{
					   diaplay:"",
					   visibility:"hidden",
					   position:"absolute"
					   });
	var h = elem.clientHeight || getHeight(elem);
	restoreCSS(elem,old);
	return h;
}
function fullWidth(elem){
	getWidth();
	if(getStyle(elem,"display")!="none")
		return elem.offsetWidth || getWidth(elem);
	var old = resetCSS(elem,{
					   diaplay:"",
					   visibility:"hidden",
					   position:"absolute"
					   });
	var w = elem.clientWidth || getWidth(elem);
	restoreCSS(elem,old);
	return w;
}
function resetCSS(elem,prop){
	var old = {};
	for(var i in prop){
		old[i] = elem.style[i];
		elem.style[i] = prop[i];
	}
	return old;
}
function restoreCSS(elem,prop){
	for (var i in prop)
		elem.style[i] = prop[i];	
}
//确定浏览器视窗的高度和宽度
function windowHeight(){
	var de = document.documentElement;
	return self.innerHeight||(de && de.clientHeight)||document.body.clientHeight;
}
function windowWidth(){
	var de = document.documentElement;
	return self.innerWidth||(de && de.clientWidth)||document.body.clientWidth;
}
//确定当前页面高度和宽度的两个函数
function pageHeight(){
	return document.body.scrollHeight;
}
function pageWidth(){
	return document.body.scrollWidth;
}
//鼠标位置
function getX(e){
	e = e||window.event;
	return e.pageX || e.clientX+document.body.scrollLeft;
}
function getY(e){
	e = e||window.event;
	return e.pageY || e.clientY+document.body.scrollTop;
}
//获取鼠标相对于元素的位置
function getElementX(e){
	return (e&&e.layerX)||window.event.offsetX;
}
function getElementY(e){
	return (e&&e.layerY)||window.event.offsetY;
}
//元素的可见性
function hide(elem){
	var curDisplay = getStyle(elem,"display");
	if(curDisplay!="none")
		elem.$oldDisplay = curDisplay;
	elem.style.display = "none";
}
function show(elem){
	elem.style.display = elem.$oldDisplay || "";
}
function setOpacity(elem,level){
	if(elem.filters){
		elem.style.filter = "alpha(opacity="+level+")";
	}else{
		elem.style.opacity = level/100;
	};
};
function LimitImgSize(objImg,width,height){
	if(objImg!=null){
		oWidth=objImg.offsetWidth*1;
		oHeight=objImg.offsetHeight*1;
		if(oWidth>width||oHeight>height){
			oRate=parseInt(100*oWidth/oHeight)/100;
			nRate=parseInt(100*width/height)/100;
			if(oRate<=nRate){if(oHeight>height)objImg.height=height}
			else{if(oWidth>width)objImg.width=width}
		};
		var mgn=parseInt((height-objImg.height)/2);
		objImg.style.margin=mgn+"px 0px";}
};

function check(){
	if(document.mesage_form.subject.value.trim()==''){
		alert('请选择主题');
		document.mesage_form.subject.focus();
		return false;
	}
	if(document.mesage_form.MsgType.value.trim()==''){
		alert('请选择您的身份');
		document.mesage_form.MsgType.focus();
		return false;
	}
	if(document.mesage_form.MsgType.value.trim()=='1'&&document.mesage_form.UserName.value.trim()==''){
		alert('请输入您的会员名');
		document.mesage_form.UserName.focus();
		return false;
	}
	if(document.mesage_form.UserName.value.trim()!=''){
		document.mesage_form.MsgType.value='1';
	}
	if(document.mesage_form.message.value.trim()==''){
		alert('请留言');
		document.mesage_form.message.focus();
		return false;
	}
	if(document.mesage_form.ContactName.value.trim()==''){
		alert('请填写您的姓名');
		document.mesage_form.ContactName.focus();
		return false;
	}
	if(document.mesage_form.Email.value.trim()==''){
		alert('请填写您的EMAIL');
		document.mesage_form.Email.focus();
		return false;
	}
	if(document.mesage_form.Tel.value.trim()==''){
		alert('请填写您的联系电话或手机');
		document.mesage_form.Tel.focus();
		return false;
	}
	
	if(!emailReg.test(document.mesage_form.Email.value.trim())){
		alert("您填写的EMAIL格式不正确");
		document.mesage_form.Email.focus();
		return false;
	}
	if(document.mesage_form.checkcode.value.trim()==''){
		alert('请输入验证码');
		document.mesage_form.checkcode.focus();
		return false;
	}
	return true;
};

function alterMenu(){
	try{
		var _objList	=	document.getElementById("_MenuList").getElementsByTagName("li");
		for(var i=0;i<=11;i++){
			_objList[i].onmouseover	=	function(){this.className='ni_on';};
			_objList[i].onmouseout	=	function(){this.className='ni_off';};
		}
		for(var i=12;i<24;i++){
			_objList[i].onmouseover	=	function(){this.className='ni_on2';};
			_objList[i].onmouseout	=	function(){this.className='ni_off2';};
		}
	}catch(e){}
}
