/*
MDBG free online Chinese-English dictionary Javascript support file

Copyrights MDBG 2009
*/

function resultOptionSelect(currentResultOption, name, value)
{
	currentResultOption = $(currentResultOption);

	var resultOptions = $(currentResultOption.parentNode).select('.resultoption');
	for(var idx = 0, len = resultOptions.length ; idx < len ; ++idx)
	{
		var resultOption = resultOptions[idx];
		resultOption.removeClassName('selected');
	}
	currentResultOption.addClassName('selected');

	var input = new Element('input', {'type': 'hidden', 'name': name, 'value': value});
	currentResultOption.insert(input);

	input.form.submit();
}

var worddictCurrentTab = 'word';
var worddictAdvancedDefaultValue = 'Use the form below and your Advanced Search will appear here';
function selectWorddictTab(tab)
{
	var oldValue = '';
	if(worddictCurrentTab == 'word' && $F('txt_word') != '')
	{
		oldValue = $F('txt_word');
	}
	else if(worddictCurrentTab == 'wordadvanced' && $F('txt_word_advanced') != '' && $F('txt_word_advanced') != worddictAdvancedDefaultValue)
	{
		oldValue = $F('txt_word_advanced');
	}
	else if(worddictCurrentTab == 'text' && $F('txa_text') != '')
	{
		oldValue = $F('txa_text');
	}

	if(tab == 'word')
	{
		$('section_text').hide();
		$('section_word_simple').show();
		$('section_word_advanced').hide();
		$('ime_text').hide();
		$('ime_word').show();
		$('tab_text').className = '';
		$('tab_word').className = 'tabset_selected';
	
		if(oldValue != '')
		{
			$('txt_word').value = oldValue;
		}
	
		$('txt_word').focus();
	}
	else if(tab == 'wordadvanced')
	{
		updateWorddictTextOptionVisibility();
		updateQueryFromAdvancedForm();
	
		$('section_text').hide();
		$('section_word_simple').hide();
		$('section_word_advanced').show();
		$('ime_text').hide();
		$('ime_word').hide();
		$('tab_text').className = '';
		$('tab_word').className = 'tabset_selected';
	}
	else if(tab == 'text')
	{
		updateWorddictTextOptionVisibility();

		$('section_text').show();
		$('section_word_simple').hide();
		$('section_word_advanced').hide();
		$('ime_text').show();
		$('ime_word').hide();
		$('tab_text').className = 'tabset_selected';
		$('tab_word').className = '';
	
		if(oldValue != '')
		{
			$('txa_text').value = oldValue;
		}
	
		$('txa_text').focus();
	}

	updateWorddictTextOptionVisibility();
	worddictCurrentTab = tab;
}

function updateWorddictTextOptionVisibility()
{
	if($('select_wdqtm').value == '2')
	{
		$('section_wdqcham').show();
		$('select_wdqcham_tip').hide();
	}
	else
	{
		$('section_wdqcham').hide();
		$('select_wdqcham_tip').show();
	}
}

function processQueryFromAdvancedFormType(type, value)
{
	if(type == 1)
	{
		value = value + '*';
	}
	else if(type == 2)
	{
		value = '*'+ value;
	}
	else if(type == 3)
	{
		value = '*' + value + '*';
	}
	
	return value;
}

