﻿var CUBE = {};

CUBE.init = function ()
{
	// Set site base URL
	CUBE.base = "http://cubedtv.com/";
	//CUBE.base = "http://localhost/";
	if(document.location.href.indexOf(CUBE.base) == -1) alert("Cube.js semble mal configuré, vérifier CUBE.base");
	
	SWFAddress.addEventListener(SWFAddressEvent.CHANGE, this.handleChange);
	
	CUBE.updateLinks();
	CUBE.updateSearch();
	CUBE.updateSubmitPost();
	CUBE.updateContactForm();
	CUBE.initAccordion();
}

CUBE.updateContactForm = function()
{
	$(".wpcf7-form").submit(CUBE.submitContactForm);
	$(".wpcf7-form input[type=text]").css("border", "1px solid #A5ACB2");
}

CUBE.contactFormValid = false;

CUBE.submitContactForm = function()
{
	CUBE.contactFormValid = true;
	
	// Check fields
	var contactForm = $(this);
	$(".wpcf7-validates-as-required", this).each(CUBE.checkContent);
	
	// Post form
	if(CUBE.contactFormValid) 
	{
		var formElements = $("input[name!=submit],textarea", this);
		var params = {};
		for(var i = 0 ; i < formElements.length; i++)
		{
			params[formElements[i].name] =  formElements[i].value;
		}
		
		$.post(contactForm.attr("action"), params,
		function(data){
			var htmlContent = $("#page", data);
			//
			CUBE.updateLinks(htmlContent);
			
			//CUBE.updateSubmitPost();
			//
			//CUBE.initAccordion();
			$("#page").html(htmlContent.html());
			CUBE.updateSearch();
			CUBE.updateContactForm();
		});
	}
	
	return false;
}

/**
 * Check required fields content
 * override CUBE.contactFormValid if any field is invalid
 */
CUBE.checkContent = function(i)
{
	// Fields is empty?
	var valid = true;
	
	// Check value
	if(this.value == "") valid = false;
	// Check mail
	else if($(this).hasClass("wpcf7-validates-as-email")) 
	{	
		// Email validation
		// http://www.rgagnon.com/jsdetails/js-0063.html
		//var objRegExp  = /(^[a-z]([a-z_\.]*)@([a-z_\.]*)([.][a-z]{3})$)|(^[a-z]([a-z_\.]*)@([a-z_\.]*)(\.[a-z]{3})(\.[a-z]{2})*$)/i;
		//var objRegExp  = /([a-z]([a-z_\.]*)@([a-z_\.]*)(\.[a-z]{1,3})*)/i;
		//var objRegExp  = /^[a-z0-9\-_\.]+@[a-z0-9\-_]+\.[a-z.]{2,5}$/i;
		var objRegExp  = /^[a-z0-9\-_\.]+@[a-z0-9\-_]+\.[a-z]{2,5}(\.[a-z]{2,3})?$/i;
		
		//check for valid email
		valid = objRegExp.test(this.value);
	}
	
	// Apply red border to invalid field
	if(!valid) $(this).css("border", "1px solid #FF0000");
	else $(this).css("border", "1px solid #A5ACB2");
	
	if(!valid) CUBE.contactFormValid = false;
}

CUBE.updateSubmitPost = function(htmlContext)
{
	$("#commentform", htmlContext).submit(CUBE.submitPost);
}

CUBE.validatePostForm = function()
{
	var valid = true;
	// Validate form
	if($("#comment")[0].value == "") 
	{
		$("#comment").css("border", "1px solid #FF0000");
		return false;
	}
	else
	{
		$("#comment").css("border", "1px solid #A5ACB2");
	}
	
	return valid;
}

CUBE.submitPost = function()
{
	// Validate post form
	if(!CUBE.validatePostForm()) return false;
	
	var formElements = $("#commentform input[name!=submit],textarea");
	var params = {};
	for(var i = 0 ; i < formElements.length; i++)
	{
		params[formElements[i].name] =  formElements[i].value;
	}
	
	$.post($("#commentform").attr("action"), params,
	function(data){
		var htmlContent = $("#page", data);
		
		
		CUBE.updateLinks(htmlContent);
		CUBE.updateSubmitPost(htmlContent);
		
		$("#page").html(htmlContent.html());
	});
	
	return false;
}

CUBE.updateSearch = function()
{
	$("#search_form").submit(CUBE.search);
}

CUBE.search = function()
{
	var s = $("#s")[0].value;
	if(s.length) SWFAddress.setValue("search/" + s);
	return false;
}

CUBE.updateLinks = function(context)
{
	//return;
	$("a", context).each(function (i)
		{
			// Remplacer uniquement les liens internes
			// Suppression des ancres...
			
			// Ne pas réécrire les liens qui sont déjà mis à jour
			if(this.href.indexOf(CUBE.base + "#") == -1) 
			{
				if(this.href.indexOf("#") != -1) this.href = this.href.substr(0, this.href.indexOf("#")); // TODO: voir comment repasser l'ancre à la page...
				
				this.href = this.href.split(CUBE.base).join(CUBE.base+"#");
				this.href = this.href.split("#wp-").join("wp-");
				
				// trick
				if(this.href.charAt(this.href.length - 1) == "/") this.href = this.href.substr(0, this.href.length - 1);
			}
		}
	);
}

