// ============ ajaxClass ( XMLHttp Object Pool and XMLHttp chunnel Pool ) ============

var Request = new function(){

this.pool = new Array();

this.getXMLHttp = function (chunnel)
{
	
   if(chunnel != null)
   {
      for (var a = 0; a < this.pool.length; a++)
      {
         if(this.pool[a]["chunnel"] == chunnel)
         {
	        if(this.pool[a]["obj"].readyState == 0 || this.pool[a]["obj"].readyState == 4)
            {
               return this.pool[a]["obj"];
            }
	        else 
	        {
               return "busy";
	        }
         }
      }
  
      this.pool[this.pool.length] = new Array();
      this.pool[this.pool.length - 1]["obj"] = this.createXMLHttp();
      this.pool[this.pool.length - 1]["chunnel"] = chunnel;
      return this.pool[this.pool.length - 1]["obj"];
   }
	
   for (var i = 0; i < this.pool.length; i++)
   {
      if(this.pool[i]["obj"].readyState == 0 || this.pool[i]["obj"].readyState == 4)
      {
         return this.pool[i]["obj"];
      }
   }
 
   this.pool[this.pool.length] = new Array();
   this.pool[this.pool.length - 1]["obj"] = this.createXMLHttp();
   this.pool[this.pool.length - 1]["chunnel"] = "";
   return this.pool[this.pool.length - 1]["obj"];

}


this.createXMLHttp = function ()
{
 
   if(window.XMLHttpRequest)
   {
      var xmlObj = new XMLHttpRequest();
   } 
   else 
   {
      var MSXML = ['Microsoft.XMLHTTP', 'MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP'];
      for(var n = 0; n < MSXML.length; n++)
      {
         try
         {
            var xmlObj = new ActiveXObject(MSXML[n]);        
            break;
         }
         catch(e)
         {
         }
      }
   } 
 
   return xmlObj;

}


this.reSend = function (url,data,callback,extra,chunnel)
{
   var objXMLHttp = this.getXMLHttp(chunnel) ;
 
   if(typeof(objXMLHttp) != "object")
   {
      return false ;
   }

   if(data == "")
   {
      objXMLHttp.open('GET' , url, true);
	  objXMLHttp.setRequestHeader("If-Modified-Since", 0); // no cache
      objXMLHttp.send('');
   }
   else 
   { 
      objXMLHttp.open('POST' , url, true);
	  objXMLHttp.setRequestHeader("If-Modified-Since", 0); // no cache
      objXMLHttp.setRequestHeader("Content-Length",data.length); 
      objXMLHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
      objXMLHttp.send(data);
   }
 
   if(typeof(callback) == "function" )
   {
      objXMLHttp.onreadystatechange = function ()
      {
         if(objXMLHttp.readyState == 4)
         {
            if(objXMLHttp.status == 200 || objXMLHttp.status == 304)
            {
               if(extra != null)
			   {
			      callback(objXMLHttp,extra) ;
			   }
			   else
			   {
			      callback(objXMLHttp) ;
			   }
            }
//            else
//          {
//             alert("Error loading page\n" + objXMLHttp.status + ":" + objXMLHttp.statusText);
//          }
         }
      }
   }

}

}


// ============================== js prototype or for ie5.5 鈫?===================================

// -- for ie 5 push
if(!Array.prototype.push) {
   Array.prototype.push = function (new_ele) {
        this[this.length] = new_ele;
        return this.length;
   }
}

// -- for ie 5 splice
if(!Array.prototype.splice) {
	Array.prototype.splice = function () {
		var start = arguments[0];
		var deleteCount = arguments[1];
		var len = arguments.length - 2;
		var returnValue = this.slice(start);
		for (var i = 0; i < len; i++) {
			this[start + i] = arguments[i + 2];
		}
		for (var i = 0; i < returnValue.length - deleteCount; i++) {
			this[start + len + i] = returnValue[deleteCount + i];
		}
		this.length = start + len + returnValue.length - deleteCount;
		returnValue.length = deleteCount;
		return returnValue;
	}
}

// -- for ie 5.5鈫?encodeURI

