var FujkDomain = new Object() ;
FujkDomain.www="/" ; 
FujkDomain.img="/imageroot" 
var proxyUrl = "/proxy?u=";

function getProxyUrl(url, method, urlencoded, charcode) {
	var u = proxyUrl + encodeURIComponent(url);
	if (method) {
		u += "&m=" + method;
	}
	if (urlencoded) {
		u += "&e=1";
	}
	if(charcode)
	   u += "&charcode=" + charcode;
	return u;
}

var Request = new Object();
Request.reqList = [];

Request.send = function(url, method, callback, data, urlencoded, callback2) {
    var req=false; 
    try { 
    	req = new ActiveXObject("Msxml2.XMLHTTP"); 
    } catch (e) { 
   	 	try { 
    		req = new ActiveXObject("Microsoft.XMLHTTP"); 
    	} catch (E) { 
    		req = false; 
    	} 
    }
    if (!req && typeof XMLHttpRequest!='undefined') { 
    	req = new XMLHttpRequest(); 
    } 

	req.onreadystatechange = function() {
		if (req.readyState == 4) {// only if req shows "loaded"
			if (req.status < 400) {// only if "OK"
				(method=="POST") ? callback(req,data) : callback(req,data);
			} else {
				//alert("There was a problem loading data :\n" + req.status+ "/" + req.statusText);
				if (callback2) {
					callback2(req,data);
				}
			}
			try {
				delete req;
				req = null;
			} catch (e) {}
		}
	}
	if (method=="POST") {
		req.open("POST", url, true);
		if (urlencoded) 
		    req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');		
		req.send(data);
		
		Request.reqList.push(req);
	} else {
		req.open("GET", url, true);
		req.send(null);

		Request.reqList.push(req);
	}
	
	return req;
}

Request.sendRawPOST = function(url, data, callback, clear, callback2) {
	if (clear)
		Request.clearReqList();
	Request.send(url, "POST", callback, data, false, callback2);
}
Request.sendPOST = function(url, data, callback, clear, callback2) {
	if (clear)
		Request.clearReqList();
	Request.send(url, "POST", callback, data, true, callback2);
}
Request.sendGET = function(url, callback, args, clear, callback2) {
	if (clear)
		Request.clearReqList();
	return Request.send(url, "GET", callback, args, false, callback2);
}
Request.clearReqList = function() {
	var ln = Request.reqList.length;
	for (var i=0; i<ln; i++) {
		var req = Request.reqList[i];
		if (req) {
			try {
				req.close();
				delete req;
			} catch(e) {}
		}
	}
	Request.reqList = [];
}

function getElementsByClassName(node, className) {
	var children = node.getElementsByTagName('*');
	var elements = new Array();
	for (var i=0; i<children.length; i++) {
		var child = children[i];
		var classNames = child.className.split(' ');
		for (var j = 0; j < classNames.length; j++) {
			if (classNames[j] == className) {
				elements.push(child);
				break;
			}
		}
	}
	return elements;
}
// Remove all child nodes of node
function clearChildNodes(node) {
	try {
		while (node.childNodes.length > 0) {
			var ch = node.firstChild;
			node.removeChild(ch);
			delete ch;
			ch = null;
		}
	} catch (e) {
		
	}
}
//取得节点ID
function getNodeID(parent, id) {
	var ln = parent.childNodes.length;
	for (var z=0; z<ln; z++) {
		if (parent.childNodes[z].id == id) return parent.childNodes[z];
	}
	return null;
}
// 得到节点对像
function $() {
  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;
}
// 为指定ID设置光标
function setFocus(id) {
	try {
		var elm = $(id);
		elm.focus();
	} catch (e) {}
} 

//为指定id插入html
function setInnerHTML(id,html) {
	try {
		var elm = $(id);
		elm.innerHTML = html;
	} catch (e) {}
} 

//test 邮件地十是否正确
function isEmailValid(e) {
	var ok = "1234567890qwertyuiop[]asdfghjklzxcvbnm.+@-_QWERTYUIOPASDFGHJKLZXCVBNM";
	for(var i=0; i<e.length; i++){
		if (ok.indexOf(e.charAt(i))<0) {
			return false;
		}
	}
	if (document.images) {
		var re = /(@.*@)|(\.\.)|(^\.)|(^@)|(@$)|(\.$)|(@\.)/;
		var re_two = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,8}|[0-9]{1,3})(\]?)$/;
		if (!e.match(re) && e.match(re_two)) {
			return -1;
		}
	}
}
//扩展string属性,增加去两边空格方法  alert("13500012345 ".trim()+"adf");
String.prototype.trim = function() {
	return this.replace(/^\s*|\s*$/g,"");
	//return this.replace(/(^s*)|(s*$)/g, “”);
}