function updateQueryFromAdvancedForm()
{
	var queryString = '';
	var formData = $('wdqb_advanced').serialize(true);
	
	if(formData.chineseType < 3)
	{
		if(formData.chineseValue.strip() != '')
		{
			queryString += ' c:' + processQueryFromAdvancedFormType(formData.chineseType, formData.chineseValue.replace(/ /g, ''));
		}
		if(formData.chineseNotValue.strip() != '')
		{
			queryString += ' -c:' + processQueryFromAdvancedFormType(formData.chineseNotType, formData.chineseNotValue.replace(/ /g, ''));
		}
	}
	else
	{
		var chineseCharacters = formData.chineseValue.split(' ');
		for(var idx = 0, len = chineseCharacters.length ; idx < len ; ++idx)
		{
			var chineseCharacter = chineseCharacters[idx];
			if(chineseCharacter != '')
			{
				queryString += ' c:' + processQueryFromAdvancedFormType(formData.chineseType, chineseCharacter);
			}
		}
		var chineseNotCharacters = formData.chineseNotValue.split(' ');
		for(var idx = 0, len = chineseNotCharacters.length ; idx < len ; ++idx)
		{
			var chineseNotCharacter = chineseNotCharacters[idx];
			if(chineseNotCharacter != '')
			{
				queryString += ' -c:' + processQueryFromAdvancedFormType(formData.chineseType, chineseNotCharacter);
			}
		}
	}

	if(formData.pinyinType < 3)
	{
		if(formData.pinyinValue.strip() != '')
		{
			queryString += ' p:' + processQueryFromAdvancedFormType(formData.pinyinType, formData.pinyinValue.replace(/ /g, ''));
		}
		if(formData.pinyinNotValue.strip() != '')
		{
			queryString += ' -p:' + processQueryFromAdvancedFormType(formData.pinyinNotType, formData.pinyinNotValue.replace(/ /g, ''));
		}
	}
	else
	{
		var pinyinSyllables = formData.pinyinValue.split(' ');
		for(var idx = 0, len = pinyinSyllables.length ; idx < len ; ++idx)
		{
			var pinyinSyllable = pinyinSyllables[idx];
			if(pinyinSyllable != '')
			{
				queryString += ' p:' + processQueryFromAdvancedFormType(formData.pinyinType, pinyinSyllable);
			}
		}
		var pinyinNotSyllables = formData.pinyinNotValue.split(' ');
		for(var idx = 0, len = pinyinNotSyllables.length ; idx < len ; ++idx)
		{
			var pinyinNotSyllable = pinyinNotSyllables[idx];
			if(pinyinNotSyllable != '')
			{
				queryString += ' -e:' + processQueryFromAdvancedFormType(formData.pinyinType, pinyinNotSyllable);
			}
		}
	}

/*
	var englishWords = formData.englishWords.split(' ');
	for(var idx = 0, len = englishWords.length ; idx < len ; ++idx)
	{
		var englishWord = englishWords[idx];
		if(englishWord != '')
		{
			queryString += ' e:' + englishWord;
		}
	}
	var englishNotWords = formData.englishNotWords.split(' ');
	for(var idx = 0, len = englishNotWords.length ; idx < len ; ++idx)
	{
		var englishNotWord = englishNotWords[idx];
		if(englishNotWord != '')
		{
			queryString += ' -e:' + englishNotWord;
		}
	}
*/

	if(formData.englishPhrase.strip() != '')
	{
		queryString += ' e:"' + processQueryFromAdvancedFormType(formData.pinyinType, formData.englishPhrase.strip() + '"');
	}
	if(formData.englishNotPhrase.strip() != '')
	{
		queryString += ' -e:"' + processQueryFromAdvancedFormType(formData.pinyinType, formData.englishNotPhrase.strip() + '"');
	}

	var englishValues = formData.englishValue.split(' ');
	for(var idx = 0, len = englishValues.length ; idx < len ; ++idx)
	{
		var englishValue = englishValues[idx];
		if(englishValue != '')
		{
			queryString += ' e:' + processQueryFromAdvancedFormType(formData.englishType, englishValue);
		}
	}
	var englishNotValues = formData.englishNotValue.split(' ');
	for(var idx = 0, len = englishNotValues.length ; idx < len ; ++idx)
	{
		var englishNotValue = englishNotValues[idx];
		if(englishNotValue != '')
		{
			queryString += ' -e:' + processQueryFromAdvancedFormType(formData.englishNotType, englishNotValue);
		}
	}

	queryString = queryString.strip();
	if(queryString == '')
	{
		$('txt_word_advanced').value = worddictAdvancedDefaultValue;
	}
	else
	{
		$('txt_word_advanced').value = queryString;
	}
}

