/*  
Toplink Offical JS for Game zone
Use for: mmosite.com
Version: 3.0
Date: 2007/11/27 18:05:00
Author: 33
*/


/*****************************************************
 * mmosite flash----deleted by Jason Wang at Dec.18th.2008 cause this function has applied speciality
 *****************************************************/
//mmoAds
function mmoAds_deliverActiveX(content)
{
	document.write(content);	
}


/*****************************************************
 * mmosite ask
 *****************************************************/

function showAsk(status,url,id){
  document.getElementById("ifram").src=url+"answer_"+id+"_"+status+".htm";
}
function showUrl(sourceUrl,gameid, title){	
  window.open(sourceUrl+"?title="+title+"&parentid="+gameid,"_blank");
} 

/*****************************************************
 * mmosite flash over
 *****************************************************/
function neton(element,value){
	if(window.addEventListener){
		// Mozilla, Netscape, Firefox
		element.addEventListener("mouseout", function(){ change_opacity("pic"+value,'up'); },true);
	}else{
		element.attachEvent("onmouseout", function(){ change_opacity("pic"+value,'up'); });
	}
}
function netout(element,value){
	if(window.addEventListener){
		// Mozilla, Netscape, Firefox
		element.addEventListener("mouseover", function(){ change_opacity("pic"+value,'down'); },true);
	}else{
		element.attachEvent("onmouseover", function(){ change_opacity("pic"+value,'down'); });
	}
}

/*****************************************************
 * mmosite fade over
 *****************************************************/
 
function picon(id){
	var ie=document.all?true:false;
	if(ie){
		id.filters.alpha.opacity=0
	}else{
		id.style.MozOpacity=0
	}
}
function picoff(id){
	var ie=document.all?true:false;
	if(ie){
		id.filters.alpha.opacity=100
	}else{
		id.style.MozOpacity=1
	}
}
/*****************************************************
 *  bug report
 *****************************************************/
document.write("<script language='javascript' src='http://report.help.mmosite.com/js/bug_report.js'></script>");

/*****************************************************
 *  Add to favorite
 *****************************************************/
function myAddPanel(homeName, homePage){
	if((typeof window.sidebar == 'object') && (typeof window.sidebar.addPanel == 'function'))//Gecko
		window.sidebar.addPanel(homeName,homePage,"");
	else//IE
		window.external.AddFavorite(homePage,homeName);
}
/*****************************************************
 *  setHomePage
 *****************************************************/
function setHomePage(obj,siteUrl)
{
	var ua = navigator.userAgent.toLowerCase();
	var isIE = (ua.indexOf("msie") > -1),isIE7 = (ua.indexOf("msie 7") > -1),isOpera = (ua.indexOf("opera") > -1),isSafari = (ua.indexOf("webkit") != -1 || ua.indexOf("khtml") != -1),isGecko = (!isSafari && ua.indexOf("gecko") > -1);

  if(isIE){
	  var strHref=window.location.href;obj.style.behavior='url(#default#homepage)';obj.setHomePage(siteUrl);
  }else{
		  if(window.netscape){
			  try {  
				  netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");  
			  }  catch (e)  {  
				  alert("Dear user,the copy function fails under firefox browser!\nPlease input 'about:config?? in the browser address\n and press enter and set \n'[signed.applets.codebase_principal_support]' to 'true'.");  
			  }
		  }
			  var prefs = Components.classes['@mozilla.org/preferences-service;1'].getService(Components.interfaces.nsIPrefBranch);
			  prefs.setCharPref('browser.startup.homepage',siteUrl);
          }
		  
}

/*****************************************************
 * Get the document id
 *****************************************************/
function getId(id) {
	return document.getElementById(id);
}

/*****************************************************
 * mmoPop
 *****************************************************/

function mmoPop(num){
	if (num ==1){
	document.getElementById("moregbi").style.display = "block"
	}else{
	document.getElementById("moregbi").style.display = "none"
	}
}

/*****************************************************
 Menu
 *****************************************************/

mySlideOutMenu.Registry = []
mySlideOutMenu.aniLen = 250
mySlideOutMenu.hideDelay = 500
mySlideOutMenu.minCPUResolution = 10

// constructor
function mySlideOutMenu(id, dir, left, top, width, height)
{
	this.ie  = document.all ? 1 : 0
	this.ns4 = document.layers ? 1 : 0
	this.dom = document.getElementById ? 1 : 0
	this.css = "";

	if (this.ie || this.ns4 || this.dom) {
		this.id			 = id
		this.dir		 = dir
		this.orientation = dir == "left" || dir == "right" ? "h" : "v"
		this.dirType	 = dir == "right" || dir == "down" ? "-" : "+"
		this.dim		 = this.orientation == "h" ? width : height
		this.hideTimer	 = false
		this.aniTimer	 = false
		this.open		 = false
		this.over		 = false
		this.startTime	 = 0

		// global reference to this object
		this.gRef = "mySlideOutMenu_"+id
		eval(this.gRef+"=this")

		// add this menu object to an internal list of all menus
		mySlideOutMenu.Registry[id] = this

		var d = document

		var strCSS = "";
		strCSS += '#' + this.id + 'Container { visibility:hidden; '
		strCSS += 'left:' + left + 'px; '
		strCSS += 'top:' + top + 'px; '
		strCSS += 'width:' + width + 'px; '
		strCSS += 'height:' + height + 'px; '		
		strCSS += 'overflow:hidden; z-index:10000; }'
		strCSS += '#' + this.id + 'Container, #' + this.id + 'Content { position:absolute; '
		strCSS += '}'

		this.css = strCSS;

		this.load()
	}
}

mySlideOutMenu.writeCSS = function() {
	document.writeln('<style type="text/css">');

	for (var id in mySlideOutMenu.Registry) {
		document.writeln(mySlideOutMenu.Registry[id].css);
	}

	document.writeln('</style>');
}

mySlideOutMenu.prototype.load = function() {
	var d = document
	var lyrId1 = this.id + "Container"
	var lyrId2 = this.id + "Content"
	var obj1 = this.dom ? d.getElementById(lyrId1) : this.ie ? d.all[lyrId1] : d.layers[lyrId1]
	if (obj1) var obj2 = this.ns4 ? obj1.layers[lyrId2] : this.ie ? d.all[lyrId2] : d.getElementById(lyrId2)
	var temp

	if (!obj1 || !obj2) window.setTimeout(this.gRef + ".load()", 100)
	else {
		this.container	= obj1
		this.menu		= obj2
		this.style		= this.ns4 ? this.menu : this.menu.style
		this.homePos	= eval("0" + this.dirType + this.dim)
		this.outPos		= 0
		this.accelConst	= (this.outPos - this.homePos) / mySlideOutMenu.aniLen / mySlideOutMenu.aniLen 

		// set event handlers.
		if (this.ns4) this.menu.captureEvents(Event.MOUSEOVER | Event.MOUSEOUT);
		this.menu.onmouseover = new Function("mySlideOutMenu.showMenu('" + this.id + "')")
		this.menu.onmouseout = new Function("mySlideOutMenu.hideMenu('" + this.id + "')")

		//set initial state
		this.endSlide()
	}
}
	