if(typeof(encodeURI) == "undefined")
{
	function encodeURI(str) {
		var l = ['%00', '%01', '%02', '%03', '%04', '%05', '%06',
				 '%07', '%08', '%09', '%0A', '%0B', '%0C', '%0D',
				 '%0E', '%0F', '%10', '%11', '%12', '%13', '%14',
				 '%15', '%16', '%17', '%18', '%19', '%1A', '%1B',
				 '%1C', '%1D', '%1E', '%1F', '%20', '!', '%22',
				 '#', '$', '%25', '&', "'", '(', ')', '*', '+', ',',
				 '-', '.', '/', '0', '1', '2', '3', '4', '5', '6',
				 '7', '8', '9', ':', ';', '%3C', '=', '%3E', '?',
				 '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
				 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
				 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '%5B', '%5C',
				 '%5D', '%5E', '_', '%60', 'a', 'b', 'c', 'd', 'e',
				 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
				 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y',
				 'z', '%7B', '%7C', '%7D', '~', '%7F'];
		var out, i, j, len, c, c2;
	
		out = [];
		len = str.length;
		for (i = 0, j = 0; i < len; i++) {
			c = str.charCodeAt(i);
			if (c <= 0x007F) {
				out[j++] = l[c];
				continue;
			}
			else if (c <= 0x7FF) {
				out[j++] = '%' + (0xC0 | ((c >>  6) & 0x1F)).toString(16).toUpperCase();
				out[j++] = '%' + (0x80 | (        c & 0x3F)).toString(16).toUpperCase();
				continue;
			}
			else if (c < 0xD800 || c > 0xDFFF) {
				out[j++] = '%' + (0xE0 | ((c >> 12) & 0x0F)).toString(16).toUpperCase();
				out[j++] = '%' + (0x80 | ((c >>  6) & 0x3F)).toString(16).toUpperCase();
				out[j++] = '%' + (0x80 |         (c & 0x3F)).toString(16).toUpperCase();
				continue;
			}
			else {
				if (++i < len) {
					c2 = str.charCodeAt(i);
					if (c <= 0xDBFF && 0xDC00 <= c2 && c2 <= 0xDFFF) {
						c = ((c & 0x03FF) << 10 | (c2 & 0x03FF)) + 0x010000;
						if (0x010000 <= c && c <= 0x10FFFF) {
							out[j++] = '%' + (0xF0 | ((c >>> 18) & 0x3F)).toString(16).toUpperCase();
							out[j++] = '%' + (0x80 | ((c >>> 12) & 0x3F)).toString(16).toUpperCase();
							out[j++] = '%' + (0x80 | ((c >>>  6) & 0x3F)).toString(16).toUpperCase();
							out[j++] = '%' + (0x80 |          (c & 0x3F)).toString(16).toUpperCase();
							continue;
						}
					}
				}
			}
		}
		return out.join('');
	}
}

// -- for ie 5.5鈫?encodeURIComponent
if(typeof(encodeURIComponent) == "undefined") 
{
	function encodeURIComponent(str) {
		var l = ['%00', '%01', '%02', '%03', '%04', '%05', '%06',
				 '%07', '%08', '%09', '%0A', '%0B', '%0C', '%0D',
				 '%0E', '%0F', '%10', '%11', '%12', '%13', '%14',
				 '%15', '%16', '%17', '%18', '%19', '%1A', '%1B',
				 '%1C', '%1D', '%1E', '%1F', '%20', '!', '%22',
				 '%23', '%24', '%25', '%26', "'", '(', ')', '*', '%2B', '%2C',
				 '-', '.', '%2F', '0', '1', '2', '3', '4', '5', '6',
				 '7', '8', '9', '%3A', '%3B', '%3C', '%3D', '%3E', '%3F',
				 '%40', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
				 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
				 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '%5B', '%5C',
				 '%5D', '%5E', '_', '%60', 'a', 'b', 'c', 'd', 'e',
				 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
				 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y',
				 'z', '%7B', '%7C', '%7D', '~', '%7F'];
		var out, i, j, len, c;
	
		out = [];
		len = str.length;
		for(i = 0, j = 0; i < len; i++) {
			c = str.charCodeAt(i);
			if (c <= 0x007F) {
				out[j++] = l[c];
				continue;
			}
			else if (c <= 0x7FF) {
				out[j++] = '%' + (0xC0 | ((c >>  6) & 0x1F)).toString(16).toUpperCase();
				out[j++] = '%' + (0x80 | (        c & 0x3F)).toString(16).toUpperCase();
				continue;
			}
			else if (c < 0xD800 || c > 0xDFFF) {
				out[j++] = '%' + (0xE0 | ((c >> 12) & 0x0F)).toString(16).toUpperCase();
				out[j++] = '%' + (0x80 | ((c >>  6) & 0x3F)).toString(16).toUpperCase();
				out[j++] = '%' + (0x80 |         (c & 0x3F)).toString(16).toUpperCase();
				continue;
			}
			else {
				if (++i < len) {
					c2 = str.charCodeAt(i);
					if (c <= 0xDBFF && 0xDC00 <= c2 && c2 <= 0xDFFF) {
						c = ((c & 0x03FF) << 10 | (c2 & 0x03FF)) + 0x010000;
						if (0x010000 <= c && c <= 0x10FFFF) {
							out[j++] = '%' + (0xF0 | ((c >>> 18) & 0x3F)).toString(16).toUpperCase();
							out[j++] = '%' + (0x80 | ((c >>> 12) & 0x3F)).toString(16).toUpperCase();
							out[j++] = '%' + (0x80 | ((c >>>  6) & 0x3F)).toString(16).toUpperCase();
							out[j++] = '%' + (0x80 |          (c & 0x3F)).toString(16).toUpperCase();
							continue;
						}
					}
				}
			}
		}
		return out.join('');
	}
}