function formAutoPostGet(formElement)
{
	formElement = $(formElement);
	if(formElement.serialize().length > 1500)
	{
		formElement.setAttribute('method', 'post');
	}
	else
	{
		formElement.setAttribute('method', 'get');
	}
}




function GoBack()
{
	if(location.hash=="#top")
		history.go(-2);
	else
		history.go(-1);
}

function as(unicode) {
	var popup=window.open('popup_animation_strokes.php?uvd='+unicode, 'radical', 'resizable=yes,scrollbars=yes,width=380,height=420');

	return false;
}

function radicalPopup(radicalNumber, radical, comment, mandarin, definition) {
	var popup=window.open('', 'radical', 'resizable=yes,scrollbars=yes,width=240,height=225');

	var popupHtml='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n';
	popupHtml+='<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh" lang="zh"><head><title>Radical</title><link rel="stylesheet" href="rsc/css/style.css?dummy=7" type="text/css" /></head><body>';
	popupHtml+='<script type="text/javascript">\n';
	popupHtml+='/* <![CDATA[ */\n';
	popupHtml+='	window.onload=setFocus;\n';
	popupHtml+='	function setFocus()\n';
	popupHtml+='	{\n';
	popupHtml+='		linkElement = document.getElementById("closelink");\n';
	popupHtml+='		linkElement.focus();\n';
	popupHtml+='	}\n';
	popupHtml+='/* ]]> */\n';
	popupHtml+='</script>\n';
	popupHtml+='<br />\n';
	popupHtml+='<div style="text-align: center" class="panel">';
	popupHtml+='<table>'
	popupHtml+='<tr><td>Radical:</td><td class="rad">'+radical+'</td></tr>';
	popupHtml+='<tr><td>&nbsp;</td><td><div class="optiontext">'+comment+'</div></td></tr>';
	popupHtml+='<tr><td>Mandarin:</td><td>'+mandarin+'</td></tr>';
	popupHtml+='<tr><td>Definition:</td><td>'+definition+'</td></tr>';
	popupHtml+='<tr><td>KangXi no.:</td><td>'+radicalNumber+'</td></tr>';
	popupHtml+='</table>';
	popupHtml+='</div>';
	popupHtml+='<div align="center"><a id="closelink" href="#" onclick="javascript:window.close();">Close</a></div>\n';
	popupHtml+='</body></html>';

	popup.document.write(popupHtml);
	popup.document.close();
	return false;
}

function voicePopup(filename, display) {
	var popup=window.open('', 'voice', 'resizable=yes,scrollbars=yes,width=200,height=170');

/*
	if (window.focus) {
		popup.focus();
	}
*/

	var popupHtml='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n';
	popupHtml+='<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh" lang="zh"><head><title>'+display+'</title><link rel="stylesheet" href="rsc/css/style.css?dummy=7" type="text/css" /></head><body>';
	popupHtml+='<br />';
	popupHtml+='<div align="center">';
	popupHtml+='<table class="panel"><tr><td>';
	popupHtml+='<object type="application/x-shockwave-flash" data="rsc/swf/button_player/musicplayer_f6.swf?autoplay=true&amp;song_url='+filename+'" width="17" height="17">';
	popupHtml+='<param name="movie" value="rsc/swf/button_player/musicplayer_f6.swf?autoplay=true&amp;song_url='+filename+'" />';
	popupHtml+='<img src="rsc/swf/button_player/noflash.gif" width="17" height="17" alt="" />';
	popupHtml+='</object>';
	popupHtml+='</td></tr></table>';
	popupHtml+='</div>';
	popupHtml+='<div align="center">';
	popupHtml+='<p>'+display+'</p>';
	popupHtml+='<p><a href="#" onclick="javascript:window.close();">Close window</a></p>';
	popupHtml+='<p style="font-size: 62%"><a title="Click using right mouse button and choose \'Save As\'" target="_blank" href="'+filename+'">(download)</a></p>';
	popupHtml+='</div>';
	popupHtml+='</body></html>';

/*
	var popupHtml='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n';
	popupHtml+='<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh" lang="zh"><head><title>'+display+'</title><link rel="stylesheet" href="rsc/css/style.css?dummy=7" type="text/css" /></head><body>';
	popupHtml+='<br /><table width="100%"><tr align="center"><td><embed src="'+filename+'" width="180" height="45" /></td></tr></table>';
	popupHtml+='<div align="center"><p>Pinyin: '+display+'</p><p><a href="#" onclick="javascript:window.close();">Close window</a></p><p class="hinttext"><a target="_blank" href="http://www.apple.com/quicktime/download/standalone.html">Click here to install Apple Quicktime if audio doesn\'t play</a></p></div>';
	popupHtml+='</body></html>';
*/

	popup.document.write(popupHtml);
	popup.document.close();
	return false;
}

