// topic preview globals

var xmlHttp; 			// XmlHttp Object
var tipEnabled = false;	// Check if tooltip is Enabled
var delayTooltip;		// delay displaying of toolTip with function setTimout()
var tooltip = null;

// this function is called onload from most of MFO pages

function mfo_init() {
	setup_menu();
	setupImages();
	setupLinks();
	setupSpans();
	setupFixit();
	setupPostSubjects();
	setupDivs();
	setupTables();
	move_adminbars_right();
	if (exist("mfo_init2")) mfo_init2();
}

// If table has class ColumnInherit or ColumnInherit 1, column classes from first or second row
//		are propagated down the column, becoming column styles
// If table has class StripedRows all rows that don't have a class already are assigned 
//		'odd' and 'even' classes

function setupTables() {

var elTable;

var rgTables = document.getElementsByTagName("TABLE");

for (var x=0; x<rgTables.length; x++) {
	elTable = rgTables[x];

	if (elTable.className.indexOf("ColumnInherit") != -1)
		{
		setupColumnInherit(elTable);
		}
	
	if (elTable.className.indexOf("StripedRows") != -1)
		{
		setupStripedRows(elTable);
		}
	}
}

function setupColumnInherit(elTable) { 

var rgRows = elTable.getElementsByTagName("TR");
var elRow;
var rgCells;
var rgCellClass = new Array();
var classRow;
var iRowInherit;

if (elTable.className.indexOf("ColumnInherit1") != -1)
	{
	iRowInherit = 1;
	}
else
	{
	iRowInherit = 0;
	}

elRow = rgRows[iRowInherit];
var rgCells = elRow.getElementsByTagName("TD");

for( var y = 0; y < rgCells.length; y++ ) 
	{
	var elCell = rgCells[y];
	rgCellClass[y] = elCell.className;
	}

// loop rows

for( var x = iRowInherit+1; x < rgRows.length; x++ ) 
	{
	elRow = rgRows[x];

	var rgCells = elRow.getElementsByTagName("TD");

	for( var y = 0; y < rgCells.length; y++ ) 
		{
		var elCell = rgCells[y];
		if (!elCell .className)
			{
			elCell.className = rgCellClass[y];
			}	
		}
	}
}


function setupStripedRows(elTable) { 

// get my table

var rgRows = elTable.getElementsByTagName("TR");
var elRow;
var classRow;

// loop rows

for( var x = 0; x < rgRows.length; x++ ) 
	{
	classRow = (x%2) ? 'odd' : 'even';
	elRow = rgRows[x];
	
	if (!elRow.className)
		{
		elRow.className = classRow;
		}
	}
}


// Invoke PGN viewer when PGN is clicked in a div with PGN class chess_pgn
// Close/open spoiler on click

function setupDivs() {

var elDiv;

var rgDivs = document.getElementsByTagName("DIV");

for (var x=0; x<rgDivs.length; x++) {
	elDiv = rgDivs[x];

	if (elDiv.className == 'chess_pgn') {
		elDiv.ondblclick = new Function("viewPGN(this);");
		elDiv.title = "Double-click to view the game";
		}

	if (elDiv.className == 'spoiler') {
		elDiv.onclick = new Function("flipSpoiler(this);");
		elDiv.title = "Click to open/close";
		}

	if (elDiv.className == 'EscapeOnEscape') {
		
		/* Such divs are used for various helps. Escape should close them. */
		/* Not very nice, but beats having javascript in a post */
		
		document.onkeydown = escapeOnEscape;
		}
	}
}

function viewPGN(div) {

document.body.parameter_1 = div.innerHTML;							// pass pgn to opened window
popup_window('/cd/mgv.html', 780, 800);
}

function flipSpoiler(divSpoiler) {

divSpoilerText = divSpoiler.getElementsByTagName('div')[1];

if (divSpoilerText.style.display != "block") {
	divSpoilerText.style.display = "block";
} 
else {
	divSpoilerText.style.display = "none";
}
}

// used by "video" plugin to show mekk's watchbot frame

function show_mekks_game(el, id) {

el.parentNode.style.display = 'none'; 
popup_window('/cd/show_mekks_game.php?g=' + id,558,328);
}



// Make post subjects provide post ids. For now, subject is always inside a table cell

