/************************ OBJECTS */
aColors = {
	defaultImgColor:'#030303', // cor default para o fundo do container das imagens ( na listagem de games por exemplos )
	defaultTextColor:'#232323', // cor default para os textos ( na listagem de games por exemplos )
	
	/* cores para os overs { */
	colorA:'#4AB1E4',
	colorB:'#6C78B8',
	colorC:'#755CA5',
	colorD:'#7C2A8E'
	/* } cores para os overs */
}
/*
 * aColors = Aquiris Colors
 * cores padrões do site para serem usadas em efeitos js
 */
/*OBJECTS *************************/



/************************ VARS */
var loadersPath = projRoot + 'imgs/misc/';
var ajaxLoad = new Array( loadersPath + 'ajax-loader-a.gif', loadersPath + 'ajax-loader-b.gif', loadersPath + 'ajax-loader-c.gif', loadersPath + 'ajax-loader-d.gif');
/*
 * array com os tipos de loaders para conteúdos carregados com ajax
 */
/* VARS *************************/



/************************ INIT */
/**** Loaders img preload */
var loaders = new Array();
for (i = 0; i < ajaxLoad.length; i++) {
	loaders[i] = new Image();
	loaders[i].src= ajaxLoad[i] ;
}
/* Loaders img preload ****/

jQuery(document).ready(
	function() {
		translate();// contém as traduções, conforme a língua selecionada no site, de diversos textos utilizados no js
		defaultInit(); // executa diversas ações default no site
		
		if(!supportMaxPropert()) { // ie6 hacks
			ieFlickerFix(); 
		}
		else {
			blurList(); 
			/* 
			 * executa a animação para links com o efeito blur nos eventos mouseenter, mouseleave, focus e blur
			 * apenas para browsers modernos. No ie6 é implementado um over básico por css, pois ele não suporta 
			 * a mesma animação.
			 */
		}
		
		rels(); // comandos disparados conforme atributos rel da tag 'a'
		fadeLists();
		/*
		 * para elementos que ficam "esmaecidos" no carregamento da página e destacados no over
		 * exemplo: listagem de games
		 */
		
		ajaxPage(); 
		/* 
		 * pega o endereço no atributo href dos links com a classe "ajax" e quando clicados carrega o conteúdo
		 * em um container no topo dentro da div "content"
		 */
		
		gameDetails();
		/*
		 * função com os efeitos da página de detalhes de games 
		 */	
		 
		 contactForm(); // ajax dp formulário de contato
		
	}
);
/* INIT *********************/



/********************* document.ready */
function defaultInit() {
	jQuery('a.no-js').removeClass('no-js'); // retira a classe 'no-js' de todos os links que a possuem
}


function rels() {
	jQuery('a[rel*="external"]').each( // abre uma nova janela
		function(elm) {
			jQuery(this).attr({ target:'_blank' });// title: jQuery(this).attr('title') +  ' ( '+ words.newWindow +' ) ' });
		}
	); 
}


function blurList(rebind) {
	var links = jQuery('ul.blur-list a:not(.current)');
	
	if (!rebind) {
		jQuery('<span class="hide-text png-bg"></span>').insertBefore(links); //insere o elemento span antes do hyperlink
		links.parent().css('position', 'relative').end().css({
			position: 'absolute',
			top: 0,
			left: 0,
			opacity: 0
		}).addClass('over');
	}
	
	if (rebind == 'over' || !rebind ) {
		links.bind('mouseenter focus', function(event){
			animBlurList(jQuery(this), 'over'); // link fica visível		
		});
	}
	
	if (rebind == 'out' || !rebind) {
		links.bind('mouseleave blur',
			function() {
				animBlurList(jQuery(this),'out'); // volta o blur
			}
		);
	}
	
}


function fadeLists() {
	var fadeList  = jQuery('ul.fade-list, ul.cycle-fade-list');
	var fadeItens  = fadeList.find('a');
	var fadeImages = fadeItens.find('img');
	
	fadeImages.css('opacity','0.5');
	
	fadeItens.bind('mouseenter focus',
		function() {
			fadeItensAnimate(jQuery(this), 'over');
		}
	);
	
	fadeItens.bind('mouseleave blur',
		function(evt) {
			fadeItensAnimate(jQuery(this), 'out');
		}
	);	
}