function voiceTextPopup(pinyin, display) {
	var popup=window.open('', 'voice_text', 'resizable=yes,scrollbars=yes,width=350,height=400');

	if (window.focus) {
		popup.focus();
	}

	var popupHtml='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n';
	popupHtml+='<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh" lang="zh"><head><title>'+display+'</title><link rel="stylesheet" href="rsc/css/style.css?dummy=7" type="text/css" /></head><body>';
	popupHtml+='<!-- 統一碼 统一码 -->';
	popupHtml+='<div align="center">';
	popupHtml+='<table class="panel"><tr><td>';
	popupHtml+='<object type="application/x-shockwave-flash" data="rsc/swf/xspf_player/xspf_player.swf?autoplay=1&amp;playlist_url=chindict_xspf.php?pinyin='+encodeURIComponent(pinyin)+'" width="300" height="220">';
	popupHtml+='<param name="movie" value="rsc/swf/xspf_player/xspf_player.swf?autoplay=1&amp;playlist_url=chindict_xspf.php?pinyin='+encodeURIComponent(pinyin)+'" />';
	popupHtml+='</object>';
	popupHtml+='</td></tr></table>';
	popupHtml+='</div>';
	popupHtml+='<div align="center">';
	popupHtml+='<p><a href="#" onclick="javascript:window.close();">Close window</a></p>';
	popupHtml+='</div>';
	popupHtml+='<p class="hinttext">';
	popupHtml+='Please note that context and 一 / 不 related tone changes are <strong>not</strong> represented in this automated pronunciation. ';
	popupHtml+='For more information see: <a href="http://en.wikipedia.org/wiki/Standard_Mandarin#Tone_sandhi" target="_blank">\'Standard Mandarin\' on Wikipedia</a>.';
	popupHtml+='</p>';
	popupHtml+='</body></html>';

	popup.document.write(popupHtml);
	popup.document.close();
	return false;
}

function popup(url) {
	var popup=window.open(url, '_blank', 'resizable=yes,scrollbars=yes');
	return false;
}

function zc(character, description) {
	var popup=window.open('', '_blank', 'resizable=yes,scrollbars=yes,width=380,height=460');

	var popupHtml='';
	popupHtml+='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n';
	popupHtml+='<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh" lang="zh"><head><title>Character Zoom</title><link rel="stylesheet" href="rsc/css/style.css?dummy=7" type="text/css" /></head><body>\n';
	popupHtml+='<script type="text/javascript">\n';
	popupHtml+='/* <![CDATA[ */\n';
	popupHtml+='	window.onload=setFocus;\n';
	popupHtml+='	function setFocus()\n';
	popupHtml+='	{\n';
	popupHtml+='		linkElement = document.getElementById("closelink");\n';
	popupHtml+='		linkElement.focus();\n';
	popupHtml+='	}\n';
	popupHtml+='/* ]]> */\n';
	popupHtml+='</script>\n';
	popupHtml+='<br /><table width="100%"><tr align="center"><td>\n';
	popupHtml+='<div class="zoomchar">' + character + '</div>\n';
	popupHtml+='</td></tr></table>\n';
	popupHtml+='<div align="center"><p>'+description+'</p><p><a id="closelink" href="#" onclick="javascript:window.close();">Close</a></p></div>\n';
	popupHtml+='</body></html>\n';

	popup.document.write(popupHtml);
	popup.document.close();

	return false;
}