CUBE.ready = false;

CUBE.handleChange = function() 
{
	// On analyse le premier segment pour afficher / masquer #page
	var segments = SWFAddress.getPathNames();
	
	// à l'init, segments[0] est undefined...
	if(!segments[0] || segments[0] == "gallery" || segments[0] == "cubed-tv" || segments[0] == "")
	{
		$("#page").css("display", "none");
	}
	else
	{
		$("#page").css("display", "block");
		
		
		// TRACK PAGE
		
		switch(segments[0])
		{
			case "inside-the-cube":
				CUBE.trackPage("cubedtvinsidethecube", "microsite-cubedtv-toinsidecube", "productrelated");
				break;
			
			case "guestbook":
				CUBE.trackPage("cubedtvguestbook", "microsite-cubedtv-guestbook", "productrelated");
				break;
		}
		
		/////////////////////////////////////////////
		
		/*
		// Si on arrive duirectement sur l'index,
		// on n'a pas besoin de charger le contenu de la page en ajax puisqu'on l'a déjà...
		if(!CUBE.ready && SWFAddress.getValue() == "/") 
		{
			CUBE.ready = true;
			return; // trick
		}
		*/
		
		// Chargement de la page
		$.ajax({
			url: CUBE.base + SWFAddress.getValue(),
			cache: true,
			dataType: "html",
			complete: function(h)
			{
				CUBE.updateSearch();
				CUBE.updateSubmitPost();
				CUBE.updateContactForm();
			},
			error: function()
			{
				alert("Error loading page");
			},
			success: function(h)
			{
				var htmlContent = $("#page", h);
				CUBE.updateLinks(htmlContent);
				
				// replace #page content
				$("#page").html(htmlContent.html());
				
				// Activate accordion behaviour
				CUBE.initAccordion(htmlContent);
				
				shutterOnload();
			}
		});
	}
};

CUBE.wrapSWF = function ()
{
	$("#swf").css("height", "100px");
	$("#mainFooter").addClass("hasBackground");
}

CUBE.unwrapSWF = function ()
{
	//$("#swf").css("height", document.documentElement.clientHeight);
	$("#swf").css("height", "100%");
	$("#mainFooter").removeClass("hasBackground");
	//$("#mainFooter").css("background", "none");
}

/* ! Display Accordion content */
CUBE.acc = function ()
{
	// TRACK
	switch(this.id)
	{
		case "design":
			CUBE.trackPage("cubedtvcarspecs", "microsite-cubedtv-carspecs-design", "product");
			break;
		case "comfort": 
			CUBE.trackPage("cubedtvcarspecs", "microsite-cubedtv-carspecs-comfort", "product");
			break;
		case "adaptability": 
			CUBE.trackPage("cubedtvcarspecs", "microsite-cubedtv-carspecs-adaptability", "product");
			break;
		case "colors": 
			CUBE.trackPage("cubedtvcarspecs", "microsite-cubedtv-carspecs-colors", "product");
			break;
		case "accessories": 
			CUBE.trackPage("cubedtvcarspecs", "microsite-cubedtv-carspecs-accessories", "product");
			break;
		case "tech": 
			CUBE.trackPage("cubedtvcarspecs", "microsite-cubedtv-carspecs-tech", "product");
			break;
	}
	
	//var myTarget = this.hash;
	jQuery(".accordionContent").hide();
	if(CUBE.lastAccordionItem) CUBE.lastAccordionItem.css("cursor", "pointer");
	jQuery(".elseWhere li").removeClass("openDefault");
	jQuery(this).parent().addClass("openDefault");
	
	CUBE.lastAccordionItem = jQuery(this);
	jQuery(this).parent().find("div.accordionContent").show();
	jQuery(this).css("cursor", "default");
	return false;
}



/* ! Display Accordion content */
CUBE.subacc = function ()
{
	jQuery(".subAccordionContent").hide();
	myTarget = jQuery(this).attr("id");
	jQuery("."+myTarget).show();
	
	jQuery(".subAccordion span").removeClass("default");
	jQuery(this).addClass("default");
}



CUBE.initAccordion = function()
{
	/* ! Accordion 1 init*/
	jQuery(".elseWhere > li > p").click(CUBE.acc);
	jQuery(".elseWhere > li > p").css("cursor", "pointer");
	jQuery(".elseWhere > li.openDefault > p").trigger("click");
	
	/* ! Accordion 2 init*/
	jQuery(".opener").click(CUBE.subacc);
}

// INIT
$(document).ready(function(){
/**/
	$("#swf").css("height", "100%");
	CUBE.init();
});