///**
// *移动手机号的校验
// */
function checkMobile1(mobileValue){
	if (mobileValue > ""){
		var reg=/13[5,6,7,8,9]\d{8}/;
		if ( mobileValue.match(reg)== null){
			return false;
		}
	}
	return true;
}
//*********************************************************************************
//* javascript正则表达式检验
//**********************************************************************************/
//校验是否全由数字组成
function isDigit(s)
{
	var patrn=/^[0-9]{1,20}$/;
	if (!patrn.exec(s))
		 return false;
	return true;
} 

//校验登录名：只能输入5-20个以字母开头、可带数字、“_”、“.”的字串
function isRegisterUserNameCommon(s){
//	var patrn=/^[a-zA-Z]{1}([a-zA-Z0-9]|[._]){4,19}$/;
//	if (!patrn.exec(s))
//		return false;
	return true;
}
//校验用户姓名：只能输入1-30个以字母开头的字串
function isTrueName(s){
	var patrn=/^[a-zA-Z]{1,30}$/;
	if (!patrn.exec(s))
		return false;
	return true;
}
//校验密码：只能输入6-20个字母、数字、下划线
function isPasswd(s){
	var patrn=/^(\w){6,20}$/;
	if (!patrn.exec(s)) 
		return false;
	return true;
}
//校验普通电话、传真号码：可以“+”开头，除数字外，可含有“-”
function isTel(s){
	//var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?(\d){1,12})+$/;
	var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/;
	if (!patrn.exec(s))
		return false;
	return true;
}
//校验手机号码：必须以数字开头，除数字外，可含有“-”
function isMobil(s){
	var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/;
	if (!patrn.exec(s))
		return false;
	return true;
}
//校验邮政编码
function isPostalCode(s){
	//var patrn=/^[a-zA-Z0-9]{3,12}$/;
	var patrn=/^[a-zA-Z0-9 ]{3,12}$/;
	if (!patrn.exec(s)) 
		return false;
	return true;
}
//校验搜索关键字
function isSearch(s){
	var patrn=/^[^`~!@#$%^&*()+=|\\\][\]\{\}:;'\,.<>/?]{1}[^`~!@$%^&()+=|\\\][\]\{\}:;'\,.<>?]{0,19}$/;
	if (!patrn.exec(s))
		return false;
	return true;
}
//校验是不是IP
function isIP(s){
	var patrn=/^[0-9.]{1,20}$/;
	if (!patrn.exec(s))
		 return false;
	return true;
}
//电子邮件格式校验
function isEmail(s){
	  var pattern = /[a-zA-Z0-9_.]{1,}@[a-zA-Z0-9_]{1,}.[a-zA-Z0-9_]{1,}/;
	  var strValue=s;
	  if (strValue.length==0)
		  return false;
	  if(pattern.exec(strValue)){
	   	return true;
	  }else{
	  	return false;
	  } 
}
 /*
====================================================================
检测域值是否包含特殊字符，如：,/,,,<,>；包含返回false，否则返回true。
====================================================================
*/
function issafe(str){
	var reg = /^.*[||/|<|>].*$/;
	return !reg.test(str);
}

document.getElementsByClassName = function(className) {
  var children = document.getElementsByTagName('*') || document.all;
  var elements = new Array();
  
  for (var i = 0; i < children.length; i++) {
    var child = children[i];
    var classNames = child.className.split(' ');
    for (var j = 0; j < classNames.length; j++) {
      if (classNames[j] == className) {
        elements.push(child);
        break;
      }
    }
  }
  
  return elements;
}
//-------------------------------------------------------------------
//Utils Object
var Utils = new Object();

Utils.getChildrenByTagName = function(node, tagName) {
	var arr = [];	
	if (node && node.childNodes) {
		var ln = node.childNodes.length;
		for (var z=0; z<ln; z++) {
			if (node.childNodes[z].nodeName==tagName) arr.push(node.childNodes[z]);
		}
	}
	return arr;
}

Utils.getColonTag = function(node, tag, name) {
	return (Browser.isIE) ? node.getElementsByTagName(tag+":"+name)[0] : node.getElementsByTagName(name)[0];
}

Utils.htmlEncode = function(text, br) {
	var txt = text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
	//replace(/'/g, '&apos;').
	//replace(/"/g, '&quot;').
	if (br)
		txt = txt.replace(/\n/g, '<br>');
	return txt;
}