function gb(charNum) {
	var popup=window.open('', '_blank', 'resizable=yes,scrollbars=yes,width=350,height=360');

	var popupHtml='';
	popupHtml+='<!DOCTYPE html \n';
	popupHtml+='     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\n';
	popupHtml+='     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n';
	popupHtml+='<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh" lang="zh">\n';
	popupHtml+='<head>\n';
	popupHtml+='<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />\n';
	popupHtml+='<title>Character Details</title>\n';
	popupHtml+='</head>\n';
	popupHtml+='<body style="font-family: Arial, Sans-Serif">\n';
	popupHtml+='<script type="text/javascript">\n';
	popupHtml+='/* <![CDATA[ */\n';
	popupHtml+='	window.onload=setFocus;\n';
	popupHtml+='	function setFocus()\n';
	popupHtml+='	{\n';
	popupHtml+='		linkElement = document.getElementById("closelink");\n';
	popupHtml+='		linkElement.focus();\n';
	popupHtml+='	}\n';
	popupHtml+='/* ]]> */\n';
	popupHtml+='</script>\n';
	popupHtml+='\n';
	popupHtml+='<div align="center">\n';
	popupHtml+='\n';
	popupHtml+='<table>\n';
	popupHtml+='<tr>\n';
	popupHtml+='<td>\n';
	popupHtml+='<img width="56" height="56" src="rsc/img/chargif/GB48h/anim/' + charNum + '.gif" />\n';
	popupHtml+='<br />\n';
	popupHtml+='<br />\n';
	popupHtml+='<img width="56" height="224" src="rsc/img/chargif/GB48all4/vert/' + charNum + '.gif" />\n';
	popupHtml+='</td>\n';
	popupHtml+='<td rowspan="2">\n';
	popupHtml+='<div align="center">\n';
	popupHtml+='<img width="256" height="256" src="rsc/img/chargif/GB256s/stat/' + charNum + '.gif" />\n';
	popupHtml+='<br />\n';
	popupHtml+='<a id="closelink" href="#" onclick="window.close();">Close</a>\n';
	popupHtml+='</div>\n';
	popupHtml+='</td>\n';
	popupHtml+='</tr>\n';
	popupHtml+='</table>\n';
	popupHtml+='\n';
	popupHtml+='</div>\n';
	popupHtml+='\n';
	popupHtml+='</body>\n';
	popupHtml+='</html>\n';

	popup.document.write(popupHtml);
	popup.document.close();

	return false;
}

function b5(charNum) {
	var popup=window.open('', '_blank', 'resizable=yes,scrollbars=yes,width=180,height=160');

	var popupHtml='';
	popupHtml+='<!DOCTYPE html \n';
	popupHtml+='     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"\n';
	popupHtml+='     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n';
	popupHtml+='<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh" lang="zh">\n';
	popupHtml+='<head>\n';
	popupHtml+='<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />\n';
	popupHtml+='<title>Character Details</title>\n';
	popupHtml+='</head>\n';
	popupHtml+='<body style="font-family: Arial, Sans-Serif">\n';
	popupHtml+='<script type="text/javascript">\n';
	popupHtml+='/* <![CDATA[ */\n';
	popupHtml+='	window.onload=setFocus;\n';
	popupHtml+='	function setFocus()\n';
	popupHtml+='	{\n';
	popupHtml+='		linkElement = document.getElementById("closelink");\n';
	popupHtml+='		linkElement.focus();\n';
	popupHtml+='	}\n';
	popupHtml+='/* ]]> */\n';
	popupHtml+='</script>\n';
	popupHtml+='\n';
	popupHtml+='<div align="center">\n';
	popupHtml+='\n';
	popupHtml+='<table>\n';
	popupHtml+='<tr>\n';
	popupHtml+='<td valign="middle">\n';
	popupHtml+='<img width="56" height="56" src="rsc/img/chargif/B548/anim/' + charNum + '.gif" />\n';
	popupHtml+='</td>\n';
	popupHtml+='<td>\n';
	popupHtml+='&nbsp;\n';
	popupHtml+='</td>\n';
	popupHtml+='<td>\n';
	popupHtml+='<img width="64" height="64" src="rsc/img/chargif/B564/' + charNum + '.gif" />\n';
	popupHtml+='</td>\n';
	popupHtml+='</tr>\n';
	popupHtml+='</table>\n';
	popupHtml+='\n';
	popupHtml+='<a id="closelink" href="#" onclick="window.close();">Close</a>\n';
	popupHtml+='\n';
	popupHtml+='</div>\n';
	popupHtml+='\n';
	popupHtml+='</body>\n';
	popupHtml+='</html>\n';

	popup.document.write(popupHtml);
	popup.document.close();

	return false;
}

