/**
 * Arquivo responsável pelo JS GERAL do Site Campus Caixa
 *
 * @author: Daniel Lopes - danielmlopes[at]gmail[dot]com [in] @Monumenta
 * @date: 2012/01/14
 *
 * Copyright(c) Todos os direitos reservados a CAIXA Econômica Federal
 */

if( window.console == null )
	window.console = {
		log: function( p )
		{}
	};

// Init do ShadowBox
Shadowbox.init({ skipSetup: true, iframeHeight: 495, iframeWidth: 595, animate: false });

var campusCamp;

var CCamp = function()
{
	campusCamp = this;
	campusCamp.init();
}

CCamp.fn = CCamp.prototype;
CCamp.fn.extend = jQuery.extend;
CCamp.fn.extend(
{
    init: function()
	{
		campusCamp.header = $( "#header" );
		campusCamp.content = $( "#content" );
		
        // INIT do FB
        campusCamp.fbInit();
        
		// Iniciar o Flash
		if( $( "div.theFlash" ).length )
			campusCamp.initFlash();
		
		// Página de registro
		if( $( "div.inner.view2", campusCamp.content ).length )
			campusCamp.register( $( "div.inner.view2", campusCamp.content ), false );
		
		// Página de escolha do Avatar
		if( $( "div.inner.view3", campusCamp.content ).length )
			campusCamp.avatars( $( "div.inner.view3", campusCamp.content ) );
		
		// Ações diversas
		campusCamp.acts();
	},
	
	// Iniciar o Flash
	initFlash: function()
	{
		var flashVars = {
				campURL: window.CAMP_URL,
				config: window.BASE_URL + "_global/swf/config.xml",
				baseURL: window.BASE_URL
			},
			params = {
				menu: "false",
				scale: "noscale",
				wmode: "transparent"
			},
			attrb = {};
		
		swfobject.embedSWF( window.BASE_URL + "_global/swf/main.swf", "theSWF", "100%", "100%", "7.0.0", window.BASE_URL + "_global/swf/expressInstall.swf", flashVars, params, attrb );
	},
	
	// Interações com o FLash
	intFlash: {
		// Confirmação do regulamento pelo Flash
		confRegulation: function()
		{
			campusCamp.modalShadowBox( "iframe", "", window.BASE_URL + "home/RegulamentoConfirmacaoModal", 495, 595, 495, 595, "");
		},
		
		// Informar para o flash o aceite do regulamento
		infRegulation: function( bol )
		{
			var movie = window.document.theSWF;
			
			movie.SetVariable( "wait", "false" );
			movie.SetVariable( "regulamento", bol );
			
			Shadowbox.close();
		},
		
		// Mudar botão de Connect
		changeBT: function( bol, str )
		{
			var menu = $( "ul", campusCamp.header );
			
			if( bol )
			{
				$( "li.enter .bt_fb", menu )
					.remove();
				
				$( "li.enter", menu )
					.addClass( "noBT" )
					.unbind()
					.click( function()
					{
						window.location.href = window.BASE_URL + "Cadastro";
					});
			}else
				$( "li.enter", menu )
					.fadeOut( 100, function()
					{
						var parent = $(this).parent();
						
						$(this)
							.remove();
						
						parent
							.attr( "class", "logged" );
					});
			
			if( $( "div.user", campusCamp.header ).length )
				$( "div.user p", campusCamp.header ).text( "Olá " + str );
			else
				$( "<div class=\"user\"><p>Olá " + str + "</p></div>" )
					.prependTo( campusCamp.header );
		}
	},
	
	// Validação form cadastro
	register: function( obj, act )
	{
		var liS = $( "ul li:not( ul li ul li )", obj );
		
		if( ! act )
		{
			// Insere máscara de telefone
			$( "ul li.tel input[type=text]", obj ).mask( "(99) 9999-9999" );
			
			// Somente números
			$( "ul li.rg input[type=text]", obj ).onlyNumber();
		}
		
		// Valida os campos no submit
		$( ".bt_register", obj ).unbind().click(function( e )
		{
            var	error = 0,
                regx1 = new RegExp(/^[A-Za-z0-9_\-\.]+@[A-Za-z0-9_\-\.]{2,}\.[A-Za-z0-9]{2,}(\.[A-Za-z0-9])?/),
				regx2 = new RegExp(/^[a-z' 'A-ZãÃáÁàÀêÊéÉèÈíÍìÌôÔõÕóÓòÒúÚùÙûÛçÇ]+$/);
			
            liS.each(function( i )
			{
                var _thi = $(this),
                    input = _thi.find( "input[type=text]" );

				if( _thi.hasClass( "email" ) )
				{
					if( ! input.val() || ! regx1.test( input.val() ) )
						_thi.addClass("error");
					else
						_thi.removeClass("error");
				}else
				{
					if( ( ! input.val() && ! _thi.hasClass( "name" ) ) || ( _thi.hasClass( "name" ) && ! regx2.test( input.val() ) ) )
						_thi.addClass("error");
					else
						_thi.removeClass("error");
				}

                if( i + 1 == liS.length )
				{
                    if( $( "ul li.error:not( ul li ul li )", obj ).length >= 1 )
					{
						alert( "Por favor, preencha todos os campos corretamente." );
						
						$( "span.required", obj ).addClass( "error" );
						
						e.preventDefault();
                    }else if( ! $( "div.regulation input[type=checkbox]", obj ).is( ":checked" ) )
					{
						$( "span.required", obj ).removeClass( "error" );
						
						$( "div.regulation", obj ).addClass( "error" );
						
						e.preventDefault();
					}else
					{
						var data = {
								"nome": $( "ul li.nome input[type=text]", obj ).val(),
								"email": $( "ul li.email input[type=text]", obj ).val(),
								"rg": $( "ul li.rg input[type=text]", obj ).val(),
								"orgao": $( "ul li.exp input[type=text]", obj ).val(),
								"telefone": $( "ul li.tel input[type=text]", obj ).val()
							};
						
						$( ".bt_register", obj ).unbind().click(function(){ return false; });
						
						$( "span.required", obj ).add( $( "div.regulation", obj ) ).removeClass( "error" );
						
						campusCamp.getJson( window.BASE_URL + "Cadastro/CadastrarUsuario", data, "register" );
					}
						
                }
            });
		});
	},
	
	// Executa a resposta do JSON
	requestRegister: function( resp )
	{
		if( ! resp.sucesso )
		{
			alert( resp.mensagem );
			
			campusCamp.register( $( "div.inner.view2", campusCamp.content ), true );
		}else
			$( "div.inner div.review", campusCamp.content ).fadeOut( 500, function()
			{
				var _thiS = $(this),
					html = "<h2>Personalize sua barraca</h2>" + 
						   "<ul>" + 
							   "<li class=\"nomeCla\">" + 
								   "<label for=\"nomeCla\">Nome do seu clã:</label>" +
								   "<span>Máximo de 13 caracteres.</span>" + 
								   "<input type=\"text\" name=\"\" id=\"nomeCla\" maxlength=\"13\" />" +
							   "</li>" + 
							   "<li class=\"barraca\">" + 
								   "<label for=\"barraca\">Escolha a barraca:</label>" + 
								   "<span class=\"cp1\"><span>Barraca 1</span></span>" + 
								   "<span class=\"cp2\"><span>Barraca 2</span></span>" + 
								   "<span class=\"cp3\"><span>Barraca 3</span></span>" + 
								   "<span class=\"cp4\"><span>Barraca 4</span></span>" + 
								   "<span class=\"cp5\"><span>Barraca 5</span></span>" +
								   "<span class=\"cp6\"><span>Barraca 6</span></span>" +
							   "</li>" +
							   "<li class=\"avatar\">" +
								   "<label for=\"avatar\">Escolha seu avatar:</label>" +
								   "<span class=\"us1\"><span>Avatar 1</span></span>" +
								   "<span class=\"us2\"><span>Avatar 2</span></span>" +
								   "<span class=\"us3\"><span>Avatar 3</span></span>" +
								   "<span class=\"us4\"><span>Avatar 4</span></span>" +
								   "<span class=\"us5\"><span>Avatar 5</span></span>" +
								   "<span class=\"us6\"><span>Avatar 6</span></span>" +
							   "</li>" +
						   "</ul>" +
						   "<button type=\"button\" title=\"Finalizar\" class=\"bt_finish\">Finalizar</button>";
				
				_thiS
					.empty()
					.append( html );
					
				_thiS
					.parent()
					.removeClass( "view2" )
					.addClass( "view3" );
				
				$( "div.init div.avatars *", campusCamp.content ).fadeOut( 400, function()
				{
					$(this).remove();
					
					$( "div.init div.avatars", campusCamp.content ).attr( "class", "avatars dynamic" );
				});
				
				_thiS
					.fadeIn( 500, function()
					{
						campusCamp.avatars( $( "div.inner.view3", campusCamp.content ) );
					});
			});
	},
	
	// Página de escolha do Avatar
	avatars: function( obj )
	{
		var divAvatars = $( "div.init div.avatars", campusCamp.content ),
			verify = function( dItem )
			{
				if( ( dItem == "camp" && $( "div.camp", divAvatars ).length ) || ( dItem == "user" && $( "div.user", divAvatars ).length ) )
					return true;
				else
					return false;
			};
		
		// Hover da Barraca e do Avatar
		$( "ul li.barraca span:not( ul li.barraca span span )", obj ).add( $( "ul li.avatar span:not( ul li.avatar span span )", obj ) ).hover(function()
		{
			var _thi = $(this),
				dParent = _thi.parent();
			
			if( _thi.hasClass( "active" ) )
				return false;
			
			if( dParent.hasClass( "avatar" ) )
			{
				verify( "user" )
					? $( "div.user", divAvatars ).attr( "class", "user " + _thi.attr( "class" ) ).css( "opacity", "0.5" )
					: $( "<div class=\"user " + _thi.attr( "class" ) + "\"></div>" ).appendTo( divAvatars ).css( "opacity", "0.5" );
			}else
			{
				verify( "camp" )
					? $( "div.camp", divAvatars ).attr( "class", "camp " + _thi.attr( "class" ) ).css( "opacity", "0.5" )
					: $( "<div class=\"camp " + _thi.attr( "class" ) + "\"></div>" ).appendTo( divAvatars ).css( "opacity", "0.5" );
			}
		}, function()
		{
			var _thi = $(this),
				dParent = _thi.parent();
			
			if( dParent.hasClass( "avatar" ) )
			{
				$( "ul li.avatar span.active", obj ).length
					? $( "div.user", divAvatars ).attr( "class", "user " + $( "ul li.avatar span.active", obj ).attr( "class" ).split( "active" )[0] ).css( "opacity", "1" )
					: $( "div.user", divAvatars ).remove();
			}else
			{
				$( "ul li.barraca span.active", obj ).length
					? $( "div.camp", divAvatars ).attr( "class", "camp " + $( "ul li.barraca span.active", obj ).attr( "class" ).split( "active" )[0] ).css( "opacity", "1" )
					: $( "div.camp", divAvatars ).remove();
			}
		});
		
		// Escolha da Barraca e do Avatar
		$( "ul li.barraca span:not( ul li.barraca span span )", obj ).add( $( "ul li.avatar span:not( ul li.avatar span span )", obj ) ).click(function()
		{
			var _this = $(this),
				tParent = _this.parent();
			
			if( tParent.hasClass( "avatar" ) )
			{
				verify( "user" )
					? $( "div.user", divAvatars ).attr( "class", "user " + _this.attr( "class" ) ).css( "opacity", "1" )
					: $( "<div class=\"user " + _this.attr( "class" ) + "\"></div>" ).appendTo( divAvatars );
			}else
			{
				verify( "camp" )
					? $( "div.camp", divAvatars ).attr( "class", "camp " + _this.attr( "class" ) ).css( "opacity", "1" )
					: $( "<div class=\"camp " + _this.attr( "class" ) + "\"></div>" ).appendTo( divAvatars );
			}
			
			_this
				.addClass( "active" )
				.siblings()
				.removeClass( "active" );
			
			return false;
		});
		
		// Enviar para server
		$( ".bt_finish", obj ).unbind().click(function()
		{
			var liS = $( "ul li", obj );
			
			liS.each(function(e)
			{
				var $this = $(this);
				
				if( $this.hasClass( "nomeCla" ) )
				{
					if( ! $( "input[type=text]", $this ).val() || ( $( "input[type=text]", $this ).val() && $( "input[type=text]", $this ).val().length > 13 ) )
						$this.addClass("error");
					else
						$this.removeClass("error");
				}else
				{
					if( ! $( "span.active", $this ).length )
						$this.addClass("error");
					else
						$this.removeClass("error");
				}
	
				if( e + 1 == liS.length )
				{
					if( $( "ul li.error", obj ).length >= 1 )
					{
						alert( "Por favor, complete corretamente todos os campos." );
						
						return false;
					}else
					{
						var data = {
								"Nome": $( "ul li.nomeCla input[type=text]", obj ).val(),
								"IdBarraca": Number( $( "ul li.barraca span.active", obj ).index() ),
								"IdAvatar": Number( $( "ul li.avatar span.active", obj ).index() )
							};
						
						campusCamp.getJson( window.BASE_URL + "Cadastro/Barraca", data, "avatar" );
						
						$( "ul li.barraca span:not( ul li.barraca span span )", obj ).add( $( "ul li.avatar span:not( ul li.avatar span span )", obj ) ).add( $( ".bt_finish", obj ) ).unbind().click(function(){ return false; });
					}
				}
			});
			
			return false;
		});
	},
	
	// Executa a resposta do JSON
	requestAvatar: function( resp )
	{
		if( ! resp.Sucesso )
		{
			alert( resp.Mensagem );
			
			campusCamp.avatars( $( "div.inner.view3", campusCamp.content ) );
		}else
			$( "div.inner div.review", campusCamp.content ).fadeOut( 500, function()
			{
				var _thiS = $(this);
				
				_thiS
					.empty()
					.append( "<h2>Barraca concluída.</h2><p><strong>Sua barraca foi criada com sucesso.</strong> <br />Agora é só convidar amigos para o seu clã.</p><a href=\"" + resp.Url + "\" title=\"Ir para o meu clã\" class=\"bt_irCla\">Ir para o meu clã</a>" );
					
				_thiS
					.parent()
					.removeClass( "view3" )
					.addClass( "view4" );
				
				_thiS
					.fadeIn( 500 );
			});
	},
	
	// Ações diversas
	acts: function()
	{
		// Atribuir modal ao ranking
		$( "ul li.ranking a", campusCamp.header ).unbind().click(function()
		{
			campusCamp.modalShadowBox( "iframe", "", window.BASE_URL + "ranking", 495, 595, 495, 595, "");
			return false;
		});
		
		// Atribuir modal ao regulamento
		$( "ul li.regulation a", campusCamp.header ).add( $( "div.inner.view2 div.regulation label a", campusCamp.content ) ).unbind().click(function()
		{
			campusCamp.modalShadowBox( "iframe", "", window.BASE_URL + "home/regulamentomodal", 495, 595, 495, 595, "");
			return false;
		});
		
		$( "#fblogin" )
			.attr( "disabled", false)
			.click( campusCamp.fbLogin.noFlash );
	},

    // INIT do FB
    fbInit: function()
    {
	    FB.init({
		    appId: window.CFGS_FB.ID,
		    channelURL: window.CFGS_FB.C_URL,
		    cookie: true,
		    xfbml: true,
		    oauth: true
	    });
    },
	
	// LOGIN do FB
	fbLogin: {
		flash: function()
		{
			FB.login( function( response )
			{
				if( response.authResponse )
				{
					var movie = window.document.theSWF;
					movie.SetVariable("wait", "false");
				}
			},
			{
				scope: window.CFGS_FB.SCP
			});
		},
		noFlash: function()
		{
			FB.login( function( response )
			{
				if( response.authResponse )
                {
                    window.location.href = window.CFGS_FB.R_URL;
                }
			},
			{
				scope: window.CFGS_FB.SCP
			});
		}
	},
	
	// Fazer requisições jSon
	getJson: function( url, vars, type )
	{
		var json = $.toJSON( vars );
		
		$.ajax({
            url: url,
            type: "POST",
            dataType: "json",
            data: json,
            contentType: "application/json; charset=utf-8",
			timeout: 20000,
			error: function( jqXHR, textStatus, errorThrown )
			{
				alert( "Ocorreu um problema em sua solicitação. Por favor, tente novamente." );
			
				campusCamp.avatars();
			},
            success: function( response )
			{
				type == "avatar"
					? campusCamp.requestAvatar( response )
					: campusCamp.requestRegister( response );
			}
		});
	},
	
	modalShadowBox: function( $type, $title, $url, $ifHeight, $ifWidth, $height, $width, $caminho )
	{
		var isIE6 = ( (navigator.userAgent.indexOf( "MSIE 6." ) != -1 ) && ( navigator.userAgent.indexOf( "Opera" ) == -1 ) );
	
		if( isIE6 )
			$ifHeight = $ifHeight + 20;
	
		Shadowbox.iframeHeight = $ifHeight;
		Shadowbox.iframeWidth = $ifWidth;
		Shadowbox.caminho = $caminho;
	
		Shadowbox.open({ player: $type, title: $title, content: $url, width: $width, height: $height });
	}
});