mySlideOutMenu.showMenu = function(id)
{
	var reg = mySlideOutMenu.Registry
	var obj = mySlideOutMenu.Registry[id]
	
	if (obj.container) {
		obj.over = true

		// close other menus.
		for (menu in reg) if (id != menu) mySlideOutMenu.hide(menu)

		// if this menu is scheduled to close, cancel it.
		if (obj.hideTimer) { reg[id].hideTimer = window.clearTimeout(reg[id].hideTimer) }

		// if this menu is closed, open it.
		if (!obj.open && !obj.aniTimer) reg[id].startSlide(true)
	}
}

mySlideOutMenu.hideMenu = function(id)
{
	// schedules the menu to close after <hideDelay> ms, which
	// gives the user time to cancel the action if they accidentally moused out
	var obj = mySlideOutMenu.Registry[id]
	if (obj.container) {
		if (obj.hideTimer) window.clearTimeout(obj.hideTimer)
		obj.hideTimer = window.setTimeout("mySlideOutMenu.hide('" + id + "')", mySlideOutMenu.hideDelay);
	}
}

mySlideOutMenu.hideAll = function()
{
	var reg = mySlideOutMenu.Registry
	for (menu in reg) {
		mySlideOutMenu.hide(menu);
		if (menu.hideTimer) window.clearTimeout(menu.hideTimer);
	}
}

mySlideOutMenu.hide = function(id)
{
	var obj = mySlideOutMenu.Registry[id]
	obj.over = false

	if (obj.hideTimer) window.clearTimeout(obj.hideTimer)
	
	// flag that this scheduled event has occured.
	obj.hideTimer = 0

	// if this menu is open, close it.
	if (obj.open && !obj.aniTimer) obj.startSlide(false)
}

mySlideOutMenu.prototype.startSlide = function(open) {
	this[open ? "onactivate" : "ondeactivate"]()
	this.open = open
	if (open) this.setVisibility(true)
	this.startTime = (new Date()).getTime()	
	this.aniTimer = window.setInterval(this.gRef + ".slide()", mySlideOutMenu.minCPUResolution)
}

mySlideOutMenu.prototype.slide = function() {
	var elapsed = (new Date()).getTime() - this.startTime
	if (elapsed > mySlideOutMenu.aniLen) this.endSlide()
	else {
		var d = Math.round(Math.pow(mySlideOutMenu.aniLen-elapsed, 2) * this.accelConst)
		if (this.open && this.dirType == "-")		d = -d
		else if (this.open && this.dirType == "+")	d = -d
		else if (!this.open && this.dirType == "-")	d = -this.dim + d
		else										d = this.dim + d

		this.moveTo(d)
	}
}

mySlideOutMenu.prototype.endSlide = function() {
	this.aniTimer = window.clearTimeout(this.aniTimer)
	this.moveTo(this.open ? this.outPos : this.homePos)
	if (!this.open) this.setVisibility(false)
	if ((this.open && !this.over) || (!this.open && this.over)) {
		this.startSlide(this.over)
	}
}

mySlideOutMenu.prototype.setVisibility = function(bShow) { 
	var s = this.ns4 ? this.container : this.container.style
	s.visibility = bShow ? "visible" : "hidden"
}
mySlideOutMenu.prototype.moveTo = function(p) { 
	this.style[this.orientation == "h" ? "left" : "top"] = this.ns4 ? p : p + "px"
}
mySlideOutMenu.prototype.getPos = function(c) {
	return parseInt(this.style[c])
}

// events
mySlideOutMenu.prototype.onactivate		= function() { }
mySlideOutMenu.prototype.ondeactivate	= function() { }

/*****************************************************
 ????л?
 *****************************************************/
var nowPages=1;
function showpages(num){
	var old_layer    = document.getElementById("pages"+nowPages);
	var current_layer= document.getElementById("pages"+num);
	old_layer.style.display="none";
	current_layer.style.display="";
	nowPages=num;
}


/*****************************************************
 *  mmoHeader
 *****************************************************/
function autoBgHeight(){
	docbody = document.body;
	Elebody = document.documentElement;
  if( getId('flashdiv1'))	{  	 
	  if(docbody.scrollHeight != 'undefined'){	
		  getId('flashdiv1').style.height =  docbody.scrollHeight  - 2 + "px"
		  getId('flashdiv2').style.height =  docbody.scrollHeight - 2 + "px"		    			
	  }else{
		  getId('flashdiv1').style.height =  Elebody.scrollHeight  - 2 + "px"
		  getId('flashdiv2').style.height =  Elebody.scrollHeight - 2 + "px" 
	  }
  }	 
}

/******************************
 *Filename:      nav.js
 *Version:       1.0.0(2009-6-2)
 *Website:       http://
 *Author:        S.S.L
*******************************/