function addSearchEngine(name,ext,cat)
{
	if ((typeof window.sidebar == "object") && (typeof window.sidebar.addSearchEngine == "function"))
	{
		//cat="Web";
		//cat=prompt("In what category should this engine be installed?","Web")
		window.sidebar.addSearchEngine(
			"http://www.mdbg.net/chindict/extras/searchplugins/"+name+".src",
			"http://www.mdbg.net/chindict/extras/searchplugins/"+name+"."+ext,
			name,
			cat );
	}
	else
	{
		alert("Mozilla Firefox is needed to install this plugin");
	}
}

function getUrlParameter( name )
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}

function trackExitLink(target, fromPage)
{
	if(target.href !== undefined)
	{
		target = target.href.match(/\/\/([^\/]+)/)[1];
	}
//	var fromPage = getUrlParameter('page');
	var trackUrl = '/exitlink/' + target;
	if(fromPage)
	{
		trackUrl = trackUrl + '/page=' + fromPage;
	}
//	alert(trackUrl);
	trackPageview(trackUrl);
}


// ---------- mouse tracking ----------
var mdbg_mousetracking_onMouseMove = null;

var mdbg_mousetracking_mouseX = 0;
var mdbg_mousetracking_mouseY = 0;

var mdbg_mousetracking_scrollX = 0;
var mdbg_mousetracking_scrollY = 0;

var mdbg_mousetracking_sizeX = 0;
var mdbg_mousetracking_sizeY = 0;

var mdbg_mousetracking_topEdgeDistance = 0;
var mdbg_mousetracking_bottomEdgeDistance = 0;
var mdbg_mousetracking_rightEdgeDistance = 0;

// detect browsers
var mdbg_mousetracking_isBrowserIE = document.all?true:false;
var mdbg_mousetracking_isBrowserSafari = (document.childNodes)&&(!document.all)&&(!navigator.taintEnabled)&&(!navigator.accentColorName)?true:false;


function mdbg_mousetracking_enable()
{
	// set the on mouse move event handler
	document.onmousemove = mdbg_mousetracking_updateMouseXY;
	if (!mdbg_mousetracking_isBrowserIE)
	{
		document.captureEvents(Event.MOUSEMOVE);
	}
}

