
		stylePath = "/skins/ace/";
		_skin_path = "/skins/";
		_script_path = "/";
		var wgDekiApi = "@api/deki";	
		baseHref = "http://www.kleinfelter.org";	
        _editor_path = "/editor/Xinha";		
		_editor_url = "/editor/Xinha/core";
		_editor_lang = "en"; 
		_editor_skin = ""; 
		var _gallery_sort = "GALLERY_SORT";
		var _total_images = 6;
		var Browser = new BrowserVersion();
		

/*
 * MindTouch DekiWiki - a commercial grade open source wiki
 *  derived from MediaWiki (www.mediawiki.org)
 * Copyright (C) 2006 MindTouch, Inc.
 * www.mindtouch.com  oss@mindtouch.com
 *
 * For community documentation and downloads visit www.opengarden.org;
 *  please review the licensing section.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along
 * with this program; if not, write to the Free Software Foundation, Inc.,
 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 * http://www.gnu.org/copyleft/gpl.html
 */

 function parse_url(url){
    var prt = ["source","protocol","authority","domain","port","path","directoryPath","fileName","query","anchor"];
    var parts = new RegExp("^(?:([^:/?#.]+):)?(?://)?(([^:/?#]*)(?::(\\d*))?)?((/(?:[^?#](?![^?#/]*\\.[^?#/.]+(?:[\\?#]|$)))*/?)?([^?#/]*))?(?:\\?([^#]*))?(?:#(.*))?").exec(url);
    var uri = {};
    
    for(var i = 0; i < prt.length; i++)
        uri[prt[i]] = (parts[i] ? parts[i] : "");
    
    if(uri.directoryPath.length > 0)
        uri.directoryPath = uri.directoryPath.replace(/\/?$/, "/");
    
    return uri;
}
        
 // make the specified div a windowed control in IE6
 // this masks an iframe (which is a windowed control) onto the div,
 // turning the div into a windowed control itself
 
 function makeWindowed(p_div)
 {
    var is_ie6 =
       document.all && 
       (navigator.userAgent.toLowerCase().indexOf("msie 6.") != -1);
    if (is_ie6)
    {
       var html =
          "<iframe style=\"position: absolute; display: block; " +
          "z-index: -1; width: 100%; height: 100%; top: 0; left: 0;" +
          "filter: mask(); background-color: #ffff00; \"></iframe>";
       if (p_div) p_div.innerHTML += html;
       // force refresh of div
       var olddisplay = p_div.style.display;
       p_div.style.display = 'none';
       p_div.style.display = olddisplay;
    };
 }
 
var saveFlag = false;

var MTPageLoad = function() {};
MTPageLoad.HookEditSectionIcons = function() {
	var GenerateSectionEditIcons = function() {
		var elt = document.getElementById('pageText');
		for (var i = 2; i < 7; i++) {
			var h = DekiWiki.$("h"+i+".editable", DekiWiki.$("#pageText"));
			if (!h)
				continue; 
			h.each(function() {
				this.innerHTML = '<span>'+this.innerHTML+'</span>';	
			});
			h.append('<div class="editIcon">'
				+'<a href="#" onclick="return editSection(this);" onmouseover="showEditArea(this);" onmouseout="hideEditArea(this);" title="'
				+wfMsg('wikibits-edit-section')+'"><span class="icon"><img src="'+_path_icons+'/icon-trans.gif" class="sectionedit" alt="'+wfMsg('wikibits-edit-section')+'"/></span></a></div>');
		}
	};
	
	GenerateSectionEditIcons();
	HookSectionEditBehavior(); 
};

var HookSectionEditBehavior = function() {
	for (var i = 2; i < 7; i++) {
		var h = DekiWiki.$("h"+i+".editable", DekiWiki.$("#pageText"));
		if (!h)
			continue; 
		h.each(function() {
			YAHOO.util.Event.addListener(this, "mouseover", function() { 
				DekiWiki.$("div.editIcon > a", this).get(0).style.visibility = 'visible';
			});
			YAHOO.util.Event.addListener(this, "mouseout", function() { 
				DekiWiki.$("div.editIcon > a", this).get(0).style.visibility = 'hidden';
			});
		});
	}
};
function BrowserVersion(){
    BrowserVersion.minInternetExplorerVersion = 6.0;
    BrowserVersion.minFirefoxVersion = 1.5;
    BrowserVersion.minCaminoVersion = "1.0";
    BrowserVersion.minFlockVersion = "0.5";
    
    this.isIE = false;
    this.isFF = false;
	this.isMozilla = false;
    this.isNS = true;
    this.isCamino = false;
    this.isSafari = false;
    this.isFlock = false;
    this.version = null;
    this.isSupported = true;
    
    var browserApp = navigator.userAgent;
    var s = "MSIE";
    var i;
    if((i = browserApp.indexOf(s)) >= 0){
        this.isIE = true;
        this.isNS = false;
        this.version = parseFloat(browserApp.substr(i+s.length));
        if(this.version < BrowserVersion.minInternetExplorerVersion){
            this.isSupported = false;
        }
        return;
    }
    s = "Firefox/";
    if((i = browserApp.indexOf(s)) >= 0){
        this.isFF = true;
        this.version = parseFloat(browserApp.substr(i+s.length));
        if(this.version < BrowserVersion.minFirefoxVersion){
            this.isSupported = false;
        }
        return;
    }
	s = "SeaMonkey/";
    if((i = browserApp.indexOf(s)) >= 0){
        this.isMozilla = true;
        this.isSupported = true;
        return;
    }
    s = "Safari/";
    if((i = browserApp.indexOf(s)) >= 0){
        this.isSafari = true;
        this.isSupported = false;
        return;
    }
    s = "Camino/";
    if((i = browserApp.indexOf(s)) >= 0){
        this.isCamino = true;
        this.version = browserApp.substr(i+s.length);
        if(this.version < BrowserVersion.minCaminoVersion){
            this.isSupported = false;
        }
        return;
    }
    s = "Flock/";
    if((i = browserApp.indexOf(s)) >= 0){
        this.isFlock = true;
        this.version = browserApp.substr(i+s.length);
        if(this.version >= BrowserVersion.minFlockVersion){
            this.isSupported = true;
        }
        return;
    }
    s = "Netscape6/";
    if((i = browserApp.indexOf(s)) >= 0){
        this.isNS = true;
        this.version = parseFloat(browserApp.substr(i+s.length));
        return;
    }
    s = "Gecko";
    if((i = browserApp.indexOf(s)) >= 0){
        this.isNS = true;
        this.version = 6.1;
    }
};

function showToc(node) {
	return menuPosition('menuPageContent', node, -2, 0, true);
}
/***
 * hooks an onclick to all links in the table of contents dropdown which closes the window
 */
function hookTOCLinks() {
	var elt = document.getElementById('content-toc');
	if (!elt) return;
	var a_ = elt.getElementsByTagName('a');	
	for (var i = 0; i < a_.length; i++)
		a_[i].onclick = function () { menuBodyClick() };
};

function breadcrumbLoad(z) {
	document.getElementById('breadcrumb').innerHTML = z;
};

function doClosePopupMessage(divid, clearInnerHtml) {
    parent.hidePopWin(false);
	return false;
};

function doHidePopupMessage() {
   return doClosePopupMessage();
};

function createFullHtml(title, body, head, _lang) {
    var html = "<html>\n";
    html += "<head>\n";
    html += "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=" + ( !jQuery.browser.msie ? document.characterSet : document.charset ) + "\">\n";
    html += "<title>" + title + "</title>\n";
    html += "<link rel=\"stylesheet\" type=\"text/css\" href=\"/editor/Xinha/core/popups/popup.css\" />\n";
    html += "<link rel=\"stylesheet\" type=\"text/css\" href=\"/skins/common/icons.css\" />\n";
    html += "<link rel=\"stylesheet\" type=\"text/css\" href=\"/skins/common/_icons.css\" />\n";
    html += "<link rel=\"stylesheet\" type=\"text/css\" href=\"/editor/Xinha/core/popups/selectTopic.css\" />\n";
    html += "<script type=\"text/javascript\" src=\"/editor/Xinha/core/popups/popup.js\"></script>\n";
    html += "<script type=\"text/javascript\">function Init() {};\n";
    for (var i in _lang)
    	html += "var "+i+" = '"+_lang[i]+"';\n";
    html += "</script>\n";
    if (head) html += head;
    html += "</head>\n";
    html += "<body onload='Init()'><div class=\"wrap\">\n";
    html += body;
    html += "</div></body>\n";
    html += "</html>";
    return html;
};

function doPopupAttach() {
	if (document.getElementById('editarea'))
		{
		alert(wfMsg('wikibits-cant-attach-editing'));
		return false;
		}
    showPopWin('/skins/common/popups/loading.html', 650, 134);
    var lang = new Object();
    lang['_lang_removeattach'] = wfMsg('wikibits-remove-file');
    lang['_lang_fileattach'] = wfMsg('wikibits-attach-another');
    setPopWinHTML(createFullHtml(wfMsg('wikibits-attach-file'), 
    	'<div id="pageAttachForm">'+document.getElementById('pageAttachForm').innerHTML+'</div><script>document.getElementById(\'file_1\').focus()</script>',
        "<script src=\"/skins/common/attach.js\"></script>\n" +
        "<script type=\"text/javascript\">function Init() { __dlg_sizeToContent(); };</script>\n", lang
    ));
    return false;
};

function doPopupAttachNotification() {
	gPopupDoc.getElementById('form').style.display = "none";
	gPopupDoc.getElementById('waiting').style.display = "inline";
};
function doPopupFunctions() {
	showPopWin('/skins/common/popup-functions.php', 570, 430);
	return false;
};

function doPopupEmail(titleID) {
	showPopWin('/skins/common/popup-email.php?titleID=' + titleID, 460, 180);
	return false;
};
function doPopupRename(titleID) {
	showPopWin('/skins/common/popup-rename.php?titleID=' + titleID + '&userName=' + _userName, 570, 530);
	return false;
};
function doPopupInvite(titleID) {
	showPopWin('/skins/common/popup-invite.php?titleID=' + titleID + '&userName=' + _userName, 470, 250);
	return false;
};
function doPopupMoveAttach(titleID, attachID, inGallery) {
	showPopWin('/skins/common/popup-move-attach.php?titleID=' + titleID +'&attachID=' +  attachID + '&userName=' + _userName+'&inGallery='+(inGallery ? 'true': 'false'), 570, 459);
	return false;
};
function doPopupEditAttach(titleID, attachID) {
	showPopWin('/skins/common/popup-attach.php?attachID=' + attachID+'&titleID='+titleID, 380, 206);
	return false;
};
function doPopupRestrict(titleID) {
	showPopWin('/skins/common/popup-restrict.php?titleID=' + titleID + '&userName=' + _userName, 380, 335);
	return false;
};
function doPopupTags(titleID) {
	showPopWin('/skins/common/popup-tags.php?titleID=' + titleID, 380, 145);
	return false;
};
function doPopupUnsupported() {
	showPopWin('/skins/common/popup-unsupported.php', 380, 320);
	return false;
};
function doPopupDelete(titleID) {
	showPopWin('/skins/common/popup-delete.php?titleID=' + titleID + '&userName=' + _userName, 400, 224);
	return false;
};

function fixTables() {
	if (!Browser.isIE)
		return;
	var content = document.getElementById('pageText');
	var _tables = content.getElementsByTagName('table');
	if (_tables.length == 0)
		return false;
		
	for (var i = 0; i < _tables.length; i++ ) {		
		var table = _tables[i].cloneNode(true);
		var divTag = document.createElement('div');
		divTag.className = 'wrap_tbl';
		divTag.appendChild(table);
		_tables[i].replaceNode(divTag);
	}
	
};
function array_search(needle, haystack) {
	for (var i = 0; i < haystack.length; i++ ) {
		if (haystack[i] == needle)
			return i;	
	}	
	return false;
};

function doSectionEditRedirect() {
	var icon = this.getElementsByTagName('span');
	if (icon.length == 0)
		return false;
	for (var i = 0; i < icon.length; i++) {
		if (icon[i].className == 'editsection') {	
			var link = this.getElementsByTagName('a');
			top.location.href = link[0].getAttribute('href');
		}
	}
};

function setHiddenSubmit(divid) {
	document.getElementById(divid).value = '1';
};


// in [-]HH:MM format...
// won't yet work with non-even tzs
function fetchTimezone() {
	// FIXME: work around Safari bug
	var localclock = new Date();
	// returns negative offset from GMT in minutes
	var tzRaw = localclock.getTimezoneOffset();
	return formatTimezone(tzRaw);
};

function formatTimezone(tzSecs) {
	var tzHour = Math.floor( Math.abs(tzSecs) / 60);
	var tzMin = Math.abs(tzSecs) % 60;
	return  ((tzSecs >= 0) ? "-" : "") + ((tzHour < 10) ? "0" : "") + tzHour +
		":" + ((tzMin < 10) ? "0" : "") + tzMin;
};

function openWindow(href,menu) {
	window.open(href, 'popupwindow', 'width='+(winX - 100)+',height='+(winY - 100)+',scrollbars,resizable' + (menu ? ',menubar=yes' : ''));
	return false;
};

function escapeQuotes(text) {
	var re=new RegExp("'","g");
	text=text.replace(re,"\\'");
	re=new RegExp('"',"g");
	text=text.replace(re,'&quot;');
	re=new RegExp("\\n","g");
	text=text.replace(re,"\\n");
	return text;
};

function escapeQuotesHTML(text) {
	var re=new RegExp('"',"g");
	text=text.replace(re,"&quot;");
	return text;
};

// StepanR: Functions store and check attachments view mode,
// that is if revisions are shown or not
var gAttachments = new Array();
function SwitchShowMode(aId, aShowRevisions) {
    gAttachments[aId] = aShowRevisions;
}
function isShowRevisionsEnabled(aId)
{
    if (gAttachments[aId] != undefined) {
        return gAttachments[aId];
    }
    return 'false';
}

function toggleTable(divid) {
	//change icon
 	var showlink = document.getElementById('showlink-'+divid);
 	var hidelink = document.getElementById('hidelink-'+divid);
 	
 	if( showlink.style.display == 'none') {
		hidelink.style.display='none';
		showlink.style.display='block';
		SwitchShowMode(divid, 'true');
	} else {
		hidelink.style.display='block';
		showlink.style.display='none';
		SwitchShowMode(divid, 'false');
	}	
	
	//loop through table	
	var cells = document.getElementById('attachTable').getElementsByTagName('tr');
	var numCells = cells.length;
	var i;
	for (i = 0; i < numCells; ++i) {
		// If cell should be changed (matching class)...
		if ('attach_'+divid == cells[i].className) {
			if (cells[i].style.display != 'none') {
				cells[i].style.display = 'none';
			}
			else {
				cells[i].style.display = '';
			}
		}
	}
	return false;
};

function toggleChangesTable(divid) {
        //change icon
        var showlink = document.getElementById('showlink-'+divid);
        var hidelink = document.getElementById('hidelink-'+divid);
 
        if( showlink.style.display == 'none') {
                hidelink.style.display='none';
                showlink.style.display='block';
                SwitchShowMode(divid, 'true');
        } else {
                hidelink.style.display='block';
                showlink.style.display='none';
                SwitchShowMode(divid, 'false');
        }
 
        //loop through table
        var cells = document.getElementsByTagName('tr');
        var numCells = cells.length;
        var i;
        for (i = 0; i < numCells; ++i) {
            // If cell should be changed (matching class)...
            if (divid+' show-no' == cells[i].className) 
                cells[i].className = divid + 'display';
            else if (divid+'display' == cells[i].className)
                cells[i].className = divid + ' show-no';
        }
        return false;
};

/* blank function for sajax callback */
function cb_blank() {};

//MT: royk search toggling
function toggleSearchTabs() {
	var titleContent = document.getElementById('search-title');
	var pageContent = document.getElementById('search-page');
	var tabTitle = document.getElementById('search-title-tab');
	var tabPage = document.getElementById('search-page-tab');
	
	if (titleContent.style.display == 'none') {
		titleContent.style.display = 'block';
		pageContent.style.display = 'none';
		tabTitle.className = 'selected';
		tabPage.className = '';
		var page = 'title';
	}
	else {
		titleContent.style.display = 'none';
		pageContent.style.display = 'block';
		tabTitle.className = '';
		tabPage.className = 'selected';
		var page = 'page';
	}	
	x_wfStoreSearchStatus(page, cb_blank);
};

function createCookie(name,value,days) { 
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else {
		var expires = "";
	}
	document.cookie = name+"="+value+expires+"; path=/";
};

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') 
			c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) 
			return c.substring(nameEQ.length,c.length);
	}
	return null;
};

function eraseCookie(name) {
	createCookie(name,"",-1);
};

function doEmailPage(pageId, recipient, name, note) {
	x_wfEmailPage(pageId, recipient, name, note, function() {
		hidePopWin(false);
		window.location.reload();
	});
};

function doRestrictAccess(pageId, protectType, userIds, cascade) {
	x_wfSetRestrictions(pageId, protectType, userIds, cascade, function(z) {
		hidePopWin(false);
		window.location.reload();
	});
};

function doDeleteAction (titleID, includingChildren) {
	x_wfDeleteTopic(titleID, includingChildren, _userName, function (data) {
		var status = data.charAt(0);
		if (status == '<') {
			data = data.replace(/<br\s*\/?>/ig, "\n");
		}
		if (status == '+') {
			data = data.substring(1);
			hidePopWin (false);
			window.location = data;
		} else {
			if (status == '-')
				data = data.substring (1);
			hidePopWin (false);
		}
	});
};

function selectSkin(node) {
	var divs = DekiWiki.$('#styleSelections').find('input').get();
	var activeSkin = false;
	for ( var i = 0; i < divs.length; i++ ) {
		if (divs[i].name == 'wgActiveSkin') {
			divs[i].disabled = true;
		}
	}
	var child = DekiWiki.$('#skinStyle'+node.id).find('input').get();	
	for ( var i = 0; i < child.length; i++ ) {
		if (child[i].name == 'wgActiveSkin') {
			child[i].disabled = false;
			activeSkin = child[i].checked == true;
		}
	}
	if (!activeSkin) {
		child[0].checked = true;
	}
	showPreview();
};
function showPreview() {	
	var child = DekiWiki.$('#styleSelections').find('input').get();	
	for ( var i = 0; i < child.length; i++ ) {
		if (child[i].checked == true) {
			if (child[i].name == 'wgActiveTemplate') {
				var wgActiveTemplate = child[i].value;
			}
			else if (child[i].name == 'wgActiveSkin') {
				var wgActiveSkin = child[i].value;
			}
		}
	}
	DekiWiki.$('#previewSkin').html('<img src="/skins/'+wgActiveTemplate+'/'+wgActiveSkin+'/screenshot.png" alt="Skin Preview" />');
};


/*
 * MindTouch DekiWiki - a commercial grade open source wiki
 *  derived from MediaWiki (www.mediawiki.org)
 * Copyright (C) 2006 MindTouch, Inc.
 * www.mindtouch.com  oss@mindtouch.com
 *
 * For community documentation and downloads visit www.opengarden.org;
 *  please review the licensing section.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along
 * with this program; if not, write to the Free Software Foundation, Inc.,
 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 * http://www.gnu.org/copyleft/gpl.html
 */

var menuBubble = false;
var menuOpened = false;
var menuJustOpened = false;
var menuSelect = false;

var menuLinkClick = function(divid, offsetX) {
	if (menuOpened && menuOpened != divid)
		menuToggle(menuOpened, offsetX);
	menuToggle(divid, offsetX);
};

var menuToggle = function(navid, offsetX) {
	var node = document.getElementById(navid);
	if (!node) return false;
	if (node.style.display == 'block') {
		node.style.display = 'none';	
		menuOpened = false;
	}
	else {
		node.style.display 		= 'block';
		node.style.visibility 	= 'hidden';
		
		var dimensions 	= Mindtouch.util.Dom.getDimensions(node);
		var position 	= YAHOO.util.Dom.getXY(node);
		
		if (typeof(winX) != 'null') {
			if ((position[0] + dimensions.width) > (winX - 36)) {
				if (typeof(offsetX) == 'undefined') offsetX = 0;
				node.style.left = (position[0] - dimensions.width + offsetX + 5)+'px';
			}
		}
		node.style.visibility = '';
		menuOpened = navid;
		menuJustOpened = true;
	}
};

var menuPosition = function (navid, elt, offsetX, offsetY) {
	if (!document.getElementById(navid)) return;
	var x = YAHOO.util.Dom.getX(elt);
	var y = YAHOO.util.Dom.getY(elt);
	var dimensions = Mindtouch.util.Dom.getDimensions(elt);
	offsetY = offsetY + dimensions.height;
	
	if (typeof(offsetX) == 'number') x = x + offsetX;
	if (typeof(offsetY) == 'number') y = y + offsetY;
	DekiWiki.$("#" + navid).css("left", x+'px').css("top", y+'px');
	menuLinkClick(navid, dimensions.width);
	
	return false;
};

var menuOff = function(navid) {
	var node = document.getElementById(navid);
	if (!node) return false;
	if (node.style.display == 'block') {
		node.style.display = 'none';	
		menuOpened = false;
	}
};

var menuBodyClick = function() {
	if (!menuJustOpened && !menuBubble && menuOpened) {
		if (menuSelect) {
			selectToggle(menuOpened);
		}
		else {
			menuToggle(menuOpened);
		}
	}
	if (menuBubble)
		menuBubble = false;	
	if (menuJustOpened)
		menuJustOpened = false;	
};