function MMOStation(){
	
	var more = [
		[ "Answer","http://answer.mmosite.com/" ],
		[ "immosite","http://my.mmosite.com/" ],
		[ "Company","http://company.mmosite.com/" ],
		[ "Contest","http://contest.mmosite.com/" ],
		[ "Database","http://db.mmosite.com/" ],
		[ "Download","http://download.mmosite.com/" ],
		[ "Feature","http://feature.mmosite.com/" ],
		[ "Forum","http://forum.mmosite.com/" ],
		[ "Gamelist","http://gamelist.mmosite.com/" ],
        [ "Mobile","http://m.mmosite.com/sample/index.shtml" ],
		[ "My Profile","http://accounts.mmosite.com/user/myprofile.php" ],
		[ "News","http://news.mmosite.com/" ],
		[ "Photo","http://photo.mmosite.com/" ],
		[ "Search","http://search.mmosite.com/" ],
		[ "Shop","http://shop.mmosite.com/" ],
		[ "Tag","http://tag.mmosite.com/" ],
		[ "Top100","http://top100.mmosite.com/" ],
		[ "Video","http://video.mmosite.com/" ],
		[ "Vote","http://vote.mmosite.com/" ],
		[ "Help","http://help.mmosite.com/" ]
	];
	
	function $( id ){ 
		return document.getElementById( id ); 
	}
	
	this.setDisplay = function( k ){
		$( "mmo_menu" ).style.display = ( k==1 )? "block":"none";
	}
	
	function getCafeStyle(){
		var str = '<style type="text/css">';
		
		str += '#mmo_global_nav { text-align:center; height:31px; background:url(http://images.mmosite.com/www/newnav_version2/cafe.gif) 0 0 repeat-x; font-family:Arial, Helvetica, sans-serif; font-size:11px;}';
		str += '#mmo_global_nav ul { list-style:none; margin:0; padding:0;}';
		str += '#mmo_global_nav a { text-decoration:none;}';
		str += '#mmo_global_nav a:hover { text-decoration:underline;}';
		str += '#mmo_wrapper { width:1002px; margin:0 auto; text-align:left; height:28px; padding:1px 0 2px 0; background:url(http://images.mmosite.com/www/newnav_version2/cafe.gif) 0 0 repeat-x; position:relative;z-index:9999;}';
		
		/*logo*/
		str += '#mmo_logo { float:left; padding-left:5px; display:none;}';
		str += '#mmo_logo a { display:block; width:94px; height:28px; background:url(http://images.mmosite.com/www/newnav_version2/cafe.gif) 0 -31px no-repeat; text-indent:-1000em; overflow:hidden;}';
		
		/*user*/
		str += '#mmo_user { float:left; padding-left:5px;}';
		str += '#mmo_user ul li { float:left; line-height:28px; padding:0 3px;}';
		str += '#mmo_user a { color:#ffd1a2; padding-left:13px;}';
		str += '#mmo_user a:hover { color:#f4aa5e;}';
		str += '	#mmo_user .ico_home { background:url(http://images.mmosite.com/www/newnav_version2/cafe.gif) 0 -93px no-repeat;}';
		str += '	#mmo_user .ico_home:hover { background-position:0 -94px;}';
		str += '	#mmo_user .ico_mycenter { background:url(http://images.mmosite.com/www/newnav_version2/cafe.gif) 0 -122px no-repeat;}';
		str += '	#mmo_user .ico_mycenter:hover { background-position:0 -123px;}';
		str += '	#mmo_user .ico_blog { background:url(http://images.mmosite.com/www/newnav_version2/cafe.gif) 0 -150px no-repeat;}';
		str += '	#mmo_user .ico_blog:hover { background-position:0 -151px;}';
		
		/*service*/
		str += '#mmo_service { float:right; padding-right:10px;}';
		str += '#mmo_service ul li { float:left; height:28px; line-height:28px; padding:0 10px; background:url(http://images.mmosite.com/www/newnav_version2/cafe.gif) right bottom no-repeat;}';
		str += '#mmo_service li a { color:#ded1c4;}';
		str += '#mmo_service li a:hover { color:#fff;}';
		str += '	#mmo_service .mmo_more { background:none; position:relative;}';
		str += '	#mmo_service .mmo_more a { display:block; float:left; width:52px; height:18px; margin:5px 0; background:url(http://images.mmosite.com/www/newnav_version2/cafe.gif) 0 -64px no-repeat; text-indent:-1000em; overflow:hidden;}';
		
		/*menu*/
		str += '#mmo_menu { position:absolute; top:29px; right:20px; width:524px; display:none; background:url(http://images.mmosite.com/www/newnav_version2/cafe_menu.gif) -1048px bottom no-repeat; z-index:1000;}';
		str += '	#mmo_menu .mmo_head { height:6px; line-height:6px; font-size:1%;  overflow:hidden; background:url(http://images.mmosite.com/www/newnav_version2/cafe_menu.gif) 0 0 no-repeat;}';
		str += '	#mmo_menu .mmo_foot { height:6px; line-height:6px; font-size:1%; overflow:hidden;}';
		str += '	#mmo_menu .mmo_body { background:url(http://images.mmosite.com/www/newnav_version2/cafe_menu.gif) -524px 0 repeat-y; padding:0 6px;}';
		str += '	#mmo_menu h3 { padding:10px 0; margin:0; font-size:18px; color:#ded2c4; text-align:center; position:relative; }';
		str += '	#mmo_menu h3 .mmo_close { position:absolute; top:15px; right:10px; width:13px; height:13px; background:url(http://images.mmosite.com/www/newnav_version2/cafe_menu.gif) right top no-repeat; text-indent:-1000em; overflow:hidden;}';
		str += '	#mmo_menu ul { background:#d8c4c4; border:#5a3c3d solid 1px; padding:6px; overflow:auto; zoom:1;}';
		str += '	#mmo_menu ul li { border-bottom:#ffffff dotted 1px; padding:2px; float:left;}';
		str += '	#mmo_menu li a { display:inline-block; width:67px; height:20px; line-height:20px; text-align:center; color:#6c5253;}';
		str += '	#mmo_menu li a:hover { background:#c8acac;}';
		
		str += '</style>';
		
		return str;
	}
	
	function getMilkStyle(){
		var str = '<style type="text/css">';
		
		str += '#mmo_global_nav { text-align:center; height:31px; background:url(http://images.mmosite.com/www/newnav_version2/milk.gif) 0 0 repeat-x; font-family:Arial, Helvetica, sans-serif; font-size:11px;}';
		str += '#mmo_global_nav ul { list-style:none; margin:0; padding:0;}';
		str += '#mmo_global_nav a { text-decoration:none;}';
		str += '#mmo_global_nav a:hover { text-decoration:underline;}';
		str += '#mmo_wrapper { width:1002px; margin:0 auto; text-align:left; height:28px; padding:1px 0 2px 0; background:url(http://images.mmosite.com/www/newnav_version2/milk.gif) 0 0 repeat-x; position:relative;z-index:9999;}';
		
		/*logo*/
		str += '#mmo_logo { float:left; padding-left:5px; display:none;}';
		str += '#mmo_logo a { display:block; width:94px; height:28px; background:url(http://images.mmosite.com/www/newnav_version2/milk.gif) 0 -31px no-repeat; text-indent:-1000em; overflow:hidden;}';
		
		/*user*/
		str += '#mmo_user { float:left; padding-left:5px;}';
		str += '#mmo_user ul li { float:left; line-height:28px; padding:0 3px;}';
		str += '#mmo_user a { color:#000000; padding-left:13px;}';
		str += '#mmo_user a:hover { color:#333;}';
		str += '	#mmo_user .ico_home { background:url(http://images.mmosite.com/www/newnav_version2/milk.gif) 0 -93px no-repeat;}';
		str += '	#mmo_user .ico_home:hover { background-position:0 -94px;}';
		str += '	#mmo_user .ico_mycenter { background:url(http://images.mmosite.com/www/newnav_version2/milk.gif) 0 -122px no-repeat;}';
		str += '	#mmo_user .ico_mycenter:hover { background-position:0 -123px;}';
		str += '	#mmo_user .ico_blog { background:url(http://images.mmosite.com/www/newnav_version2/milk.gif) 0 -150px no-repeat;}';
		str += '	#mmo_user .ico_blog:hover { background-position:0 -151px;}';
		
		/*service*/
		str += '#mmo_service { float:right; padding-right:10px;}';
		str += '#mmo_service ul li { float:left;height:28px;line-height:28px; padding:0 10px; background:url(http://images.mmosite.com/www/newnav_version2/milk.gif) right bottom no-repeat;}';
		str += '#mmo_service li a { color:#757575;}';
		str += '#mmo_service li a:hover { color:#333;}';
		str += '	#mmo_service .mmo_more { background:none; position:relative;}';
		str += '	#mmo_service .mmo_more a { display:block; float:left; width:52px; height:18px; margin-top:7px; background:url(http://images.mmosite.com/www/newnav_version2/milk.gif) 0 -64px no-repeat; text-indent:-1000em; overflow:hidden;}';
		
		
		/*menu*/
		str += '#mmo_menu { position:absolute; top:29px; right:20px; width:524px; display:none; background:url(http://images.mmosite.com/www/newnav_version2/milk_menu.gif) -1048px bottom no-repeat; z-index:1000;}';
		str += '	#mmo_menu .mmo_head { height:6px; line-height:6px; font-size:1%;  overflow:hidden; background:url(http://images.mmosite.com/www/newnav_version2/milk_menu.gif) 0 0 no-repeat;}';
		str += '	#mmo_menu .mmo_foot { height:6px; line-height:6px; font-size:1%; overflow:hidden;}';
		str += '	#mmo_menu .mmo_body { background:url(http://images.mmosite.com/www/newnav_version2/milk_menu.gif) -524px 0 repeat-y; padding:0 6px;}';
		str += '	#mmo_menu h3 { padding:10px 0; margin:0; font-size:18px; color:#757575; text-align:center; position:relative; }';
		str += '	#mmo_menu h3 .mmo_close { position:absolute; top:15px; right:10px; width:13px; height:13px; background:url(http://images.mmosite.com/www/newnav_version2/milk_menu.gif) right top no-repeat; text-indent:-1000em; overflow:hidden;}';
		str += '	#mmo_menu ul { background:#fff; border:#dcdcdc solid 1px; padding:6px; overflow:auto; zoom:1;}';
		str += '	#mmo_menu ul li { border-bottom:#bbbbbb dotted 1px; padding:2px; float:left;}';
		str += '	#mmo_menu li a { display:inline-block; width:67px; height:20px; line-height:20px; text-align:center; color:#757575;}';
		str += '	#mmo_menu li a:hover { background:#eaeaea;}';
	
		str += '</style>';
		
		return str;
	}
	
	function getCafeHtml(){
		var str = "";
		
		str += '<!--MMOsite Global Navigation-->';

		str += '<div id="mmo_global_nav">';
		str += '<div id="mmo_wrapper">';
		str += '    <!--mmo logo-->';
		str += '    <div id="mmo_logo">';
		str += '        <a href="http://www.mmosite.com/" title="MMOsite.com">MMOsite.com</a>';
		str += '    </div>';
		str += '    <!-- / mmo logo-->';
		str += '	<!--mmo user-->';
		str += '	<div id="mmo_user">';
		str += '		<ul>';
		str += '			<li><a href="http://www.mmosite.com/" title="Home" class="ico_home">Home</a></li>';
		str += '			<li><a href="http://accounts.mmosite.com/user/myprofile.php" title="My Profile" class="ico_mycenter">My Profile</a></li>';
		str += '			<li><a href="http://my.mmosite.com/" title="immosite" class="ico_blog">immosite</a></li>';
		str += '		</ul>';
		str += '	</div>';
		str += '	<!-- / mmo user-->';
		str += '	<!--mmo service-->';
		str += '	<div id="mmo_service">';
		str += '		<ul>';
		str += '			<li><a href="http://contest.mmosite.com/" title="Contest">Contest</a></li>';
		str += '			<li><a href="http://download.mmosite.com/" title="Download">Download</a></li>';
		str += '			<li><a href="http://feature.mmosite.com/" title="Feature">Feature</a></li>';
		str += '			<li><a href="http://forum.mmosite.com/" title="Forum">Forum</a></li>';
		str += '			<li><a href="http://gamelist.mmosite.com/" title="Gamelist">Gamelist</a></li>';
		str += '			<li><a href="http://answer.mmosite.com/dic/" title="Gamepedia">Gamepedia</a></li>';
		str += '			<li><a href="http://news.mmosite.com/" title="News">News</a></li>';
		str += '			<li class="mmo_more" onmouseover="mmo_handler.setDisplay(1)" onmouseout="mmo_handler.setDisplay(0)"><a href="#" title="More">More</a></li>';
		str += '		</ul>';
		str += '	</div>';
		str += '	<!-- / mmo service-->';
		str += '	<!--mmo menu-->';
		str += '	<div id="mmo_menu" onmouseover="mmo_handler.setDisplay(1)" onmouseout="mmo_handler.setDisplay(0)">';
		str += '		<div class="mmo_head"></div>';
		str += '		<div class="mmo_body">';
		str += '		<h3>MMOsite Service <a href="#" title="Close" class="mmo_close">Close</a></h3>';
		str += '		<ul>';
		
		//more里面的内容
		for( var i = 0; i < more.length; i++ ){
			str += '<li><a href="' + more[i][1] + '" title="' + more[i][0] + '">' + more[i][0] + '</a></li>';
		}		
		
		str += '		</ul>';
		str += '		</div>';
		str += '		<div class="mmo_foot"></div>';
		str += '	</div>';
		str += '	<!-- / mmo menu-->';
		str += '</div>';
		str += '</div>';
		str += '<!-- / MMOsite Global Navigation-->';
		
		return str;
	
	}
	
	this.addCafeHeader = function(){
		document.write( getCafeStyle() + getCafeHtml() );
	}
	
	this.addMilkHeader = function(){
		document.write( getMilkStyle() + getCafeHtml() );
	}
	
	function init(){}
	
	init();
}
var mmo_handler = new MMOStation();