function setupPostSubjects() {

var el;

var rgTds = document.getElementsByTagName("TD");

for (var x=0; x<rgTds.length; x++) {
	el = rgTds[x];

	if (el.id.substr(0, 6) == 'postid')
		el.ondblclick = new Function("exposePostId(this);");
	}
}

function exposePostId(input) {

	var strId;
	
	if (typeof(input)=="string") {
		
		// x=NNN was passed as a parameter

		strId = input;
	} 
	else {

		// element with id = postidNNN was passed as a parameter
		
		strId = "p=" + input.id.substr(6);
	}

	if (window.clipboardData) {
		
		 window.clipboardData.setData("Text", strId);
	}
	else {
	
		// for FF, show prompt window for user to copy/paste from there
	
		prompt("You can copy Id from field below", strId);
	}
}

function setupFixit() {

var el;
var previewNeeded = false;

var rgSpans = document.getElementsByTagName("STRONG");

for (var x=0; x<rgSpans.length; x++) 
	{
	el = rgSpans[x];

	// add WOW lookup behaviors to WOW items
	
	if (el.innerHTML.match('Fixit'))
		{
		previewNeeded = true;
		el.onmouseover = new Function("showTooltip(this)"); 
		el.onmouseout = new Function("hideTooltip()");
		}
	}

// if there are previews on the page, create preview div

if (previewNeeded) createPreviewToolTip();
}

function setupSpans() {

var el;
var previewNeeded = false;

var rgSpans = document.getElementsByTagName("SPAN");

for (var x=0; x<rgSpans.length; x++) 
	{
	el = rgSpans[x];

	// add WOW lookup behaviors to WOW items
	
	if (el.className == 'wow_item') 
		{
		previewNeeded = true;
		el.onmouseover = new Function("showTooltip(this)"); 
		el.onmouseout = new Function("hideTooltip()");
		}
	}

// if there are previews on the page, create preview div

if (previewNeeded) createPreviewToolTip();
}


function setupLinks() {

var el;
var previewNeeded = false;
var fPostLink;

var rgLinks = document.getElementsByTagName("A");

for (var x=0; x<rgLinks.length; x++) {
	el = rgLinks[x];

	fPostLink = el.href.match(/^(http:\/\/www.mrfixitonline.com)*\/viewtopic\.php\?(p|t)=[0-9]+/);

	// add preview behaviors to topic and post links, add topicpreview = 'none' to avoid preview
	
	if (fPostLink && el.getAttribute('topicpreview') != 'none') {
		previewNeeded = true;
		el.onmouseover = new Function("showTooltip(this)"); 
		el.onmouseout = new Function("hideTooltip()");
	}

	// pretty up forum, post, and game links by inserting an image instead of text
	
	if (el.innerHTML == '#post' || (el.innerHTML == el.href && fPostLink))
		el.innerHTML = '<img width=57 height=15 border=0 src="/templates/subSilver/images/icon_post_link.gif" />';
	if (el.innerHTML == '#game')
		{
		el.innerHTML = '<img style="position: relative; top: 2px" width=57 height=15 border=0 src="/templates/subSilver/images/icon_game_link.gif" />';

		// replace link with the link to new viewer

		var rgMatch = el.href.match(/[0-9]+$/);
		var gameId = rgMatch[0];
		el.href = 'http://www.mrfixitonline.com/cd/mpgv.htm?p=' + gameId;
		}
	if (el.innerHTML == '#forum')
		el.innerHTML = '<img width=57 height=15 border=0 src="/templates/subSilver/images/icon_forum_link.gif" />';
	}

// if there are previews on the page, create preview div

if (previewNeeded) createPreviewToolTip();
}


// create preview div and track its movements

function createPreviewToolTip() {

if (!document.getElementById("previewtooltip")) 
	{
	tooltip = document.createElement('DIV');
	tooltip.id='previewtooltip';
	tooltip.style.position='absolute';
	tooltip.style.left='0';
	tooltip.style.top='0';
	tooltip.style.visibility='hidden';
	tooltip.style.display='none';
	document.body.appendChild(tooltip); 
	document.onmousemove=positionIt;
	}
}


// Sets up image swapping (thanks, Jehiah Czebotar), chess diagrams.
//
// To got rollover effect use HTML like this: 
// 	<img src="chess-instructions.gif" srcOnMouseOver="chess-instructions-on.gif">
// srcOnMouseOver can be shortcut to srco.