function ajaxPage() {
	var elmClick;
	var ajaxElm = jQuery('a.ajax-page:not(.current)'); // links que carregam páginas com ajax
	var pageContainer;
	var pageContent;
	
	ajaxElm.bind('click',
		function() {
			elmClick = jQuery(this); // elemento que foi clicado
			
			if(!elmClick.hasClass('ajax-current')) {
				pageContainer = jQuery('#ajaxPageContainer')[0] ? jQuery('#ajaxPageContainer') : false;
				pageContent = jQuery('#ajaxPageContent')[0] ? jQuery('#ajaxPageContent') : false;
				elmCurrent = elmClick.parent().siblings().find('a.ajax-page.ajax-current'); // outro link da mesma lista cujo conteúdo esteja sendo visualizado
				
				if (supportMaxPropert()) { 
					animBlurList(elmCurrent, 'out');
					elmCurrent.removeClass('ajax-current');
					
					blurList('out'); // retorna todos os eventos blur
					
					elmClick.unbind('mouseleave blur').addClass('ajax-current'); // retira os eventos que retornam o blur do item e adiciona a classe "ajax-current" 
				}
				else { // ie6 ¬¬
					ajaxElm.css('backgroundPosition','left top');
					elmClick.css('backgroundPosition','left bottom');
				}
				
				newAjaxLoader = ajaxLoader(jQuery('.loader').attr('src')); // chama a imagem de loader
				
				if (pageContainer) { // se já existir o container para carregamento de páginas com ajax
					if(pageContainer.css('display') == 'none' ) {
						pageContainer.css('minHeight','68px').slideDown(
							function() {
								jQuery('.loader').attr('src', newAjaxLoader);
								ajaxPageAnimation(elmClick);
							}
						);
					}
					
					else {
						pageContainer.css('minHeight','68px');
						jQuery('.loader').attr('src', newAjaxLoader);
						pageContent.slideUp(
							 function() {
								ajaxPageAnimation(elmClick);
							}
						);
					}
					
				}
				
				else {
					jQuery('#content').prepend('<div id="ajaxPageContainer" class="box"><div id="ajaxPageContent"></div></div>');
					
					pageContainer = jQuery('#ajaxPageContainer');
					pageContent = jQuery('#ajaxPageContent');
					
					pageContainer.css('minHeight','68px')
							     .prepend('<img src="' + newAjaxLoader + '" alt="'+ words.loading +'" class="loader" />') 
								 // insere a imagem de loader
								 .slideDown( // abre a div container com um efeito slide
									function() {
										ajaxPageAnimation(elmClick);
									}
								);
				}	
				
				
				pageContainer.find('.close').live('click', // quando clicar no botão para fechar...
					function() {
						
						if (supportMaxPropert()) {
							pageContainer.slideUp(
								function() {
									pageContent.css('display','none');
								}
							);
							animBlurList(elmClick, 'out'); // retira o destaque do link visualizado
							blurList('out'); // retorna todos os eventos 
							elmClick.removeClass('ajax-current');
						}
						else { // ie6 again ¬¬
							elmClick.css('backgroundPosition','left top');
							pageContent.css('display','none');
							pageContainer.css('display','none');
						}
						
						return false;
					}
				);
			}
			
			return false;
		}
	);
}