//mmoHeader
function mmoHeader(){
	mmo_handler.addCafeHeader();
};
/*****************************************************
 *  Footer
modify by millet 19/03/2009 add Report & Suggestion
 *****************************************************/
function mmoFooter(){
   //Script for bglink
   autoBgHeight();
	var cs = [];
	cs[0] = "<style>#mmo_bottom{width:100%; text-align:center; font-size:12px; font-family:Tahoma}#mmo_bottom .copyright{ width:650px; float:left; padding-top:6px;}#mmo_bottom .logo{ width:50px; height:41px; float:left;}html>body #mmo_bottom .logo{background:url(\"http:\/\/images.mmosite.com\/www\/mmologo.png\") no-repeat;}* html #mmo_bottom .logo {filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale, src=\"http:\/\/images.mmosite.com\/www\/mmologo.png\");background:none;}<\/style>";
	cs[1] = "<div id=\"mmo_bottom\"><div style=\"width: 95%; font-weight:bold;text-align:right;position:relative\"><div style=\"z-index:1;position:absolute;right:40px;top:15px\"><A onclick=scroll(0,0) href=\"#\" id=\"scalltotop\"><img src=\"http://images.mmosite.com/www/images/totop.gif\" border=\"0\" class=\"mmototop\"> Top</a></div></div><div style=\"width:800px; margin-left:auto; margin-right:auto\"><div class=\"logo\"><\/div><div class=\"copyright\">2005-2009 MMOsite.com All Rights Reserved <br \/><a href=\"http:\/\/www.mmosite.com\/about\/sitemap.shtml\" target=\"_blank\"><strong>Site   Map<\/strong><\/a> | <a href=\"http:\/\/www.mmosite.com\/about\/contact.shtml\" target=\"_blank\"><strong>Contact Us<\/strong><\/a> | <a href=\"http:\/\/www.mmosite.com\/about\/index.shtml\" target=\"_blank\"><strong>About US<\/strong><\/a> | <a href=\"http:\/\/www.mmosite.com\/about\/useragreement.shtml\" target=\"_blank\"><strong>User Agreement<\/strong><\/a> | <a href=\"http:\/\/www.mmosite.com\/about\/adsolution.shtml\" target=\"_blank\"><strong>Advertise<\/strong><\/a> | <a href=\"http:\/\/www.mmosite.com\/service\" target=\"_blank\"><strong>Service<\/strong><\/a> | <a href=\"javascript:win_open_bug();\"><strong>Report & Suggestion<\/strong><\/a> <br\/><strong>Sister Site: <\/strong><a href=\"http:\/\/www.bbgsite.com\" target=\"_blank\"><strong>BBGsite.com<\/strong><\/a> |  <\/strong><a href=\"http:\/\/www.arabmmo.com\" target=\"_blank\">Arabmmo.com<\/a><\/strong> | <\/strong><a href=\"http:\/\/www.espmmo.com\" target=\"_blank\">Espmmo.com<\/a><\/strong>  | <\/strong><a href=\"http:\/\/www.pandaapp.com\" target=\"_blank\">Pandaapp.com<\/a><\/strong><\/div><\/div><\/div>";
//aiya start
	cs[2] = "<div style=\"display:none\"><scr"+"ipt language='javascript' src='http://js.aiya.com.cn/stat.js'></scr"+"ipt><noscript><img src=\"http://logs.aiya.com.cn/a?ci=mmosite\" alt=\"\"><\/noscript><\/div>";
//aiya end
	return document.writeln(cs.join(""));
	
	
}