var FileMenu = { 
	lastOpened : null, //the last opened menu id
	isOpening : null,
	openMenu : false,
	justClosed : false,
	maxHeight: 132, //max height of the menu
	minHeight: 1, //min height of the menu; keep at least 1px for IE
	
	bodyClick : function() {
		if (this.isOpening) {
			this.isOpening = null;
			return;
		}
		if(this.lastOpened) {
			this.hide();
		}
		return false;
	},
	/*** 
	 * 
	 */
	show : function(node, titleID, attachID, isLoggedIn, showRevisions, areRevisions, reviseURL, isRestricted, inGallery, fullUrl) {

        this.menuBubble = true;
		this.isOpening = true;
		var divFiller = 'menuFiller'; //filler div for filling the menu
		var divMenu = 'npdmenu_' + titleID; //menu generated by generateMenu()
		
		if (this.lastOpened && '_' + titleID != this.lastOpened) {
			this.hide();
		}
		else if (this.lastOpened) {
			this.hide();
			this.justClosed = true;
			return false;
		}
		this.lastOpened = '_' + titleID;
		
		var eltFiller = document.getElementById(divFiller);
		eltFiller.style.position = 'absolute';
		eltFiller.style.left = (findPosX(node))+'px';
		eltFiller.style.top = (findPosY(node) + 16) + 'px';
		
		//StepanR: I need an attachment name for menu generation function, this actual only for latest revisions. Previous revs already has ids in title
	    var lAttachName = node.parentNode.parentNode.className.substr('attach_'.length);

		//for IE
		eltFiller.style.display = '';
		
		//first, generate the new menu
		eltFiller.appendChild(this.generateMenu(titleID, attachID, isLoggedIn, showRevisions, areRevisions, reviseURL, isRestricted, lAttachName, inGallery, fullUrl));
		eltFiller.style.display = 'block';
		
		var dimensions 		= Mindtouch.util.Dom.getDimensions(divMenu);
		var linkDimensions 	= Mindtouch.util.Dom.getDimensions(node);
		var position 		= YAHOO.util.Dom.getXY(eltFiller);
		
		if (typeof(winX) != 'null' && typeof(winY) != 'null')
		{
			var pageDimensions 	= YAHOO.util.Dom.getXY(DekiWiki.$('#bodyHeight').get(0));
			var pageHeight 		= pageDimensions[1];
			var extendsRight 	= (position[0] + dimensions.width) > (winX - 36);
			var extendsBottom 	= (position[1] + dimensions.height) > pageHeight;
			var horizOffset 	= position[0] - dimensions.width + linkDimensions.width + 5;
			
			if (extendsRight) {
				if (typeof(offsetX) == 'undefined') offsetX = 0;
				eltFiller.style.left = horizOffset+'px';
			}
			if (extendsBottom) {
				var vertOffset = position[1] - ((position[1] + dimensions.height) - pageHeight);
				eltFiller.style.top = vertOffset + 'px';
				horizOffset = position[0] + linkDimensions.width;
				eltFiller.style.left = horizOffset+'px';
			}
		}
		menuLinkClick(divMenu, dimensions.width);
		
		return false;
	},
	hide: function () {
		if (this.lastOpened) {
			var eltMenu = 'npdmenu' + this.lastOpened;	
			var elt = document.getElementById(eltMenu);
			elt.parentNode.removeChild(elt);
			menuLinkClick(eltMenu);	
		}
		this.lastOpened = null;
	},
	
	generateMenu : function (titleID, attachID, isLoggedIn, showRevisions, areRevisions, reviseURL, isRestricted, lAttachName, inGallery, fullUrl) {
		function addMenuItem(icon, text, href, onclick, cssClass) {
			var item = document.createElement('li');
			var a = document.createElement('a');
			
			a.href = href;
			a.className = 'mlink'+(cssClass && cssClass != '' ? ' '+cssClass: '');
			item.className = 'mlink'+(cssClass && cssClass != '' ? ' '+cssClass: '');
			a.appendChild(iconify(icon+(cssClass && cssClass != '' ? '-'+cssClass: '')));
						
			var span = document.createElement('span');
			span.innerHTML = text;
			span.className = 'text';			
			a.appendChild(span);
			
			if (onclick && isLoggedIn)
			  a.onclick = onclick;
			item.appendChild(a);
			menuList.appendChild(item);
		};
		var divid = 'npdmenu_' + titleID;

		var divMain = document.createElement('div');
		divMain.onclick = function () {
			menuBubble = true;	
		};
		divMain.className = 'dmenu';

		var divWrap = document.createElement('div');
		divWrap.id = divid;
		divWrap.className = 'dmenu-wrap';

		var divTop = document.createElement('div');
		divTop.className = 'dmenu-top';

		var divBottom = document.createElement('div');
		divBottom.className = 'dmenu-bottom';

		var divBody = document.createElement('div');
		divBody.className = 'dmenu-body';

		var menuList = document.createElement('ul');
		
		if (inGallery) {
			addMenuItem('attachoriginal', wfMsg('menu-view-original'), fullUrl, function () {}, false);
		}
		if (isLoggedIn) {
			addMenuItem('attachedit', wfMsg('menu-edit-description'), '#', function () { 
				if (!isRestricted) {
					return doPopupEditAttach(_page_ID, attachID);
				}
			}, isRestricted ? 'disabled': false);
			addMenuItem('attachmove', wfMsg('menu-move-file'), '#', function () { 
				if (!isRestricted) {
					return doPopupMoveAttach(_page_ID, attachID, inGallery);	
				}
			}, isRestricted ? 'disabled': false);
			
			// StepanR: if file revisions are displayed, then we use ids fo deletion.
			var RevMode = isShowRevisionsEnabled(lAttachName);
			addMenuItem('attachdel', wfMsg('menu-delete-file'), '#', function() {
				if (!isRestricted) {
					if (confirm(wfMsg('menu-confirm-delete'))) {
						YAHOO.util.Connect.asyncRequest(
							"POST",
							'/'+ wgDekiApi+'/files/'+attachID+'/?dream.in.verb=DELETE',
							{
								success: function()	{
									if (inGallery) {
										Attachments.SetImageCount(Attachments.GetImageCount() - 1);	
										MTGallery.Refresh();
										Attachments.SetCount();
										MTMessage.Show(wfMsg('menu-image-deleted'), '', 'ui-successmsg');
									}
									else {
										window.location.reload();
									}
								}, 
								failure: function() {
									MTMessage.Show(wfMsg('internal-error'), '', 'ui-errormsg');
								}
							},
							' ' //don't send in an empty body or else this will fail; mono bug
						);	
					}
					return false;
				}
			}, isRestricted ? 'disabled': false);
		}
		else {
			addMenuItem('attachedit', wfMsg('menu-edit-description'), '#', function () { return false; }, 'disabled');
			addMenuItem('attachmove', wfMsg('menu-move-file'), '#', function () { return false; }, 'disabled');
			addMenuItem('attachdel', wfMsg('menu-delete-file'), '#', function() { return false; }, 'disabled');
		}
		if (showRevisions) {
			if (areRevisions) {
				addMenuItem('attachhist', wfMsg('menu-previous-versions'), reviseURL, false, false);
			}
			else {
				addMenuItem('attachhist', wfMsg('menu-previous-versions'), '#', function () { return false;}, 'disabled');
			}
		}
		divBody.appendChild(menuList);

		divWrap.appendChild(divTop);
		divWrap.appendChild(divBody);
		divWrap.appendChild(divBottom);

		divMain.appendChild(divWrap);
		
		return divMain;
	}
};

function setColor(titleID, color) {
	DekiWiki.$("#nav_" + titleID + " a").css("backgroundColor", color);
	
	var params = color != '' ? 'color='+color: '';
	
	YAHOO.util.Connect.asyncRequest(
		"POST",
		wgDekiApi+'pages/'+titleID+'/highlight/?'+params,
		{},
		params
	);
};

var NavPane = { 
	lastOpened: null, 
	showBorder : function (elt, hilite) {
		if (inCSSClass(elt, 'force')) {
			return;
		}
		elt.className = hilite != '' ? 'container-hover'+hilite: 'container-hover default';
	}, 
	hideBorder : function (elt, hilite) {
		if (inCSSClass(elt, 'force')) {
			return;
		}
		elt.className = 'container'+hilite;
	},
	boxClick : function (elt) {
		if (NavMenu.menuBubble && (NavMenu.justClosed || NavMenu.lastOpened)) {
			NavMenu.justClosed = null;
			NavMenu.menuBubble = null;
			return;
		}
		var tags = elt.getElementsByTagName('div');
		for (var i = 0; i<tags.length;  i++) {
			if (tags[i].className == 'innerPadding') {
				try {
					document.location = tags[i].childNodes[0].href;
				} catch(e) {
					return false;
				}
			}
		}
	},
	itemClick : function() {
		if (NavMenu.openMenu) return;
	},
	onHover : function (_titleID) {	
		var elt = document.getElementById('expNode' + _titleID);
		if (!elt) return;
		elt.style.visibility = 'visible';
		if (this.lastOpened && this.lastOpened != _titleID) {
			this.onUnhover(this.lastOpened);
			this.lastOpened = null;	
		}
		this.lastOpened = _titleID;
		return true;
	}, 
	
	onUnhover : function (_titleID) {
		if (NavMenu.lastOpened && NavMenu.lastOpened == _titleID) {
			return;
		}
		var elt = document.getElementById('expNode'+_titleID);
		if (!elt) return;
		elt.style.visibility = 'hidden';
		return true;
	}
};


var hexcase=0;
var b64pad="";
var chrsz=8;
function hex_md5(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(_4,_5){
return binl2hex(core_hmac_md5(_4,_5));
}
function b64_hmac_md5(_6,_7){
return binl2b64(core_hmac_md5(_6,_7));
}
function str_hmac_md5(_8,_9){
return binl2str(core_hmac_md5(_8,_9));
}
function core_md5(x,_b){
x[_b>>5]|=128<<((_b)%32);
x[(((_b+64)>>>9)<<4)+14]=_b;
var a=1732584193;
var b=-271733879;
var c=-1732584194;
var d=271733878;
for(var i=0;i<x.length;i+=16){
var _11=a;
var _12=b;
var _13=c;
var _14=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,_11);
b=safe_add(b,_12);
c=safe_add(c,_13);
d=safe_add(d,_14);
}
return Array(a,b,c,d);
}
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);
}
function core_hmac_md5(key,_38){
var _39=str2binl(key);
if(_39.length>16){
_39=core_md5(_39,key.length*chrsz);
}
var _3a=Array(16),opad=Array(16);
for(var i=0;i<16;i++){
_3a[i]=_39[i]^909522486;
opad[i]=_39[i]^1549556828;
}
var _3c=core_md5(_3a.concat(str2binl(_38)),512+_38.length*chrsz);
return core_md5(opad.concat(_3c),512+128);
}
function safe_add(x,y){
var lsw=(x&65535)+(y&65535);
var msw=(x>>16)+(y>>16)+(lsw>>16);
return (msw<<16)|(lsw&65535);
}
function bit_rol(num,cnt){
return (num<<cnt)|(num>>>(32-cnt));
}
function str2binl(str){
var bin=Array();
var _45=(1<<chrsz)-1;
for(var i=0;i<str.length*chrsz;i+=chrsz){
bin[i>>5]|=(str.charCodeAt(i/chrsz)&_45)<<(i%32);
}
return bin;
}
function binl2str(bin){
var str="";
var _49=(1<<chrsz)-1;
for(var i=0;i<bin.length*32;i+=chrsz){
str+=String.fromCharCode((bin[i>>5]>>>(i%32))&_49);
}
return str;
}
function binl2hex(_4b){
var _4c=hexcase?"0123456789ABCDEF":"0123456789abcdef";
var str="";
for(var i=0;i<_4b.length*4;i++){
str+=_4c.charAt((_4b[i>>2]>>((i%4)*8+4))&15)+_4c.charAt((_4b[i>>2]>>((i%4)*8))&15);
}
return str;
}
function binl2b64(_4f){
var tab="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var str="";
for(var i=0;i<_4f.length*4;i+=3){
var _53=(((_4f[i>>2]>>8*(i%4))&255)<<16)|(((_4f[i+1>>2]>>8*((i+1)%4))&255)<<8)|((_4f[i+2>>2]>>8*((i+2)%4))&255);
for(var j=0;j<4;j++){
if(i*8+j*6>_4f.length*32){
str+=b64pad;
}else{
str+=tab.charAt((_53>>6*(3-j))&63);
}
}
}
return str;
}



/*
 * MindTouch DekiWiki - a commercial grade open source wiki
 *  derived from MediaWiki (www.mediawiki.org)
 * Copyright (C) 2006 MindTouch, Inc.
 * www.mindtouch.com  oss@mindtouch.com
 *
 * For community documentation and downloads visit www.opengarden.org;
 *  please review the licensing section.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along
 * with this program; if not, write to the Free Software Foundation, Inc.,
 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 * http://www.gnu.org/copyleft/gpl.html
 */

var Print = { 
	open : function(href, menu) {
		window.open(href, 'popupwindow', 'width='+600+',height='+winY+'' + (menu ? ',menubar=yes' : '')+',resizable=yes,scrollbars=yes');
		return false;
	}, 
	doPrint : function () {
		window.print();
		// the first time you print in firefox (or mozilla), immediately executing parent.close() will 
		// result in the page just closing with no print; oddly, if you open the print dialogue again, 
		// the document will print then close the window correctly
		// setting a timeout on the close allows the browser to popup the "print" dialogue before parent.close()
		//window.setTimeout("Print.doClose()", 2000);
	},
	doClose : function () {
		window.close();	
	},
	createEndnotes : function () {
		var elt = document.getElementById('pageText');
		var endnotes = '';
		var j = 0;
		var Browser = new BrowserVersion();
		var links = elt.getElementsByTagName('a');
		for (i = 0; i < links.length; i++ ) {
			if (links[i].getAttribute('href')) {
				if (Browser.isIE && Browser.version < 7) {
					if (links[i].innerHTML == '&nbsp;') {
						continue;
					}
				}
				j++;
				var sup = document.createElement('sup');
				sup.className = 'endnotes';
				sup.innerHTML = j;
				links[i].appendChild(sup);
				endnotes += '<sup>'+(j)+'</sup> '+links[i].getAttribute('href')+'<br/>';
			}
		}	
		var div = document.createElement('div');
		div.setAttribute('id', 'endnotes');
		div.setAttribute('class', 'print-toc');
		elt.appendChild(div);
		div.innerHTML = '<h5>'+wfMsg('print-end-notes')+'</h5><div><small>'+endnotes+'</small></div>';
	},
	changeEndnotesDisplay : function () {
		var displayType = document.getElementById('printOptLinks').checked;
		var endnotes = document.getElementsByTagName('sup');
		for (i = 0; i < endnotes.length; i++ ) {
			if (endnotes[i].className == 'endnotes')
				endnotes[i].style.display = displayType ? 'inline': 'none';
		}
		var endnotesBody = document.getElementById('endnotes');
		if (endnotesBody)
			endnotesBody.style.display = displayType ? 'block' : 'none';
	}, 
	changeFooterDisplay : function () {
		if (document.getElementById('printOptFooter').checked)
			DekiWiki.$("#printfooter").css("display", "block");
		else 
			DekiWiki.$("#printfooter").css("display", "none");
	},
	changeTocDisplay : function () {
		if (document.getElementById('printOptToc').checked)
			DekiWiki.$("#pageToc").css("display", "block");
		else 
			DekiWiki.$("#pageToc").css("display", "none");
	},
	onBodyLoad : function () {
	    Print.createEndnotes();
	    Print.changeEndnotesDisplay();
	    Print.changeTocDisplay();
	    Print.changeFooterDisplay();	    
	}, 
	showPreferences: function(node) {
		var prefsnode = document.getElementById('printPrefs');
		if (!prefsnode) return;
		if (prefsnode.style.display == 'none') {
			DekiWiki.$("#pageContent").addClass("prefsToggledOn");
			prefsnode.style.display = 'block';
			node.className = 'showPrintPrefs';
		}
		else {
			DekiWiki.$("#pageContent").removeClass("prefsToggledOn");
			prefsnode.style.display = 'none';
			node.className = 'hidePrintPrefs';
		}
		
	},
	toggleEndnotes : function() {
		Print.changeEndnotesDisplay();
		x_wfSetUserOption('printlinks', document.getElementById('printOptLinks').checked ? '1': 'null', function(returned) {});
	},
	toggleFooter : function() {
		Print.changeFooterDisplay();
		x_wfSetUserOption('printfooter', document.getElementById('printOptFooter').checked ? '1': 'null', function(returned) {});
	}, 
	toggleToc : function() {
		Print.changeTocDisplay();
		x_wfSetUserOption('printtoc', document.getElementById('printOptToc').checked ? '1': 'null', function(returned) {});
	}
};

function saveToPDF (page) {
	window.location = page + '&action=export&type=pdf';
}


function MTGallery() {};
MTGallery.Offset = 0;
MTGallery.PageID = 0;
MTGallery.SortBy = _gallery_sort;
MTGallery.FileID = 0;

MTGallery.Next = function() {
	MTGallery.Offset = MTGallery.Offset + _total_images;
	return MTGallery.Show();
};

MTGallery.Back = function() {
	MTGallery.Offset = MTGallery.Offset - _total_images;
	return MTGallery.Show();
};
MTGallery.Refresh = function() {
	return MTGallery.Show();
};
MTGallery.ShowAll = function(showingRevisions) {
	MTGallery.Offset = -1;
	if (showingRevisions) {
		MTGallery.FileID = 0;
	}
	return MTGallery.Show();
};
MTGallery.ShowRevisions = function(FileID) {	
	MTGallery.Offset = -1;
	MTGallery.SortBy = 'date-desc';
	MTGallery.FileID = FileID;
	MTGallery.Show();
	MTGallery.FileID = 0;
	return false;
};
MTGallery.Sort = function(node) {	
	MTGallery.SortBy = node.value;
	return MTGallery.Show();
};
MTGallery.Show = function() {
	if (MTGallery.PageID == 0) {
		MTGallery.PageID = _page_ID;
	}
	x_wfInlineImageGallery(MTGallery.PageID, MTGallery.Offset, MTGallery.SortBy, MTGallery.FileID, function(z) {
		if (!DekiWiki.$('#pageGallery').get(0)) return;
		DekiWiki.$('#pageGallery').html(z);
		MTGallery.ReloadViewHooks();
	});
	return false;
};

MTGallery.ReloadViewHooks = function() {
	tb_init('#pageGallery a.lightbox');//pass where to apply thickbox
	imgLoader = new Image();// preload image
	imgLoader.src = tb_pathToImage;
}

/***
 * MindTouch Messaging
 * Outputs success/error messages that autoclose
 */
var MTMessage = function () {};

MTMessage.Active = false;
MTMessage.DefaultTimerValue = 6;
MTMessage.TimeValue = MTMessage.DefaultTimerValue;
MTMessage.Timer = false;

MTMessage.Show = function(headerText, bodyText, msgType, detailsArray) {
	if (MTMessage.Active) 
		return;
	
	if (typeof(msgType) == 'undefined')
		msgType = 'ui-errormsg';
	MTMessage.Active = true;
	MTMessage.SetHeader(headerText);
	MTMessage.SetBody(bodyText);
	if (typeof(detailsArray) == 'undefined'  || detailsArray == '') {
		document.getElementById('MTMessageDetailsLink').style.display = 'none';
	}
	else {
		MTMessage.SetDetails(detailsArray);
	}
	
	var node = document.getElementById('MTMessage');
	document.getElementById('MTMessageStyle').className = 'ui-msg '+msgType;
	document.getElementById('MTMessage').style.display = 'block';
	document.getElementById('MTMessage').style.opacity = 1;
	document.getElementById('MTMessageUnpaused').style.display = 'inline';
	document.getElementById('MTMessagePaused').style.display = 'none';
	document.getElementById('MTMessage').onmouseover = function() {
		if (MTMessage.Timer) 
			MTMessage.PauseTimer();
	};
	MTMessage.GoTimer();
	return false;
};
MTMessage.Hide = function() {
	MTMessage.TimeValue = MTMessage.DefaultTimerValue;
	if (Browser.isIE && Browser.version < 7) {
		document.getElementById('MTMessage').style.display = 'none'; 
 		MTMessage.Active = false;
 		return false;
	}
	var anim = new YAHOO.util.Anim('MTMessage', { opacity: { to: 0 } }, 1, YAHOO.util.Easing.easeOut);
	anim.onComplete.subscribe(function () { 
		document.getElementById('MTMessage').style.display = 'none'; 
		MTMessage.Active = false;
	});	
	anim.animate();
	return false;
};
MTMessage.PauseTimer = function() {
	MTMessage.Timer = false;
	document.getElementById('MTMessageUnpaused').style.display = 'none';
	document.getElementById('MTMessagePaused').style.display = 'inline';
};
MTMessage.UnPauseTimer = function() {
	document.getElementById('MTMessageUnpaused').style.display = 'inline';
	document.getElementById('MTMessagePaused').style.display = 'none';
	MTMessage.GoTimer();
};
MTMessage.GoTimer = function() {
	MTMessage.Timer = true;
	MTMessage.TimeValue = MTMessage.DefaultTimerValue;
	MTMessage.TimerValue(MTMessage.TimeValue);
};
MTMessage.TimerValue = function() {
	if (!MTMessage.Timer)
		return;
	MTMessage.TimeValue = MTMessage.TimeValue - 1;
	document.getElementById('MTMessageTimer').innerHTML = MTMessage.TimeValue+' ';
	if ((MTMessage.TimeValue) < 1) {
		MTMessage.Hide();
	}
	else {
		setTimeout("MTMessage.TimerValue("+(MTMessage.TimeValue)+")", 1000);
	}
};
MTMessage.SetHeader = function(val) {
	document.getElementById('MTMessageHeader').innerHTML = val;
};
MTMessage.SetBody = function(val) {
	document.getElementById('MTMessageDesc').innerHTML = val;
};
MTMessage.ShowDetails = function(anode) {
	document.getElementById('MTMessageDetails').style.display = 'block';
	document.getElementById('MTMessageTextarea').select();
	anode.parentNode.innerHTML = anode.innerHTML; //remove link
};
MTMessage.SetDetails = function(val) {
	var node = document.createElement('textarea');
	node.id = 'MTMessageTextarea';
	node.className = 'ui-msgtextarea';
	node.setAttribute('readonly', 'true');
	node.value = eval(val);
	document.getElementById('MTMessageDetails').appendChild(node);
};

/**
 * COMMON DHTML FUNCTIONS
 * These are handy functions I use all the time.
 *
 * By Seth Banks (webmaster at subimage dot com)
 * http://www.subimage.com/
 *
 * Up to date code can be found at http://www.subimage.com/dhtml/
 *
 * This code is free for you to use anywhere, just keep this comment block.
 */

/**
 * X-browser event handler attachment and detachment
 * TH: Switched first true to false per http://www.onlinetools.org/articles/unobtrusivejavascript/chapter4.html
 *
 * @argument obj - the object to attach event to
 * @argument evType - name of the event - DONT ADD "on", pass only "mouseover", etc
 * @argument fn - function to call
 */
function addEvent(obj, evType, fn){
 if (obj.addEventListener){
    obj.addEventListener(evType, fn, true);
    return true;
 } else if (obj.attachEvent){
    var r = obj.attachEvent("on"+evType, fn);
    return r;
 } else {
    return false;
 }
}
function removeEvent(obj, evType, fn, useCapture){
  if (obj.removeEventListener){
    obj.removeEventListener(evType, fn, useCapture);
    return true;
  } else if (obj.detachEvent){
    var r = obj.detachEvent("on"+evType, fn);
    return r;
  } else {
    alert("Handler could not be removed");
  }
}

