var mmOpenContainer = null;
var mmOpenMenus = null;
var mmHideMenuTimer = null;

function MM_menuStartTimeout(hideTimeout) {
	mmHideMenuTimer = setTimeout("MM_menuHideMenus()", hideTimeout);	
}

function MM_menuHideMenus() {
	MM_menuResetTimeout();
	if(mmOpenContainer) {
		var c = document.getElementById(mmOpenContainer);
		c.style.visibility = "inherit";
		mmOpenContainer = null;
	}
	if( mmOpenMenus ) {
		for(var i in mmOpenMenus) {
			var m = document.getElementById(mmOpenMenus[i]);
			m.style.visibility = "hidden";			
		}
		mmOpenMenus = null;
	}
}

function MM_menuHideSubmenus(menuName) {
	if( mmOpenMenus ) {
		var h = false;
		var c = 0;
		for(var i in mmOpenMenus) {
			if( h ) {
				var m = document.getElementById(mmOpenMenus[i]);
				m.style.visibility = "hidden";
			} else if( mmOpenMenus[i] == menuName ) {
				h = true;
			} else {
				c++;
			}
		}
		mmOpenMenus.length = c+1;
	}
}

function MM_menuOverMenuItem(menuName, subMenuSuffix) {
	MM_menuResetTimeout();
	MM_menuHideSubmenus(menuName);
	if( subMenuSuffix ) {
		var subMenuName = "" + menuName + "_" + subMenuSuffix;
		MM_menuShowSubMenu(subMenuName);
	}
}

function MM_menuShowSubMenu(subMenuName) {
	MM_menuResetTimeout();
	var e = document.getElementById(subMenuName);
	e.style.visibility = "inherit";
	if( !mmOpenMenus ) {
		mmOpenMenus = new Array;
	}
	mmOpenMenus[mmOpenMenus.length] = "" + subMenuName;
}

function MM_menuResetTimeout() {
	if (mmHideMenuTimer) clearTimeout(mmHideMenuTimer);
	mmHideMenuTimer = null;
}

function MM_menuShowMenu(containName, menuName, xOffset, yOffset, triggerName) {
	MM_menuHideMenus();
	MM_menuResetTimeout();
	MM_menuShowMenuContainer(containName, xOffset, yOffset, triggerName);
	MM_menuShowSubMenu(menuName);
}

function MM_menuShowMenuContainer(containName, x, y, triggerName) {	
	var c = document.getElementById(containName);
	var s = c.style;
	s.visibility = "inherit";
	
	mmOpenContainer = "" + containName;
}


// -------------------------------------------------------------------------------------------------------------------------------------------
// 附加於 windows.onload 函式
// -------------------------------------------------------------------------------------------------------------------------------------------
if ( window.attachEvent ) window.attachEvent( "onload", search_winload );	// IE
if ( window.addEventListener ) document.addEventListener( "DOMContentLoaded", search_winload, false );	 // Mozilla


// 關鍵字標示反白
var k_array	= new Array();
var reg1			= new Array();
var reg2			= new Array();
function search_winload()
{
	var _head = location.href;
	var _k = "";
	if ( _head.indexOf( "?w=" ) > -1 ) {
		_k = _head.substr( _head.indexOf( "?w=" ) + 3 );
		_k = Base64.decode( _k );
		_k = _k.toLowerCase();
	}
	if ( _k != "" ) {

		k_array = _k.split(" ");
		for ( var i=0 ; i < k_array.length ; i++ )
		{
			reg1[ i ] = new RegExp( k_array[ i ].toUpperCase(), "g" );
			reg2[ i ] = new RegExp( k_array[ i ].toLowerCase(), "g" );
		}

		// 依序搜尋全部的表格內容
		var oAll = document.getElementsByTagName( "TD" );
		for ( var i=0 ; i < oAll.length ; i++ )	{
			if ( oAll[i].innerHTML.toLowerCase().indexOf( "<a" ) == -1 ) {
				if ( oAll[i].innerHTML.toLowerCase().indexOf( "<img" ) == -1 ) {
					tagThis( oAll[i] );
				}
			}
		}
	}
}

// 反白
function tagThis( obj )
{
	for ( var i=0 ; i < k_array.length ; i++ )
	{
		if ( obj.innerHTML.toLowerCase().indexOf( k_array[ i ] ) > -1 ) {
			var str = obj.innerHTML;
			str = str.replace( reg1[ i ], "<span style='background-color:#FFFF33'>" + k_array[ i ].toUpperCase() + "</span>" );
			str = str.replace( reg2[ i ], "<span style='background-color:#FFFF33'>" + k_array[ i ].toLowerCase() + "</span>" );
			obj.innerHTML = str;
		}
	}
}


// -------------------------------------------------------------------------------------------------------------------------------------------
var Base64 = {

    // private property
    _keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",

    // public method for decoding
    decode : function (input) {
        var output = "";
        var chr1, chr2, chr3;
        var enc1, enc2, enc3, enc4;
        var i = 0;

        input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");

        while (i < input.length) {

            enc1 = this._keyStr.indexOf(input.charAt(i++));
            enc2 = this._keyStr.indexOf(input.charAt(i++));
            enc3 = this._keyStr.indexOf(input.charAt(i++));
            enc4 = this._keyStr.indexOf(input.charAt(i++));

            chr1 = (enc1 << 2) | (enc2 >> 4);
            chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
            chr3 = ((enc3 & 3) << 6) | enc4;

            output = output + String.fromCharCode(chr1);

            if (enc3 != 64) {
                output = output + String.fromCharCode(chr2);
            }
            if (enc4 != 64) {
                output = output + String.fromCharCode(chr3);
            }

        }

        output = Base64._utf8_decode(output);

        return output;

    },

    // private method for UTF-8 decoding
    _utf8_decode : function (utftext) {
        var string = "";
        var i = 0;
        var c = c1 = c2 = 0;

        while ( i < utftext.length ) {

            c = utftext.charCodeAt(i);

            if (c < 128) {
                string += String.fromCharCode(c);
                i++;
            }
            else if((c > 191) && (c < 224)) {
                c2 = utftext.charCodeAt(i+1);
                string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
                i += 2;
            }
            else {
                c2 = utftext.charCodeAt(i+1);
                c3 = utftext.charCodeAt(i+2);
                string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
                i += 3;
            }

        }

        return string;
    }

}