//author : guiyj (evan_gui@163.com) on 2008.12.17 

var gImagesUrl  = "http://image.91.com/zx.sj.91/wm/1201/";		    //图片服务器目录路径
var gSvcUrl     = "http://accounts.mmosite.com/port/js_svc.php?1";	//php脚本服务器端服务请求处理url
var gCurPageUrl = window.location.href;
//var gCurPageUrl = window.location.href.split(','); gCurPageUrl = gCurPageUrl[0];

//----------------------------------------------------------------------
//    1. login
//----------------------------------------------------------------------

//processing mmosite ucenter login 
function mmoUcLoginUser() {
	var url = gSvcUrl; 
	var mmoUcUsername = document.getElementById('mmoUcUsername').value.trim();
	var mmoUcPassword = document.getElementById('mmoUcPassword').value.trim();
	if ('' == mmoUcUsername) {
		document.getElementById('loginResMsg').innerHTML = '<font color="red">Please input your username!</font>';
		return false;
	}
	if ('' == mmoUcPassword) {
		document.getElementById('loginResMsg').innerHTML = '<font color="red">Please input your password!</font>';
		return false;
	}

	url += '&action=login&u=' + mmoUcUsername + '&p=' + mmo_hhp(mmoUcPassword) + '&r=' + document.getElementById('is_remember').checked + '&s=' + (new Date()).getTime();
	requestSvc('bookmarkJs', url, 'processLoginRes');
	return false;
}

//callback func of logging in ucenter
function processLoginRes(s) {
	var _t = s.split('|');
	s = _t[0];
	eval("var oJson = " + s + ";");
	var result = oJson.result;
	switch (result) {
		case 'success': 
			onMmoUcLoginSuccess();

			//dynamicly write request script string...
			var loginScriptStrDiv = document.createElement("div");
			loginScriptStrDiv.id = "loginScriptStrDiv";
			loginScriptStrDiv.innerHTML = _t[1];;
			document.body.appendChild(loginScriptStrDiv);
			break;
		case 'username_empty': 
			showMmoLoginRes("Please input your username!");
			break;
		case 'passwd_empty': 
			showMmoLoginRes("Please input your password!");
			break;
		case 'user_not_exist':
			showMmoLoginRes("This user do not exist!");
			break;
		case 'passwd_error': 
			showMmoLoginRes("Password error!");
			break;
		default : 
			break;
	}
	return false;
}

function showMmoLoginRes(msg, warm) {
	if ('undefined' == typeof(warm)) {
		warm = true;
	}
	var obb = document.getElementById('loginResMsg');
	if (warm) {
		obb.innerHTML = '<br><font color="red">' + msg + '</font>';
	} else {
		obb.innerHTML = '<br><font color="green">' + msg + '</font>';
	}
}

//
function onMmoUcLoginSuccess() {
//	$('#script_container').html(oJson.scriptStr);
	showMmoLoginRes('success!', false);
	setTimeout("addToBookmark()", 1900);
	setTimeout("closeMmoLoginDiv()", 2000);
	
}

function closeMmoLoginDiv() {
	document.getElementById('mmoLoginDiv').style.display = 'none';
}

//show mmosite ucenter login div
function showMmoLoginDiv() {
	try{
		var inner = '';
		var oLoginDiv = document.getElementById('mmoLoginDiv');

		inner += '<div class="winbox_bg" id="winbox_bg"></div><div class="winbox_main" id="winbox_main"><div class="winbox_close" title="click to close" onclick="closeMmoLoginDiv();"></div><form method="" action="" onSubmit="return mmoUcLoginUser();">';
		inner += '<div class="win_tit">Login</div><div class="win_con"><table width="100%" border="0" cellspacing="0" cellpadding="0">';
		
		inner += '<td colspan="2" class="notice">Please login first!';
		inner += '</td>';
		inner += '<tr>';
		inner += '<td colspan="2">Username:<br /> <input id="mmoUcUsername" name="mmoUcUsername" class="input_1"/></td>';
		inner += '</tr>';
		inner += '<tr>';
		inner += '<td colspan="2">Password:<br /><input id="mmoUcPassword" name="mmoUcPassword" type="password" class="input_1"/></td>';
		inner += '</tr>';
		inner += '<tr>';
		inner += '<td colspan="2"><input type="checkbox" id="is_remember" name="is_remember">Remember me </br>';
		inner += '<span id="loginResMsg"></span>';
		inner += '</td>';
		inner += '</tr>';
		inner += '<tr>';
		inner += '<td colspan="2" align="center"><input name="submit" type="submit" value="Login" title="Sign in" class="btn_yellow"> <input name="submit" type="submit" value="Cancel" onclick="closeMmoLoginDiv();" class="btn_gray"></td>';
		inner += '</tr>';
		inner += '<tr>';
		inner += '<td colspan="2"><a href="http://accounts.mmosite.com/port/psw.php">Forgot password?</a></td>';
		inner += '</tr>';
		inner += '<div id="scriptStrDiv"></div>';
		inner += '</tr>';
		inner += '</table>';
		inner += '</form><div class="clear"></div></div>';

		if (!oLoginDiv) {
			var clientWidth = document.body.clientWidth;
			var pmwidth  = 300;		//应该作为参数传入的
			var pmheight = 300;		//应该作为参数传入的

			oLoginDiv = document.createElement("div");
			oLoginDiv.id = "mmoLoginDiv";
			oLoginDiv.style.width = pmwidth + 'px';
			oLoginDiv.style.height = pmheight + 'px';
			oLoginDiv.style.left = ((clientWidth - pmwidth) / 2) + 'px';
			oLoginDiv.style.position = 'absolute';
			oLoginDiv.className = "winbox";
			oLoginDiv.style.zIndex = '999';

			document.body.appendChild(oLoginDiv);
			oLoginDiv.innerHTML = inner;
			
			document.getElementById("winbox_bg").style.width = pmwidth + "px";
			document.getElementById("winbox_bg").style.height = pmheight + "px";
			if(document.compatMode == "BackCompat" && navigator.userAgent.indexOf("MSIE")>0){
				
				document.getElementById("winbox_main").style.width = pmwidth - 20 + "px";
			}else{
				document.getElementById("winbox_main").style.width = pmwidth - 40 + "px";
			}
			
			document.getElementById("winbox_main").style.height = pmheight - 20 + "px";
		} else {

			oLoginDiv.style.display = 'block';	
		}
//		oBookmarkDiv.innerHTML = inner;

	}catch( err ){
		alert( "bookmark.js:showCatsDiv" + " | " + err.description );
	}
}

