/**********************************************************************************************\
RDWonlineTransFormersInventory - comprehensive behaviors
August 6, 2011

Written by Ronald D. Willis
2004-2012 Arducane Development.  All rights reserved.
\**********************************************************************************************/

var $x, $y, $target, $robotname, $initialbackground, autoclosewindow;
autoclosewindow = function() { $target.fadeOut(400, function() {$(this).empty().hide();}); };

/*---------------------------------------------------------------------------------------------------------------------------------------------------------*/

function closePreviousTransFormerProfile()
{
	$('span[id$="info"]').empty().hide();
}

/*---------------------------------------------------------------------------------------------------------------------------------------------------------*/

function showPanelByIndex (index)
{
	var panels = $('div[id^="panel"]').removeAttr('style').hide(), selected = $(panels.get(index));

	if (index >= 0 && index < panels.length)
		selected.fadeIn(500);
}

/*---------------------------------------------------------------------------------------------------------------------------------------------------------*/

function sendRequestForTransformerProfileByName (name)
{
	closePreviousTransFormerProfile();
	var piece = name.replace(/\(/g, "\\(").replace(/\)/g, "\\)");
	$robotname = piece;
	$target = $('span#' + piece + 'info');

	$initialbackground = {
		'background-color' : $target.css('background-color'),
		'background-image' : $target.css('background-image'),
		'background-position' : $target.css('background-position'),
		'background-repeat' : $target.css('background-repeat'),
		'cursor' : $target.css('cursor')
	};

	if ($.browser.msie)
		$target.css({'width':'450px', 'height':'auto'});

	$.ajax({
		error : function (xhr)
		{
			var msg = null;

			if (xhr != null)
				if (xhr.responseText != null && xhr.responseText != "")
					msg = xhr.responseText;

			showErrorNotice(msg);
		},
		success : function (data)
		{
			$target.empty();

			if (data.hasOwnProperty('error'))
			{
				if (data.error != null)
					if (data.error.length > 0)
						showErrorNotice(data.error);
			}
			else
			{
				var bg = $($robotname + 'info').css('background-color');
				$target.css({'opacity':0.9, 'background-color':bg}).fadeIn(250);
				interpolateJsonResponseOfTransFormerData(data);
			}
		},
		beforeSend : setCommonRequestHeaders,
		type : "POST",
		url : "_tf_remote.php",
		global : false,
		timeout : getDefaultTimeout,
		dataType : "json",
		data : {'task':'robot', 'name':name}
   });
}

/*---------------------------------------------------------------------------------------------------------------------------------------------------------*/

function showErrorNotice (msg)
{
	var msgDefault = 'There was a problem with the server request while fetching information for <strong>' + $robotname.replace(/_/g, ' ');
	msgDefault += '</strong>. Please try again.';
	$target.css({'background':'#FFFFFF', 'color':'#000000'}).html(msg || msgDefault).fadeIn(250);
	setTimeout(autoclosewindow, 3000);
}

/*---------------------------------------------------------------------------------------------------------------------------------------------------------*/

function loadTransformersImageGalleryData()
{
	var processXmlResponse = function (xml)
	{
		var xmlObject, autobots, decepticons, numAutobots, numDecepticons, robot, alink, autobottarget, decepticontarget;
		xmlObject = $(xml);
		autobots = xmlObject.find('autobots > name');
		decepticons = xmlObject.find('decepticons > name');
		numAutobots = autobots.size();
		numDecepticons = decepticons.size();
		$('#autobotcount').text(numAutobots.toString());
		$('#decepticoncount').text(numDecepticons.toString());
		autobottarget = $('#autobotlistcontainer ul').empty();
		decepticontarget = $('#decepticonlistcontainer ul').empty();

		for (var i = 0; i < numAutobots; i++)
		{
			robot = $(autobots.get(i)).text();
			alink = $('<a href="javascript:void(0);" class="robotlink" rel="autobots">');
			alink.attr('title', robot).html(robot).appendTo($('<li></li>').attr('title', robot).appendTo(autobottarget));
		}

		for (var j = 0; j < numDecepticons; j++)
		{
			robot = $(decepticons.get(j)).text();
			alink = $('<a href="javascript:void(0);" class="robotlink" rel="decepticons">');
			alink.attr('title', robot).html(robot).appendTo($('<li></li>').attr('title', robot).appendTo(decepticontarget));
		}
	};

	closePreviousTransFormerProfile();
	$.post("_tf_remote.php", {'task':'gallery'}, processXmlResponse, "xml");
	var insignia = '<img src="images/insignia.png" alt="The TransFormers" title="The TransFormers" id="transformerimage" />';
	$('#transformerimagecontainer').empty().append(insignia);
}