Utils.brEncode = function(text) {
	return text.replace(/\n/g, '<br>');
}

function ubbEncode(msg) {
	return msg.replace(/\[font/g, '<font')
		.replace(/\[\/font\]/g, '</font>')
		.replace(/\[IMG/g, '<img')
		.replace(/\]/g, '>');
	//msg.replace(/\[X/g, '<img src=\"http://'+HiDomain.img+'/editor/images/more/bbs_xq')
	//.replace(/\[B/g, '<img src=\"http://'+HiDomain.img+'/images/bz/')
	//.replace(/I\]/g, '.gif\">')
}
function getUbbCode(msg, font, size, color) {
	return "[font style='color:"+color+";font-size:"+size+";font-family:"+font+"' font]"+
		msg.replace(/<IMG/g, '[IMG').replace(/>/g, ']')+
		"[/font]";
}

Utils.importXML = function(data) {
	var xmlDoc;

	function checkForParseError (xmlDocument) {
		var errorNamespace =
			'http://www.mozilla.org/newlayout/xml/parsererror.xml';
		var documentElement = xmlDocument.documentElement;
		var parseError = { errorCode : 0 };
		if (documentElement.nodeName == 'parsererror' &&
				documentElement.namespaceURI == errorNamespace) {
			parseError.errorCode = 1;
			var sourceText =
				documentElement.getElementsByTagNameNS(errorNamespace, 'sourcetext')[0];
			if (sourceText != null) {
				parseError.srcText = sourceText.firstChild.data
			}
			parseError.reason = documentElement.firstChild.data;
		}
		return parseError;
	}

	if (document.implementation && document.implementation.createDocument)
	{
		var parser = new DOMParser();
		xmlDoc = parser.parseFromString(data, "text/xml");
		var parseError = checkForParseError(xmlDoc);
		if (parseError.errorCode == 0) {
			return xmlDoc;
		}
		else {
			alert(parseError.reason + '\r\n' + parseError.srcText);
			// shows detailed error message
			return null;
		}
	}
	else if (window.ActiveXObject)
	{
		xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async="false";
		var loaded = xmlDoc.loadXML(data);
		if(!loaded){
			alert(xmlDocument.parseError.reason +
					xmlDocument.parseError.srcText);
			return null;
		}
	}
	else
	{
		//alert('Your browser can\'t handle this script');
		return null;
	}

	return xmlDoc;
}

var notspace = /\S/;
Utils.cleanWhitespace = function(node){
	for (var x=0; x<node.childNodes.length; x++) {
		var child = node.childNodes[x];
		//if it's a whitespace text node
		if ((child.nodeType == 3) && (!notspace.test(child.nodeValue)))	{
			node.removeChild(node.childNodes[x]);
			//node.childNodes[x].removeNode();
			x--;
		}
		//elements can have text child nodes of their own
		if(child.nodeType == 1) {
			Utils.cleanWhitespace(child);
		}
	}
}
Utils.random=function(max){
    return Math.floor(Math.random()*max) ;
}

Utils.parseDate = function(str) {
	if (arguments.length == 0 || !str)
		return "";
	var d = new Date(Date.parse(str));
	return d.getMonth()+1 + "/" + d.getDate();
}

Utils.substring = function(str, len, postfix) {
	var res = "";
	var p = 0;
	for (var i=0; i<str.length; i++) {
		var ch = str.charAt(i);
		if (ch > '!' && ch < '~') {
			p += 1;
		} else {
			p += 2;
		}
		if (p <= len*2) {
			res += ch;
		}
	}
	if (p > len*2) {
		if (postfix != null)
			res += postfix;
		else
			res += "...";
	}
	return res;
}
//-------------------------------------------------------------------
//Browser Object
var Browser = new Object();

Browser.isMozilla = (typeof document.implementation != 'undefined') && (typeof document.implementation.createDocument != 'undefined') && (typeof HTMLDocument!='undefined');
Browser.isIE = window.ActiveXObject ? true : false;
Browser.isFirefox = (navigator.userAgent.toLowerCase().indexOf("firefox")!=-1);
Browser.isOpera = (navigator.userAgent.toLowerCase().indexOf("opera")!=-1);

if (Browser.isMozilla) {
	HTMLElement.prototype.removeNode = function() {
		this.parentNode.removeChild(this);
	}
}

// ---------------------------------------

function checkEmail(value){
    var re=/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
    return re.test(value);
}
function checkDate(value){
	var re=/^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$/;
	return re.test(value);
}