//----------------------------------------------------------------------
//    2. bookmark
//----------------------------------------------------------------------

// show bookmark adding div
//  (in fact we just need to fetch bookmark categores from server)
function addToBookmark() {
	try{
		url = gSvcUrl + '&action=get_bcs&s=' + (new Date()).getTime();
		requestSvc('bookmarkJs', url, 'processGetBcs');
	}catch( err ){
		alert( "bookmark.js:addToBookmark" + " | " + err.description );
	}

}

// callbakc func of addToBookmark
// - if logged in, then show adding bookmark div; else show login div
function processGetBcs(s) {
	var sJson = s.toString();
	eval("var oJson = " + sJson + ";");
	if ('not_logged' == oJson.result) {
		//未登陆
		showMmoLoginDiv();
//		window.open("http://accounts.mmosite.tom/port/login.php?login_remote=true", '_blank', "height=200,width=400,status=no,toolbar=no,menubar=no,location=no");
		return;
	} else if ('success' == oJson.result) {
		//
		var len = oJson.aCatsOptions.length;
		var sCatsOptions = '';

		sCatsOptions += '<option  value="0">Default</option>';
		for (var i=0; i<len; i++) {
			sCatsOptions += '<option value="' + oJson.aCatsOptions[i].bc_id +  '" >' + oJson.aCatsOptions[i].bc_name + '</option>';
		}

		showBookmarkDiv(sCatsOptions);
	} else {

		alert('error occured');
	}
}

//submit bookmark adding result 
function doAddToBookmark() {
	try{
		var oCat = document.getElementById('bm_cid');
		var url = gSvcUrl; 

		url += '&action=add_bookmark';
		url += '&bm_name=' + document.getElementById('bm_name').value;
		url += '&bm_url=' + document.getElementById('bm_url').value;
		url += '&bm_desc=' + document.getElementById('bm_desc').value;
		url += '&bm_cid=' + document.getElementById('bm_cid').value;
		url += '&bm_cname=' + oCat.options[oCat.selectedIndex].text,
		url += '&s=' + (new Date()).getTime();

		requestSvc('bookmarkJs', url, 'processAddBookmark');
		return false;
	}catch( err ){
		alert( "bookmark.js:doAddToBookmark" + " | " + err.description );
	}
}

// callback of doAddToBookmark
function processAddBookmark(s) {
	var sJson = s.toString();
//	alert(sJson);
	eval("var oJson = " + sJson + ";");
	if ('not_logged' == oJson.result) {
		//未登陆
		
	} else if ('success' == oJson.result) {
		//
		alert("success");
		document.getElementById('bookmarkDiv').style.display = 'none';
	} else if ('allready_exist' == oJson.result) {
		//
		alert("this bookmark has been added before");
	} else {
		alert('error occured');
	}
}

//show bookmark adding div
function showBookmarkDiv(sCatsOptions) {
	try{
		var inner = '';
		var oBookmarkDiv = document.getElementById('bookmarkDiv');
		
		inner += '<div class="winbox_bg" id="winbox_bg2"></div><div class="winbox_main" id="winbox_main2"><div class="winbox_close" title="click to close" onclick="document.getElementById(\'bookmarkDiv\').style.display = \'none\';"></div><form action="" method="POST" onsubmit="return doAddToBookmark();">';
		inner += '<div class="win_tit">Bookmark</div><div class="win_con"><div class="title_left">Name: </div><input  type="text" id="bm_name" name="bm_name" value="' + document.title + '" size="55"/> </br>';
		inner += '<div class="title_left">Address: </div><input type="text" id="bm_url" name="bm_url" value="' + gCurPageUrl + '" size="55"/> </br>';
		inner += '<div class="title_left">Category: </div>';
		inner += '<select id="bm_cid">';
		inner += sCatsOptions;
		inner += '</select>';
		inner += '</br>';

		inner += '<div id="adding_cat" style="display: none;">';
		inner += 'Maximum of 50 characters<br><input id="cat_name" type="text" />';
		inner += '<input type="button" onclick="submitAddCat();" value="Create"/>';
		inner += '<a href="javascript: cancelCat();">Cancel</a>';
		inner += '</div>';
		inner += '<div id="add_cat">';
		inner += '<a href="javascript: addCat();">Create category</a>';
		inner += '</div>';


		inner += 'Description:<br><textarea id="bm_desc" rows="5" cols="30" name="bm_desc"></textarea>';
		inner += '<span id="bm_msg" style="display:block"></span>';
		inner += '<input type="submit"  name="submit" value="Confirm" class="btn_yellow"/> ';
		inner += '<input type="button"  name="cancel" value="cancel" onclick="document.getElementById(\'bookmarkDiv\').style.display = \'none\';" class="btn_gray"/>';
		inner += '</form><div class="clear"></div></div>';

		if (!oBookmarkDiv) {
			var clientWidth = document.body.clientWidth;
			var pmwidth  = 470;		//应该作为参数传入的
			var pmheight = 420;		//应该作为参数传入的


			oBookmarkDiv = document.createElement("div");
			oBookmarkDiv.id = "bookmarkDiv";
			oBookmarkDiv.className = "winbox";
			oBookmarkDiv.style.width = pmwidth + 'px';
			oBookmarkDiv.style.height = pmheight + 'px';
			oBookmarkDiv.style.left = ((clientWidth - pmwidth) / 2) + 'px';
			oBookmarkDiv.style.position = 'absolute';
			oBookmarkDiv.style.zIndex = '999';


			document.body.appendChild(oBookmarkDiv);
			oBookmarkDiv.innerHTML = inner;
			
			document.getElementById("winbox_bg2").style.width = pmwidth + "px";
			document.getElementById("winbox_bg2").style.height = pmheight + "px";
			if(document.compatMode == "BackCompat" && navigator.userAgent.indexOf("MSIE")>0){
				document.getElementById("winbox_main2").style.width = pmwidth - 20 + "px";
			}else{
				document.getElementById("winbox_main2").style.width = pmwidth - 40 + "px";
			}
			document.getElementById("winbox_main2").style.height = pmheight - 20 + "px";
			
		} else {

			oBookmarkDiv.style.display = 'block';	
		}
//		oBookmarkDiv.innerHTML = inner;

	}catch( err ){
		alert( "bookmark.js:showCatsDiv" + " | " + err.description );
	}
}

function addCat() {
	document.getElementById('adding_cat').style.display = 'block';
	document.getElementById('add_cat').style.display = 'none';
}