/*---------------------------------------------------------------------------------------------------------------------------------------------------------*/

function addBoxArtImageToProfile (name, target)
{
	var imgname = name.toString().toLowerCase().replace(/[^A-Za-z]/g, "");
	var csses = { 'background-image' : 'url('+_images[imgname]+')', 'left' : '360px' }, override = false;

	if ($.inArray(imgname, ['laserbeak','blastoff','horribull','powermasteroptimusprime','silverbolt','squeezeplay','shockwave']) != -1)
	{
		csses['left'] = '400px';
	}
	else if ($.inArray(imgname, ['skalor', 'nautilator']) != -1)
	{
		csses['top'] = '-60px';
		csses['left'] = '310px';
	}
	else if ($.inArray(imgname, ['skullcruncher']) != -1)
	{
		csses['left'] = '380px';
	}
	else if ($.inArray(imgname, ['ratbat','ravage']) != -1)
	{
		csses['left'] = '420px';
	}
	else if ($.inArray(imgname, ['cyclonus','getaway','grapple','headstrong','hotspot','jazz','metroplex','octane','swindle','tentakil','ultramagnus']) != -1)
	{
		csses['left'] = '300px';
	}
	else if ($.inArray(imgname, ['sixshot']) != -1)
	{
		csses['left'] = '340px';
	}
	else if ($.inArray(imgname, ['pounce','wingspan']) != -1)
	{
		csses['background-image'] = 'url('+_images['pouncewingspan']+')';
		csses['left'] = '420px';
		override = true;
	}
	else if ($.inArray(imgname, ['fastlane','cloudraker']) != -1)
	{
		csses['background-image'] = 'url('+_images['fastlanecloudraker']+')';
		override = true;
	}

	if (_images.hasOwnProperty(imgname) || override == true)
		$('<div class="robotimage"></div>').css(csses).appendTo(target);
}

/*---------------------------------------------------------------------------------------------------------------------------------------------------------*/