function gameDetails() {
	if(jQuery('#game')[0]) {
		/********************* screenshots */
		var screenshot = jQuery('#gameScreenshot');
		var screenshotColor = screenshot.css('backgroundColor'); 
	 	var screenshotItens = jQuery('#screenshotsMenu a');
		var screenshotItensColor = screenshotItens.css('backgroundColor'); 
		var newAjaxLoader;
		var thisElm;
		var alt;
		var screenshotImg;
		
		screenshotItens.css('backgroundColor',aColors.defaultImgColor);
		
		screenshotItens.bind('mouseenter focus',
			function() {
				jQuery(this).css('backgroundColor', screenshotItensColor);	
			}
		);
		
		screenshotItens.bind('mouseleave blur',
			function() {
				jQuery(this).css('backgroundColor', aColors.defaultImgColor);	
			}
		);
		
		screenshotItens.bind('click',
			function() {
				thisElm = jQuery(this); 
				alt = thisElm.find('img').attr('alt'); 
				
				if(screenshot.css('display') != 'block' || screenshot.css('display') == 'block' && !thisElm.hasClass('img-loaded'))
					screenshot.css('backgroundColor', aColors.defaultImgColor).slideDown();
				
				//jQuery(window).scrollTo(screenshot, 800);
				screenshot.find('img:not(.loader)').remove();
				
				if(!thisElm.hasClass('img-loaded') || screenshot.css('display') != 'block') {
					if(screenshot.find('.close-screenshot')[0]) {
						screenshot.find('.close-screenshot').css('display','none');
					}
					else {
						screenshot.append('<a href="#" class="close-screenshot hide-text png-bg" title="'+ words.close +'">'+ words.close +'</a>');
						screenshot.find('.close-screenshot').css('display','none');
						closeScreenshot(); // bind
					}
					
				
					
					if(screenshot.find('.loader')[0]) {
						newAjaxLoader = ajaxLoader(screenshot.find('.loader').attr('src')); // chama a imagem de loader
						screenshot.find('.loader').attr('src', newAjaxLoader).css('display','block');
					}
					else {
						newAjaxLoader = ajaxLoader(); // chama a imagem de loader
						screenshot.prepend('<img src="' + newAjaxLoader + '" alt="'+ words.loading +'" class="loader" />'); // insere a imagem de loader
					}
				}
				
				screenshotImg = new Image();
				jQuery(screenshotImg).load(function () {
					thisElm.addClass('img-loaded');
					screenshot.css('backgroundColor', screenshotColor);
					screenshot.find('.loader').css('display','none');
					screenshot.find('.close-screenshot').css('display','block');
					
					if(jQuery('#jsScreenshot')[0])	
						jQuery('#jsScreenshot').attr({ src:thisElm.attr('href'), alt:alt }).css('display','block');
					else
						screenshot.prepend('<img id="jsScreenshot" src="'+ thisElm.attr('href') +'" alt="'+ alt +'" />');
      			
				}).error(function () {
           			screenshot.prepend(words.imgNotloaded);
   				}).attr({ src:thisElm.attr('href'), alt:alt });
				
				return false;
			}
		);
		
		
		function closeScreenshot() {
			jQuery('.close-screenshot').bind('click',
				function() {
					screenshot.slideUp();
					
					return false;
				}
			);	
		}
		/* screenshots *********************/
		
		
		/********************* videos */
		var video = jQuery('#gameVideo');
		var videoItens = jQuery('#videosMenu a');
		var gameEmbed = video.find('#gameEmbed');
		
		videoItens.click(
			function() {
				gameEmbed.find('#embed').remove();
				
				if(video.find('.loader')[0]) {
					newAjaxLoader = ajaxLoader(video.find('.loader').attr('src')); // chama a imagem de loader
					video.find('.loader').attr('src', newAjaxLoader).css('display','block');
				}
				else {
					newAjaxLoader = ajaxLoader(); // chama a imagem de loader
					video.prepend('<img src="' + newAjaxLoader + '" alt="'+ words.loading +'" class="loader" />'); // insere a imagem de loader
				}
				
				gameEmbed.load(jQuery(this).attr('id'),
					function() {
						video.find('.loader').css('display','none');
					}
				);
				
				return false;
			}
		);
		
		//Carrega primeiro vídeo
		jQuery("#videosMenu a:first").click();
		/* videos *********************/
	
	}
}