/**
 * Code below taken from - http://www.evolt.org/article/document_body_doctype_switching_and_more/17/30655/
 *
 * Modified 4/22/04 to work with Opera/Moz (by webmaster at subimage dot com)
 *
 * Gets the full width/height because it's different for most browsers.
 */
function getViewportHeight() {
	if (window.innerHeight!=window.undefined) return window.innerHeight;
	if (document.compatMode=='CSS1Compat') return document.documentElement.clientHeight;
	if (document.body) return document.body.clientHeight; 
	return window.undefined; 
}
function getViewportWidth() {
	if (window.innerWidth!=window.undefined) return window.innerWidth; 
	if (document.compatMode=='CSS1Compat') return document.documentElement.clientWidth; 
	if (document.body) return document.body.clientWidth; 
	return window.undefined; 
}


String.prototype.utf8ToCodepoint = function() {
  var z = this.charCodeAt(0), length;
  if (z & 0x80) {
    length = 0;
    while (z & 0x80) {
      length++;
      z <<= 1;
    }
  } else
    length = 1;

  if (length != this.length) return false;
  if (length == 1) return z;

  // Mask off the length-determining bits and shift back to the original location
  z &= 0xff;
  z >>= length;

  // Add in the free bits from subsequent bytes
  for ( var i=1; i < length; i++ ) {
    z <<= 6;
    z |= this.charCodeAt(i) & 0x3f;
  }
  return z;
};

String.prototype.utf8ToString = function() {
  var val = this.replace(/[\xc0-\xfd][\x80-\xbf]*/g, function(s) {
    return String.fromCharCode(s.utf8ToCodepoint());
  });;
  return val;
};

String.prototype.utf8URL = function() {
  var val = this.replace(/[ \?%\+&=#\.\u0080-\uFFFF]/g, function(s) {
    switch (s) {
    case ' ': return '_';
//    case ' ': return '%20';
    case '+': return '%2B';
    default:
      return escape(String.charToUtf8(s.charCodeAt(0)));
    }
  });
  return val;
};

String.prototype.utf8 = function() {
  var val = this.replace(/[\u0080-\uFFFF]/g, function(s) {
    return String.charToUtf8(s.charCodeAt(0));
  });
  return val;
};

String.charToUtf8 = function(codepoint) {
  if(codepoint < 0x80) return String.fromCharCode(codepoint);
  if(codepoint < 0x800) return String.fromCharCode(
    codepoint >> 6 & 0x3f | 0xc0,
    codepoint & 0x3f | 0x80);
  if(codepoint < 0x10000) return String.fromCharCode(
    codepoint >> 12 & 0x0f | 0xe0,
    codepoint >> 6 & 0x3f | 0x80,
    codepoint & 0x3f | 0x80);
  if(codepoint < 0x110000) return String.fromCharCode(
    codepoint >> 18 & 0x07 | 0xf0,
    codepoint >> 12 & 0x3f | 0x80,
    codepoint >> 6 & 0x3f | 0x80,
    codepoint & 0x3f | 0x80);

  // There should be no assigned code points outside this range, but
  return String.fromCharCode(codepoint);
};

var winX = null;
var winY = null;

clientWindow = function () {
	if (self.innerHeight) {
		winX = self.innerWidth;
		winY = self.innerHeight;
	}
	else if (document.documentElement && document.documentElement.clientHeight)	{
		winX = document.documentElement.clientWidth;
		winY = document.documentElement.clientHeight;
	}
	else if (document.body) {
		winX = document.body.clientWidth;
		winY = document.body.clientHeight;
	}
};

getItemHeight = function (elt) {
	return elt.offsetHeight;
};

getItemWidth = function (elt) {
	return elt.offsetWidth;
};

//returns the Y offset of a page
getPageYOffset = function() {
	return (window.pageYOffset > 0) ? window.pageYOffset: document.body.scrollTop;
};

//returns the X offset of a page
getPageXOffset = function() {
	return (window.pageXOffset > 0) ? window.pageXOffset: document.body.scrollLeft;
};

findPosX = function (obj) {
	return getRecursiveProperty(obj, "offsetLeft");
};

findPosY = function (obj) {
	return getRecursiveProperty(obj, "offsetTop");
};

findPosScrollY = function () {
	var sTop = 0;
	if (document.body.scrollTop > 0) {
		sTop = document.body.scrollTop;
	}
	else if (document.body.parentNode.scrollTop > 0) {
		sTop = document.body.parentNode.scrollTop;
	}
	return sTop;
};

findPosScrollX = function () {
	var sLeft = 0;
	if (document.body.scrollLeft > 0) {
		sLeft = document.body.scrollLeft;
	}
	else if (document.body.parentNode.scrollLeft > 0) {
		sLeft = document.body.parentNode.scrollLeft;
	}
	return sLeft;
};

getRecursiveProperty = function (obj, property) {
	var ret = 0;
	while (obj) {
		ret += obj[property];
		try
		{
		  obj = obj.offsetParent;
		}
		catch (e)
		{
		  obj = null;
		}
	}
	return ret;
};

//adds a css class
addCSSClass = function (elt, newClass) {
	var class_ = elt.className.split(' ');
	for ( var i = 0; i < class_.length; i++ ) {
		if (class_[i] == newClass) {
			return;
		}
	}
	elt.className = elt.className+' '+newClass;
	return true;
};
replaceCSSClass = function (elt, newClass) {
	elt.className = newClass;
	return true;
};
removeCSSClass = function (elt, className) {
	var new_ = new Array;
	var class_ = elt.className.split(' ');
	for ( var i = 0; i < class_.length; i++ ) {
		if (class_[i] != className) {
			new_[i] = class_[i];
		}
	}
	elt.className = new_.join(' ');
};
inCSSClass = function(elt, className) {
	var new_ = new Array;
	var class_ = elt.className.split(' ');
	for ( var i = 0; i < class_.length; i++ ) {
		if (class_[i] == className) {
			return true;
		}
	}
	return false;
};
function mt_gen() {

}

/***
 * takes a string and escapes single quotes and encodes html
 */