function cancelCat() {
	document.getElementById('adding_cat').style.display = 'none';
	document.getElementById('add_cat').style.display = 'block';
}

// do add category
function submitAddCat() {
	var sCatName = document.getElementById('cat_name').value.trim();
	if ('' == sCatName) {
		showCatTip('Please input category name!');
		return ;		
	}

	url = gSvcUrl + '&action=add_bc&bc_name=' + sCatName + '&s=' + (new Date()).getTime();
	requestSvc('bookmarkJs', url, 'processAddBc');
}

function processAddBc(s) {
	var sJson = s.toString();
	eval("var oJson = " + sJson + ";");
	switch (oJson.result.trim()) {
		case 'success':
			addCatOption('bm_cid', oJson.catId, oJson.catName);
			cancelCat();
			setSelectByVal(document.getElementById('bm_cid'), oJson.catId);
			break;
		case 'param_error' :
			showCatTip('parameter error!'); return ; break;
		case 'allready_exist' :
			showCatTip('this category name is allready exist!'); return ; break;
		case 'error' :
			showCatTip('operation failed!'); return ; break;
		default:
			showCatTip('operation failed!'); return ; break;
	}//end of switch}
}

function addCatOption(sltId, catId, catName) {
	var oSelect = document.getElementById(sltId);
	var oOption;
	oOption = document.createElement('option');
	oOption.value = catId;
	oOption.text = catName;
	oSelect.options.add(oOption);
}

function showCatTip(msg, warm) {
	if ('undefined' == typeof(warm)) {
		warm = true;
	}
	var obb = document.getElementById('bm_msg');
	if (warm) {
		obb.innerHTML = '<font color="red">' + msg + '</font>';
	} else {
		obb.innerHTML = '<font color="green">' + msg + '</font>';
	}
}

//----------------------------------------------------------------------
//    3. common functions
//----------------------------------------------------------------------

//defautl callback function
function callbackFunc(s) { }

String.prototype.trim = function() {
	return this.replace(/(^\s*)|(\s*$)/g, '');
}

/**
* select控件可用（根据value定位到下拉控件的相应位置）
*/
setSelectByVal = function(oSelect, selectValue) {
	var iOptionsNum = oSelect.options.length;
	for	(var i=0; i < iOptionsNum; i++) {
		if (oSelect.options[i].value == selectValue) {
			oSelect.options.selectedIndex = i;
			return true;
		}
	}
	return false;
}


function requestSvc(id, url, funcName) {
	if (typeof(funcName) == 'undefined') { funcName = 'callbackFunc'; } 
	url += '&func_name=' + funcName;
	oScript = document.getElementById(id);
	var head = document.getElementsByTagName("head").item(0);
	if (oScript) {
		head.removeChild(oScript);
	}
	oScript = document.createElement("script");
	oScript.setAttribute("src", url);
	oScript.setAttribute("id",id);
	oScript.setAttribute("type","text/javascript");
	oScript.setAttribute("language","javascript");

	head.appendChild(oScript);
	return oScript;
}


//even i do not know what is it(^_^)
function mmo_hhp(hhp) {
	return mmo_hh(hhp.toLowerCase().trim());
}





































//----------------------------------------------------------------------------------
/*
 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
 * Digest Algorithm, as defined in RFC 1321.
 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
 * Distributed under the BSD License
 * See http://pajhome.org.uk/crypt/md5 for more info.
 */

/*
 * Configurable variables. You may need to tweak these to be compatible with
 * the server-side, but the defaults work in most cases.
 */
var hexcase = 0;  /* hex output format. 0 - lowercase; 1 - uppercase        */
var b64pad  = ""; /* base-64 pad character. "=" for strict RFC compliance   */
var chrsz   = 8;  /* bits per input character. 8 - ASCII; 16 - Unicode      */

/*
 * These are the functions you'll usually want to call
 * They take string arguments and return either hex or base-64 encoded strings
 */
function mmo_hh(s){ return binl2hex(core_md5(str2binl(s), s.length * chrsz));}
function b64_md5(s){ return binl2b64(core_md5(str2binl(s), s.length * chrsz));}
function str_md5(s){ return binl2str(core_md5(str2binl(s), s.length * chrsz));}
function hex_hmac_md5(key, data) { return binl2hex(core_hmac_md5(key, data)); }
function b64_hmac_md5(key, data) { return binl2b64(core_hmac_md5(key, data)); }
function str_hmac_md5(key, data) { return binl2str(core_hmac_md5(key, data)); }

/*
 * Perform a simple self-test to see if the VM is working
 */
function md5_vm_test()
{
  return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72";
}

/*
 * Calculate the MD5 of an array of little-endian words, and a bit length
 */
function core_md5(x, len)
{
  /* append padding */
  x[len >> 5] |= 0x80 << ((len) % 32);
  x[(((len + 64) >>> 9) << 4) + 14] = len;

  var a =  1732584193;
  var b = -271733879;
  var c = -1732584194;
  var d =  271733878;

  for(var i = 0; i < x.length; i += 16)
  {
    var olda = a;
    var oldb = b;
    var oldc = c;
    var oldd = d;

    a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
    d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
    c = md5_ff(c, d, a, b, x[i+ 2], 17,  606105819);
    b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
    a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
    d = md5_ff(d, a, b, c, x[i+ 5], 12,  1200080426);
    c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
    b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
    a = md5_ff(a, b, c, d, x[i+ 8], 7 ,  1770035416);
    d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
    c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
    b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
    a = md5_ff(a, b, c, d, x[i+12], 7 ,  1804603682);
    d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
    c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
    b = md5_ff(b, c, d, a, x[i+15], 22,  1236535329);

    a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
    d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
    c = md5_gg(c, d, a, b, x[i+11], 14,  643717713);
    b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
    a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
    d = md5_gg(d, a, b, c, x[i+10], 9 ,  38016083);
    c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
    b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
    a = md5_gg(a, b, c, d, x[i+ 9], 5 ,  568446438);
    d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
    c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
    b = md5_gg(b, c, d, a, x[i+ 8], 20,  1163531501);
    a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
    d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
    c = md5_gg(c, d, a, b, x[i+ 7], 14,  1735328473);
    b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);

    a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
    d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
    c = md5_hh(c, d, a, b, x[i+11], 16,  1839030562);
    b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
    a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
    d = md5_hh(d, a, b, c, x[i+ 4], 11,  1272893353);
    c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
    b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
    a = md5_hh(a, b, c, d, x[i+13], 4 ,  681279174);
    d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
    c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
    b = md5_hh(b, c, d, a, x[i+ 6], 23,  76029189);
    a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
    d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
    c = md5_hh(c, d, a, b, x[i+15], 16,  530742520);
    b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);

    a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
    d = md5_ii(d, a, b, c, x[i+ 7], 10,  1126891415);
    c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
    b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
    a = md5_ii(a, b, c, d, x[i+12], 6 ,  1700485571);
    d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
    c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
    b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
    a = md5_ii(a, b, c, d, x[i+ 8], 6 ,  1873313359);
    d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
    c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
    b = md5_ii(b, c, d, a, x[i+13], 21,  1309151649);
    a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
    d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
    c = md5_ii(c, d, a, b, x[i+ 2], 15,  718787259);
    b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);

    a = safe_add(a, olda);
    b = safe_add(b, oldb);
    c = safe_add(c, oldc);
    d = safe_add(d, oldd);
  }
  return Array(a, b, c, d);

}

