var GUI = function() {
	this.langCode = "uk";
	this.currentMenuItem = null;

	function initGUI() {
		this.langCode = $('html').attr('lang');
		
		ApplaySpotBoxStructure();
		ApplyCandyButtonCalories();
		SetUpModuleGraphics();
		SetupNavigationGUI();
		MiscGUIFixes(false);

		if ($.browser.msie6) {
			DD_belatedPNG.fix('.spotBox .bw');
			DD_belatedPNG.fix('.spotBox .bw2');
			pngfix();
		}
	}

	function MiscGUIFixes(partialupdate) {
		if ($.browser.msie6) $(((partialupdate) ? '.partialUpdate ' : '') + "input[@type='text']").addClass('ietextfield');
		if ($.browser.msie6) $(((partialupdate) ? '.partialUpdate ' : '') + "textarea").addClass('ietextarea');

		AddPipesToList('#footer .ftrlegals'); /* self explanatory */
		AddPipesToList('#platformSearchResult .navRow'); /* self explanatory */

		$("a.viewpopup").lightImgBox();
		//		$(((partialupdate) ? '.partialUpdate ' : '') + "a.modal").modalBox();

		HoverClassHelper('#globalMenu li', 'hover');
		$('.psframe').each( function() { $(this).append('<div></div>'); });
		
		$('.dppager').each( function() {
			var item = $(this);
			var pager = $('.pageNavigator', item).clone(false);
			$('.item:last', item).after( $('<div>').addClass('tm4 argt').append( pager ) );
		});
		
		if ($.browser.msie6) {
			var footer = $('#footer');
			var wrapper = $('<div>').addClass('ie_footer');
			footer.prepend( wrapper );
			wrapper.append( $('.footerEaLogo', footer).parent('a') );
			wrapper.append( $('#hasbroFooterLogo', footer).parent('a') );
			
			$('#mainMenu div ul').addClass('snav');
		}
		
		var cnt = $('#gameInformation .txtcnt');
		var img = $('img', cnt);
		img.hide();
		var cntwidth = cnt.width();
		img.show();
		$('img', cnt).each( function() {
			var item = $(this);
			if ( item.width() > cntwidth ) {
				item.attr("width", cntwidth);
				item.removeAttr("height");
				item.css( { width: cntwidth + 'px', height: 'auto' } );
			}
		});
	}

	function SetupNavigationGUI() {
		var mainMenu = $('#mainMenu');

		if (!$.browser.msie6) {
			$('> li > span a', mainMenu).each(function() {
				var item = $(this);
				var itemText = item.text();
				item.before($('<i></i>').addClass('stroke stroke1').text(itemText));
				item.before($('<i></i>').addClass('stroke stroke2').text(itemText));
				item.before($('<i></i>').addClass('stroke stroke3').text(itemText));
				item.before($('<i></i>').addClass('stroke stroke4').text(itemText));
			});
		}

		var menuOffset = $('#mainMenu').offset();
		var thirdItem = $('#mainMenu > li:eq(2)');
		if (thirdItem.length) {
			var offset = (thirdItem.offset().left - menuOffset.left) + thirdItem.width();
			thirdItem.css('margin-right', (580 - offset) + 'px');
		}

		$('> li', mainMenu).hover(
			function() {
				var item = $(this);
				item.toggleClass('hover');
			},
			function() {
				var item = $(this);
				item.toggleClass('hover');
			}
		);
		
		/* fix menu width */
		var subMenus = $('div', mainMenu);
		if ( !$.browser.msie6 ) subMenus.wrapInner('<div></div>');
		subMenus.css({top: "-999px", display: "block"});
		$('> li:eq(1),> li:eq(2)', mainMenu).each( function() {
			var items = $('ul > li', this);
			var callbackIterator = function( items, col, callback ) {
				var itIndex = (col - 1);
				var itemWidth = 0;
				for( var itIndex; itIndex<items.length; itIndex+=3 ) {
					callback( items, itIndex );
				}		
			}
			
			var subWidth = 0;
			for ( var i = 1; i <= 3; i++ ) {
				var maxWidth = 0;
				var colWidth = 140;
				callbackIterator( items, i, function(items, itIndex) {
					itemWidth = $(items[itIndex]).width();
					if ( itemWidth > maxWidth ) maxWidth = itemWidth;
				});
				colWidth = ( maxWidth > colWidth) ? maxWidth : colWidth;
				callbackIterator( items, i, function(items, itIndex) {
					$(items[itIndex]).css("width", colWidth+"px");
				});
				subWidth += colWidth;
			}
			subWidth = ( subWidth > 0 ) ? (subWidth+25)+'px': 'auto';
			$($(this).children('> div')[1]).css("width", subWidth);
		});
		subMenus.css({top: ($.browser.msie6)? "28px" :"41px", display: ''});
	}

	function HoverClassHelper(selector, cssclass) {
		$(selector).hover(
			function() { $(this).toggleClass(cssclass); },
			function() { $(this).toggleClass(cssclass); }
		);
	}

	function AddPipesToList(rootElement) {
		var list = $(rootElement);
		if (list) {
			$('li', list).each(function(index, item) {
				if (!$(item).is(':nth-child(1)')) {
					$(item).before('<li class="sep">|</li>');
				}
			});
		}
	}

	function ApplaySpotBoxStructure() {
		$('.spotBox:not(.nogui),.fpSpotBox,.dpagewrapper').each(function() {
			var item = $(this);
			if (!item.hasClass('spotBox') && !item.hasClass('fpSpotBox')) {
				item.addClass('spotBox');
			}

			item.wrapInner(
				$('<div>').addClass('bw').append(
					$('<div>').addClass('bw2').append(
						$('<div>').addClass('content selfClear')
					)
				)
			);

			var itemHeight = item.find('.bw2').height();
			if (itemHeight > 484) {
				item.find('.content').wrap($('<div>').addClass('bw4').wrap($('<div>').addClass('bw3')).parent());
			}

			var top = $('<div>').addClass('bt'); if (!item.is('.plain')) top.append('<div>');
			var bottom = $('<div>').addClass('bb'); if (!item.is('.plain')) bottom.append('<div>');
			item.prepend(top);
			item.append(bottom);
		});
	}

	function ApplyCandyButtonCalories() {
		$('.gbtn').each(function() {
			var cObj = $(this);

			if (!$.browser.msie6) {
				var val = cObj.text() || cObj.val();

				if (cObj.is(':submit,:button')) {
					cObj = $('<a>');
					cObj.insertAfter(this)
						.addClass(this.className)
						.attr('id', this.id + "_re")
						.attr({ rel: $(this).attr('rel') });

					cObj.click(function() { $(this).prev().click(); return false; });
					$(this).css({ display: 'none' });
				}

				cObj.text('').append(
					$('<span></span>')
					.append('<i></i>')
					.append(
						$('<span></span>')
						.append(val)
						.append('<i></i>')
					)
				);
			} else {
				cObj.wrapInner('<span></span>');
			}
		});
	}

	function SetUpModuleGraphics() {
		var spotColl = $('#frontpageSpots .fpSpotBox');
		spotColl.each(function() {
			var item = $(this);
			switch (spotColl.index(this)) {
				case 0:
					item.addClass('left'); break;
				case 1:
					item.addClass('light'); break;
				case 2:
					item.addClass('right'); break;
			}
		});
	}
	
	function ViewProductScreenshots( gameId, platName, index ) {
		$.ajax({
			type: "POST",
			url: "/" + this.langCode + "/Handlers/JSON/GetProductScreenshots.ashx?productId="+gameId+"&platName="+platName,
			contentType: "application/json; charset=utf-8",
			dataType: "json",
			data: "{}",
			success: function( result ) {
				var prodScreens = [];
				jQuery.each( result, function() {
					prodScreens.push( [this.Url, ""] );
				});
				jQuery.lightBoxManager._start( null, null, prodScreens, index );
			}
		});
		
	}

	return {
		init: initGUI,
		viewProductScreenshots : ViewProductScreenshots
	}
} ();

var CallbackHandler = function() {
	var scripts = [];
	var num = 0;
	
	function startup() {
		for( var i = 0; i < num; i++ )
			scripts[ i ]();
	}
	
	function addScript( func ) {
		scripts[ num++ ] = func;
	}
	
	return {
		startup : startup,
		addScript : addScript
	}
}();

$( document ).ready( function() {
	GUI.init();
	//CallbackHandler.startup();
});