function contactForm() {
	if(jQuery('#contactForm')[0]) {
		var contactForm = jQuery('#contactForm');
		var fieldset = contactForm.find('fieldset');
		
		//Removendo evento Submit
		contactForm.unbind('submit');
		contactForm.bind('submit',
			function() {
				var inputs = contactForm.find(':input:not([type=submit])');
				var input;
				var emailVal = /^([\w]+)(.[\w]+)*@([\w]+)(.[\w]{2,3}){1,2}$/;
				var valid = true;
				var messages = contactForm.find('.notice, .error, .success'); 
				var inputSubmit = contactForm.find('input[type=submit]');
				var inputSubmitClone = inputSubmit.clone();
				
				messages.remove();
				inputs.css('borderColor','#151515');
				
			 	inputs.each(
					function(id) {
						input = jQuery(this);
						if(jQuery.trim(input.val()) == '' || input.filter('#email')[0] && emailVal.test(input.filter('#email').val()) != true) {
							input.css('borderColor',aColors.colorA);
							valid = false;
						}										
					}
				);
				
				if (!valid) {
					fieldset.append('<p class="error">'+ words.contactError +'</p>');
				}
				else {
					inputSubmit.click(function() { return false; });
					fieldset.append('<p class="notice">'+ words.contactNotice +'</p>');
					
					jQuery.post(projRoot + words.contact + '/' + contactForm.attr('action'), jQuery(this).serialize(),
						function(data){
							contactForm.find('.notice').remove();
							fieldset.append(data);
							inputSubmit.replaceWith(inputSubmitClone);
						}
					);
				}
				
				return false;
			}
		);
	}
	
}
/* document.ready ******************/



/********************* support functions */
function animBlurList(elm, event) { // executa a animação para deixar visível o link ou voltar o blur
	if(event == 'over') {
		var blurSpan = 0;	
		var blurLink = 1;		
	}
	else {
		var blurSpan = 1;	
		var blurLink = 0;
	}
	
	elm.prev().stop().animate({ opacity:blurSpan })
	   .end().stop().animate({ opacity:blurLink });
}


function fadeItensAnimate(elm, event) {
	var fadeItensLi = elm.parents('li');
	var fadeItensImgContainer =  elm.find('.image');
	var fadeItensImg = elm.find('img');
	var newColor = (fadeItensLi.hasClass('color-a') || fadeItensLi.hasClass('color-b') || fadeItensLi.hasClass('color-c') || fadeItensLi.hasClass('color-d')) ? true : false; // variável para saber se o item recebe nova cor (true or false)
	
	if (event == 'over') {
		if (newColor) {
			switch(true) {
				case fadeItensLi.hasClass('color-a'):
					fadeItensImg.css('opacity', '1');
					fadeItensImgContainer.css('borderColor', aColors.colorA);
					elm.css('color', aColors.colorA);	
				break;
				
				case fadeItensLi.hasClass('color-b'):
					fadeItensImg.css('opacity', '1');
					fadeItensImgContainer.css('borderColor', aColors.colorB);
					elm.css('color', aColors.colorB);
				break;
				
				case fadeItensLi.hasClass('color-c'):
					fadeItensImg.css('opacity', '1');
					fadeItensImgContainer.css('borderColor', aColors.colorC);
					elm.css('color', aColors.colorC);	
				break;
				
				case fadeItensLi.hasClass('color-d'):
					fadeItensImg.css('opacity', '1');
					fadeItensImgContainer.css('borderColor', aColors.colorD);
					elm.css('color', aColors.colorD);
				break;
			}
		}
		
		else {
			fadeItensImg.css('opacity', '1');
		}
		
		if(fadeItensLi.parents('.cycle-fade-list')[0]) {
			if(fadeItensImgContainer.hasClass('cycle')) {
				fadeItensImgContainer.cycle('resume');
			}
			else {
				fadeItensImgContainer.addClass('cycle');
				fadeItensImgContainer.cycle({
					fx:'fade',
					speed: 300,
					timeout: 50,
					timeoutFn: function(currSlideElement, nextSlideElement, options, forwardFlag)
								{									
									 	return 1000;
								}
				});
			}
		}
	}
	
	if(event == 'out') {
		if (newColor) {
			fadeItensImg.css('opacity', '0.5');
			fadeItensImgContainer.css('borderColor', aColors.defaultImgColor);
			elm.css('color', aColors.defaultTextColor);
		}
		else {
			fadeItensImg.css('opacity', '0.5');
		}
		
		if (fadeItensLi.parents('.cycle-fade-list')[0]) {
			fadeItensImgContainer.cycle('pause');
		}
	}	
}