// on mouse move event handler 
function mdbg_mousetracking_updateMouseXY(e)
{
	// get the event object
	if (!e) var e = window.event;

	// get the scroll positions
	if( typeof( window.pageYOffset ) == 'number' )
	{
		//Netscape compliant
		mdbg_mousetracking_scrollY = window.pageYOffset;
		mdbg_mousetracking_scrollX = window.pageXOffset;
	}
	else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) )
	{
		//DOM compliant
		mdbg_mousetracking_scrollY = document.body.scrollTop;
		mdbg_mousetracking_scrollX = document.body.scrollLeft;
	}
	else if( document.documentElement && ( !isNaN(document.documentElement.scrollLeft) || !isNaN(document.documentElement.scrollTop) ) )
	{
		//IE6 standards compliant mode
		mdbg_mousetracking_scrollY = document.documentElement.scrollTop;
		mdbg_mousetracking_scrollX = document.documentElement.scrollLeft;
	}

	if(isNaN(mdbg_mousetracking_scrollX))
	{
		mdbg_mousetracking_scrollX = 0;
	}
	if(isNaN(mdbg_mousetracking_scrollY))
	{
		mdbg_mousetracking_scrollY = 0;
	}

	// get window size
	if( typeof( window.innerWidth ) == 'number' )
	{
		//Non-IE
		mdbg_mousetracking_sizeX = window.innerWidth;
		mdbg_mousetracking_sizeY = window.innerHeight;
	}
	else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) )
	{
		//IE 6+ in 'standards compliant mode'
		mdbg_mousetracking_sizeX = document.documentElement.clientWidth;
		mdbg_mousetracking_sizeY = document.documentElement.clientHeight;
	}
	else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) )
	{
		//IE 4-5 compatible
		mdbg_mousetracking_sizeX = document.body.clientWidth;
		mdbg_mousetracking_sizeY = document.body.clientHeight;
	}

	// get the mouse coordinates
       if (e.pageX || e.pageY)
       {
		// grab the x-y pos.s if browser is NS
           mdbg_mousetracking_mouseX = e.pageX;
           mdbg_mousetracking_mouseY = e.pageY;
       }
       else if (e.clientX || e.clientY)
       {        	
		// grab the x-y pos.s if browser is IE
		mdbg_mousetracking_mouseX = e.clientX + mdbg_mousetracking_scrollX;
		mdbg_mousetracking_mouseY = e.clientY + mdbg_mousetracking_scrollY;
       }
	
	if (mdbg_mousetracking_mouseX < 0)
	{
		mdbg_mousetracking_mouseX = 0;
	}
	if (mdbg_mousetracking_mouseY < 0)
	{
		mdbg_mousetracking_mouseY = 0;
	}

	// get distance to screen edges
	if(mdbg_mousetracking_isBrowserIE && !window.opera)
	{
		mdbg_mousetracking_rightEdgeDistance = mdbg_mousetracking_sizeX - e.clientX;
		mdbg_mousetracking_bottomEdgeDistance = mdbg_mousetracking_sizeY - e.clientY;
		mdbg_mousetracking_topEdgeDistance = e.clientY;
	}
	else
	{
		if(mdbg_mousetracking_isBrowserSafari)
		{
			// Safari
			mdbg_mousetracking_rightEdgeDistance = mdbg_mousetracking_sizeX - e.clientX + document.body.scrollLeft;
			mdbg_mousetracking_bottomEdgeDistance = mdbg_mousetracking_sizeY - e.clientY + document.body.scrollTop;
			mdbg_mousetracking_topEdgeDistance = e.clientY - document.body.scrollTop;
		}
		else
		{
			// Other browsers such as Mozilla, doesn't count scroll bar, so leave some space for it
			mdbg_mousetracking_rightEdgeDistance = mdbg_mousetracking_sizeX - e.clientX - 20;
			mdbg_mousetracking_bottomEdgeDistance = mdbg_mousetracking_sizeY - e.clientY - 20;
			mdbg_mousetracking_topEdgeDistance = e.clientY;
		}
	}
	
	// update a few times, since it may be resized by the browser after being moved
	mdbg_mousetracking_onMouseMove();
	mdbg_mousetracking_onMouseMove();
//	alert(mdbg_mousetracking_rightEdgeDistance+" "+mdbg_mousetracking_bottomEdgeDistance);

	var debugElement = document.getElementById("debugLabel");
//	debugElement.innerHTML = ''+mdbg_mousetracking_bottomEdgeDistance+' '+mdbg_mousetracking_rightEdgeDistance+' '+mdbg_mousetracking_topEdgeDistance;
//	debugElement.innerHTML = ''+mdbg_mousetracking_mouseX+' '+mdbg_mousetracking_mouseY+' '+mdbg_mousetracking_scrollX+' '+mdbg_mousetracking_scrollY;
	
	return true;
}