// Mensageria
(function()
{
    var $ = jQuery;
    window.Message =
	{
	    show: show,
	    init: init
	};

    var htmlRef = null;

    function init()
    {
        htmlRef = $("<div id='message'><p></p></div>").appendTo('body');
    };

    function show(message, type)
    {
        type = type == null ? "" : type;
        htmlRef.fadeIn('slow');
        htmlRef.attr("class", type);
        htmlRef.find( "p" ).html(message);
		
		if( jQuery.browser.msie && jQuery.browser.version == "6.0" )
			htmlRef.css('top', jQuery(window).scrollTop() + 100);
        
		$('body').mousemove(startHide);
    };

    function startHide()
    {
        $('body').unbind('mousemove', startHide);
        var htmlRef = htmlRef;
        setTimeout(hide, 3500);
    };

    function hide()
    {
        htmlRef.fadeOut('slow');
    };
})();

$( Message.init );

$(function()
{
    jQuery.fn.resetDefaultValue = function()
    {
        function _clearDefaultValue()
        {
            var _$ = $(this);
            if (_$.val() == this.defaultValue) { _$.val(''); }
        };
        function _resetDefaultValue()
        {
            var _$ = $(this);
            if (_$.val() == '') { _$.val(this.defaultValue); }
        };
        return this.click(_clearDefaultValue).focus(_clearDefaultValue).blur(_resetDefaultValue);
    }
});

$( function()
{
	campusCamp = new CCamp();
	
	window.alert = function(msg)
	{
		Message.show(msg.replace(/\n{1}/gi, '<br/>'));
		return null;
	}
});