function setupImages() {

var elImage;
var srcReplacementImage;
var rgImages = document.getElementsByTagName("img");

for (var x=0; x<rgImages.length; x++) {
	elImage = rgImages[x];

	// get rolloever image from attribute srconmouseover or srco (shortcut for srconmouseover)
	
	srcReplacementImage = (elImage.getAttribute("srconmouseover") || elImage.getAttribute("srco")) ;

	if (srcReplacementImage) {

		// preload image
		elImage.rollover_img = new Image();
		elImage.rollover_img.src = srcReplacementImage;

		// set event handlers
		elImage.onmouseover = new Function("swapImage(this, 'srconmouseover');");
		elImage.onmouseout = new Function("swapImage(this, 'srconmouseout');");

		// (re)set srconmouseover (only necessary when srco shortcut was useed)

		elImage.setAttribute("srconmouseover", srcReplacementImage);

		// save original src
		elImage.setAttribute("srconmouseout", elImage.src);
		}

	// for a chess diagram, evoke diagram wizard on click

	if (elImage.src.match('cd\.php\?')) {

		elImage.style.cursor = "pointer";
		elImage.title = "Click to analyze";

		elImage.onclick = new Function("linkMCDW(this);");
		}
	
	// fix wrong src created when MFO has temporary URL.
	// we better weed them all and delete this code in the end

	if (elImage.src.match('http:\/\/files\.smartwebdesign\.com')) {
		srcReplacementImage = elImage.src;
		elImage.src = srcReplacementImage.replace(/http:\/\/files\.smartwebdesign\.com\/forums\/mfo/gi, '');
		}

	if (elImage.src.match('\/forums\/mfo')) {
		srcReplacementImage = elImage.src;
		elImage.src = srcReplacementImage.replace(/\/forums\/mfo/gi, '');
		}
	}
}

  
function swapImage(img, srcAlternativeImage){
	img.src = img.getAttribute(srcAlternativeImage);
}


// show MFO Chess Diagram Wizard window with diagram position 

function linkMCDW(img)
{
	var sParams = img.src.split("?")[1];
	var sUrl = "/cd/mcdwa.html?" + sParams;

	popup_window(sUrl, 610, 660);
}



function move_adminbars_right() {
	var elDiv;
	var rgDivs = document.getElementsByTagName("div");

	for (var x=0; x<rgDivs.length; x++) {
		elDiv = rgDivs[x];
		if (elDiv.className == 'adminbar') {
			elDiv.style.left = (document.body.clientWidth - elDiv.offsetWidth - 30) + 'px';
			elDiv.style.visibility='visible';
		}
	}
}
function move_adminbars_left() {
	var elDiv;
	var rgDivs = document.getElementsByTagName("div");

	for (var x=0; x<rgDivs.length; x++) {
		elDiv = rgDivs[x];
		if (elDiv.className == 'adminbar') {
			elDiv.style.left = '30px';
			elDiv.style.visibility='visible';
		}
	}
}

function setup_menu() {
	
var el = document.getElementById("mfomenu");

if (el == null) { return; }

var rgLi = el.getElementsByTagName("LI");

for (var x=0; x<rgLi.length; x++) {
	el = rgLi[x];
	
	// All submenus have ids - we need them
	
	if (el.id != '') {
		el.onmouseover = function () {this.getElementsByTagName("UL")[0].style.display = "block"; } ;
		el.onmouseout = function () {this.getElementsByTagName("UL")[0].style.display = "none"; } ;
	}
}
}

function exist(sFN) {
	if(self[sFN]) return true;
	return false;
}

function popup_window(url,width,height) { 
   window.open(url, "_blank", "width=" + width + ",height=" + height + ",scrollbars=yes,resizable=yes");   
}

function escapeOnEscape(e)
{
 if (!e) var e = window.event;
 if(e.keyCode == 27)	// Escape
   window.close();
}

// IMAGE TRANSPARENCY FUNCTIONS - START
// in IMG tag: onmouseover=img_high(this) onmouseout=img_low(this) style="FILTER: alpha(opacity=80)" 
function img_high(which2){
	theobject=which2
	highlighting=setInterval("img_highlight(theobject)",50)
}
function img_low(which2){
	clearInterval(highlighting)
	which2.filters.alpha.opacity=80
}
function img_highlight(cur2){
	if (cur2.filters.alpha.opacity<100)
		cur2.filters.alpha.opacity+=15
	else if (window.highlighting)
		clearInterval(highlighting)
}
// IMAGE TRANSPARENCY FUNCTIONS - END