mt_gen.htmlspecialchars = function(str) {
	// performs HTML encoding of some given string
	mt_gen.htmlEncode_regEx = [
		new RegExp().compile(/&/ig),
		new RegExp().compile(/</ig),
		new RegExp().compile(/>/ig),
		new RegExp().compile(/'/ig),
		new RegExp().compile(/\xA0/g),
	    // \x22 means '"' -- we use hex reprezentation so that we don't disturb
	    // JS compressors (well, at least mine fails.. ;)
		new RegExp().compile(/\x22/g),
		// special encode none-ASCII
		new RegExp().compile(/[\x80-\xFF]/g)
	];
	mt_gen.htmlEncode_regExR = [
		"&amp;",
		"&lt;",
		"&gt;",
		"\\'",
		"&nbsp;",
		"&quot;",
		function(s,b){return "&#"+s.charCodeAt(0)+";";}
	];

    if(typeof str.replace == 'undefined') str = str.toString();
    for (var i = 0; i < mt_gen.htmlEncode_regEx.length; ++i)
    	str = str.replace(mt_gen.htmlEncode_regEx[i], mt_gen.htmlEncode_regExR[i]);
    return str;
};

mt_gen.getUrlFromName = function(href) {
	href = mt_gen.extractName(href).replace(/ /g,'_');
    if (href.indexOf('&') > 0 || href.indexOf('?') > 0 || href.indexOf('+') > 0 || href.indexOf('#') > 0 ||
        href.indexOf('\\') > 0 || href.indexOf('//') > 0 || href.indexOf('%') > 0
    )
        href = 'index.php?title=' + encodeURIComponent(href);
    return '/' + href;
};

mt_gen.extractName = function(href) {
    if (href.charAt(0) == '/') href = href.substr(1);
    if (href.indexOf('index.php?title=') == 0)
        href = href.substr('index.php?title='.length);
    href = href.replace(/&action=.+$/i, '');
    try { href = unescape(href); } catch (e) {}
    return href;
};

function iconify(icon_class, parentClass) {
	if (!parentClass) parentClass = 'icon';
	var span = document.createElement('span');
	span.className = parentClass;
	var img = document.createElement('img');
	img.src = '/skins/common/icons/icon-trans.gif';
	if (typeof(icon_class) != 'undefined' && icon_class != '') {
		img.className = icon_class;
	}
	span.appendChild(img);
	return span;
};

var Element = {};
Element.getDimensions = function(element) {
	// All *Width and *Height properties give 0 on elements with display none,
	// so enable the element temporarily
	var els = element.style;
	var originalVisibility = els.visibility;
	var originalPosition = els.position;
	els.visibility = 'hidden';
	els.position = 'absolute';
	els.display = '';
	var originalWidth = element.clientWidth;
	var originalHeight = element.clientHeight;
	els.display = 'none';
	els.position = originalPosition;
	els.visibility = originalVisibility;
	return { width: originalWidth, height: originalHeight };
};

var Position = {}
Position.cumulativeOffset = function(element) {
	var valueT = 0, valueL = 0;
	do {
		valueT += element.offsetTop  || 0;
		valueL += element.offsetLeft || 0;
		element = element.offsetParent;
	} while (element);
	return [valueL, valueT];
};

//returns an XML document
function encode_xml(data, outer) {
	var result = '';
	if (typeof(data) == 'object') {
		for (key in data) {
			var value = data[key];
			if (strncmp(value,'@',1) == 0) {
			} else {
				var tag = outer != null ? outer: key;
				if (is_numeric_array(value)) {
					result += encode_xml(value, key);
				} else if (typeof(value) == 'object') {
					var attrs = '';
					for (attr_key in value) {
						var attr_value = value[attr_key];
						if(strncmp(attr_key, '@', 1) == 0) {
							attrs += ' '+attr_key.substr(0, 1)+ '="'+mt_gen.htmlspecialchars(attr_value)+'"';
						}
					}
					result += '<' + tag + attrs + '>' + encode_xml(value) + '</' + tag + '>'+"\n";
				} else if (tag != '#text') {
					result += '<' + tag + '>' + encode_xml(value) + '</' + tag + '>';
				} else {
					result += mt_gen.htmlspecialchars(value);
				}
			}
		}
	} else if (typeof(data) == 'string') {
		result = mt_gen.htmlspecialchars(data);
	} else {
		result = data;
	}
	return result;
}
function strncmp(str1, str2, len) {
	if (typeof(str1) != 'string' || typeof(str2) != 'string') {
		return 1;
	}
	return str1.substr(0, len) == str2 ? 0: 1; //not exactly like PHP implementation, but returns 0 if true
}
function is_numeric_array(data) {
	var construct = data.constructor;
	return construct == Array;
}


if (typeof DekiWiki == "undefined") {
	var DekiWiki = {};
}

DekiWiki.url = {};
DekiWiki.url.encode = function(plaintext)
{
	// The Javascript escape and unescape functions do not correspond
	// with what browsers actually do...
	var SAFECHARS = "0123456789" +					// Numeric
					"ABCDEFGHIJKLMNOPQRSTUVWXYZ" +	// Alphabetic
					"abcdefghijklmnopqrstuvwxyz" +
					"-_.!~*'()";					// RFC2396 Mark characters
	var HEX = "0123456789ABCDEF";

	var encoded = "";
	for (var i = 0; i < plaintext.length; i++ ) {
		var ch = plaintext.charAt(i);
	    if (ch == " ") {
		    encoded += "+";				// x-www-urlencoded, rather than %20
		} else if (SAFECHARS.indexOf(ch) != -1) {
		    encoded += ch;
		} else {
		    var charCode = ch.charCodeAt(0);
			if (charCode > 255) {
				encoded += "+";
			} else {
				encoded += "%";
				encoded += HEX.charAt((charCode >> 4) & 0xF);
				encoded += HEX.charAt(charCode & 0xF);
			}
		}
	} // for

	return encoded;
}

DekiWiki.util = {};
DekiWiki.util.Dom = {};
DekiWiki.util.Dom.getDimensions = function(element) {
	var region 	= YAHOO.util.Dom.getRegion(element);
	var width 	= region.right - region.left;
	var height 	= region.bottom - region.top;
	return {"width": width, "height": height};
}
DekiWiki.util.Dom.getText = function(node) {
	if(typeof(node.innerText) != 'undefined') {
		return node.innerText;
	} else {
		return node.textContent;
	}
}
DekiWiki.util.Dom.setInnerHTML = function (el, html) {
    el = YAHOO.util.Dom.get(el);
    if (!el || typeof html !== 'string') {
        return null;
    }

    // Break circular references.
    (function (o) {
        var a = o.attributes, i, l, n, c;
        if (a) {
            l = a.length;
            for (i = 0; i < l; i += 1) {
                n = a[i].name;
                if (typeof o[n] === 'function') {
                    o[n] = null;
                }
            }
        }
        a = o.childNodes;
        if (a) {
            l = a.length;
            for (i = 0; i < l; i += 1) {
                c = o.childNodes[i];

                // Purge child nodes.
                arguments.callee(c);

                // Removes all listeners attached to the element via YUI's addListener.
                YAHOO.util.Event.purgeElement(c);
            }
        }
    })(el);

    // Remove scripts from HTML string, and set innerHTML property
    el.innerHTML = html.replace(/<script[^>]*>((.|[\r\n])*?)<\\?\/script>/ig, "");

    // Return a reference to the first child
    return el.firstChild;
};
DekiWiki.publish = function(c,d) { window.PageBus.publish(c,d); };
DekiWiki.subscribe = function(c,o,f,d) { window.PageBus.subscribe(c,o,f,d) };
DekiWiki.hasValue = function(v, d) { return (typeof v != 'undefined') && (v != null) && (v != '') ? v : d; };

if (typeof Mindtouch == "undefined") {
	var Mindtouch = {};
}
//transition
var Mindtouch = DekiWiki;

var JSON={copyright:"(c)2005 JSON.org",license:"http://www.crockford.com/JSON/license.html",stringify:function(v){
var a=[];
function e(s){
a[a.length]=s;
}
function g(x){
var c,i,l,v;
switch(typeof x){
case "object":
if(x){
if(x instanceof Array){
e("[");
l=a.length;
for(i=0;i<x.length;i+=1){
v=x[i];
if(typeof v!="undefined"&&typeof v!="function"){
if(l<a.length){
e(",");
}
g(v);
}
}
e("]");
return;
}else{
if(typeof x.valueOf=="function"){
e("{");
l=a.length;
for(i in x){
v=x[i];
if(typeof v!="undefined"&&typeof v!="function"&&(!v||typeof v!="object"||typeof v.valueOf=="function")){
if(l<a.length){
e(",");
}
g(i);
e(":");
g(v);
}
}
return e("}");
}
}
}
e("null");
return;
case "number":
e(isFinite(x)?+x:"null");
return;
case "string":
l=x.length;
e("\"");
for(i=0;i<l;i+=1){
c=x.charAt(i);
if(c>=" "){
if(c=="\\"||c=="\""){
e("\\");
}
e(c);
}else{
switch(c){
case "\b":
e("\\b");
break;
case "\f":
e("\\f");
break;
case "\n":
e("\\n");
break;
case "\r":
e("\\r");
break;
case "\t":
e("\\t");
break;
default:
c=c.charCodeAt();
e("\\u00"+Math.floor(c/16).toString(16)+(c%16).toString(16));
}
}
}
e("\"");
return;
case "boolean":
e(String(x));
return;
default:
e("null");
return;
}
}
g(v);
return a.join("");
},parse:function(_6){
return (/^(\s+|[,:{}\[\]]|"(\\["\\\/bfnrtu]|[^\x00-\x1f"\\]+)*"|-?\d+(\.\d*)?([eE][+-]?\d+)?|true|false|null)+$/.test(_6))&&eval("("+_6+")");
}};



/*
 * jQuery 1.2.1 - New Wave Javascript
 *
 * Copyright (c) 2007 John Resig (jquery.com)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * $Date: 2007-09-16 23:42:06 -0400 (Sun, 16 Sep 2007) $
 * $Rev: 3353 $
 */
(function(){if(typeof jQuery!="undefined")var _jQuery=jQuery;var jQuery=window.jQuery=function(selector,context){return this instanceof jQuery?this.init(selector,context):new jQuery(selector,context);};if(typeof $!="undefined")var _$=$;window.$=jQuery;var quickExpr=/^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/;jQuery.fn=jQuery.prototype={init:function(selector,context){selector=selector||document;if(typeof selector=="string"){var m=quickExpr.exec(selector);if(m&&(m[1]||!context)){if(m[1])selector=jQuery.clean([m[1]],context);else{var tmp=document.getElementById(m[3]);if(tmp)if(tmp.id!=m[3])return jQuery().find(selector);else{this[0]=tmp;this.length=1;return this;}else
selector=[];}}else
return new jQuery(context).find(selector);}else if(jQuery.isFunction(selector))return new jQuery(document)[jQuery.fn.ready?"ready":"load"](selector);return this.setArray(selector.constructor==Array&&selector||(selector.jquery||selector.length&&selector!=window&&!selector.nodeType&&selector[0]!=undefined&&selector[0].nodeType)&&jQuery.makeArray(selector)||[selector]);},jquery:"1.2.1",size:function(){return this.length;},length:0,get:function(num){return num==undefined?jQuery.makeArray(this):this[num];},pushStack:function(a){var ret=jQuery(a);ret.prevObject=this;return ret;},setArray:function(a){this.length=0;Array.prototype.push.apply(this,a);return this;},each:function(fn,args){return jQuery.each(this,fn,args);},index:function(obj){var pos=-1;this.each(function(i){if(this==obj)pos=i;});return pos;},attr:function(key,value,type){var obj=key;if(key.constructor==String)if(value==undefined)return this.length&&jQuery[type||"attr"](this[0],key)||undefined;else{obj={};obj[key]=value;}return this.each(function(index){for(var prop in obj)jQuery.attr(type?this.style:this,prop,jQuery.prop(this,obj[prop],type,index,prop));});},css:function(key,value){return this.attr(key,value,"curCSS");},text:function(e){if(typeof e!="object"&&e!=null)return this.empty().append(document.createTextNode(e));var t="";jQuery.each(e||this,function(){jQuery.each(this.childNodes,function(){if(this.nodeType!=8)t+=this.nodeType!=1?this.nodeValue:jQuery.fn.text([this]);});});return t;},wrapAll:function(html){if(this[0])jQuery(html,this[0].ownerDocument).clone().insertBefore(this[0]).map(function(){var elem=this;while(elem.firstChild)elem=elem.firstChild;return elem;}).append(this);return this;},wrapInner:function(html){return this.each(function(){jQuery(this).contents().wrapAll(html);});},wrap:function(html){return this.each(function(){jQuery(this).wrapAll(html);});},append:function(){return this.domManip(arguments,true,1,function(a){this.appendChild(a);});},prepend:function(){return this.domManip(arguments,true,-1,function(a){this.insertBefore(a,this.firstChild);});},before:function(){return this.domManip(arguments,false,1,function(a){this.parentNode.insertBefore(a,this);});},after:function(){return this.domManip(arguments,false,-1,function(a){this.parentNode.insertBefore(a,this.nextSibling);});},end:function(){return this.prevObject||jQuery([]);},find:function(t){var data=jQuery.map(this,function(a){return jQuery.find(t,a);});return this.pushStack(/[^+>] [^+>]/.test(t)||t.indexOf("..")>-1?jQuery.unique(data):data);},clone:function(events){var ret=this.map(function(){return this.outerHTML?jQuery(this.outerHTML)[0]:this.cloneNode(true);});var clone=ret.find("*").andSelf().each(function(){if(this[expando]!=undefined)this[expando]=null;});if(events===true)this.find("*").andSelf().each(function(i){var events=jQuery.data(this,"events");for(var type in events)for(var handler in events[type])jQuery.event.add(clone[i],type,events[type][handler],events[type][handler].data);});return ret;},filter:function(t){return this.pushStack(jQuery.isFunction(t)&&jQuery.grep(this,function(el,index){return t.apply(el,[index]);})||jQuery.multiFilter(t,this));},not:function(t){return this.pushStack(t.constructor==String&&jQuery.multiFilter(t,this,true)||jQuery.grep(this,function(a){return(t.constructor==Array||t.jquery)?jQuery.inArray(a,t)<0:a!=t;}));},add:function(t){return this.pushStack(jQuery.merge(this.get(),t.constructor==String?jQuery(t).get():t.length!=undefined&&(!t.nodeName||jQuery.nodeName(t,"form"))?t:[t]));},is:function(expr){return expr?jQuery.multiFilter(expr,this).length>0:false;},hasClass:function(expr){return this.is("."+expr);},val:function(val){if(val==undefined){if(this.length){var elem=this[0];if(jQuery.nodeName(elem,"select")){var index=elem.selectedIndex,a=[],options=elem.options,one=elem.type=="select-one";if(index<0)return null;for(var i=one?index:0,max=one?index+1:options.length;i<max;i++){var option=options[i];if(option.selected){var val=jQuery.browser.msie&&!option.attributes["value"].specified?option.text:option.value;if(one)return val;a.push(val);}}return a;}else
return this[0].value.replace(/\r/g,"");}}else
return this.each(function(){if(val.constructor==Array&&/radio|checkbox/.test(this.type))this.checked=(jQuery.inArray(this.value,val)>=0||jQuery.inArray(this.name,val)>=0);else if(jQuery.nodeName(this,"select")){var tmp=val.constructor==Array?val:[val];jQuery("option",this).each(function(){this.selected=(jQuery.inArray(this.value,tmp)>=0||jQuery.inArray(this.text,tmp)>=0);});if(!tmp.length)this.selectedIndex=-1;}else
this.value=val;});},html:function(val){return val==undefined?(this.length?this[0].innerHTML:null):this.empty().append(val);},replaceWith:function(val){return this.after(val).remove();},eq:function(i){return this.slice(i,i+1);},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments));},map:function(fn){return this.pushStack(jQuery.map(this,function(elem,i){return fn.call(elem,i,elem);}));},andSelf:function(){return this.add(this.prevObject);},domManip:function(args,table,dir,fn){var clone=this.length>1,a;return this.each(function(){if(!a){a=jQuery.clean(args,this.ownerDocument);if(dir<0)a.reverse();}var obj=this;if(table&&jQuery.nodeName(this,"table")&&jQuery.nodeName(a[0],"tr"))obj=this.getElementsByTagName("tbody")[0]||this.appendChild(document.createElement("tbody"));jQuery.each(a,function(){var elem=clone?this.cloneNode(true):this;if(!evalScript(0,elem))fn.call(obj,elem);});});}};function evalScript(i,elem){var script=jQuery.nodeName(elem,"script");if(script){if(elem.src)jQuery.ajax({url:elem.src,async:false,dataType:"script"});else
jQuery.globalEval(elem.text||elem.textContent||elem.innerHTML||"");if(elem.parentNode)elem.parentNode.removeChild(elem);}else if(elem.nodeType==1)jQuery("script",elem).each(evalScript);return script;}jQuery.extend=jQuery.fn.extend=function(){var target=arguments[0]||{},a=1,al=arguments.length,deep=false;if(target.constructor==Boolean){deep=target;target=arguments[1]||{};}if(al==1){target=this;a=0;}var prop;for(;a<al;a++)if((prop=arguments[a])!=null)for(var i in prop){if(target==prop[i])continue;if(deep&&typeof prop[i]=='object'&&target[i])jQuery.extend(target[i],prop[i]);else if(prop[i]!=undefined)target[i]=prop[i];}return target;};var expando="jQuery"+(new Date()).getTime(),uuid=0,win={};jQuery.extend({noConflict:function(deep){window.$=_$;if(deep)window.jQuery=_jQuery;return jQuery;},isFunction:function(fn){return!!fn&&typeof fn!="string"&&!fn.nodeName&&fn.constructor!=Array&&/function/i.test(fn+"");},isXMLDoc:function(elem){return elem.documentElement&&!elem.body||elem.tagName&&elem.ownerDocument&&!elem.ownerDocument.body;},globalEval:function(data){data=jQuery.trim(data);if(data){if(window.execScript)window.execScript(data);else if(jQuery.browser.safari)window.setTimeout(data,0);else
eval.call(window,data);}},nodeName:function(elem,name){return elem.nodeName&&elem.nodeName.toUpperCase()==name.toUpperCase();},cache:{},data:function(elem,name,data){elem=elem==window?win:elem;var id=elem[expando];if(!id)id=elem[expando]=++uuid;if(name&&!jQuery.cache[id])jQuery.cache[id]={};if(data!=undefined)jQuery.cache[id][name]=data;return name?jQuery.cache[id][name]:id;},removeData:function(elem,name){elem=elem==window?win:elem;var id=elem[expando];if(name){if(jQuery.cache[id]){delete jQuery.cache[id][name];name="";for(name in jQuery.cache[id])break;if(!name)jQuery.removeData(elem);}}else{try{delete elem[expando];}catch(e){if(elem.removeAttribute)elem.removeAttribute(expando);}delete jQuery.cache[id];}},each:function(obj,fn,args){if(args){if(obj.length==undefined)for(var i in obj)fn.apply(obj[i],args);else
for(var i=0,ol=obj.length;i<ol;i++)if(fn.apply(obj[i],args)===false)break;}else{if(obj.length==undefined)for(var i in obj)fn.call(obj[i],i,obj[i]);else
for(var i=0,ol=obj.length,val=obj[0];i<ol&&fn.call(val,i,val)!==false;val=obj[++i]){}}return obj;},prop:function(elem,value,type,index,prop){if(jQuery.isFunction(value))value=value.call(elem,[index]);var exclude=/z-?index|font-?weight|opacity|zoom|line-?height/i;return value&&value.constructor==Number&&type=="curCSS"&&!exclude.test(prop)?value+"px":value;},className:{add:function(elem,c){jQuery.each((c||"").split(/\s+/),function(i,cur){if(!jQuery.className.has(elem.className,cur))elem.className+=(elem.className?" ":"")+cur;});},remove:function(elem,c){elem.className=c!=undefined?jQuery.grep(elem.className.split(/\s+/),function(cur){return!jQuery.className.has(c,cur);}).join(" "):"";},has:function(t,c){return jQuery.inArray(c,(t.className||t).toString().split(/\s+/))>-1;}},swap:function(e,o,f){for(var i in o){e.style["old"+i]=e.style[i];e.style[i]=o[i];}f.apply(e,[]);for(var i in o)e.style[i]=e.style["old"+i];},css:function(e,p){if(p=="height"||p=="width"){var old={},oHeight,oWidth,d=["Top","Bottom","Right","Left"];jQuery.each(d,function(){old["padding"+this]=0;old["border"+this+"Width"]=0;});jQuery.swap(e,old,function(){if(jQuery(e).is(':visible')){oHeight=e.offsetHeight;oWidth=e.offsetWidth;}else{e=jQuery(e.cloneNode(true)).find(":radio").removeAttr("checked").end().css({visibility:"hidden",position:"absolute",display:"block",right:"0",left:"0"}).appendTo(e.parentNode)[0];var parPos=jQuery.css(e.parentNode,"position")||"static";if(parPos=="static")e.parentNode.style.position="relative";oHeight=e.clientHeight;oWidth=e.clientWidth;if(parPos=="static")e.parentNode.style.position="static";e.parentNode.removeChild(e);}});return p=="height"?oHeight:oWidth;}return jQuery.curCSS(e,p);},curCSS:function(elem,prop,force){var ret,stack=[],swap=[];function color(a){if(!jQuery.browser.safari)return false;var ret=document.defaultView.getComputedStyle(a,null);return!ret||ret.getPropertyValue("color")=="";}if(prop=="opacity"&&jQuery.browser.msie){ret=jQuery.attr(elem.style,"opacity");return ret==""?"1":ret;}if(prop.match(/float/i))prop=styleFloat;if(!force&&elem.style[prop])ret=elem.style[prop];else if(document.defaultView&&document.defaultView.getComputedStyle){if(prop.match(/float/i))prop="float";prop=prop.replace(/([A-Z])/g,"-$1").toLowerCase();var cur=document.defaultView.getComputedStyle(elem,null);if(cur&&!color(elem))ret=cur.getPropertyValue(prop);else{for(var a=elem;a&&color(a);a=a.parentNode)stack.unshift(a);for(a=0;a<stack.length;a++)if(color(stack[a])){swap[a]=stack[a].style.display;stack[a].style.display="block";}ret=prop=="display"&&swap[stack.length-1]!=null?"none":document.defaultView.getComputedStyle(elem,null).getPropertyValue(prop)||"";for(a=0;a<swap.length;a++)if(swap[a]!=null)stack[a].style.display=swap[a];}if(prop=="opacity"&&ret=="")ret="1";}else if(elem.currentStyle){var newProp=prop.replace(/\-(\w)/g,function(m,c){return c.toUpperCase();});ret=elem.currentStyle[prop]||elem.currentStyle[newProp];if(!/^\d+(px)?$/i.test(ret)&&/^\d/.test(ret)){var style=elem.style.left;var runtimeStyle=elem.runtimeStyle.left;elem.runtimeStyle.left=elem.currentStyle.left;elem.style.left=ret||0;ret=elem.style.pixelLeft+"px";elem.style.left=style;elem.runtimeStyle.left=runtimeStyle;}}return ret;},clean:function(a,doc){var r=[];doc=doc||document;jQuery.each(a,function(i,arg){if(!arg)return;if(arg.constructor==Number)arg=arg.toString();if(typeof arg=="string"){arg=arg.replace(/(<(\w+)[^>]*?)\/>/g,function(m,all,tag){return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area)$/i)?m:all+"></"+tag+">";});var s=jQuery.trim(arg).toLowerCase(),div=doc.createElement("div"),tb=[];var wrap=!s.indexOf("<opt")&&[1,"<select>","</select>"]||!s.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||s.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!s.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!s.indexOf("<td")||!s.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!s.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||jQuery.browser.msie&&[1,"div<div>","</div>"]||[0,"",""];div.innerHTML=wrap[1]+arg+wrap[2];while(wrap[0]--)div=div.lastChild;if(jQuery.browser.msie){if(!s.indexOf("<table")&&s.indexOf("<tbody")<0)tb=div.firstChild&&div.firstChild.childNodes;else if(wrap[1]=="<table>"&&s.indexOf("<tbody")<0)tb=div.childNodes;for(var n=tb.length-1;n>=0;--n)if(jQuery.nodeName(tb[n],"tbody")&&!tb[n].childNodes.length)tb[n].parentNode.removeChild(tb[n]);if(/^\s/.test(arg))div.insertBefore(doc.createTextNode(arg.match(/^\s*/)[0]),div.firstChild);}arg=jQuery.makeArray(div.childNodes);}if(0===arg.length&&(!jQuery.nodeName(arg,"form")&&!jQuery.nodeName(arg,"select")))return;if(arg[0]==undefined||jQuery.nodeName(arg,"form")||arg.options)r.push(arg);else
r=jQuery.merge(r,arg);});return r;},attr:function(elem,name,value){var fix=jQuery.isXMLDoc(elem)?{}:jQuery.props;if(name=="selected"&&jQuery.browser.safari)elem.parentNode.selectedIndex;if(fix[name]){if(value!=undefined)elem[fix[name]]=value;return elem[fix[name]];}else if(jQuery.browser.msie&&name=="style")return jQuery.attr(elem.style,"cssText",value);else if(value==undefined&&jQuery.browser.msie&&jQuery.nodeName(elem,"form")&&(name=="action"||name=="method"))return elem.getAttributeNode(name).nodeValue;else if(elem.tagName){if(value!=undefined){if(name=="type"&&jQuery.nodeName(elem,"input")&&elem.parentNode)throw"type property can't be changed";elem.setAttribute(name,value);}if(jQuery.browser.msie&&/href|src/.test(name)&&!jQuery.isXMLDoc(elem))return elem.getAttribute(name,2);return elem.getAttribute(name);}else{if(name=="opacity"&&jQuery.browser.msie){if(value!=undefined){elem.zoom=1;elem.filter=(elem.filter||"").replace(/alpha\([^)]*\)/,"")+(parseFloat(value).toString()=="NaN"?"":"alpha(opacity="+value*100+")");}return elem.filter?(parseFloat(elem.filter.match(/opacity=([^)]*)/)[1])/100).toString():"";}name=name.replace(/-([a-z])/ig,function(z,b){return b.toUpperCase();});if(value!=undefined)elem[name]=value;return elem[name];}},trim:function(t){return(t||"").replace(/^\s+|\s+$/g,"");},makeArray:function(a){var r=[];if(typeof a!="array")for(var i=0,al=a.length;i<al;i++)r.push(a[i]);else
r=a.slice(0);return r;},inArray:function(b,a){for(var i=0,al=a.length;i<al;i++)if(a[i]==b)return i;return-1;},merge:function(first,second){if(jQuery.browser.msie){for(var i=0;second[i];i++)if(second[i].nodeType!=8)first.push(second[i]);}else
for(var i=0;second[i];i++)first.push(second[i]);return first;},unique:function(first){var r=[],done={};try{for(var i=0,fl=first.length;i<fl;i++){var id=jQuery.data(first[i]);if(!done[id]){done[id]=true;r.push(first[i]);}}}catch(e){r=first;}return r;},grep:function(elems,fn,inv){if(typeof fn=="string")fn=eval("false||function(a,i){return "+fn+"}");var result=[];for(var i=0,el=elems.length;i<el;i++)if(!inv&&fn(elems[i],i)||inv&&!fn(elems[i],i))result.push(elems[i]);return result;},map:function(elems,fn){if(typeof fn=="string")fn=eval("false||function(a){return "+fn+"}");var result=[];for(var i=0,el=elems.length;i<el;i++){var val=fn(elems[i],i);if(val!==null&&val!=undefined){if(val.constructor!=Array)val=[val];result=result.concat(val);}}return result;}});var userAgent=navigator.userAgent.toLowerCase();jQuery.browser={version:(userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[])[1],safari:/webkit/.test(userAgent),opera:/opera/.test(userAgent),msie:/msie/.test(userAgent)&&!/opera/.test(userAgent),mozilla:/mozilla/.test(userAgent)&&!/(compatible|webkit)/.test(userAgent)};var styleFloat=jQuery.browser.msie?"styleFloat":"cssFloat";jQuery.extend({boxModel:!jQuery.browser.msie||document.compatMode=="CSS1Compat",styleFloat:jQuery.browser.msie?"styleFloat":"cssFloat",props:{"for":"htmlFor","class":"className","float":styleFloat,cssFloat:styleFloat,styleFloat:styleFloat,innerHTML:"innerHTML",className:"className",value:"value",disabled:"disabled",checked:"checked",readonly:"readOnly",selected:"selected",maxlength:"maxLength"}});jQuery.each({parent:"a.parentNode",parents:"jQuery.dir(a,'parentNode')",next:"jQuery.nth(a,2,'nextSibling')",prev:"jQuery.nth(a,2,'previousSibling')",nextAll:"jQuery.dir(a,'nextSibling')",prevAll:"jQuery.dir(a,'previousSibling')",siblings:"jQuery.sibling(a.parentNode.firstChild,a)",children:"jQuery.sibling(a.firstChild)",contents:"jQuery.nodeName(a,'iframe')?a.contentDocument||a.contentWindow.document:jQuery.makeArray(a.childNodes)"},function(i,n){jQuery.fn[i]=function(a){var ret=jQuery.map(this,n);if(a&&typeof a=="string")ret=jQuery.multiFilter(a,ret);return this.pushStack(jQuery.unique(ret));};});jQuery.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(i,n){jQuery.fn[i]=function(){var a=arguments;return this.each(function(){for(var j=0,al=a.length;j<al;j++)jQuery(a[j])[n](this);});};});jQuery.each({removeAttr:function(key){jQuery.attr(this,key,"");this.removeAttribute(key);},addClass:function(c){jQuery.className.add(this,c);},removeClass:function(c){jQuery.className.remove(this,c);},toggleClass:function(c){jQuery.className[jQuery.className.has(this,c)?"remove":"add"](this,c);},remove:function(a){if(!a||jQuery.filter(a,[this]).r.length){jQuery.removeData(this);this.parentNode.removeChild(this);}},empty:function(){jQuery("*",this).each(function(){jQuery.removeData(this);});while(this.firstChild)this.removeChild(this.firstChild);}},function(i,n){jQuery.fn[i]=function(){return this.each(n,arguments);};});jQuery.each(["Height","Width"],function(i,name){var n=name.toLowerCase();jQuery.fn[n]=function(h){return this[0]==window?jQuery.browser.safari&&self["inner"+name]||jQuery.boxModel&&Math.max(document.documentElement["client"+name],document.body["client"+name])||document.body["client"+name]:this[0]==document?Math.max(document.body["scroll"+name],document.body["offset"+name]):h==undefined?(this.length?jQuery.css(this[0],n):null):this.css(n,h.constructor==String?h:h+"px");};});var chars=jQuery.browser.safari&&parseInt(jQuery.browser.version)<417?"(?:[\\w*_-]|\\\\.)":"(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",quickChild=new RegExp("^>\\s*("+chars+"+)"),quickID=new RegExp("^("+chars+"+)(#)("+chars+"+)"),quickClass=new RegExp("^([#.]?)("+chars+"*)");jQuery.extend({expr:{"":"m[2]=='*'||jQuery.nodeName(a,m[2])","#":"a.getAttribute('id')==m[2]",":":{lt:"i<m[3]-0",gt:"i>m[3]-0",nth:"m[3]-0==i",eq:"m[3]-0==i",first:"i==0",last:"i==r.length-1",even:"i%2==0",odd:"i%2","first-child":"a.parentNode.getElementsByTagName('*')[0]==a","last-child":"jQuery.nth(a.parentNode.lastChild,1,'previousSibling')==a","only-child":"!jQuery.nth(a.parentNode.lastChild,2,'previousSibling')",parent:"a.firstChild",empty:"!a.firstChild",contains:"(a.textContent||a.innerText||jQuery(a).text()||'').indexOf(m[3])>=0",visible:'"hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden"',hidden:'"hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden"',enabled:"!a.disabled",disabled:"a.disabled",checked:"a.checked",selected:"a.selected||jQuery.attr(a,'selected')",text:"'text'==a.type",radio:"'radio'==a.type",checkbox:"'checkbox'==a.type",file:"'file'==a.type",password:"'password'==a.type",submit:"'submit'==a.type",image:"'image'==a.type",reset:"'reset'==a.type",button:'"button"==a.type||jQuery.nodeName(a,"button")',input:"/input|select|textarea|button/i.test(a.nodeName)",has:"jQuery.find(m[3],a).length",header:"/h\\d/i.test(a.nodeName)",animated:"jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length"}},parse:[/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,new RegExp("^([:.#]*)("+chars+"+)")],multiFilter:function(expr,elems,not){var old,cur=[];while(expr&&expr!=old){old=expr;var f=jQuery.filter(expr,elems,not);expr=f.t.replace(/^\s*,\s*/,"");cur=not?elems=f.r:jQuery.merge(cur,f.r);}return cur;},find:function(t,context){if(typeof t!="string")return[t];if(context&&!context.nodeType)context=null;context=context||document;var ret=[context],done=[],last;while(t&&last!=t){var r=[];last=t;t=jQuery.trim(t);var foundToken=false;var re=quickChild;var m=re.exec(t);if(m){var nodeName=m[1].toUpperCase();for(var i=0;ret[i];i++)for(var c=ret[i].firstChild;c;c=c.nextSibling)if(c.nodeType==1&&(nodeName=="*"||c.nodeName.toUpperCase()==nodeName.toUpperCase()))r.push(c);ret=r;t=t.replace(re,"");if(t.indexOf(" ")==0)continue;foundToken=true;}else{re=/^([>+~])\s*(\w*)/i;if((m=re.exec(t))!=null){r=[];var nodeName=m[2],merge={};m=m[1];for(var j=0,rl=ret.length;j<rl;j++){var n=m=="~"||m=="+"?ret[j].nextSibling:ret[j].firstChild;for(;n;n=n.nextSibling)if(n.nodeType==1){var id=jQuery.data(n);if(m=="~"&&merge[id])break;if(!nodeName||n.nodeName.toUpperCase()==nodeName.toUpperCase()){if(m=="~")merge[id]=true;r.push(n);}if(m=="+")break;}}ret=r;t=jQuery.trim(t.replace(re,""));foundToken=true;}}if(t&&!foundToken){if(!t.indexOf(",")){if(context==ret[0])ret.shift();done=jQuery.merge(done,ret);r=ret=[context];t=" "+t.substr(1,t.length);}else{var re2=quickID;var m=re2.exec(t);if(m){m=[0,m[2],m[3],m[1]];}else{re2=quickClass;m=re2.exec(t);}m[2]=m[2].replace(/\\/g,"");var elem=ret[ret.length-1];if(m[1]=="#"&&elem&&elem.getElementById&&!jQuery.isXMLDoc(elem)){var oid=elem.getElementById(m[2]);if((jQuery.browser.msie||jQuery.browser.opera)&&oid&&typeof oid.id=="string"&&oid.id!=m[2])oid=jQuery('[@id="'+m[2]+'"]',elem)[0];ret=r=oid&&(!m[3]||jQuery.nodeName(oid,m[3]))?[oid]:[];}else{for(var i=0;ret[i];i++){var tag=m[1]=="#"&&m[3]?m[3]:m[1]!=""||m[0]==""?"*":m[2];if(tag=="*"&&ret[i].nodeName.toLowerCase()=="object")tag="param";r=jQuery.merge(r,ret[i].getElementsByTagName(tag));}if(m[1]==".")r=jQuery.classFilter(r,m[2]);if(m[1]=="#"){var tmp=[];for(var i=0;r[i];i++)if(r[i].getAttribute("id")==m[2]){tmp=[r[i]];break;}r=tmp;}ret=r;}t=t.replace(re2,"");}}if(t){var val=jQuery.filter(t,r);ret=r=val.r;t=jQuery.trim(val.t);}}if(t)ret=[];if(ret&&context==ret[0])ret.shift();done=jQuery.merge(done,ret);return done;},classFilter:function(r,m,not){m=" "+m+" ";var tmp=[];for(var i=0;r[i];i++){var pass=(" "+r[i].className+" ").indexOf(m)>=0;if(!not&&pass||not&&!pass)tmp.push(r[i]);}return tmp;},filter:function(t,r,not){var last;while(t&&t!=last){last=t;var p=jQuery.parse,m;for(var i=0;p[i];i++){m=p[i].exec(t);if(m){t=t.substring(m[0].length);m[2]=m[2].replace(/\\/g,"");break;}}if(!m)break;if(m[1]==":"&&m[2]=="not")r=jQuery.filter(m[3],r,true).r;else if(m[1]==".")r=jQuery.classFilter(r,m[2],not);else if(m[1]=="["){var tmp=[],type=m[3];for(var i=0,rl=r.length;i<rl;i++){var a=r[i],z=a[jQuery.props[m[2]]||m[2]];if(z==null||/href|src|selected/.test(m[2]))z=jQuery.attr(a,m[2])||'';if((type==""&&!!z||type=="="&&z==m[5]||type=="!="&&z!=m[5]||type=="^="&&z&&!z.indexOf(m[5])||type=="$="&&z.substr(z.length-m[5].length)==m[5]||(type=="*="||type=="~=")&&z.indexOf(m[5])>=0)^not)tmp.push(a);}r=tmp;}else if(m[1]==":"&&m[2]=="nth-child"){var merge={},tmp=[],test=/(\d*)n\+?(\d*)/.exec(m[3]=="even"&&"2n"||m[3]=="odd"&&"2n+1"||!/\D/.test(m[3])&&"n+"+m[3]||m[3]),first=(test[1]||1)-0,last=test[2]-0;for(var i=0,rl=r.length;i<rl;i++){var node=r[i],parentNode=node.parentNode,id=jQuery.data(parentNode);if(!merge[id]){var c=1;for(var n=parentNode.firstChild;n;n=n.nextSibling)if(n.nodeType==1)n.nodeIndex=c++;merge[id]=true;}var add=false;if(first==1){if(last==0||node.nodeIndex==last)add=true;}else if((node.nodeIndex+last)%first==0)add=true;if(add^not)tmp.push(node);}r=tmp;}else{var f=jQuery.expr[m[1]];if(typeof f!="string")f=jQuery.expr[m[1]][m[2]];f=eval("false||function(a,i){return "+f+"}");r=jQuery.grep(r,f,not);}}return{r:r,t:t};},dir:function(elem,dir){var matched=[];var cur=elem[dir];while(cur&&cur!=document){if(cur.nodeType==1)matched.push(cur);cur=cur[dir];}return matched;},nth:function(cur,result,dir,elem){result=result||1;var num=0;for(;cur;cur=cur[dir])if(cur.nodeType==1&&++num==result)break;return cur;},sibling:function(n,elem){var r=[];for(;n;n=n.nextSibling){if(n.nodeType==1&&(!elem||n!=elem))r.push(n);}return r;}});jQuery.event={add:function(element,type,handler,data){if(jQuery.browser.msie&&element.setInterval!=undefined)element=window;if(!handler.guid)handler.guid=this.guid++;if(data!=undefined){var fn=handler;handler=function(){return fn.apply(this,arguments);};handler.data=data;handler.guid=fn.guid;}var parts=type.split(".");type=parts[0];handler.type=parts[1];var events=jQuery.data(element,"events")||jQuery.data(element,"events",{});var handle=jQuery.data(element,"handle",function(){var val;if(typeof jQuery=="undefined"||jQuery.event.triggered)return val;val=jQuery.event.handle.apply(element,arguments);return val;});var handlers=events[type];if(!handlers){handlers=events[type]={};if(element.addEventListener)element.addEventListener(type,handle,false);else
element.attachEvent("on"+type,handle);}handlers[handler.guid]=handler;this.global[type]=true;},guid:1,global:{},remove:function(element,type,handler){var events=jQuery.data(element,"events"),ret,index;if(typeof type=="string"){var parts=type.split(".");type=parts[0];}if(events){if(type&&type.type){handler=type.handler;type=type.type;}if(!type){for(type in events)this.remove(element,type);}else if(events[type]){if(handler)delete events[type][handler.guid];else
for(handler in events[type])if(!parts[1]||events[type][handler].type==parts[1])delete events[type][handler];for(ret in events[type])break;if(!ret){if(element.removeEventListener)element.removeEventListener(type,jQuery.data(element,"handle"),false);else
element.detachEvent("on"+type,jQuery.data(element,"handle"));ret=null;delete events[type];}}for(ret in events)break;if(!ret){jQuery.removeData(element,"events");jQuery.removeData(element,"handle");}}},trigger:function(type,data,element,donative,extra){data=jQuery.makeArray(data||[]);if(!element){if(this.global[type])jQuery("*").add([window,document]).trigger(type,data);}else{var val,ret,fn=jQuery.isFunction(element[type]||null),evt=!data[0]||!data[0].preventDefault;if(evt)data.unshift(this.fix({type:type,target:element}));data[0].type=type;if(jQuery.isFunction(jQuery.data(element,"handle")))val=jQuery.data(element,"handle").apply(element,data);if(!fn&&element["on"+type]&&element["on"+type].apply(element,data)===false)val=false;if(evt)data.shift();if(extra&&extra.apply(element,data)===false)val=false;if(fn&&donative!==false&&val!==false&&!(jQuery.nodeName(element,'a')&&type=="click")){this.triggered=true;element[type]();}this.triggered=false;}return val;},handle:function(event){var val;event=jQuery.event.fix(event||window.event||{});var parts=event.type.split(".");event.type=parts[0];var c=jQuery.data(this,"events")&&jQuery.data(this,"events")[event.type],args=Array.prototype.slice.call(arguments,1);args.unshift(event);for(var j in c){args[0].handler=c[j];args[0].data=c[j].data;if(!parts[1]||c[j].type==parts[1]){var tmp=c[j].apply(this,args);if(val!==false)val=tmp;if(tmp===false){event.preventDefault();event.stopPropagation();}}}if(jQuery.browser.msie)event.target=event.preventDefault=event.stopPropagation=event.handler=event.data=null;return val;},fix:function(event){var originalEvent=event;event=jQuery.extend({},originalEvent);event.preventDefault=function(){if(originalEvent.preventDefault)originalEvent.preventDefault();originalEvent.returnValue=false;};event.stopPropagation=function(){if(originalEvent.stopPropagation)originalEvent.stopPropagation();originalEvent.cancelBubble=true;};if(!event.target&&event.srcElement)event.target=event.srcElement;if(jQuery.browser.safari&&event.target.nodeType==3)event.target=originalEvent.target.parentNode;if(!event.relatedTarget&&event.fromElement)event.relatedTarget=event.fromElement==event.target?event.toElement:event.fromElement;if(event.pageX==null&&event.clientX!=null){var e=document.documentElement,b=document.body;event.pageX=event.clientX+(e&&e.scrollLeft||b.scrollLeft||0);event.pageY=event.clientY+(e&&e.scrollTop||b.scrollTop||0);}if(!event.which&&(event.charCode||event.keyCode))event.which=event.charCode||event.keyCode;if(!event.metaKey&&event.ctrlKey)event.metaKey=event.ctrlKey;if(!event.which&&event.button)event.which=(event.button&1?1:(event.button&2?3:(event.button&4?2:0)));return event;}};jQuery.fn.extend({bind:function(type,data,fn){return type=="unload"?this.one(type,data,fn):this.each(function(){jQuery.event.add(this,type,fn||data,fn&&data);});},one:function(type,data,fn){return this.each(function(){jQuery.event.add(this,type,function(event){jQuery(this).unbind(event);return(fn||data).apply(this,arguments);},fn&&data);});},unbind:function(type,fn){return this.each(function(){jQuery.event.remove(this,type,fn);});},trigger:function(type,data,fn){return this.each(function(){jQuery.event.trigger(type,data,this,true,fn);});},triggerHandler:function(type,data,fn){if(this[0])return jQuery.event.trigger(type,data,this[0],false,fn);},toggle:function(){var a=arguments;return this.click(function(e){this.lastToggle=0==this.lastToggle?1:0;e.preventDefault();return a[this.lastToggle].apply(this,[e])||false;});},hover:function(f,g){function handleHover(e){var p=e.relatedTarget;while(p&&p!=this)try{p=p.parentNode;}catch(e){p=this;};if(p==this)return false;return(e.type=="mouseover"?f:g).apply(this,[e]);}return this.mouseover(handleHover).mouseout(handleHover);},ready:function(f){bindReady();if(jQuery.isReady)f.apply(document,[jQuery]);else
jQuery.readyList.push(function(){return f.apply(this,[jQuery]);});return this;}});jQuery.extend({isReady:false,readyList:[],ready:function(){if(!jQuery.isReady){jQuery.isReady=true;if(jQuery.readyList){jQuery.each(jQuery.readyList,function(){this.apply(document);});jQuery.readyList=null;}if(jQuery.browser.mozilla||jQuery.browser.opera)document.removeEventListener("DOMContentLoaded",jQuery.ready,false);if(!window.frames.length)jQuery(window).load(function(){jQuery("#__ie_init").remove();});}}});jQuery.each(("blur,focus,load,resize,scroll,unload,click,dblclick,"+"mousedown,mouseup,mousemove,mouseover,mouseout,change,select,"+"submit,keydown,keypress,keyup,error").split(","),function(i,o){jQuery.fn[o]=function(f){return f?this.bind(o,f):this.trigger(o);};});var readyBound=false;function bindReady(){if(readyBound)return;readyBound=true;if(jQuery.browser.mozilla||jQuery.browser.opera)document.addEventListener("DOMContentLoaded",jQuery.ready,false);else if(jQuery.browser.msie){document.write("<scr"+"ipt id=__ie_init defer=true "+"src=//:><\/script>");var script=document.getElementById("__ie_init");if(script)script.onreadystatechange=function(){if(this.readyState!="complete")return;jQuery.ready();};script=null;}else if(jQuery.browser.safari)jQuery.safariTimer=setInterval(function(){if(document.readyState=="loaded"||document.readyState=="complete"){clearInterval(jQuery.safariTimer);jQuery.safariTimer=null;jQuery.ready();}},10);jQuery.event.add(window,"load",jQuery.ready);}jQuery.fn.extend({load:function(url,params,callback){if(jQuery.isFunction(url))return this.bind("load",url);var off=url.indexOf(" ");if(off>=0){var selector=url.slice(off,url.length);url=url.slice(0,off);}callback=callback||function(){};var type="GET";if(params)if(jQuery.isFunction(params)){callback=params;params=null;}else{params=jQuery.param(params);type="POST";}var self=this;jQuery.ajax({url:url,type:type,data:params,complete:function(res,status){if(status=="success"||status=="notmodified")self.html(selector?jQuery("<div/>").append(res.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(selector):res.responseText);setTimeout(function(){self.each(callback,[res.responseText,status,res]);},13);}});return this;},serialize:function(){return jQuery.param(this.serializeArray());},serializeArray:function(){return this.map(function(){return jQuery.nodeName(this,"form")?jQuery.makeArray(this.elements):this;}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password/i.test(this.type));}).map(function(i,elem){var val=jQuery(this).val();return val==null?null:val.constructor==Array?jQuery.map(val,function(val,i){return{name:elem.name,value:val};}):{name:elem.name,value:val};}).get();}});jQuery.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(i,o){jQuery.fn[o]=function(f){return this.bind(o,f);};});var jsc=(new Date).getTime();jQuery.extend({get:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data=null;}return jQuery.ajax({type:"GET",url:url,data:data,success:callback,dataType:type});},getScript:function(url,callback){return jQuery.get(url,null,callback,"script");},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json");},post:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data={};}return jQuery.ajax({type:"POST",url:url,data:data,success:callback,dataType:type});},ajaxSetup:function(settings){jQuery.extend(jQuery.ajaxSettings,settings);},ajaxSettings:{global:true,type:"GET",timeout:0,contentType:"application/x-www-form-urlencoded",processData:true,async:true,data:null},lastModified:{},ajax:function(s){var jsonp,jsre=/=(\?|%3F)/g,status,data;s=jQuery.extend(true,s,jQuery.extend(true,{},jQuery.ajaxSettings,s));if(s.data&&s.processData&&typeof s.data!="string")s.data=jQuery.param(s.data);if(s.dataType=="jsonp"){if(s.type.toLowerCase()=="get"){if(!s.url.match(jsre))s.url+=(s.url.match(/\?/)?"&":"?")+(s.jsonp||"callback")+"=?";}else if(!s.data||!s.data.match(jsre))s.data=(s.data?s.data+"&":"")+(s.jsonp||"callback")+"=?";s.dataType="json";}if(s.dataType=="json"&&(s.data&&s.data.match(jsre)||s.url.match(jsre))){jsonp="jsonp"+jsc++;if(s.data)s.data=s.data.replace(jsre,"="+jsonp);s.url=s.url.replace(jsre,"="+jsonp);s.dataType="script";window[jsonp]=function(tmp){data=tmp;success();complete();window[jsonp]=undefined;try{delete window[jsonp];}catch(e){}};}if(s.dataType=="script"&&s.cache==null)s.cache=false;if(s.cache===false&&s.type.toLowerCase()=="get")s.url+=(s.url.match(/\?/)?"&":"?")+"_="+(new Date()).getTime();if(s.data&&s.type.toLowerCase()=="get"){s.url+=(s.url.match(/\?/)?"&":"?")+s.data;s.data=null;}if(s.global&&!jQuery.active++)jQuery.event.trigger("ajaxStart");if(!s.url.indexOf("http")&&s.dataType=="script"){var head=document.getElementsByTagName("head")[0];var script=document.createElement("script");script.src=s.url;if(!jsonp&&(s.success||s.complete)){var done=false;script.onload=script.onreadystatechange=function(){if(!done&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){done=true;success();complete();head.removeChild(script);}};}head.appendChild(script);return;}var requestDone=false;var xml=window.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest();xml.open(s.type,s.url,s.async);if(s.data)xml.setRequestHeader("Content-Type",s.contentType);if(s.ifModified)xml.setRequestHeader("If-Modified-Since",jQuery.lastModified[s.url]||"Thu, 01 Jan 1970 00:00:00 GMT");xml.setRequestHeader("X-Requested-With","XMLHttpRequest");if(s.beforeSend)s.beforeSend(xml);if(s.global)jQuery.event.trigger("ajaxSend",[xml,s]);var onreadystatechange=function(isTimeout){if(!requestDone&&xml&&(xml.readyState==4||isTimeout=="timeout")){requestDone=true;if(ival){clearInterval(ival);ival=null;}status=isTimeout=="timeout"&&"timeout"||!jQuery.httpSuccess(xml)&&"error"||s.ifModified&&jQuery.httpNotModified(xml,s.url)&&"notmodified"||"success";if(status=="success"){try{data=jQuery.httpData(xml,s.dataType);}catch(e){status="parsererror";}}if(status=="success"){var modRes;try{modRes=xml.getResponseHeader("Last-Modified");}catch(e){}if(s.ifModified&&modRes)jQuery.lastModified[s.url]=modRes;if(!jsonp)success();}else
jQuery.handleError(s,xml,status);complete();if(s.async)xml=null;}};if(s.async){var ival=setInterval(onreadystatechange,13);if(s.timeout>0)setTimeout(function(){if(xml){xml.abort();if(!requestDone)onreadystatechange("timeout");}},s.timeout);}try{xml.send(s.data);}catch(e){jQuery.handleError(s,xml,null,e);}if(!s.async)onreadystatechange();return xml;function success(){if(s.success)s.success(data,status);if(s.global)jQuery.event.trigger("ajaxSuccess",[xml,s]);}function complete(){if(s.complete)s.complete(xml,status);if(s.global)jQuery.event.trigger("ajaxComplete",[xml,s]);if(s.global&&!--jQuery.active)jQuery.event.trigger("ajaxStop");}},handleError:function(s,xml,status,e){if(s.error)s.error(xml,status,e);if(s.global)jQuery.event.trigger("ajaxError",[xml,s,e]);},active:0,httpSuccess:function(r){try{return!r.status&&location.protocol=="file:"||(r.status>=200&&r.status<300)||r.status==304||jQuery.browser.safari&&r.status==undefined;}catch(e){}return false;},httpNotModified:function(xml,url){try{var xmlRes=xml.getResponseHeader("Last-Modified");return xml.status==304||xmlRes==jQuery.lastModified[url]||jQuery.browser.safari&&xml.status==undefined;}catch(e){}return false;},httpData:function(r,type){var ct=r.getResponseHeader("content-type");var xml=type=="xml"||!type&&ct&&ct.indexOf("xml")>=0;var data=xml?r.responseXML:r.responseText;if(xml&&data.documentElement.tagName=="parsererror")throw"parsererror";if(type=="script")jQuery.globalEval(data);if(type=="json")data=eval("("+data+")");return data;},param:function(a){var s=[];if(a.constructor==Array||a.jquery)jQuery.each(a,function(){s.push(encodeURIComponent(this.name)+"="+encodeURIComponent(this.value));});else
for(var j in a)if(a[j]&&a[j].constructor==Array)jQuery.each(a[j],function(){s.push(encodeURIComponent(j)+"="+encodeURIComponent(this));});else
s.push(encodeURIComponent(j)+"="+encodeURIComponent(a[j]));return s.join("&").replace(/%20/g,"+");}});jQuery.fn.extend({show:function(speed,callback){return speed?this.animate({height:"show",width:"show",opacity:"show"},speed,callback):this.filter(":hidden").each(function(){this.style.display=this.oldblock?this.oldblock:"";if(jQuery.css(this,"display")=="none")this.style.display="block";}).end();},hide:function(speed,callback){return speed?this.animate({height:"hide",width:"hide",opacity:"hide"},speed,callback):this.filter(":visible").each(function(){this.oldblock=this.oldblock||jQuery.css(this,"display");if(this.oldblock=="none")this.oldblock="block";this.style.display="none";}).end();},_toggle:jQuery.fn.toggle,toggle:function(fn,fn2){return jQuery.isFunction(fn)&&jQuery.isFunction(fn2)?this._toggle(fn,fn2):fn?this.animate({height:"toggle",width:"toggle",opacity:"toggle"},fn,fn2):this.each(function(){jQuery(this)[jQuery(this).is(":hidden")?"show":"hide"]();});},slideDown:function(speed,callback){return this.animate({height:"show"},speed,callback);},slideUp:function(speed,callback){return this.animate({height:"hide"},speed,callback);},slideToggle:function(speed,callback){return this.animate({height:"toggle"},speed,callback);},fadeIn:function(speed,callback){return this.animate({opacity:"show"},speed,callback);},fadeOut:function(speed,callback){return this.animate({opacity:"hide"},speed,callback);},fadeTo:function(speed,to,callback){return this.animate({opacity:to},speed,callback);},animate:function(prop,speed,easing,callback){var opt=jQuery.speed(speed,easing,callback);return this[opt.queue===false?"each":"queue"](function(){opt=jQuery.extend({},opt);var hidden=jQuery(this).is(":hidden"),self=this;for(var p in prop){if(prop[p]=="hide"&&hidden||prop[p]=="show"&&!hidden)return jQuery.isFunction(opt.complete)&&opt.complete.apply(this);if(p=="height"||p=="width"){opt.display=jQuery.css(this,"display");opt.overflow=this.style.overflow;}}if(opt.overflow!=null)this.style.overflow="hidden";opt.curAnim=jQuery.extend({},prop);jQuery.each(prop,function(name,val){var e=new jQuery.fx(self,opt,name);if(/toggle|show|hide/.test(val))e[val=="toggle"?hidden?"show":"hide":val](prop);else{var parts=val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),start=e.cur(true)||0;if(parts){var end=parseFloat(parts[2]),unit=parts[3]||"px";if(unit!="px"){self.style[name]=(end||1)+unit;start=((end||1)/e.cur(true))*start;self.style[name]=start+unit;}if(parts[1])end=((parts[1]=="-="?-1:1)*end)+start;e.custom(start,end,unit);}else
e.custom(start,val,"");}});return true;});},queue:function(type,fn){if(jQuery.isFunction(type)){fn=type;type="fx";}if(!type||(typeof type=="string"&&!fn))return queue(this[0],type);return this.each(function(){if(fn.constructor==Array)queue(this,type,fn);else{queue(this,type).push(fn);if(queue(this,type).length==1)fn.apply(this);}});},stop:function(){var timers=jQuery.timers;return this.each(function(){for(var i=0;i<timers.length;i++)if(timers[i].elem==this)timers.splice(i--,1);}).dequeue();}});var queue=function(elem,type,array){if(!elem)return;var q=jQuery.data(elem,type+"queue");if(!q||array)q=jQuery.data(elem,type+"queue",array?jQuery.makeArray(array):[]);return q;};jQuery.fn.dequeue=function(type){type=type||"fx";return this.each(function(){var q=queue(this,type);q.shift();if(q.length)q[0].apply(this);});};jQuery.extend({speed:function(speed,easing,fn){var opt=speed&&speed.constructor==Object?speed:{complete:fn||!fn&&easing||jQuery.isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&easing.constructor!=Function&&easing};opt.duration=(opt.duration&&opt.duration.constructor==Number?opt.duration:{slow:600,fast:200}[opt.duration])||400;opt.old=opt.complete;opt.complete=function(){jQuery(this).dequeue();if(jQuery.isFunction(opt.old))opt.old.apply(this);};return opt;},easing:{linear:function(p,n,firstNum,diff){return firstNum+diff*p;},swing:function(p,n,firstNum,diff){return((-Math.cos(p*Math.PI)/2)+0.5)*diff+firstNum;}},timers:[],fx:function(elem,options,prop){this.options=options;this.elem=elem;this.prop=prop;if(!options.orig)options.orig={};}});jQuery.fx.prototype={update:function(){if(this.options.step)this.options.step.apply(this.elem,[this.now,this]);(jQuery.fx.step[this.prop]||jQuery.fx.step._default)(this);if(this.prop=="height"||this.prop=="width")this.elem.style.display="block";},cur:function(force){if(this.elem[this.prop]!=null&&this.elem.style[this.prop]==null)return this.elem[this.prop];var r=parseFloat(jQuery.curCSS(this.elem,this.prop,force));return r&&r>-10000?r:parseFloat(jQuery.css(this.elem,this.prop))||0;},custom:function(from,to,unit){this.startTime=(new Date()).getTime();this.start=from;this.end=to;this.unit=unit||this.unit||"px";this.now=this.start;this.pos=this.state=0;this.update();var self=this;function t(){return self.step();}t.elem=this.elem;jQuery.timers.push(t);if(jQuery.timers.length==1){var timer=setInterval(function(){var timers=jQuery.timers;for(var i=0;i<timers.length;i++)if(!timers[i]())timers.splice(i--,1);if(!timers.length)clearInterval(timer);},13);}},show:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.show=true;this.custom(0,this.cur());if(this.prop=="width"||this.prop=="height")this.elem.style[this.prop]="1px";jQuery(this.elem).show();},hide:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0);},step:function(){var t=(new Date()).getTime();if(t>this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var done=true;for(var i in this.options.curAnim)if(this.options.curAnim[i]!==true)done=false;if(done){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(jQuery.css(this.elem,"display")=="none")this.elem.style.display="block";}if(this.options.hide)this.elem.style.display="none";if(this.options.hide||this.options.show)for(var p in this.options.curAnim)jQuery.attr(this.elem.style,p,this.options.orig[p]);}if(done&&jQuery.isFunction(this.options.complete))this.options.complete.apply(this.elem);return false;}else{var n=t-this.startTime;this.state=n/this.options.duration;this.pos=jQuery.easing[this.options.easing||(jQuery.easing.swing?"swing":"linear")](this.state,n,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update();}return true;}};jQuery.fx.step={scrollLeft:function(fx){fx.elem.scrollLeft=fx.now;},scrollTop:function(fx){fx.elem.scrollTop=fx.now;},opacity:function(fx){jQuery.attr(fx.elem.style,"opacity",fx.now);},_default:function(fx){fx.elem.style[fx.prop]=fx.now+fx.unit;}};jQuery.fn.offset=function(){var left=0,top=0,elem=this[0],results;if(elem)with(jQuery.browser){var absolute=jQuery.css(elem,"position")=="absolute",parent=elem.parentNode,offsetParent=elem.offsetParent,doc=elem.ownerDocument,safari2=safari&&parseInt(version)<522;if(elem.getBoundingClientRect){box=elem.getBoundingClientRect();add(box.left+Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),box.top+Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));if(msie){var border=jQuery("html").css("borderWidth");border=(border=="medium"||jQuery.boxModel&&parseInt(version)>=7)&&2||border;add(-border,-border);}}else{add(elem.offsetLeft,elem.offsetTop);while(offsetParent){add(offsetParent.offsetLeft,offsetParent.offsetTop);if(mozilla&&/^t[d|h]$/i.test(parent.tagName)||!safari2)border(offsetParent);if(safari2&&!absolute&&jQuery.css(offsetParent,"position")=="absolute")absolute=true;offsetParent=offsetParent.offsetParent;}while(parent.tagName&&!/^body|html$/i.test(parent.tagName)){if(!/^inline|table-row.*$/i.test(jQuery.css(parent,"display")))add(-parent.scrollLeft,-parent.scrollTop);if(mozilla&&jQuery.css(parent,"overflow")!="visible")border(parent);parent=parent.parentNode;}if(safari2&&absolute)add(-doc.body.offsetLeft,-doc.body.offsetTop);}results={top:top,left:left};}return results;function border(elem){add(jQuery.css(elem,"borderLeftWidth"),jQuery.css(elem,"borderTopWidth"));}function add(l,t){left+=parseInt(l)||0;top+=parseInt(t)||0;}};})();