// ============================== js ==> php ===================================

// --  trim
String.prototype.trim = function() {
   return this.replace(/(^\s*)|(\s*$)/g, "");
}


// -- in_array
function in_array(a, arr) {
    for(var i in arr) {
        if (arr[i] == a) return true;
    }
    return false;
}

// -- array_merge => 杩斿洖涓€涓猘rr2 鍚庡苟 arr1 锛屼笖鐩翠笉绛変簬 arr1 鐨勬暟缁?
function array_merge(arr1, arr2) {
	var arr = arr1 ;
    for (var i in arr2) {
        if (!in_array(arr2[i], arr)) arr.push(arr2[i]);
    }
    return arr;
}

// -- array_diff => 杩斿洖涓€涓?arr1 鍜?arr2 涓笉閲嶅鐨勬暟缁?
function array_diff(arr1, arr2) {
    var arr = new Array() ;
    for (var i in arr1) {
        if (!in_array(arr1[i], arr2)) arr.push(arr1[i]);
    }
    return arr;
}

// -- array_unique => 杩斿洖涓€涓病鏈夐噸澶嶅€肩殑鏁扮粍
function array_unique(arr) {
    var ret = new Array() ;
    for (var i in arr) {
        if (!in_array(arr[i], ret)) ret[i] = arr[i] ;
    }
    return ret;
}

// -- array_keys => 杩斿洖涓€涓墍鏈夐敭鍚嶆暟缁?
function array_keys(arr) {
    var ret = new Array() ;
    for (var i in arr) {
        ret.push(i);
    }
    return ret;
}

// -- array_values => 杩斿洖涓€涓墍鏈夊€肩殑鏁扮粍
function aray_values(arr) {
    var ret = new Array() ;
    for (var i in arr) {
        ret.push(arr[i]);
    }
    return ret;
}


// ============================== element ===================================

// --- by id
function byid(strId){
	return document.getElementById(strId);
}
// --- by className
function getElementsByClassName(oElm, strTagName, strClassName){
	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	strClassName = strClassName.replace(/\-/g, "\\-");
	var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
	var oElement;
	for(var i=0; i<arrElements.length; i++){
		oElement = arrElements[i];		
		if(oRegExp.test(oElement.className)){
			arrReturnElements.push(oElement);
		}	
	}
	return (arrReturnElements)
}

// --- by AttributeValue
function getElementsByAttribute(oElm, strTagName, strAttributeName, strAttributeValue){
	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	var oAttributeValue = (typeof strAttributeValue != "undefined")? new RegExp("(^|\\s)" + strAttributeValue + "(\\s|$)") : null;
	var oCurrent;
	var oAttribute;
	for(var i=0; i<arrElements.length; i++){
		oCurrent = arrElements[i];
		oAttribute = oCurrent.getAttribute && oCurrent.getAttribute(strAttributeName);
		if(typeof oAttribute == "string" && oAttribute.length > 0){
			if(typeof strAttributeValue == "undefined" || (oAttributeValue && oAttributeValue.test(oAttribute))){
				arrReturnElements.push(oCurrent);
			}
		}
	}
	return arrReturnElements;
}