// ---------- tooltip ----------

var mdbg_tooltip_tooltipOffsetX = 20;
var mdbg_tooltip_tooltipOffsetY = 20;
var mdbg_tooltip_maxTooltipWidth = 300;

var mdbg_tooltip_tooltipEnabled = false;

function mdbg_tooltip_enable()
{
	mdbg_mousetracking_onMouseMove = mdbg_tooltip_onMouseMove;
	mdbg_mousetracking_enable();
}

function mdbg_tooltip_onMouseMove()
{
	mdbg_tooltip_updateTooltipPosition();
	mdbg_tooltip_updateTooltipPosition();
}

function mdbg_tooltip_updateTooltipPosition()
{
	// update tooltip postition if it's enabled
	if(mdbg_tooltip_tooltipEnabled)
	{
		// get tooltip
		var tooltipElement = document.getElementById("mdbg_tooltip");

		if(tooltipElement.offsetWidth > mdbg_tooltip_maxTooltipWidth)
		{
			tooltipElement.style.width = mdbg_tooltip_maxTooltipWidth + 'px';
		}

		// set tooltip x location
		if((mdbg_mousetracking_rightEdgeDistance - mdbg_tooltip_tooltipOffsetX - tooltipElement.offsetWidth) < 0)
		{
			tooltipElement.style.left = (mdbg_mousetracking_mouseX - mdbg_tooltip_tooltipOffsetX - tooltipElement.offsetWidth) + "px";
		}
		else
		{
			tooltipElement.style.left = (mdbg_mousetracking_mouseX + mdbg_tooltip_tooltipOffsetX) + "px";
		}

//		var debugElement = document.getElementById("debugLabel");
//		debugElement.innerHTML = '' + tooltipElement.offsetWidth + ' ' + tooltipElement.offsetHeight;

		// set tooltip y location
		if((mdbg_mousetracking_bottomEdgeDistance - mdbg_tooltip_tooltipOffsetY - tooltipElement.offsetHeight) < 0)
		{
			// if the tooltip crosses the bottom screen edge, flip it to the top
			
			// calculate the distance between the top of the tooltip and the top screen edge
			var tooltipTopEdgeDistance = mdbg_mousetracking_topEdgeDistance - (mdbg_tooltip_tooltipOffsetY + tooltipElement.offsetHeight);
			
			if(tooltipTopEdgeDistance < 0)
			{
				// the tooltip crosses the top border after flipping it, lock it to the top edge
				tooltipElement.style.top = (mdbg_mousetracking_mouseY - mdbg_tooltip_tooltipOffsetY - tooltipElement.offsetHeight - tooltipTopEdgeDistance) + "px";
			}
			else
			{
				// place the tooltip on the top
				tooltipElement.style.top = (mdbg_mousetracking_mouseY - mdbg_tooltip_tooltipOffsetY - tooltipElement.offsetHeight) + "px";
			}
		}
		else
		{
			// place the tooltip on the bottom
			tooltipElement.style.top = (mdbg_mousetracking_mouseY + mdbg_tooltip_tooltipOffsetY) + "px";
		}
	}
}

// show tooltip
function mdbg_tooltip_show(content)
{
	var tooltipElement = document.getElementById("mdbg_tooltip");
	tooltipElement.innerHTML = content;
	mdbg_tooltip_updateTooltipPosition();
	tooltipElement.style.visibility = "visible";
	mdbg_tooltip_tooltipEnabled = true;
}

// hide tooltip
function mdbg_tooltip_hide()
{
	var tooltipElement = document.getElementById("mdbg_tooltip");
	mdbg_tooltip_tooltipEnabled = false;
	tooltipElement.style.visibility = "hidden";
	tooltipElement.innerHTML = "";
	tooltipElement.style.width = '';
}