//initialize jQuery into the MindTouch namespace
if(typeof DekiWiki == "undefined") {
	var DekiWiki = {};
}
DekiWiki.$ = jQuery.noConflict();

/**
 * A class to parse color values
 * @author Stoyan Stefanov <sstoo@gmail.com>
 * @link   http://www.phpied.com/rgb-color-parser-in-javascript/
 * @license Use it if you like it
 */
function RGBColor(color_string)
{
    this.ok = false;

    // strip any leading #
    if (color_string.charAt(0) == '#') { // remove # if any
        color_string = color_string.substr(1,6);
    }

    color_string = color_string.replace(/ /g,'');
    color_string = color_string.toLowerCase();

    // before getting into regexps, try simple matches
    // and overwrite the input
    var simple_colors = {
        aliceblue: 'f0f8ff',
        antiquewhite: 'faebd7',
        aqua: '00ffff',
        aquamarine: '7fffd4',
        azure: 'f0ffff',
        beige: 'f5f5dc',
        bisque: 'ffe4c4',
        black: '000000',
        blanchedalmond: 'ffebcd',
        blue: '0000ff',
        blueviolet: '8a2be2',
        brown: 'a52a2a',
        burlywood: 'deb887',
        cadetblue: '5f9ea0',
        chartreuse: '7fff00',
        chocolate: 'd2691e',
        coral: 'ff7f50',
        cornflowerblue: '6495ed',
        cornsilk: 'fff8dc',
        crimson: 'dc143c',
        cyan: '00ffff',
        darkblue: '00008b',
        darkcyan: '008b8b',
        darkgoldenrod: 'b8860b',
        darkgray: 'a9a9a9',
        darkgreen: '006400',
        darkkhaki: 'bdb76b',
        darkmagenta: '8b008b',
        darkolivegreen: '556b2f',
        darkorange: 'ff8c00',
        darkorchid: '9932cc',
        darkred: '8b0000',
        darksalmon: 'e9967a',
        darkseagreen: '8fbc8f',
        darkslateblue: '483d8b',
        darkslategray: '2f4f4f',
        darkturquoise: '00ced1',
        darkviolet: '9400d3',
        deeppink: 'ff1493',
        deepskyblue: '00bfff',
        dimgray: '696969',
        dodgerblue: '1e90ff',
        feldspar: 'd19275',
        firebrick: 'b22222',
        floralwhite: 'fffaf0',
        forestgreen: '228b22',
        fuchsia: 'ff00ff',
        gainsboro: 'dcdcdc',
        ghostwhite: 'f8f8ff',
        gold: 'ffd700',
        goldenrod: 'daa520',
        gray: '808080',
        green: '008000',
        greenyellow: 'adff2f',
        honeydew: 'f0fff0',
        hotpink: 'ff69b4',
        indianred : 'cd5c5c',
        indigo : '4b0082',
        ivory: 'fffff0',
        khaki: 'f0e68c',
        lavender: 'e6e6fa',
        lavenderblush: 'fff0f5',
        lawngreen: '7cfc00',
        lemonchiffon: 'fffacd',
        lightblue: 'add8e6',
        lightcoral: 'f08080',
        lightcyan: 'e0ffff',
        lightgoldenrodyellow: 'fafad2',
        lightgrey: 'd3d3d3',
        lightgreen: '90ee90',
        lightpink: 'ffb6c1',
        lightsalmon: 'ffa07a',
        lightseagreen: '20b2aa',
        lightskyblue: '87cefa',
        lightslateblue: '8470ff',
        lightslategray: '778899',
        lightsteelblue: 'b0c4de',
        lightyellow: 'ffffe0',
        lime: '00ff00',
        limegreen: '32cd32',
        linen: 'faf0e6',
        magenta: 'ff00ff',
        maroon: '800000',
        mediumaquamarine: '66cdaa',
        mediumblue: '0000cd',
        mediumorchid: 'ba55d3',
        mediumpurple: '9370d8',
        mediumseagreen: '3cb371',
        mediumslateblue: '7b68ee',
        mediumspringgreen: '00fa9a',
        mediumturquoise: '48d1cc',
        mediumvioletred: 'c71585',
        midnightblue: '191970',
        mintcream: 'f5fffa',
        mistyrose: 'ffe4e1',
        moccasin: 'ffe4b5',
        navajowhite: 'ffdead',
        navy: '000080',
        oldlace: 'fdf5e6',
        olive: '808000',
        olivedrab: '6b8e23',
        orange: 'ffa500',
        orangered: 'ff4500',
        orchid: 'da70d6',
        palegoldenrod: 'eee8aa',
        palegreen: '98fb98',
        paleturquoise: 'afeeee',
        palevioletred: 'd87093',
        papayawhip: 'ffefd5',
        peachpuff: 'ffdab9',
        peru: 'cd853f',
        pink: 'ffc0cb',
        plum: 'dda0dd',
        powderblue: 'b0e0e6',
        purple: '800080',
        red: 'ff0000',
        rosybrown: 'bc8f8f',
        royalblue: '4169e1',
        saddlebrown: '8b4513',
        salmon: 'fa8072',
        sandybrown: 'f4a460',
        seagreen: '2e8b57',
        seashell: 'fff5ee',
        sienna: 'a0522d',
        silver: 'c0c0c0',
        skyblue: '87ceeb',
        slateblue: '6a5acd',
        slategray: '708090',
        snow: 'fffafa',
        springgreen: '00ff7f',
        steelblue: '4682b4',
        tan: 'd2b48c',
        teal: '008080',
        thistle: 'd8bfd8',
        tomato: 'ff6347',
        turquoise: '40e0d0',
        violet: 'ee82ee',
        violetred: 'd02090',
        wheat: 'f5deb3',
        white: 'ffffff',
        whitesmoke: 'f5f5f5',
        yellow: 'ffff00',
        yellowgreen: '9acd32'
    };
    for (var key in simple_colors) {
        if (color_string == key) {
            color_string = simple_colors[key];
        }
    }
    // emd of simple type-in colors

    // array of color definition objects
    var color_defs = [
        {
            re: /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/,
            example: ['rgb(123, 234, 45)', 'rgb(255,234,245)'],
            process: function (bits){
                return [
                    parseInt(bits[1]),
                    parseInt(bits[2]),
                    parseInt(bits[3])
                ];
            }
        },
        {
            re: /^(\w{2})(\w{2})(\w{2})$/,
            example: ['#00ff00', '336699'],
            process: function (bits){
                return [
                    parseInt(bits[1], 16),
                    parseInt(bits[2], 16),
                    parseInt(bits[3], 16)
                ];
            }
        },
        {
            re: /^(\w{1})(\w{1})(\w{1})$/,
            example: ['#fb0', 'f0f'],
            process: function (bits){
                return [
                    parseInt(bits[1] + bits[1], 16),
                    parseInt(bits[2] + bits[2], 16),
                    parseInt(bits[3] + bits[3], 16)
                ];
            }
        }
    ];

    // search through the definitions to find a match
    for (var i = 0; i < color_defs.length; i++) {
        var re = color_defs[i].re;
        var processor = color_defs[i].process;
        var bits = re.exec(color_string);
        if (bits) {
            channels = processor(bits);
            this.r = channels[0];
            this.g = channels[1];
            this.b = channels[2];
            this.ok = true;
        }

    }

    // validate/cleanup values
    this.r = (this.r < 0 || isNaN(this.r)) ? 0 : ((this.r > 255) ? 255 : this.r);
    this.g = (this.g < 0 || isNaN(this.g)) ? 0 : ((this.g > 255) ? 255 : this.g);
    this.b = (this.b < 0 || isNaN(this.b)) ? 0 : ((this.b > 255) ? 255 : this.b);

    // some getters
    this.toRGB = function () {
        return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')';
    }
    this.toHex = function () {
        var r = this.r.toString(16);
        var g = this.g.toString(16);
        var b = this.b.toString(16);
        if (r.length == 1) r = '0' + r;
        if (g.length == 1) g = '0' + g;
        if (b.length == 1) b = '0' + b;
        return '#' + r + g + b;
    }

    // help
    this.getHelpXML = function () {

        var examples = new Array();
        // add regexps
        for (var i = 0; i < color_defs.length; i++) {
            var example = color_defs[i].example;
            for (var j = 0; j < example.length; j++) {
                examples[examples.length] = example[j];
            }
        }
        // add type-in colors
        for (var sc in simple_colors) {
            examples[examples.length] = sc;
        }

        var xml = document.createElement('ul');
        xml.setAttribute('id', 'rgbcolor-examples');
        for (var i = 0; i < examples.length; i++) {
            try {
                var list_item = document.createElement('li');
                var list_color = new RGBColor(examples[i]);
                var example_div = document.createElement('div');
                example_div.style.cssText =
                        'margin: 3px; '
                        + 'border: 1px solid black; '
                        + 'background:' + list_color.toHex() + '; '
                        + 'color:' + list_color.toHex()
                ;
                example_div.appendChild(document.createTextNode('test'));
                var list_item_value = document.createTextNode(
                    ' ' + examples[i] + ' -> ' + list_color.toRGB() + ' -> ' + list_color.toHex()
                );
                list_item.appendChild(example_div);
                list_item.appendChild(list_item_value);
                xml.appendChild(list_item);

            } catch(e){}
        }
        return xml;

    }

}