// Topic preview functions - START
// They use three globals at the top

function requestPreview(requestCode)
{	
	var url="/mods/fetch_tooltip.php?" + requestCode;
	xmlHttp=GetXmlHttpObject(stateChanged);
	xmlHttp.open("GET", url , true);
	xmlHttp.send(null);
} 

function stateChanged() 
{ 
	if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
	{
		var results = xmlHttp.responseText;
		if(results == "") document.getElementById("previewtooltip").innerHTML = '<div id="previewtooltip_content1" style="overflow:hidden;"><div id="previewtooltip_content2">No info</div></div>';
		else document.getElementById("previewtooltip").innerHTML =  results;
	}
}

function GetXmlHttpObject(handler)
{ 
	var objXmlHttp=null;

	if (navigator.userAgent.indexOf("MSIE")>=0)
	{ 
		var strName="Msxml2.XMLHTTP";
		if (navigator.appVersion.indexOf("MSIE 5.5")>=0)
		{
			strName="Microsoft.XMLHTTP";
		} 
		try
		{ 
			objXmlHttp=new ActiveXObject(strName);
			objXmlHttp.onreadystatechange=handler;
			return objXmlHttp;
		} 
		catch(e)
		{ 
			alert("Error. Scripting for ActiveX might be disabled");
			return;
		} 
	} 
	else
	{
		objXmlHttp=new XMLHttpRequest();
		objXmlHttp.onload=handler;
		objXmlHttp.onerror=handler;
		return objXmlHttp;
	}
}

function showTooltip(input)
{
	var requestCode;
	var itemName;
	
	if (input.className == 'wow_item')
		{
		// this span should contain WOW item name

		itemName = input.innerHTML;
		
		// strip tags (in case of paragraph getting inside the span)

		var regExp = /<\/?[^>]+>/gi;
		itemName = itemName.replace(regExp,"");

		// encode quotes - we are passing request as a paramenter in javascript
		
		itemName = itemName.replace(/\'/g, "#kavychka#");
		requestCode = "wow=" + itemName;
		}
	else if (input.nodeName == 'STRONG')
		{
		// this span should contain Fixit name

		requestCode = "t=7482";
		}
	else
		{
		// href of this link should contain t=NNN or p=NNN
		
		var rgMatch = input.href.match(/(t|p)=[0-9]+.*$/);
		requestCode = rgMatch[0];
		}
		
	
	tipEnabled = true;
	tooltip.style.display = "block";
	positionIt;

	delayTooltip=setTimeout("displayTooltip('" + requestCode + "')",500);
}

function displayTooltip(requestCode)
{
	tooltip.style.visibility="visible";
	tooltip.style.display="block";
	requestPreview(requestCode);
}

function positionIt(e)
{
	if(tipEnabled==true)
	{
		if (!e) var e = window.event;
		if(e) {
			var posx = 0;
			var posy = 0;
			
			if (e.pageX || e.pageY) {
				posx = e.pageX;
				posy = e.pageY;
			}
			else if (e.clientX || e.clientY) {
				posx = e.clientX + document.body.scrollLeft
					+ document.documentElement.scrollLeft;
				posy = e.clientY + document.body.scrollTop
					+ document.documentElement.scrollTop;
			}
			
			var overflowX = (document.body.clientWidth + document.body.scrollLeft + document.documentElement.scrollLeft) - (posx + 25+ tooltip.clientWidth);
			if(overflowX < 0) posx -= 25+ (tooltip.clientWidth);

			var overflowY = (document.body.clientHeight + document.body.scrollTop + document.documentElement.scrollTop) - (posy + 15+ tooltip.clientHeight);
			if(overflowY < 0) posy += overflowY;
			
			tooltip.style.left=(10+posx);
			tooltip.style.top=(10+posy);
			
		}
	}
}

function hideTooltip()
{
	clearTimeout(delayTooltip);
	document.getElementById("previewtooltip").innerHTML='<div id="previewtooltip_content1" style="overflow:hidden;"><div id="previewtooltip_content2">Loading...</div></div>';
	tooltip.style.visibility="hidden";
	display="none";
	tipEnabled=false;
}

// Topic preview functions - END