function interpolateJsonResponseOfTransFormerData (response)
{
	var parent = $('<span></span>'), row = null, rightside = null;

	if (response.hasOwnProperty('name'))
	{
		if (response.name.length > 0)
		{
			addBoxArtImageToProfile(response.name, parent);
			$('<div class="robotname"></div>').text(response.name).appendTo(parent);
		}
	}

	if (response.hasOwnProperty('series'))
	{
		if (response.series.length > 0)
		{
			row = $('<div class="inforow"></div>');
			$('<div class="left">Series: </div>').appendTo(row);
			$('<div class="right"></div>').text(response.series).appendTo(row);
			row.appendTo(parent);
		}
	}

	if (response.hasOwnProperty('allegiance'))
	{
		if (response.allegiance.length > 0)
		{
			row = $('<div class="inforow"></div>');
			$('<div class="left">Allegiance: </div>').appendTo(row);
			$('<div class="right"></div>').text(response.allegiance).appendTo(row);
			row.appendTo(parent);
		}
	}

	if (response.hasOwnProperty('purpose'))
	{
		if (response.purpose.length > 0)
		{
			row = $('<div class="inforow"></div>');
			$('<div class="left">Function: </div>').appendTo(row);
			$('<div class="right"></div>').text(response.purpose).appendTo(row);
			row.appendTo(parent);
		}
	}

	if (response.hasOwnProperty('quote'))
	{
		if (response.quote.length > 0)
		{
			row = $('<div class="inforow"></div>');
			$('<div class="left">Quote: </div>').appendTo(row);
			$('<div class="right"></div>').html('<em>"' + response.quote + '"</em>').appendTo(row);
			row.appendTo(parent);
		}
	}

	if (response.hasOwnProperty('description'))
	{
		if (response.description.length > 0)
		{
			row = $('<div class="inforow"></div>');
			$('<div class="left">Description: </div>').appendTo(row);
			$('<div class="right"></div>').text(response.description).appendTo(row);
			row.appendTo(parent);
		}
	}

	if (response.hasOwnProperty('gestaltpart'))
	{
		if (response.gestaltpart != null && response.gestaltpart.combiner != null)
		{
			row = $('<div class="inforow"></div>');
			$('<div class="left">Combiner Group Member: </div>').appendTo(row);
			$('<div class="right"></div>').text(response.name + ' forms the ' + response.gestaltpart.combiner.replace(/_/g, ' ')).appendTo(row);
			row.appendTo(parent);
		}
	}

	if (response.hasOwnProperty('weapons'))
	{
		if ($.isArray(response.weapons))
		{
			row = $('<div class="inforow"></div>');
			$('<div class="left">Weapon(s): </div>').appendTo(row);
			$('<div class="right"></div>').html(response.weapons.join('<br />')).appendTo(row);
			row.appendTo(parent);
		}
	}

	if (response.hasOwnProperty('modes'))
	{
		row = $('<div class="inforow"></div>');
		$('<div class="left">Modes: </div>').appendTo(row);
		$('<div class="right"></div>').html(response.modes.join(' &#8594; ')).appendTo(row);
		row.appendTo(parent);
	}

	if (response.hasOwnProperty('subgroups'))
	{
		if ($.isArray(response.subgroups))
		{
			row = $('<div class="inforow"></div>');
			$('<div class="left">Sub-Group(s): </div>').appendTo(row);
			$('<div class="right"></div>').html(response.subgroups.join('<br />')).appendTo(row);
			row.appendTo(parent);
		}
	}

	if (response.hasOwnProperty('sidekicks'))
	{
		if ($.isArray(response.sidekicks))
		{
			var sidekicks = null;
			row = $('<div class="inforow"></div>');
			$('<div class="left">Sidekick(s): </div>').appendTo(row);
			rightside = $('<div class="right"></div>');

			if (response.sidekicks.length > 0)
				sidekicks = response.sidekicks.pop();

			if (response.sidekicks.length > 0)
				sidekicks = response.sidekicks.join(', ') + ' and ' + sidekicks;

			rightside.append(sidekicks).appendTo(row);
			row.appendTo(parent);
		}
	}

	if (response.hasOwnProperty('stats'))
	{
		if ($.isPlainObject(response.stats))
		{
			row = $('<div class="inforow"></div>');
			$('<div class="left">Stats: </div>').appendTo(row);
			rightside = $('<div class="right"></div>');

			for (var key in response.stats)
			{
				rightside.append('<strong>' + key + '</strong>: ').append("<br />\n");

				for (var z = 1; z <= response.stats[key]; z++)
					rightside.append($('<img src="./images/intensity_' + z + '.jpg" />'));

				var percent = " (" + Math.round(parseFloat(response.stats[key] / 10) * 100, 1) + "%)";
				rightside.append(percent + "<br />");
			}

			rightside.appendTo(row);
			row.appendTo(parent);
		}
	}

	var Lclose = $('<span class="closewindow"></span>');
	$('<a href="javascript:void(0);">[ close ]</a>').click(autoclosewindow).appendTo(Lclose);
	Lclose.appendTo(parent);

	with ($target)
	{
		css($initialbackground);

		if ($.browser.msie || $.browser.opera)
			css('background-position', 'top right');
	}

	parent.appendTo($target.draggable());
}

/*---------------------------------------------------------------------------------------------------------------------------------------------------------*/

function attachImageGalleryEvents()
{
	$('#transformerimagecontainer').html('<h2 style="text-align:center;">Loading gallery, please wait...</h2>');

	$('a.robotlink').live('click', function()
	{
		var linked = $(this), allegiance = linked.attr('rel'), imagename = linked.text().toLowerCase().replace(/[^a-z]/g, "");
		var path =  './images/' + allegiance + '/';
		$('#transformerimage').attr({'src' : path + imagename + '.png', 'alt' : linked.text(), 'title' : linked.text()});
		$('#transformerimagecontainer').css('background', 'url('+path+'_bg.jpg) top left no-repeat');
	});

	$('#transformersimagegallerycontainer #autobotlistcontainer ul li, #transformersimagegallerycontainer #decepticonlistcontainer ul li').live('click', function(e)
	{
		e.preventDefault = true;
		e.stopPropagation();

		if ($(e.target).is('li')) //helps prevent excessive recursion
			$(this).find('a.robotlink').click();
	});

	$('#viewtransformergallery').click(function(e)
	{
		e.preventDefault = true;
		e.stopPropagation();

		if ($(e.target).is('a')) //helps prevent excessive recursion
		{
			$('body').css('overflow', 'hidden');
			$('#adminloadingsheet').css({'visibility':'visible', 'position':'fixed'});
			var targetBG = $('#transformerimagecontainer').css('background-image', 'none').empty();
			targetBG.append($('<img src="images/insignia.png" alt="The TransFormers" title="The TransFormers" id="transformerimage" />'));
			$('div[id$="listcontainer"] ul').scrollTop(0);
			$('#transformersimagegallerycontainer').fadeIn(1200);
			loadTransformersImageGalleryData();
		}
	});

	$('#closegallerylink, #adminloadingsheet').click(function(e)
	{
		e.preventDefault = true;
		e.stopPropagation();
		var trigger = $('#favoritetrigger');

		if (trigger.text().toLowerCase().indexOf('hide') >= 0)
			if (trigger.click != null)
				trigger.click();

		$('#transformersimagegallerycontainer').fadeOut(800, function()
		{
			$('body').css({'overflowX':'hidden', 'overflowY':'scroll'}).show();
			$('#adminloadingsheet').css({'visibility':'hidden', 'position':'relative'});
			$('#transformerimagecontainer').css('background-image', 'none');
		});
	});

	$('#favoritetrigger').click(function()
	{
		var textvalue = $(this).text().toString(), image = $('#favoritecontainer');

		if (textvalue.indexOf('show') >= 0)
		{
			$(this).text(textvalue.replace('show', 'hide'));
			image.slideDown(500);
		}
		else
		{
			image.slideUp(500);
			$(this).text(textvalue.replace('hide', 'show'));
		}
	});
}