function MTComments() {};
MTComments.ViewingAll = false;

MTComments.HookBehavior = function() {
	MTComments.HookSubmitOnclick();
};

//will make adding comments an inline experience
MTComments.HookSubmitOnclick = function() {
	DekiWiki.$('#commentSubmit').click(function() {
		var cn = document.getElementById('wpCommentNum');
		if (cn && cn.value > 0) {
			return;
		}
		MTComments.PostComment();
		return false;
	});
};

MTComments.PostComment = function(commentnum) {
	x_postComment(_page_ID, document.getElementById('wpComment').value, MTComments.ViewingAll, commentnum, function(t) {
		MTComments.SetComment(t);
		return false;
	});		
};
MTComments.ShowComment = function(commentnum) {
	var commentform = document.getElementById('commentTextForm'+commentnum);
	var commenttext = document.getElementById('commentText'+commentnum);
	
	if (!commentform || !commenttext)
		return false;
		
	commenttext.style.display = 'block';
	commentform.style.display = 'none';
};

MTComments.EditComment = function(commentnum) {
	var commentform = document.getElementById('commentTextForm'+commentnum);
	var commenttext = document.getElementById('commentText'+commentnum);
	
	if (!commentform || !commenttext)
		return false;
		
	//if the comment form hasn't already been loaded
	if (commentform.innerHTML == '') {
		x_editComment(_page_ID, commentnum, function(t) {
			commentform.innerHTML = t;
			//hook behavior to cancel link
			document.getElementById('commentCancel'+commentnum).onclick = function() {
				MTComments.ShowComment(commentnum);
				return false;	
			};
			document.getElementById('commentSubmit').onclick = function() {
				MTComments.PostComment(commentnum);
				return false;
			};
		});	
	}
	
	commenttext.style.display = 'none';
	commentform.style.display = 'block';
	
	return false;
};

MTComments.DeleteComment = function(commentnum) {
	x_deleteComment(_page_ID, commentnum, function(t) {
		document.getElementById('comment'+commentnum).innerHTML = t;
		return false;
	});	
	return false;
};

MTComments.GetComments = function(commentcount) {
	if (commentcount == 'all') {
		MTComments.ViewingAll = true;
	}
	x_getComments(_page_ID, commentcount, function(t) {
		MTComments.SetComment(t);
		return false;
	});
	return false;
};

MTComments.SetComment = function(markup) {
	document.getElementById('comments').innerHTML = markup;	
	new MTComments.HookBehavior;
};

YAHOO.util.Event.onDOMReady(MTComments.HookBehavior); 

/*
 * Thickbox 3.1 - One Box To Rule Them All.
 * By Cody Lindley (http://www.codylindley.com)
 * Copyright (c) 2007 cody lindley
 * Licensed under the MIT License: http://www.opensource.org/licenses/mit-license.php
*/
		  
var tb_pathToImage = "/skins/common/thickbox/loadingAnimation.gif";

/*!!!!!!!!!!!!!!!!! edit below this line at your own risk !!!!!!!!!!!!!!!!!!!!!!!*/

//on page load call tb_init
DekiWiki.$(document).ready(function() {
	tb_init('a.lightbox, area.lightbox, input.lightbox, a[@rel=awesomebox]');//pass where to apply thickbox
	imgLoader = new Image();// preload image
	imgLoader.src = tb_pathToImage;
});

//add thickbox to href & area elements that have a class of .thickbox
function tb_init(domChunk){
	DekiWiki.$(domChunk).unbind('onclick');
	DekiWiki.$(domChunk).click(function(){
	var t = this.title || this.name || null;
	var a = this.href || this.alt;
	var g = this.rel || false;
	tb_show(t,a,g);
	this.blur();
	return false;
	});
}

function tb_show(caption, url, imageGroup) {//function called when the user clicks on a thickbox link

	try {
		if (typeof document.body.style.maxHeight === "undefined") {//if IE 6
			DekiWiki.$("body","html").css({height: "100%", width: "100%"});
			DekiWiki.$("html").css("overflow","hidden");
			if (document.getElementById("TB_HideSelect") === null) {//iframe to hide select elements in ie6
				DekiWiki.$("body").append("<iframe id='TB_HideSelect'></iframe><div id='TB_overlay'></div><div id='TB_window'></div>");
				DekiWiki.$("#TB_overlay").click(tb_remove);
			}
		}else{//all others
			if(document.getElementById("TB_overlay") === null){
				DekiWiki.$("body").append("<div id='TB_overlay'></div><div id='TB_window'></div>");
				DekiWiki.$("#TB_overlay").click(tb_remove);
			}
		}
		
		if(tb_detectMacXFF()){
			DekiWiki.$("#TB_overlay").addClass("TB_overlayMacFFBGHack");//use png overlay so hide flash
		}else{
			DekiWiki.$("#TB_overlay").addClass("TB_overlayBG");//use background and opacity
		}
		
		if(caption===null){caption="";}
		DekiWiki.$("body").append("<div id='TB_load'><img src='"+imgLoader.src+"' /></div>");//add loader to the page
		DekiWiki.$('#TB_load').show();//show loader
		
		var baseURL;
	   if(url.indexOf("?")!==-1){ //ff there is a query string involved
			baseURL = url.substr(0, url.indexOf("?"));
	   }else{ 
	   		baseURL = url;
	   }
	   
	   var urlString = /\.jpg$|\.jpeg$|\.png$|\.gif$|\.bmp$/;
	   var urlType = baseURL.toLowerCase().match(urlString);

		if(imageGroup || urlType == '.jpg' || urlType == '.jpeg' || urlType == '.png' || urlType == '.gif' || urlType == '.bmp'){//code to show images
				
			TB_PrevCaption = "";
			TB_PrevURL = "";
			TB_PrevHTML = "";
			TB_NextCaption = "";
			TB_NextURL = "";
			TB_NextHTML = "";
			TB_imageCount = "";
			TB_FoundURL = false;
			if(imageGroup){
				TB_TempArray = DekiWiki.$("a[@rel="+imageGroup+"]").get();
				for (TB_Counter = 0; ((TB_Counter < TB_TempArray.length) && (TB_NextHTML === "")); TB_Counter++) {
					var urlTypeTemp = TB_TempArray[TB_Counter].href.toLowerCase().match(urlString);
					if (!(TB_TempArray[TB_Counter].href == url)) {						
						if (TB_FoundURL) {
							TB_NextCaption = TB_TempArray[TB_Counter].title;
							TB_NextURL = TB_TempArray[TB_Counter].href;
							TB_NextHTML = '<span id="TB_next"><a href="#">'+wfMsg('gallery-next')+' &#187;</a></span>';
						} else {
							TB_PrevCaption = TB_TempArray[TB_Counter].title;
							TB_PrevURL = TB_TempArray[TB_Counter].href;
							TB_PrevHTML = '<span id="TB_prev"><a href="#">&#171; '+wfMsg('gallery-prev')+'</a></span>';
						}
					} else {
						TB_FoundURL = true;
						TB_imageCount = " Image " + (TB_Counter + 1) +" of "+ (TB_TempArray.length) + ' ';											
					}
				}
			}
			
			if (TB_PrevHTML == '') {
				TB_PrevHTML = '<span id="TB_prev">&#171; '+wfMsg('gallery-prev')+'</span>';
			}
			
			if (TB_NextHTML == '') {
				TB_NextHTML = '<span id="TB_next">'+wfMsg('gallery-next')+' &#187;</span>';
			}
			imgPreloader = new Image();
			imgPreloader.onload = function(){		
			imgPreloader.onload = null;
				
			// Resizing large images - orginal by Christian Montoya edited by me.
			var pagesize = tb_getPageSize();
			var x = pagesize[0] - 150;
			var y = pagesize[1] - 150;
			var imageWidth = imgPreloader.width;
			var imageHeight = imgPreloader.height;
			if (imageWidth > x) {
				imageHeight = imageHeight * (x / imageWidth); 
				imageWidth = x; 
				if (imageHeight > y) { 
					imageWidth = imageWidth * (y / imageHeight); 
					imageHeight = y; 
				}
			} else if (imageHeight > y) { 
				imageWidth = imageWidth * (y / imageHeight); 
				imageHeight = y; 
				if (imageWidth > x) { 
					imageHeight = imageHeight * (x / imageWidth); 
					imageWidth = x;
				}
			}
			// End Resizing
			
			TB_WIDTH = imageWidth + 30;
			TB_HEIGHT = imageHeight + 60;
			DekiWiki.$("#TB_window").append("<div id='TB_secondLine'>"+ '<div class="TB_navigate">'+TB_PrevHTML + ' ' + TB_NextHTML + '</div>' + TB_imageCount + "</div><a href='' id='TB_ImageOff' title='Close'><img id='TB_Image' src='"+url+"' width='"+imageWidth+"' height='"+imageHeight+"' alt='"+caption+"'/></a>" + "<div id='TB_caption'>"+caption+"</div><div id='TB_closeWindow'><a href='#' id='TB_closeWindowButton' title='"+wfMsg('gallery-close')+"'>"+wfMsg('gallery-close')+"</a></div>"); 		
			
			DekiWiki.$("#TB_closeWindowButton").click(tb_remove);
			
			if (!(TB_PrevHTML === "")) {
				function goPrev(){
					if(DekiWiki.$(document).unbind("click",goPrev)){DekiWiki.$(document).unbind("click",goPrev);}
					DekiWiki.$("#TB_window").remove();
					DekiWiki.$("body").append("<div id='TB_window'></div>");
					tb_show(TB_PrevCaption, TB_PrevURL, imageGroup);
					return false;	
				}
				DekiWiki.$("#TB_prev").click(goPrev);
			}
			
			if (!(TB_NextHTML === "")) {		
				function goNext(){
					DekiWiki.$("#TB_window").remove();
					DekiWiki.$("body").append("<div id='TB_window'></div>");
					tb_show(TB_NextCaption, TB_NextURL, imageGroup);				
					return false;	
				}
				DekiWiki.$("#TB_next").click(goNext);
				
			}

			document.onkeydown = function(e){ 	
				if (e == null) { // ie
					keycode = event.keyCode;
				} else { // mozilla
					keycode = e.which;
				}
				if(keycode == 27){ // close
					tb_remove();
				} else if(keycode == 190){ // display previous image
					if(!(TB_NextHTML == "")){
						document.onkeydown = "";
						goNext();
					}
				} else if(keycode == 188){ // display next image
					if(!(TB_PrevHTML == "")){
						document.onkeydown = "";
						goPrev();
					}
				}	
			};
			
			tb_position();
			DekiWiki.$("#TB_load").remove();
			DekiWiki.$("#TB_ImageOff").click(tb_remove);
			DekiWiki.$("#TB_window").css({display:"block"}); //for safari using css instead of show
			};
			
			imgPreloader.src = url;
		}else{//code to show html
			
			var queryString = url.replace(/^[^\?]+\??/,'');
			var params = tb_parseQuery( queryString );

			TB_WIDTH = (params['width']*1) + 30 || (typeof(winX) == 'undefined' ? 630: winX * .90); //defaults to 630 if no paramaters were added to URL
			TB_HEIGHT = (params['height']*1) + 40 || (typeof(winY) == 'undefined' ? 440: winY * .90); //defaults to 440 if no paramaters were added to URL
			
			ajaxContentW = TB_WIDTH - 30;
			ajaxContentH = TB_HEIGHT - 45;
			
			if(url.indexOf('TB_iframe') != -1){// either iframe or ajax window		
					urlNoQuery = url.split('TB_');
					DekiWiki.$("#TB_iframeContent").remove();
					if(params['modal'] != "true"){//iframe no modal
						DekiWiki.$("#TB_window").append("<div id='TB_title'><div id='TB_ajaxWindowTitle'>"+caption+"</div><div id='TB_closeAjaxWindow'><a href='#' id='TB_closeWindowButton' title='"+wfMsg('gallery-close')+"'><span></span>"+wfMsg('gallery-close')+"</a></div></div><iframe frameborder='0' hspace='0' src='"+urlNoQuery[0]+"' id='TB_iframeContent' name='TB_iframeContent"+Math.round(Math.random()*1000)+"' onload='tb_showIframe()' style='width:"+(ajaxContentW + 29)+"px;height:"+(ajaxContentH + 17)+"px;' > </iframe>");
					}else{//iframe modal
					DekiWiki.$("#TB_overlay").unbind();
						DekiWiki.$("#TB_window").append("<iframe frameborder='0' hspace='0' src='"+urlNoQuery[0]+"' id='TB_iframeContent' name='TB_iframeContent"+Math.round(Math.random()*1000)+"' onload='tb_showIframe()' style='width:"+(ajaxContentW + 29)+"px;height:"+(ajaxContentH + 17)+"px;'> </iframe>");
					}
			}else{// not an iframe, ajax
					if(DekiWiki.$("#TB_window").css("display") != "block"){
						if(params['modal'] != "true"){//ajax no modal
						DekiWiki.$("#TB_window").append("<div id='TB_title'><div id='TB_ajaxWindowTitle'>"+caption+"</div><div id='TB_closeAjaxWindow'><a href='#' id='TB_closeWindowButton'><span></span>"+wfMsg('gallery-close')+"</a></div></div><div id='TB_ajaxContent' style='width:"+ajaxContentW+"px;height:"+ajaxContentH+"px'></div>");
						}else{//ajax modal
						DekiWiki.$("#TB_overlay").unbind();
						DekiWiki.$("#TB_window").append("<div id='TB_ajaxContent' class='TB_modal' style='width:"+ajaxContentW+"px;height:"+ajaxContentH+"px;'></div>");	
						}
					}else{//this means the window is already up, we are just loading new content via ajax
						DekiWiki.$("#TB_ajaxContent")[0].style.width = ajaxContentW +"px";
						DekiWiki.$("#TB_ajaxContent")[0].style.height = ajaxContentH +"px";
						DekiWiki.$("#TB_ajaxContent")[0].scrollTop = 0;
						DekiWiki.$("#TB_ajaxWindowTitle").html(caption);
					}
			}
					
			DekiWiki.$("#TB_closeWindowButton").click(tb_remove);
			
				if(url.indexOf('TB_inline') != -1){	
					DekiWiki.$("#TB_ajaxContent").append(DekiWiki.$('#' + params['inlineId']).children());
					DekiWiki.$("#TB_window").unload(function () {
						DekiWiki.$('#' + params['inlineId']).append( DekiWiki.$("#TB_ajaxContent").children() ); // move elements back when you're finished
					});
					tb_position();
					DekiWiki.$("#TB_load").remove();
					DekiWiki.$("#TB_window").css({display:"block"}); 
				}else if(url.indexOf('TB_iframe') != -1){
					tb_position();
					if($.browser.safari){//safari needs help because it will not fire iframe onload
						DekiWiki.$("#TB_load").remove();
						DekiWiki.$("#TB_window").css({display:"block"});
					}
				}else{
					DekiWiki.$("#TB_ajaxContent").load(url += "&random=" + (new Date().getTime()),function(){//to do a post change this load method
						tb_position();
						DekiWiki.$("#TB_load").remove();
						tb_init("#TB_ajaxContent a.lightbox");
						DekiWiki.$("#TB_window").css({display:"block"});
					});
				}
			
		}

		if(!params['modal']){
			document.onkeyup = function(e){ 	
				if (e == null) { // ie
					keycode = event.keyCode;
				} else { // mozilla
					keycode = e.which;
				}
				if(keycode == 27){ // close
					tb_remove();
				}	
			};
		}
		
	} catch(e) {
		//nothing here
	}
}