// --- add class
function addClassName(oElm, strClassName){
	var strCurrentClass = oElm.className;
	if(!new RegExp(strClassName, "i").test(strCurrentClass)){
		oElm.className = strCurrentClass + ((strCurrentClass.length > 0)? " " : "") + strClassName;
	}
}

// --- remove calss
function removeClassName(oElm, strClassName){
	var oClassToRemove = new RegExp(('(^|\\s)' + strClassName + "($|\\s)"), "i");
	oElm.className = oElm.className.replace(oClassToRemove, "").replace(/^\s*|\s*$/g, "");
}

// --- renturn input value 
function sketch(objId){
	return document.getElementById(objId).value;
}


// ============================== string html ubb ===================================

// -- ubb bb => img
function uncodeUbb(str){
    str = str.replace(/\[BB(\d+)\]/gi, '<img alt="" src="http://r.6rooms.com/imges/qqface/BB$1.gif" />');
	return str ;
}

// -- limit ubb num
function limitUbb(str){
  var ubbNum = 10 ;
  for(var i=0 ; i < ubbNum ; i++){
     str = str.replace(/\[BB(\d+)\]/i, '<BB$1>');
  }  
  str = str.replace(/\[BB(\d+)\]/ig, '') ; 
  for(var i=0 ; i < ubbNum ; i++){
     str = str.replace(/<BB(\d+)>/i, '[BB$1]');
  }  
  return str ;
}