/*
 * These functions implement the four basic operations the algorithm uses.
 */
function md5_cmn(q, a, b, x, s, t)
{
  return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
}
function md5_ff(a, b, c, d, x, s, t)
{
  return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
}
function md5_gg(a, b, c, d, x, s, t)
{
  return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
}
function md5_hh(a, b, c, d, x, s, t)
{
  return md5_cmn(b ^ c ^ d, a, b, x, s, t);
}
function md5_ii(a, b, c, d, x, s, t)
{
  return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
}

/*
 * Calculate the HMAC-MD5, of a key and some data
 */
function core_hmac_md5(key, data)
{
  var bkey = str2binl(key);
  if(bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz);

  var ipad = Array(16), opad = Array(16);
  for(var i = 0; i < 16; i++)
  {
    ipad[i] = bkey[i] ^ 0x36363636;
    opad[i] = bkey[i] ^ 0x5C5C5C5C;
  }

  var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz);
  return core_md5(opad.concat(hash), 512 + 128);
}

/*
 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
 * to work around bugs in some JS interpreters.
 */
function safe_add(x, y)
{
  var lsw = (x & 0xFFFF) + (y & 0xFFFF);
  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
  return (msw << 16) | (lsw & 0xFFFF);
}

/*
 * Bitwise rotate a 32-bit number to the left.
 */
function bit_rol(num, cnt)
{
  return (num << cnt) | (num >>> (32 - cnt));
}

/*
 * Convert a string to an array of little-endian words
 * If chrsz is ASCII, characters >255 have their hi-byte silently ignored.
 */
function str2binl(str)
{
  var bin = Array();
  var mask = (1 << chrsz) - 1;
  for(var i = 0; i < str.length * chrsz; i += chrsz)
    bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32);
  return bin;
}

/*
 * Convert an array of little-endian words to a string
 */
function binl2str(bin)
{
  var str = "";
  var mask = (1 << chrsz) - 1;
  for(var i = 0; i < bin.length * 32; i += chrsz)
    str += String.fromCharCode((bin[i>>5] >>> (i % 32)) & mask);
  return str;
}

/*
 * Convert an array of little-endian words to a hex string.
 */
function binl2hex(binarray)
{
  var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
  var str = "";
  for(var i = 0; i < binarray.length * 4; i++)
  {
    str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +
           hex_tab.charAt((binarray[i>>2] >> ((i%4)*8  )) & 0xF);
  }
  return str;
}

/*
 * Convert an array of little-endian words to a base-64 string
 */
function binl2b64(binarray)
{
  var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  var str = "";
  for(var i = 0; i < binarray.length * 4; i += 3)
  {
    var triplet = (((binarray[i   >> 2] >> 8 * ( i   %4)) & 0xFF) << 16)
                | (((binarray[i+1 >> 2] >> 8 * ((i+1)%4)) & 0xFF) << 8 )
                |  ((binarray[i+2 >> 2] >> 8 * ((i+2)%4)) & 0xFF);
    for(var j = 0; j < 4; j++)
    {
      if(i * 8 + j * 6 > binarray.length * 32) str += b64pad;
      else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
    }
  }
  return str;
}

/*Gamelist Period 2 related*/
function GlobalGameDetail(){
var areas_length = gamedetail['areas'].length;
var name = gamedetail['name']; //游戏名
var fee = gamedetail['fee']; //游戏收费
var vote_point = gamedetail['vote_point']; //评分
var sumpointer = gamedetail['sumpointer']; //票数
var vote_url = gamedetail['vote_url']; //投票地址
var developer = gamedetail['developer']; //开发商
var developer_url = gamedetail['developer_url']; //开发商网址
var feature_url = gamedetail['feature_url'];

document.writeln("<div class=\"showGameInfo\">");
document.writeln("<h1 class=\"game_name\">"+name+"<\/h1>");
document.writeln("<span class=\"select_version\" id=\"tab_menu1\">Version: <a href=\"javascript:void(0);\">"+gamedetail['areas'][0]['area']+"<\/a>");

for(i=1; i<areas_length; i++) {
	var area = gamedetail['areas'][i]['area']; //游戏地区/版本
    document.writeln(" | <a href=\"javascript:void(0);\">"+area+"<\/a>");
}
    document.writeln("<\/span>");

for(j=0; j<areas_length; j++){
    var publish = gamedetail['areas'][j]['publish']; //发行商
	var publish_url = gamedetail['areas'][j]['publish_url']; //发行商网址
	var status = gamedetail['areas'][j]['status']; //游戏当前状态
	var official_url = gamedetail['areas'][j]['official_url']; //官方网站
    var tabnum = j+1;
    document.writeln("<div id=\"tab_main"+tabnum+"\" style=\"display:none;\">");
	document.writeln("<div class=\"game_rate\">Rating: <span id=\"rate_val\">"+vote_point+"<\/span>\/<span  id=\"rate_user\">"+sumpointer+"<\/span>  <a href=\""+vote_url+"\">Rating<\/a><\/div>");
	document.writeln("<div class=\"game_intro\">Developer: <a href=\""+developer_url+"\" target=\"_blank\">"+developer+"<\/a><br \/>");
	document.writeln("Publisher: <a href=\""+publish_url+"\" target=\"_blank\">"+publish+"<\/a><br \/>");
	document.writeln("Fee: "+fee+"<br \/>");
	document.writeln("Status: "+status+"<br \/>");
	document.writeln("Official Site: <a href=\""+official_url+"\" target=\"_blank\">Click Here<\/a><\/div>");
	document.writeln("<\/div>");

}
document.writeln("<\/div>");
}

//标签切换
function o_tab(){
	var tab_menu,tab_main;
	var on,off;
	var type;
	
	function $( id ){ return document.getElementById( id );}
	
	function setListener(){
		for( var i = 0; i < tab_menu.length; i++ ){
			tab_menu[i].cur_no = i;
			if( type == "" ){
				tab_menu[i].onclick = setOnAndOff;
			} else {
				tab_menu[i].onmouseover = setOnAndOff;
				tab_menu[i].onmouseout = setOnAndOff;
			}
		}
	}
	
	function setOnAndOff(){
		for( var i=0; i<tab_menu.length; i++ ){
		   	$(tab_main+(i+1)).style.display = ( i==this.cur_no )?"block":"none";
			tab_menu[i].className = ( i==this.cur_no )?on:off;
		}
		return false;
	}
	
	this.init = function( tab_menu1,tagName,tab_main1,on1,off1,no1,type1 ){
		tab_menu = $(tab_menu1).getElementsByTagName( tagName );
		tab_main = tab_main1;
		on = on1;
		off = off1;
		type = type1;
		tab_menu[no1-1].className = on;
		$(tab_main+no1).style.display = "block";
		setListener();
	}

}


function LoadTab(){
	new o_tab().init( "tab_menu1","a","tab_main","on","",1,"" );
}