//helper functions below
function tb_showIframe(){
	DekiWiki.$("#TB_load").remove();
	DekiWiki.$("#TB_window").css({display:"block"});
}

function tb_remove() {
 	DekiWiki.$("#TB_imageOff").unbind("click");
	DekiWiki.$("#TB_closeWindowButton").unbind("click");
	DekiWiki.$("#TB_window").fadeOut("fast",function(){DekiWiki.$('#TB_window,#TB_overlay,#TB_HideSelect').trigger("unload").unbind().remove();});
	DekiWiki.$("#TB_load").remove();
	if (typeof document.body.style.maxHeight == "undefined") {//if IE 6
		DekiWiki.$("body","html").css({height: "auto", width: "auto"});
		DekiWiki.$("html").css("overflow","");
	}
	document.onkeydown = "";
	document.onkeyup = "";
	return false;
}

function tb_position() {
DekiWiki.$("#TB_window").css({marginLeft: '-' + parseInt((TB_WIDTH / 2),10) + 'px', width: TB_WIDTH + 'px'});
	if ( !(jQuery.browser.msie && jQuery.browser.version < 7)) { // take away IE6
		DekiWiki.$("#TB_window").css({marginTop: '-' + parseInt((TB_HEIGHT / 2),10) + 'px'});
	}
}

function tb_parseQuery ( query ) {
   var Params = {};
   if ( ! query ) {return Params;}// return empty object
   var Pairs = query.split(/[;&]/);
   for ( var i = 0; i < Pairs.length; i++ ) {
      var KeyVal = Pairs[i].split('=');
      if ( ! KeyVal || KeyVal.length != 2 ) {continue;}
      var key = unescape( KeyVal[0] );
      var val = unescape( KeyVal[1] );
      val = val.replace(/\+/g, ' ');
      Params[key] = val;
   }
   return Params;
}

function tb_getPageSize(){
	var de = document.documentElement;
	var w = window.innerWidth || self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth;
	var h = window.innerHeight || self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight;
	arrayPageSize = [w,h];
	return arrayPageSize;
}

function tb_detectMacXFF() {
  var userAgent = navigator.userAgent.toLowerCase();
  if (userAgent.indexOf('mac') != -1 && userAgent.indexOf('firefox')!=-1) {
    return true;
  }
}




/**
 * Copyright (c) 2006-2007, TIBCO Software Inc.
 * Use, modification, and distribution subject to terms of license.
 * 
 * TIBCO(R) PageBus 1.1.0
 */

if(typeof window.PageBus == 'undefined') {

PageBus = {
	version: "1.1.0",
	S: {c:{},s:[]},                 
	X: 0,
	P: 0,
	U: [],
	H: "undefined"
};

PageBus.subscribe = function(name, scope, callback, subscriberData)			
{
	if(name == null)
		this._badName();
	if(scope == null)
		scope = window;
	var path = name.split(".");
	var sub = { f: callback, d: subscriberData, i: this.X++, p: path, w: scope };
	for(var i = 0; i < path.length; i++) {
		if((path[i].indexOf("*") != -1) && (path[i] != "*") && (path[i] != "**"))
					this._badName();
	}
 	this._subscribe(this.S, path, 0, sub);
	return sub;		
}

PageBus.publish = function (name, message)		
{	
	if((name == null) || (name.indexOf("*") != -1)) 
		this._badName();
	var path = name.split(".");
	if(this.P > 100) 
		this._throw("StackOverflow");
	try {
		this.P++;
		this._publish(this.S, path, 0, name, message);
	}
	catch(err) {
		this.P--;
		throw err;
	}
	try {
		this.P--;
		if((this.U.length > 0) && (this.P == 0)) {
			for(var i = 0; i < this.U.length; i++)
				this.unsubscribe(this.U[i]);
			this.U = [];
		}
	}
	catch(err) {	
		// All unsubscribe exceptions should already have 
		// been handled when unsubscribe was called in the
		// publish callback. This is a repeat appearance 
		// of this exception. Discard it.
	}
}

PageBus.unsubscribe = function(sub) 
{
	this._unsubscribe(this.S, sub.p, 0, sub.i);
}

/*
 * @private  @jsxobf-clobber
 */
PageBus._throw = function(n) 
{ 
	throw new Error("PageBus." + n); 
}

/*
 * @private  @jsxobf-clobber
 */
PageBus._badName = function(n) 
{ 
	this._throw("BadName"); 
}

/*
 * @private  @jsxobf-clobber
 */
PageBus._subscribe = function(tree, path, index, sub) 
{
	var tok = path[index];
	if(tok == "")
		this._badName();
	if(index == path.length) 	
		tree.s.push(sub);
	else { 
		if(typeof tree.c == this.H) 
			tree.c = {};
		if(typeof tree.c[tok] == this.H) {
			try {
				tree.c[tok] = { c: {}, s: [] }; 
				this._subscribe(tree.c[tok], path, index + 1, sub);
			}
			catch(err) {
				delete tree.c[tok];
				throw err;
			}
		}
		else 
			this._subscribe( tree.c[tok], path, index + 1, sub );
	}
}

/*
 * @private  @jsxobf-clobber
 */
PageBus._publish = function(tree, path, index, name, msg) {
	if(path[index] == "")
		this._badName();
	if(typeof tree != this.H) {
		if(index < path.length) {
			this._publish(tree.c[path[index]], path, index + 1, name, msg);
			this._publish(tree.c["*"], path, index + 1, name, msg);			
			this._call(tree.c["**"], name, msg);
		}
		else
			this._call(tree, name, msg);
	}
}

/*
 * @private  @jsxobf-clobber
 */
PageBus._call = function(node, name, msg) {
	if(typeof node != this.H) {
		var callbacks = node.s;
		var max = callbacks.length;
		for(var i = 0; i < max; i++) 
			if(callbacks[i].f != null) 
				callbacks[i].f.apply(callbacks[i].w, [name, msg, callbacks[i].d]); 
	}
}
	
/*
 * @jsxobf-clobber
 */
PageBus._unsubscribe = function(tree, path, index, sid) {
	if(typeof tree != this.H) {
		if(index < path.length) {
			var childNode = tree.c[path[index]];
			this._unsubscribe(childNode, path, index + 1, sid);
			if(childNode.s.length == 0) {
				for(var x in childNode.c) // not empty. We're done.
				 	return;
				delete tree.c[path[index]];	// if we got here, c is empty
			}
			return;
		}
		else {
			var callbacks = tree.s;
			var max = callbacks.length;
			for(var i = 0; i < max; i++) {
				if(sid == callbacks[i].i) {
					if(this.P > 0) {
						if(callbacks[i].f == null) 
							this._throw("BadParameter");
						callbacks[i].f = null;
						this.U.push(callbacks[i]);						
					}
					else
						callbacks.splice(i, 1);
					return; 	
				}
			}
			// Not found. Fall through
		}
	}
	this._throw("BadParameter");
}

}

if(typeof DekiWiki == "undefined")
{
	var DekiWiki = {};
}