/*---------------------------------------------------------------------------------------------------------------------------------------------------------*/

function attachNavigationEvents()
{
	$('ul.jumpoff li:gt(0), ul.jumpoff li a:gt(0)').click(function(e)
	{
		e.preventDefault = true;
		e.stopPropagation();
		var targetNode = $(e.target);

		if (targetNode.is('li') || targetNode.is('a')) //helps prevent excessive recursion
			showPanelByIndex(targetNode.attr('data-key'));
	});

	$('ul.jumpoff li:eq(0), ul.jumpoff li a:eq(0)').click(function(e)
	{
		e.preventDefault = true;
		e.stopPropagation();
		var targetNode = $(e.target);

		if (targetNode.is('li') || targetNode.is('a')) //helps prevent excessive recursion
			showPanelByIndex(999);
	});
}

/*---------------------------------------------------------------------------------------------------------------------------------------------------------*/

function attachPanelStyles()
{
	if (Modernizr.csscolumns == true)
	{
		//to not overwrite Wish List with Currently Owned, use each()
		$('div[id^="panel"] div.jleft').removeClass('jleft').addClass('jleftcolumns').each(function()
		{
			$(this).html($(this).html().toString().replace(/<\/span>[^<]+?<a/g, "</span>\n<a"));
		});

		$('div[id^="panel"] div.jleftcolumns a[rel="activaterobotprofile"]').css({'margin-bottom':'2px'}).show();
	}
}

/*---------------------------------------------------------------------------------------------------------------------------------------------------------*/

function attachGeneralEvents()
{
	if (Modernizr.csstransforms == false || $.browser.mozilla != true)
		$('#newbrand').hide();

	var body = $('body').css({'overflowX':'hidden', 'overflowY':'scroll'});

	$('#largemastheadcontainer').click(redirectHome);

	$('<div id="adminloadingsheet"></div>').appendTo(body);

	$('a#vs').attr({'target':'_blank', 'href':'_tf_remote.php'});

	$('a.liveprofilelink').click(function()
	{
		sendRequestForTransformerProfileByName($(this).attr('id'));
	});

	$('span.tooltip').mouseover(function()
	{
		$('#transformertooltip').css({'top':($(this).offset().top-10)+'px','left':($(this).offset().left+20)+'px'}).fadeIn(500);
	})
	.mouseout(function()
	{
		$('#transformertooltip').delay(100).fadeOut(500);
	});

	$('#url').removeAttr('style').inputTextFilter(/[^A-Za-z0-9() ]/g).unbind('blur').blur(function()
	{
		$(this).css({'border-color':'#123456', 'background':'#CDDEFF', 'opacity':'0.6'});
	})
	.focus(function()
	{
		$(this).css({'border-color':'#777777', 'background':'#FFFFFF', 'opacity':'1.0'});
	});

	$('a[rel]').live('click', function()
	{
		var robotname = $(this).attr('id');

		if (robotname != null)
			if (robotname.length > 0)
				sendRequestForTransformerProfileByName(robotname);
	});
}

/*=============================================================================================*/

$(function()
{
	attachGeneralEvents();
	attachNavigationEvents();
	attachImageGalleryEvents();
	attachPanelStyles();
});