// -- en htmlSpecialchars 
function enhtmlchars(str) {
	str = str.replace(/</g , '&lt;').replace(/>/g , '&gt;') ;
	str = str.replace(/"/g , '&quot;').replace(/'/g , '&#039;') ;
	str = str.replace(/ /g , '&nbsp;') ;
	return str ;
}

// -- de htmlSpecialchars 
function dehtmlchars(str) {
	str = str.replace(/&lt;/g , '<').replace(/&gt;/g , '>') ;
	str = str.replace(/&quot;/g , '"').replace(/&#039;/g , "'") ;
	str = str.replace(/&nbsp;/g , ' ') ;
	return str ;
}

// -- html to ubbcode
function htmlToUbb(str,ext) {
	var arr = ext.split(',') ;
	if(in_array('all' , arr))
		return str.replace(/</g , "[").replace(/>/g , "]") ;
	if(in_array('b' , arr)) 
		str = str.replace(/<b[^>]*>([^<]*)<\/b>/ig , "[b]$1[/b]") ;
	if(in_array('img' , arr))	
		str = ((document.charset) ? str.replace(/<img[^>]+src=['"][^>]*bb(\d+)\.gif[^>]*>/ig , "[BB$1]").replace(/<br[^>]*>/ig , "\n") : str.replace(/<img[^>]+src=['"][^>]*bb(\d+)\.gif[^>]*>/ig , "[BB$1]").replace(/<br[^>]*>/ig , "")) ;
	if(in_array('del' , arr))
		str = str.replace(/<del>([^<]*)<\/del>/ig , "[del]$1[/del]") ;
	return str ;
}

// -- clear htmlContent 
function clearHtml(str,ext) {
	var arr = ext.split(',') ;
	if(in_array('a' , arr))
		str = str.replace(/<a[^>]*>[\s\S]*<\/a>/ig  , "") ;
	if(in_array('quote' , arr))
		str = str.replace(/<blockquote>[\s\S]*<\/blockquote>/ig  , "") ;
	return str ;
}

// --strip html
function stripHtml(str,ext) {
    var arr = ext.split(',') ;
	if(in_array('a' , arr)) 
		str = str.replace(/(<a[^>]*>)|(<\/a>)/ig ,"") ;
	if(in_array('s' , arr)) 
		str = str.replace(/(<span[^>]*>)|(<\/span>)/ig ,"") ;
	return str ;
}

// ============================== num  ===================================

// -- get rand
function getRand(n1, n2) {
	var equNum = Math.abs(n1 - n2) + 1;
	var lowNum = Math.min(n1 , n2) ;
	return n1 + Math.floor(equNum*Math.random()) ;
}

// ============================== attach css just for ie ===================================

// - load fish
function applefish(type, strTagName ,  oElm , strClassName) { 
 if (window.attachEvent && document.charset) { 
	  window.attachEvent("onload", function() {
	   var elementArr = (strClassName == null) ? oElm.getElementsByTagName(strTagName) : getElementsByClassName(oElm , strTagName , strClassName) ;
	   type(elementArr) ;
	  });
 }
}

var sffocus = function(iptArr) {
	 for (var i=0; i < iptArr.length; i++) {
		iptArr[i].attachEvent("onfocus" , function(evt) {
		   element = returnEventValue('srcElement' , evt)
		   addClassName(element , 'sffocus') ;
		}) ;
	    iptArr[i].attachEvent("onblur", function(evt) {
		   element = returnEventValue('srcElement' , evt)								  
		   removeClassName(element , 'sffocus') ;
	    }) ;
	 }
}

var qlmouse = function(emArr) {
	for (var i=0; i < emArr.length; i++) {
		emArr[i].attachEvent("onmouseover" , function(evt) {
			element = returnEventValue('srcElement' , evt)
			addClassName(element , 'qklistOver')
		}) ;	
		emArr[i].attachEvent("onmouseout", function(evt) {
			element = returnEventValue('srcElement' , evt)	
			removeClassName(element , 'qklistOver') ;
		}) ; 
	}
}


applefish(sffocus, "input" , document);
applefish(sffocus, "textarea" , document);
applefish(qlmouse , 'em' , document , 'addQlist');


// ============================== event ===================================

// -- add event 
function addEvent(oElm , strEvent , fuc) {
	strEvent = strEvent.replace(/^on/i , '') ;
	if(document.charset)
		oElm.attachEvent('on' + strEvent , fuc) ;
	else 
		oElm.addEventListener(strEvent , fuc , false) ;
}

// -- return event value
function returnEventValue (type , evt) {
	var ret ; 
	switch(type) {
		case 'srcElement' : 
			ret = evt.srcElement ? evt.srcElement : evt.target ;
			break ;
		case 'clientX' :
			ret = evt.clientX ? evt.clientX : evt.pageX ;
			break ;
		case 'clientY' :
			ret = evt.clientY ? evt.clientY : evt.pageY ;
			break ;
		case 'keyCode' :
			ret = evt.keyCode ? evt.keyCode : evt.which ;
			break ;
	}
	return ret ;	
}

// -- stop event down
function stopEvent(evt){
	if (evt.preventDefault) {
		evt.preventDefault();
		evt.stopPropagation();
	}
	else{
		evt.returnValue = false;
		evt.cancelBubble = true;     
	}
}


// ============================== cookie ===================================

function getExpTime(time,type){
    var expTime = new Date();
	switch(type) {
		case 'year' :
			expTime.setFullYear(expTime.getFullYear() + time );
			break ;
		case 'month' :
			expTime.setMonth( expTime.getMonth() + time );
			break;
		case 'day' :
			expTime.setDate( expTime.getDate() + time );
			break;
		case 'hour' :
			expTime.setHours( expTime.getHours() + time );
			break;
	}
    return expTime.toGMTString();
}

function getCookieVal(offset) {
	var endstr = document.cookie.indexOf(";", offset);
	if (endstr == -1)
	endstr = document.cookie.length;
	return decodeURIComponent(document.cookie.substring(offset, endstr));
}

function getCookie(name) {
	var arg = name + "=";
	var alen = arg.length;
	var clen = document.cookie.length;
	var i = 0;
	while (i < clen){
		var j = i + alen;
		if (document.cookie.substring(i, j) == arg)
		return getCookieVal(j);
		i = document.cookie.indexOf(" ", i) + 1;
		if (i == 0) break;
	}
	return "";
}

function setCookie(name,value,expires,path,domain,secure) {
	document.cookie = name + "=" + encodeURIComponent(value) +
	((expires) ? "; expires=" + expires : "") +
	((path) ? "; path=" + path : "") +
	((domain) ? "; domain=" + domain : "") +
	((secure) ? "; secure" : "");
}


function delCookie(name){
	var guoqu = new Date();
	expiresTime = guoqu.setTime(guoqu.getTime() - 100);
	setCookie(name,'',expiresTime,'/','.6rooms.com') ;
}


// ============================== open new window ===================================

// open kai
function kai(page,name,width,height){
	var left = (screen.availWidth - 400)/2;
	var top = (screen.availHeight - 460)/2;
	newopen = window.open(page,name,"width=" + width + ",height=" + height + ",left=" + left + ",top=" + top);
	newopen.focus();
}