DekiWiki.nav = function()
{
	var selectedNode, prevSelectedNode, selectedChildren, timeout;

	//Toggle debug console on/off
	var debug = false;

	//Nav wrapper ID
	var navDivID = "siteNavTree";

	//Animation speed (seconds)
	var animOpenCloseSpeed = 0.15;			// expand, collapse child & hidden nodes
	var animChangeBackgroundSpeed = 0;		// switch background color of selected node
	var animImagePadSpeed = 0; // 0.04;
	var animShiftSpeed = 0.1;

	//Time before redirect occurs (millisec)
	var redirectTime = 0;
	var redirectDelay = 0; // 1500

	//Toggle redirect on/off
	var redirect = true;

	//Max text width in nav pane
	var maxWidth = 0;

	//RGB values (auto detected from css)
	var siblingRGB, dockedNodeRGB, selectedRGB, selectedChildRGB;

	//Width and padding properties
	var properties = {};

	return {
		//Initialize navigation
		init: function()
		{
			//Initialize properties
			DekiWiki.nav.initProperties();

			//Initialize hover
			DekiWiki.nav.initHover();

			DekiWiki.nav.maxWidth = navMaxWidth;

			//Initialize click
			DekiWiki.nav.initClick();
		},

		//Initialize properties
		initProperties: function()
		{
			YAHOO.util.Event.onContentReady(navDivID,
				function()
				{
					//------------------------Determine background colors--------------------

					var testClasses = ["sibling", "dockedNode", "selected", "selectedChild"];

					//Create invisible test node
					DekiWiki.$("#" + navDivID).append("<div id='testNode' class='node' style='display:none'><a></a></div>");

					for(var i = 0; i < testClasses.length; i++)
					{
						var testClass = testClasses[i];

						//Add class to test node
						DekiWiki.$("#testNode").addClass(testClass);

						//Get background color
						var color = DekiWiki.$("#testNode a").css("backgroundColor")
						if(color && (color.toLowerCase() != 'transparent')) {

							//Get color as RGB
							var rgb = new RGBColor(color).toRGB();

							//Set global color variable to RGB
							eval(testClass + "RGB = '" + rgb + "';");
						}

						//Remove class from test node
						DekiWiki.$("#testNode").removeClass(testClass);
					}

					//--------------------------Determine padding and width-----------------------

					properties.linkWidth 		= parseInt(DekiWiki.$("#testNode a").css("width"));
					properties.linkHeight 		= parseInt(DekiWiki.$("#testNode a").css("height")) + parseInt(DekiWiki.$("#testNode a").css("borderBottomWidth"));
					properties.linkPadLeft 		= parseInt(DekiWiki.$("#testNode a").css("paddingLeft"));
					properties.linkPadRight 	= parseInt(DekiWiki.$("#testNode a").css("paddingRight"));
					properties.imgPadRight 		= parseInt(DekiWiki.$("#testNode img.nodeImage").css("paddingRight"));

					DekiWiki.$("#testNode").addClass("selectedChild");

					properties.selChildPadLeft 	= parseInt(DekiWiki.$("#testNode a").css("paddingLeft"));
					properties.selChildPadRight = parseInt(DekiWiki.$("#testNode a").css("paddingRight"));
					properties.selChildWidth 	= parseInt(DekiWiki.$("#testNode a").css("width"));

					DekiWiki.$("#testNode").removeClass("selectedChild").addClass("sibling");

					properties.sibImgPadLeft 	= parseInt(DekiWiki.$("#testNode img.nodeImage").css("paddingLeft"));
					properties.sibImgPadRight 	= parseInt(DekiWiki.$("#testNode img.nodeImage").css("paddingRight"));

					//Remove test node
					DekiWiki.$("#testNode").remove();
				}
			);
		},

		//Initialize hover
		initHover: function()
		{
			//Get child nodes that are not closed
			var childNodes = DekiWiki.$("#" + navDivID + " div.childNode").not(".closedNode").get();

			//Add mouseover listener
			YAHOO.util.Event.addListener(childNodes, "mouseover", DekiWiki.nav.mouseover);

			//Add mouseout listener
			YAHOO.util.Event.addListener(childNodes, "mouseout", DekiWiki.nav.mouseout);

			//----------Debug----------

			if(debug)
			{
				if(!YAHOO.util.Dom.inDocument("navDebug"))
				{
					DekiWiki.$(document.body).append("<div id='navDebug' style='width: 400px; height: 50px; z-index: 2; padding: 10px; background: white; border: 1px solid #666; position:absolute; left: 200px; top: 200px;'></div>");
				}

				YAHOO.util.Event.addListener(DekiWiki.$("div.node"), "mouseover",
					function()
					{
						DekiWiki.$("#navDebug").html(this.className);
					}
				);

				YAHOO.util.Event.addListener(DekiWiki.$("div.node"), "mouseout",
					function()
					{
						DekiWiki.$("#navDebug").html("");
					}
				);
			}
		},

		//Remove hover
		removeHover: function()
		{
			var nodes = DekiWiki.$("#" + navDivID + " div.node").get();

			//Remove listeners
			YAHOO.util.Event.removeListener(nodes, "mouseover");
			YAHOO.util.Event.removeListener(nodes, "mouseout");
		},

		//Reset hover
		resetHover: function()
		{
			DekiWiki.nav.removeHover();
			DekiWiki.nav.initHover();
		},

		//Initialize click
		initClick: function()
		{
			var nodes = DekiWiki.$("#" + navDivID + " div.node");
			nodes.attr("onclick", "return false;");

			//Add click handler
			YAHOO.util.Event.addListener(nodes.get(), "click", DekiWiki.nav.click);
		},

		//Remove click
		removeClick: function()
		{
			var nodes = DekiWiki.$("#" + navDivID + " div.node");
			nodes.attr("onclick", "");

			//Add click handler
			YAHOO.util.Event.removeListener(nodes.get(), "click", DekiWiki.nav.click);
		},

		//Reset click
		resetClick: function()
		{
			DekiWiki.nav.removeClick();
			DekiWiki.nav.initClick();
		},

		//Reset all handlers
		resetAllHandlers: function()
		{
			//Initialize click
			DekiWiki.nav.resetClick();

			//Reset hover
			DekiWiki.nav.resetHover();
		},

		//Mouseover
		mouseover: function()
		{
		},

		//Mouseout
		mouseout: function()
		{
		},

		//Click
		click: function()
		{
			//Redirect turned on
			redirect = true;

			//Get previously selected node
			prevSelectedNode = DekiWiki.$("#" + navDivID + " div.selected").get(0);

			//Currently selected node
			selectedNode = this;

			//Exit if clicked node is already the current node
			if(YAHOO.util.Dom.hasClass(selectedNode, "selected") || (DekiWiki.$(selectedNode).attr("reload") == "1"))
			{
				redirectTime = 0;
				DekiWiki.nav.animComplete();
				return;
			}

			//Hidden nodes
			if(YAHOO.util.Dom.hasClass(selectedNode, "moreNodes"))
			{
				DekiWiki.nav.hiddenNodes.startAnim();
				return;
			}

			//Clear timeout if running
			if(timeout)
			{
				window.clearTimeout(timeout);
			}

			//Automatic redirect if node has no children
			if(	(!YAHOO.util.Dom.hasClass(selectedNode, "parentOpen") && !YAHOO.util.Dom.hasClass(selectedNode, "parentClosed")) )
			{
				redirectTime = 0;
			}
			else
			{
				redirectTime = redirectDelay;
			}

			//Get missing data, animate, redirect
			DekiWiki.nav.getData();

			// KarenA: Bugfix #0002049 - prevented double question during leaving modified page
			return false;
		},

		animComplete: function()
		{
			//Reset Hover
			DekiWiki.nav.resetHover();

			if(selectedNode)
			{
				DekiWiki.$(selectedNode).find("a").css("backgroundColor", "");
			}

			if(prevSelectedNode)
			{
				DekiWiki.$(prevSelectedNode).find("a").css("backgroundColor", "");
			}

			//Start timer
			var disableNavWhenEditorIsLoaded = false;
			if(redirect && ((DekiWiki.$(selectedNode).attr("reload") == "1") || !(disableNavWhenEditorIsLoaded && typeof(wysiwyg_editors) != 'undefined' && wysiwyg_editors)))
			{
				timeout = window.setTimeout(DekiWiki.nav.redirect, redirectTime);
			}
		},

		redirect: function()
		{
			var path = DekiWiki.$(selectedNode).find("a").attr("href");

			// SteveB: remove click handlers (which restores the default 'href' behavior)
			DekiWiki.nav.removeClick();

			if(!path)
			{
				path = "";
			}
			// fix for IE6 when canceling page redirect
			try
			{
				window.location = path;
			}
			catch(e) {}
		},

		//Get missing nodes
		getData: function()
		{
			var allChildren		= false;
			var partialChildren	= false;
			var allSiblings		= false;
			var request 		= [];
			var selChildData 	= DekiWiki.$(selectedNode).attr("cd") || "1";		// children-data (0=data missing, nXYZ=known child)
			var selSiblingData 	= DekiWiki.$(selectedNode).attr("sd") || "1";		// sibling-data (0=data missing)
			var knownChild		= null;
			var exclude			= "";

			if(matchResult = selChildData.match(new RegExp("n([0-9]+)")))
			{
				knownChild = matchResult[0];
			}

			//Child data
			if(selChildData == "0")
			{
				allChildren = true;
				request.push("children");
			}
			else if(knownChild)
			{
				partialChildren = true;
				request.push("children");

				exclude = "&exclude=" + knownChild.replace(new RegExp("n"), "");
			}

			//Sibling data
			if(selSiblingData == "0")
			{
				allSiblings = true;
				request.push("siblings");
			}

			//Ajax call for missing nodes
			if(request.length)
			{
				var nodeID		= DekiWiki.$(selectedNode).attr("id").replace(new RegExp("^n"), "");
				var requestURL 	= "/@api/deki/site/nav/" + nodeID + "/" + request.join(",") + "?dream.out.format=json" + exclude;
				if(DekiWiki.nav.maxWidth > 0)
				{
					requestURL = requestURL + "&width=" + DekiWiki.nav.maxWidth;
				}

				//Debug
				//DekiWiki.$(document.body).append(requestURL);

				YAHOO.util.Connect.asyncRequest(
					"GET",
					requestURL,
					{
						success: function(obj)
						{
							//Evaluate response
							eval("var response = " + obj.responseText);

							//Children data
							if(response.children)
							{
								var childData 	= response.children.html;
								var childNodes	= response.children.nodes;
							}

							//Sibling data
							if(response.siblings)
							{
								var siblingData 	= response.siblings.html;
								var siblingNodes	= response.siblings.nodes;
							}

							//-------------Add children------------

							//All children
							if(allChildren)
							{
								//Set list of child node IDs
								DekiWiki.$(selectedNode).attr("c", childNodes);

								//Append children
								DekiWiki.$(selectedNode).after(childData);
							}
							//Partial children
							else if(partialChildren)
							{
								//Set list of child node IDs
								DekiWiki.$(selectedNode).attr("c", childNodes);

								//Prepend siblings
								if(childData.pre)
								{
									DekiWiki.$("#" + knownChild).before(childData.pre);
								}

								//Append siblings
								if(childData.post)
								{
									DekiWiki.$(DekiWiki.nav.getLastChild(
											DekiWiki.$("#" + knownChild).get()
										)
									).after(childData.post);
								}

								//All children of the selected node have full sibling knowledge
								DekiWiki.$(
									DekiWiki.nav.common.getNodesFromAttr(selectedNode, "c")
								).attr("sd", "");
							}

							//------------Add siblings-----------

							if(allSiblings)
							{
								//Prepend siblings
								if(siblingData.pre)
								{
									DekiWiki.$(selectedNode).before(siblingData.pre);
								}

								//Append siblings
								if(siblingData.post)
								{
									DekiWiki.$(DekiWiki.nav.getLastChild(selectedNode)).after(siblingData.post);
								}

								//Parent node has full child data
								DekiWiki.$("#" + DekiWiki.$(selectedNode).attr("p")).attr("cd", "").attr("c", siblingNodes);
							}

							//Update data states of selected node
							DekiWiki.$(selectedNode).attr("cd", "").attr("sd", "");

							//Re-initialize event handlers
							DekiWiki.nav.resetAllHandlers();

							//Start animation
							DekiWiki.nav.startAnim();
						}
					}
				);
			}
			else
			{
				//Start animation
				DekiWiki.nav.startAnim();
			}
		},

		//Get last child of node
		getLastChild: function(node)
		{
			var childNodes;

			while(true)
			{
				childNodes = DekiWiki.$(node).attr("c");

				if(childNodes)
				{
					childNodes 	= childNodes.split(",");
					node 		= DekiWiki.$("#" + childNodes[childNodes.length - 1]).get(0);
				}
				else
				{
					break;
				}
			}

			return node;
		},

		//Start animation
		startAnim: function()
		{
			selectedChildren = null;

			//Get children of selected node
			if(YAHOO.util.Dom.hasClass(selectedNode, "parentClosed"))
			{
				selectedChildren = DekiWiki.nav.common.getNodesFromAttr(selectedNode, "c");
			}

			//Sibling
			if(YAHOO.util.Dom.hasClass(selectedNode, "sibling"))
			{
				DekiWiki.nav.sibling.startAnim();
			}
			//Child node
			else if(YAHOO.util.Dom.hasClass(selectedNode, "selectedChild"))
			{
				DekiWiki.nav.child.startAnim();
			}
			//Home node
			else if(YAHOO.util.Dom.hasClass(selectedNode, "homeNode"))
			{
				DekiWiki.nav.docked.homeNode.startAnim();
			}
			//Last docked
			else if(YAHOO.util.Dom.hasClass(selectedNode, "lastDocked"))
			{
				DekiWiki.nav.docked.lastDocked.startAnim();
			}
			//Mid docked
			else
			{
				DekiWiki.nav.docked.midDocked.startAnim();
			}
		},

		//-------------------------------Common--------------------------------

		common:
		{
			//Complete function handler
			onComplete: function(anim, completeFuncs)
			{
				if(completeFuncs)
				{
					if(completeFuncs.length)
					{
					    for (var i=0; i<completeFuncs.length; i++)
					    {
					        if (typeof(completeFuncs[i]) == 'undefined')
					        {
					            continue;
					        }

							if(anim)
							{
								anim.onComplete.subscribe(
									completeFuncs[i]
								);
							}
							else
							{
								completeFuncs[i]();
							}
						}
					}
					else
					{
						if(anim)
						{
							anim.onComplete.subscribe(completeFuncs);
						}
						else
						{
							completeFuncs();
						}
					}
				}
			},

			//Compact nodes
			compactNodes: function(nodes, completeFuncs)
			{
				var browser = new BrowserVersion();
				var anim = new YAHOO.util.Anim(
					nodes,
					{height: {to: (browser.isIE && (browser.version < 7)) ? 0.1 : 0}}, //make collapsing sorta of work for IE6
					animOpenCloseSpeed,
					YAHOO.util.Easing.easeIn
				);

				anim.onComplete.subscribe(
					function()
					{
						DekiWiki.$(nodes).addClass("closedNode");
					}
				);

				DekiWiki.nav.common.onComplete(anim, completeFuncs);

				anim.animate();
			},

			//Open nodes
			openNodes: function(nodes, completeFuncs)
			{
				nodes = DekiWiki.$(nodes).not(".hiddenNode");

				DekiWiki.$(nodes).show();

				var anim = new YAHOO.util.Anim(
					nodes,
					{height: {to: properties.linkHeight}},
					animOpenCloseSpeed,
					YAHOO.util.Easing.easeIn
				);

				anim.onComplete.subscribe(
					function()
					{
						DekiWiki.$(nodes).removeClass("closedNode");
					}
				);

				DekiWiki.nav.common.onComplete(anim, completeFuncs);

				anim.animate();
			},

			//Compact image padding
			compactImagePad: function(nodes, completeFuncs)
			{
				if(animImagePadSpeed > 0)
				{
					var anim = new YAHOO.util.Anim(
						DekiWiki.$(nodes).find("img.nodeImage").get(),
						{paddingLeft: {to: 0}, paddingRight: {to: properties.imgPadRight}},
						animImagePadSpeed,
						YAHOO.util.Easing.easeIn
					);

					DekiWiki.nav.common.onComplete(anim, completeFuncs);
					anim.animate();
				}
				else
				{
					DekiWiki.$(nodes).find("img.nodeImage").css("paddingLeft", 0).css("paddingRight", properties.imgPadRight);
					DekiWiki.nav.common.onComplete(null, completeFuncs);
				}
			},

			//Expand image padding
			expandImagePad: function(nodes, completeFuncs)
			{
				if(animImagePadSpeed > 0)
				{
					var anim = new YAHOO.util.Anim(
						DekiWiki.$(nodes).find("img.nodeImage").get(),
						{paddingLeft: {to: properties.sibImgPadLeft}, paddingRight: {to: properties.sibImgPadRight}},
						animImagePadSpeed,
						YAHOO.util.Easing.easeOut
					);

					DekiWiki.nav.common.onComplete(anim, completeFuncs);
					anim.animate();
				}
				else
				{
					DekiWiki.$(nodes).find("img.nodeImage").css("paddingLeft", properties.sibImgPadLeft).css("paddingRight", properties.sibImgPadRight);
					DekiWiki.nav.common.onComplete(null, completeFuncs);
				}
			},

			//Shift nodes to the left
			shiftLeft: function(nodes, completeFuncs)
			{
				var anim = new YAHOO.util.Anim(
					DekiWiki.$(nodes).find("a").get(),
					{paddingLeft: {to: properties.linkPadLeft}, width: {to: properties.linkWidth}},
					animShiftSpeed,
					YAHOO.util.Easing.easeIn
				);

				DekiWiki.nav.common.onComplete(anim, completeFuncs);
				anim.animate();
			},

			//Shift nodes to the right
			shiftRight: function(nodes, completeFuncs)
			{
				var anim = new YAHOO.util.Anim(
					DekiWiki.$(nodes).find("a").get(),
					{paddingLeft: {to: properties.selChildPadLeft}, width: {to: properties.selChildWidth}},
					animShiftSpeed,
					YAHOO.util.Easing.easeOut
				);

				DekiWiki.nav.common.onComplete(anim, completeFuncs);
				anim.animate();
			},

			//Open parent node
			openParent: function(node)
			{
				if(YAHOO.util.Dom.hasClass(node, "parentClosed"))
				{
					DekiWiki.$(node).removeClass("parentClosed").addClass("parentOpen");
				}
			},

			//Close parent node
			closeParent: function(node)
			{
				if(YAHOO.util.Dom.hasClass(node, "parentOpen"))
				{
					DekiWiki.$(node).removeClass("parentOpen").addClass("parentClosed");
				}
			},

			//Get nodes from attribute
			getNodesFromAttr: function(node, attr, ignore)
			{
				var attribute = DekiWiki.$(node).attr(attr);

				if(attribute)
				{
					var list = attribute.split(",");

					// check if there is an element to ignore
					if(ignore)
					{

						// remove the element to ignore
						var i = 0;
						while(i < list.length)
						{
							if (list[i] == ignore)
							{
								list.splice(i, 1);
								break;
							}
							else
							{
								i++;
							}
						}
					}
					return YAHOO.util.Dom.get(list);
				}
				else
				{
					return [ ];
				}
			}
		},

		//----------------------------Debug-----------------------
		debug:
		{
			printIDs: function(nodes)
			{
				var idStr = "";

				DekiWiki.$(nodes).each(
					function()
					{
						idStr += this.id + ", ";
					}
				);

				alert(idStr);
			},

			logClicks: function()
			{
				DekiWiki.$("#clickLog").append(this.id + "<br />");
			}
		},

		//-------------------------------Docked--------------------------------

		docked:
		{
			//---------------------------Home node---------------------------

			homeNode:
			{
				//Start animation
				startAnim: function()
				{
					if(selectedRGB) {
						DekiWiki.$(selectedNode).find("a").css("backgroundColor", selectedRGB);
					}
					if(siblingRGB) {
						DekiWiki.$(prevSelectedNode).find("a").css("backgroundColor", siblingRGB);
					}

					//Unhighlight selected node
					DekiWiki.$(prevSelectedNode).removeClass("selected");

					//Close parent
					DekiWiki.nav.common.closeParent(prevSelectedNode);

					var nodeStr = 'var nodes = DekiWiki.$("div.node").not(".homeNode").not(".closedNode")';

					DekiWiki.$(selectedChildren).each(
						function()
						{
							nodeStr += '.not("#' + this.id + '")';
						}
					);

					nodeStr += ".get()";

					eval(nodeStr);

					//var nodes = DekiWiki.$("div.node").not(".homeNode").not(".closedNode").not(selectedChildren).get();

					if(nodes.length)
					{
						//Strip nodes
						DekiWiki.$(nodes).removeClass("sibling").removeClass("selectedChild").removeClass("dockedNode").removeClass("lastDocked");

						//Close non-child nodes
						DekiWiki.nav.common.compactNodes(
							nodes,
							DekiWiki.nav.docked.homeNode.showChildren
						);
					}
					else
					{
						DekiWiki.nav.docked.homeNode.showChildren();
					}
				},

				//Show children
				showChildren: function()
				{
					var closedNodes = DekiWiki.$(selectedChildren).filter(".closedNode").not(".hiddenNode").get();

					DekiWiki.$(selectedChildren).each(
						function()
						{
							if(YAHOO.util.Dom.hasClass(this, "parentOpen"))
							{
								DekiWiki.nav.common.closeParent(this);
							}
						}
					);

					//Expand image padding
					DekiWiki.nav.common.expandImagePad(selectedChildren);

					DekiWiki.$(selectedChildren).addClass("sibling").addClass("childNode").removeClass("selectedChild").removeClass("dockedNode").removeClass("lastDocked");

					if(closedNodes.length)
					{
						DekiWiki.nav.common.openNodes(
							closedNodes,
							DekiWiki.nav.docked.homeNode.highlightSelected
						);
					}
					else
					{
						DekiWiki.nav.docked.homeNode.highlightSelected();
					}
				},

				//Highlight selected node
				highlightSelected: function()
				{
					DekiWiki.$(selectedNode).addClass("selected");

					//Animation complete
					DekiWiki.nav.animComplete();
				}
			},

			//---------------------------Last Docked---------------------------

			lastDocked:
			{
				//Start animation
				startAnim: function()
				{
					if(selectedRGB) {
						DekiWiki.$(selectedNode).find("a").css("backgroundColor", selectedRGB);
					}
					if(siblingRGB) {
						DekiWiki.$(prevSelectedNode).find("a").css("backgroundColor", siblingRGB);
					}

					var viewableChildren = DekiWiki.$("#" + navDivID + " div.selectedChild").get();

					//Minimize children of previously selected node (if they exist)
					if(viewableChildren.length)
					{
						DekiWiki.nav.common.compactNodes(
							viewableChildren,
							function()
							{
								DekiWiki.$(viewableChildren).removeClass("selectedChild");

								DekiWiki.nav.docked.lastDocked.siblingsToChildren();
							}
						);
					}
					else
					{
						DekiWiki.nav.docked.lastDocked.siblingsToChildren();
					}
				},

				//Transform siblings into children
				siblingsToChildren: function()
				{
					//Close previously selected node
					DekiWiki.nav.common.closeParent(prevSelectedNode);

					//Move siblings to the right
					DekiWiki.nav.common.shiftRight(DekiWiki.$("#" + navDivID + " div.sibling").get(),
						function()
						{
							DekiWiki.$(prevSelectedNode).find("a").css("backgroundColor", "");

							//Minimize node image padding
							DekiWiki.nav.common.compactImagePad(DekiWiki.$("#" + navDivID + " div.sibling"));

							DekiWiki.$("#" + navDivID + " div.sibling").addClass("selectedChild").removeClass("sibling").addClass("childNode");
							DekiWiki.$(prevSelectedNode).removeClass("selected");

							//Highlight selected node
							DekiWiki.nav.docked.highlightSelected();
						}
					);
				}
			},

			//---------------------------Mid Docked---------------------------

			midDocked:
			{
				//Start animation
				startAnim: function()
				{
					if(selectedRGB) {
						DekiWiki.$(selectedNode).find("a").css("backgroundColor", selectedRGB);
					}
					if(siblingRGB) {
						DekiWiki.$(prevSelectedNode).find("a").css("backgroundColor", siblingRGB);
					}

					//Close current child nodes
					DekiWiki.nav.common.compactNodes(
						DekiWiki.$("#" + navDivID + " div.childNode").not(".closedNode").get(),
						function()
						{
							//Unhighlight previously selected node
							DekiWiki.nav.common.closeParent(prevSelectedNode);
							DekiWiki.$(prevSelectedNode).removeClass("selected");

							// remove child & sibling styles
							DekiWiki.$("#" + navDivID + " div.childNode").removeClass("selectedChild").removeClass("sibling");

							//Hide grandchildren and their children
							DekiWiki.nav.docked.midDocked.hideGrandchildren();
						}
					);
				},

				//Hide grandchildren and their children
				hideGrandchildren: function()
				{
					var grandchildren 	= [];
					var selectedPath 	= DekiWiki.$(selectedNode).attr("path");

					DekiWiki.$("#" + navDivID + " div.dockedNode").each(
						function()
						{
							if((new RegExp(selectedPath + "[^/]+/([^/]+/)+$")).test(this.getAttribute("path")))
							{
								grandchildren.push(
									DekiWiki.$("#" + this.id).get(0)
								);
							}
						}
					);

					if(grandchildren.length)
					{
						DekiWiki.nav.common.compactNodes(
							grandchildren,
							function()
							{
								DekiWiki.$(grandchildren).removeClass("dockedNode");

								DekiWiki.nav.docked.midDocked.transformDockedChild();
							}
						);
					}
					else
					{
						DekiWiki.nav.docked.midDocked.transformDockedChild();
					}
				},

				//Transform docked child
				transformDockedChild: function()
				{
					var dockedChild = DekiWiki.$(selectedChildren).filter(".dockedNode").get(0);

					// switch left icon	& style
					DekiWiki.$(dockedChild).removeClass("dockedNode").removeClass("lastDocked").addClass("childNode").addClass("selectedChild");

					//Move docked child to the right
					DekiWiki.nav.common.shiftRight(
						dockedChild,
						function() { }
					);
					DekiWiki.nav.docked.midDocked.showSelectedChildren();
				},

				//Show selected node's children
				showSelectedChildren: function()
				{
					var hiddenChildren = DekiWiki.$(selectedChildren).filter(".closedNode").get();

					//Shift children to the right
					if(hiddenChildren.length)
					{
						DekiWiki.nav.common.shiftRight(
							hiddenChildren,
							function()
							{
								DekiWiki.$(hiddenChildren).addClass("selectedChild");
							}
						);

						//Minimize image padding
						DekiWiki.nav.common.compactImagePad(hiddenChildren);

						//Open nodes
						DekiWiki.nav.common.openNodes(
							hiddenChildren,
							DekiWiki.nav.docked.highlightSelected
						);
					}
					else
					{
						DekiWiki.nav.docked.highlightSelected();
					}
				}
			},

			//---------------------------Common---------------------------

			//Highlight selected node
			highlightSelected: function()
			{
				//Expand node image padding
				DekiWiki.nav.common.expandImagePad(selectedNode);

				//Highlight node
				DekiWiki.$(selectedNode).removeClass("dockedNode").removeClass("lastDocked").
				addClass("sibling").addClass("selected").addClass("childNode");

				//Open node if parent
				DekiWiki.nav.common.openParent(selectedNode);

				//Set parent to last docked
				var parentID = DekiWiki.$(selectedNode).attr("p");
				DekiWiki.$("#" + parentID).addClass("lastDocked");

				//Show siblings
				DekiWiki.nav.docked.showSiblings();
			},

			//Show siblings
			showSiblings: function()
			{
				// fetch parent of current node
				var parentNode = DekiWiki.$("#" + DekiWiki.$(selectedNode).attr("p"));
				if(parentNode)
				{
					// fetch children of parent (i.e. siblings of current node), but remove current node
					var siblings = DekiWiki.nav.common.getNodesFromAttr(parentNode, "c", DekiWiki.$(selectedNode).attr("id"));
					if(siblings && siblings.length)
					{
						DekiWiki.$(siblings).addClass("sibling").addClass("childNode");

						DekiWiki.nav.common.openNodes(siblings,
							function()
							{
								//Animation complete
								DekiWiki.nav.animComplete();
							}
						);
					}
					else
					{
						//Animation complete
						DekiWiki.nav.animComplete();
					}
				}
				else
				{
					//Animation complete
					DekiWiki.nav.animComplete();
				}
			}
		},

		//-------------------------------Child--------------------------------

		child:
		{
			//Start animation
			startAnim: function()
			{
				if(selectedRGB) {
					DekiWiki.$(selectedNode).find("a").css("backgroundColor", selectedRGB);
				}
				if(dockedNodeRGB) {
					DekiWiki.$(prevSelectedNode).find("a").css("backgroundColor", dockedNodeRGB);
				}

				DekiWiki.nav.child.hideSiblings();
			},

			//Hide siblings
			hideSiblings: function()
			{
				var nodes = DekiWiki.$("#" + navDivID + " div.sibling").not(".selected").get();

				if(nodes.length)
				{
					DekiWiki.nav.common.compactNodes(
						nodes,
						function()
						{
							DekiWiki.$("#" + navDivID + " div.sibling").not(".selected").removeClass("sibling");
							DekiWiki.nav.child.unhighlightSelected();
						}
					);
				} else {
					DekiWiki.nav.child.unhighlightSelected();
				}
			},

			//Unhighlight selected
			unhighlightSelected: function()
			{
				//Last docked is no longer last
				DekiWiki.$("#" + navDivID + " div.lastDocked").removeClass("lastDocked");

				//Transform node into docked node
				DekiWiki.$(prevSelectedNode).removeClass("sibling").removeClass("childNode").removeClass("selected").addClass("dockedNode").addClass("lastDocked").find("img.nodeImage");

				// check if we need to close the previous parent
				if(YAHOO.util.Dom.hasClass(prevSelectedNode, "parentOpen"))
				{
					DekiWiki.$(prevSelectedNode).removeClass("parentOpen").addClass("parentClosed");
				}

				//Remove node image padding
				DekiWiki.nav.common.compactImagePad(prevSelectedNode);

				//Expand node image padding
				DekiWiki.nav.common.expandImagePad(
					DekiWiki.$("#" + navDivID + " div.selectedChild")
				);

				//Move to left
				DekiWiki.nav.common.shiftLeft(
					DekiWiki.$("#" + navDivID + " div.selectedChild"),
					function()
					{
						//Change selected children to sibling nodes
						DekiWiki.$("#" + navDivID + " div.selectedChild").removeClass("selectedChild").addClass("sibling");

						DekiWiki.nav.child.highlightSelected();
					}
				);
			},

			//Highlight selected node
			highlightSelected: function()
			{
				//Mark node as selected
				DekiWiki.$(selectedNode).addClass("selected");

				if(YAHOO.util.Dom.hasClass(DekiWiki.$(selectedNode).get(0), "parentClosed"))
				{
					//Open selected node
					DekiWiki.nav.common.openParent(selectedNode);

					//Open children
					DekiWiki.nav.child.openChildren();
				}
				else
				{
					//Animation complete
					DekiWiki.nav.animComplete();
				}
			},

			//Open children
			openChildren: function()
			{
				// shift right
				DekiWiki.$(selectedChildren).find("a").css("paddingLeft", properties.selChildPadLeft).css("width", properties.selChildWidth);

				DekiWiki.nav.common.openNodes(selectedChildren,
					DekiWiki.nav.child.shiftRight
				);
			},

			//Shift new children to the right
			shiftRight: function()
			{
				DekiWiki.$(selectedChildren).addClass("selectedChild").addClass("childNode");

				//Animation complete
				DekiWiki.nav.animComplete();

				//Compact node image padding
				DekiWiki.nav.common.compactImagePad(selectedChildren);
			}
		},

		//-------------------------------Sibling--------------------------------

		sibling:
		{
			//Start animation
			startAnim: function()
			{
				if(selectedRGB) {
					DekiWiki.$(selectedNode).find("a").css("backgroundColor", selectedRGB);
				}
				if(siblingRGB) {
					DekiWiki.$(prevSelectedNode).find("a").css("backgroundColor", siblingRGB);
				}

				if(YAHOO.util.Dom.hasClass(prevSelectedNode, "parentOpen"))
				{
					//Hide children
					DekiWiki.nav.sibling.hideSelectedChildren();
				}
				else
				{
					//Unhighlight selected
					DekiWiki.nav.sibling.unhighlightSelected();
				}
			},

			//Hide previously selected node's children
			hideSelectedChildren: function()
			{
				DekiWiki.nav.common.compactNodes(
					DekiWiki.$("#" + navDivID + " div.selectedChild"),
					function()
					{
						DekiWiki.$("#" + navDivID + " div.selectedChild").removeClass("selectedChild");
						DekiWiki.nav.sibling.unhighlightSelected();
					}
				);
			},

			//Unhighlight previously selected node
			unhighlightSelected: function()
			{
				//Close parent node
				DekiWiki.nav.common.closeParent(prevSelectedNode);

				//Unhiglight
				DekiWiki.$(prevSelectedNode).removeClass("selected");

				//Highlight selected node
				DekiWiki.nav.sibling.highlightSelected();
			},

			//Highlight selected node
			highlightSelected: function()
			{
				DekiWiki.$(selectedNode).addClass("selected");

				//Open parent
				DekiWiki.nav.common.openParent(selectedNode);

				//Show children
				if(selectedChildren)
				{
					DekiWiki.nav.sibling.showChildren();
				}
				else
				{
					//Animation complete
					DekiWiki.nav.animComplete();
				}
			},

			//Show children
			showChildren: function()
			{
				DekiWiki.$(selectedChildren).addClass("selectedChild").addClass("childNode");

				//Open nodes
				DekiWiki.nav.common.openNodes(
					selectedChildren,
					function()
					{
						//Animation complete
						DekiWiki.nav.animComplete();
					}
				);

				//Shift right
				DekiWiki.nav.common.shiftRight(selectedChildren);

				//Minimize image padding
				DekiWiki.nav.common.compactImagePad(selectedChildren);
			}
		},

		//-------------------------------Hidden Nodes--------------------------------

		hiddenNodes:
		{
			//Start animation
			startAnim: function()
			{
			
				//Set content
				DekiWiki.$(selectedNode).find("span").text(
					DekiWiki.$(selectedNode).attr("content")
				  );

				//Set title
				DekiWiki.$(selectedNode).find("a").attr("title",
					DekiWiki.$(selectedNode).attr("contentTitle")
				);

				//Open hidden nodes
				DekiWiki.nav.hiddenNodes.openNodes();
			},

			//Open hidden nodes
			openNodes: function()
			{
				//Get hidden nodes
				var hiddenNodes = DekiWiki.nav.common.getNodesFromAttr(selectedNode, "hiddenNodes");

				DekiWiki.$(hiddenNodes).show();

				//Animate hidden nodes open
				var anim = new YAHOO.util.Anim(
					hiddenNodes,
					{height: {to: properties.linkHeight}},
					animOpenCloseSpeed,
					YAHOO.util.Easing.easeIn
				);

				//Execute after animation has completed
				anim.onComplete.subscribe(
					function()
					{
						//Unmark node as having more nodes
						DekiWiki.$(selectedNode).removeClass("moreNodes").removeAttr("hiddenNodes");

						//Unmark hidden nodes as being closed and hidden
						DekiWiki.$(hiddenNodes).removeClass("closedNode").removeClass("hiddenNode");

						//Turn redirect off (previously started redirect will not be terminated)
						redirect = false;

						//
						selectedNode = prevSelectedNode;

						//Animation complete
						DekiWiki.nav.animComplete();
					}
				);

				//Animate
				anim.animate();
			}
		}
	};
}();

//the onload event handler is available in /skins/common/javascript.php so we can flag it