function ajaxPageAnimation(elmClick) {
	var pageContainer = jQuery('#ajaxPageContainer');
	var pageContent = jQuery('#ajaxPageContent');
	var loader = jQuery('.loader');
	
	loader.fadeIn();  // exibe o loader com um efeito fade
	
	pageContent.load(elmClick.attr('href') + ' #ajaxBox', // carrega o conteúdo ajax
		function() {
			loader.fadeOut( // esconde o loader com um efeito fade
				function() {
					pageContainer.find('#ajaxBox').append('<a href="#" title="'+ words.close +'" class="close hide-text">'+ words.close +'</a>'); // insere o botão para fechar o box com o conteúdo ajax
					ajaxReady(); // ajax functions rebind
					pageContent.slideDown(
						function() {
							pageContainer.css('minHeight','0');
						}
					); // abre com um efeito de slide o conteúdo carregado
					
				}
			);
		}
	);
	
	
}


function ajaxLoader(lastLoader) {
	switch(lastLoader) {
		case ajaxLoad[0]:
			return ajaxLoad[1]
		break;
		
		case ajaxLoad[1]:
			return ajaxLoad[2];
		break;
		
		case ajaxLoad[2]:
			return ajaxLoad[3];
		break;
		
		default:
			return ajaxLoad[0];
		
	}
}


function ajaxReady() {
	rels();
	fadeLists();
	contactForm();
	
	if(jQuery('#customers')[0]) {
		var itens = jQuery('#customers li:not(.empty)');
		var imgs = itens.find('img');
		
		imgs.css('opacity','0.5');
		
		itens.bind('mouseover',
			function() {
				switch(true) {
					case jQuery(this).hasClass('color-a'):
						jQuery(this).css('border', '3px solid ' + aColors.colorA );
					break;
					
					case jQuery(this).hasClass('color-b'):
						jQuery(this).css('border', '3px solid ' + aColors.colorB );
					break;
					
					case jQuery(this).hasClass('color-c'):
						jQuery(this).css('border', '3px solid ' + aColors.colorC );
					break;
					
					case jQuery(this).hasClass('color-d'):
						jQuery(this).css('border', '3px solid ' + aColors.colorD );
					break;
				}
				
				jQuery(this).find('img').css({ margin:'-3px', opacity:'1' });
			}
		);
		
		itens.bind('mouseout',
			function() {
				jQuery(this).css('borderWidth', '0');
				jQuery(this).find('img').css({ margin:'0', opacity:'0.5' });
			}
		);
	}
}


function translate() {
	if(jQuery('html[lang=pt-br]')[0]) {
		words = {
			newWindow : '',
			loading : 'Carregando...',
			close : 'Fechar',
			imgNotloaded: 'A imagem não pode ser carregada.',
			contact: 'contato',
			contactError: 'Preencha corretamente os campos destacados',
			contactNotice: 'Enviando mensagem...'
		}
	}
	
	else if(jQuery('html[lang=en-us]')[0]) {
		words = {
			newWindow : '',
			loading : 'Loading...',
			close : 'Close',
			imgNotloaded: 'The image can not be loaded.',
			contact: 'contact',
			contactError: 'Fill out the highlighted fields',
			contactNotice: 'Sending message...'
		}
	}	
}
/* support functions *****************/



/*********************** ieHacks */
function ieFlickerFix()
{
	try {
		document.execCommand("BackgroundImageCache", false, true);
	} catch(err) {}
}

function supportMaxPropert() 
{
	if (typeof document.body.style.maxHeight === "undefined") 
		return false;
	else 
		return true;
}
/* ieHacks ************************/
