/*
 * object: Sosign
 * - sosign website-related functions
 */
var Sosign = {
		
	/* initialization function */
	init: function(){
		var self = Sosign;
		
		/* setup ajax to be synchronous by default */
		$.ajaxSetup({async: false, global: true, cache: false});
		
		/* set on load functions */
		$(document).ready(self.load);
	},
	
	/*
	 * method: setLanguageSelectorHandler
	 * -> set language selector event handler
	 */
	 setLanguageSelectorHandler: function(){
		$("a#langSelector").click(function(){
			var language = $(this).attr("name");
			var newLocation = $("head").find("link[rel='alternate']")
			.filter("[hreflang='"+language+"']").attr("href");
			
			if(newLocation) {
				window.location = newLocation;
			}
		});
	},
	
	/*
	 * method: load
	 * -> functions to execute on page load
	 */
	load: function(){
		var self = Sosign;
		self.setLanguageSelectorHandler();
		
		self.language = $("html").attr("lang");
		
		/* set up the homepage slideshow */
		window.setInterval(function(){
			var imgContainer = $(".slideshow ul");
			
			imgContainer.animate({marginLeft: "-450px"},600,null, function(){
				imgContainer.find("li:first").add(imgContainer.find("li:first").next())
					.appendTo(imgContainer);
				imgContainer.css("margin-left", "");
			});
			
		},5000);
		
		/* set up ajax forms */
		$.getScript("js/jquery.form.js", function(){
			self.projectPlannerForm();
			self.contactForm();
		});	
		
		/* set up recaptcha if any */
		if($("#recaptcha").get(0)) {
			$.getScript("http://api.recaptcha.net/js/recaptcha_ajax.js", function(){
				Recaptcha.create("6LfYBAoAAAAAAM3ra7zvhithJGXU35M7Y_j_i9g2",
				"recaptcha", {
				   theme: "clean",
				   lang: $("html").attr("lang"),
				   callback: function(){}
				});
			});
		}
		self.topSlideShow();
	},
	
	/*
	 * method: projectPlannerForm
	 * -> set up project planner form
	 */
	projectPlannerForm: function(){
		var self = Sosign;
		$("#plannerForm").ajaxForm({
			dataType: "json",
			beforeSubmit: function(formData, formEl, options) {
				var self = Sosign;			
				var valid = self.validate(formEl);
				
				/* form doesn't validate, re-enable form */
				if(!valid) {
					$.scrollTo($(".invalid:first"), 500);
					return false;
				}
		},
			success:function(data){
			
				if(data.error) {
					var message = self.language=="fr"?"Une erreur s'est produite, veuillez réessayer plus tard.":"An error has occured please try again later.";
					alert(message);
					
				} else if(data.recaptchaError == "error") {
					Recaptcha.reload();
					Recaptcha.focus_response_field();
					
				} else if(data.success == "success") {
					$("#plannerForm").hide();
					var message = self.language == "fr"?"Votre message a bien &eacute;t&eacute; envoy&eacute;, merci. Nous vous r&eacute;pondrons sous peu.":"Your message has been sent, thank you. We will get back to you as soon as possible.";
					
					$("#projectPlanner").append("<div id=\"formSent\">"+message+"</div");
				}
			}
		});
	},
	
	/*
	 * method: contactForm
	 * -> set up contact form
	 */
	contactForm: function(){
		var self = Sosign;
		$("#contactForm").ajaxForm({
			dataType: "json",
			beforeSubmit: function(formData, formEl, options) {
				var self = Sosign;			
				var valid = self.validate(formEl);
				
				/* form doesn't validate, re-enable form */
				if(!valid) {
					$.scrollTo($(".invalid:first"), 500);
					return false;
				}
			},
			success:function(data){
				if(data.error) {
					var message = self.language=="fr"?"Une erreur s'est produite, veuillez réessayer plus tard.":"An error has occured please try again later.";
					alert(message);
					
				} else if(data.recaptchaError == "error") {
					Recaptcha.reload();
					Recaptcha.focus_response_field();
					
				} else if(data.success == "success") {
					$("#contactForm").hide();
					var message = self.language == "fr"?"Votre message a bien &eacute;t&eacute; envoy&eacute;, merci. Nous vous r&eacute;pondrons sous peu.":"Your message has been sent, thank you. We will get back to you as soon as possible.";
					var snippet = self.language == "fr"?"conversionScript.fr.html":"conversionScript.en.html";
					$("#contact").append("<div id=\"formSent\">"+message+"</div");
					$("#contact").append("<iframe id=\"conversionScript\" frameborder=\"0\" scrolling=\"no\" width=\"100px\" height=\"20px\" src=\"html/"+snippet+"\"></iframe");
				}
			}
		});
	},
	
	/*
	 * method: validate
	 * -> validate inputs values in a form
	 */
	validate: function(formEl) {
		var self = Sosign;
		var valid = true;
		
		$(formEl).find("span.invalid").each(function(){
			var checkedEl = false;
			var checked = false;
			if($(this).find(":checked").get(0)) {
				checked = true;
				checkedEl = $(this).find(":checked");
			}
			$(this).unwrap();
			
			if(checked) {
				checkedEl.attr("checked", true);
			}
		});
		$(formEl).find(".invalid").removeClass("invalid");
		
		/* required fields should be non empty */
		$(formEl).find(".required").each(function(){
			
			if($(this).is("[type='radio']")) {
				var name = $(this).attr("name");
				
				if(!$("[name='"+name+"']:checked").get(0)) {
					$(this).wrap($("<span></span>").addClass("invalid"));
					valid = false;
				}
			} else if($(this).is("[type='checkbox']")) {
				
				if(!$(this).is(":checked")) {
					$(this).wrap($("<span></span>").addClass("invalid"));
					valid = false;
				}
				
			} else {
				
				if($(this).val() == "" || !$(this).val()) {
					if($(this).is("select") && $.browser.msie) {
						$(this).wrap($("<span></span>").addClass("invalid"));
						
					} else {
						$(this).addClass("invalid");
					}
					valid = false;
				}
			}
		});
		
		/* email fields should be valid email addresses */
		$(formEl).find("#email").each(function(){
			
			if($(this).val() == "" || !$(this).val() || !self.validateEmail($(this).val())) {
				$(this).addClass("invalid");
				valid = false;
			}
		});
		
		/* email fields should be valid email addresses */
		$(formEl).find("#emailTips").each(function(){
			if($(this).val() != "" || $(this).val()) {
				if(!self.validateEmail($(this).val())) {
					$(this).addClass("invalid");
					valid = false;
				}
			}
		});
		
		
		/* if valid, process to submit; else abort */
		if(!valid) {
			$.scrollTo($(".invalid:first"), 500);
		}
		
		return valid;
	},
	
	/*
	 * function: validateEmail
	 * -> allow to validate email syntax
	 */
	validateEmail: function(email) {
		var pattern = /^[_a-z0-9+-]+(\.[_a-z0-9+-]+)*@[a-z0-9+-]+(\.[a-z0-9+-]+)*(\.[a-z]{2,3})$/gi;
		return (email.search(pattern) == -1)?false:true;
	},
	/*
	 * function: show
	 * -> show a modal window with the map of the office
	 */
	show: function(lang) {
		var self = Sosign;
		if (lang == "fr") {
			pageToShow = "map.fr.html";
		} else {
			pageToShow = "map.en.html";
		}
		/* set parameters */
		var params = {
			ajax: pageToShow,
			onLoad:function(obj){
				$.scrollTo(".modalWindow", 500);
			},
			onHide: function(obj){
				obj.w.add("div.jqmOverlay:first").remove();
			}
		};
		/* create and show modal */
		var modalEl = $("<div></div>");
		modalEl.addClass("modalWindow")
			.appendTo($(document.body))
			.jqm(params).jqmShow();
		
		if(typeof($.scrollTo) == "function") {
			$.scrollTo(".modalWindow", 500);
		}
		return;
	},
	topSlideShow: function() { 
		$('#newBusiness').hide();
		$("#newBusinessButton").click(function() {
			if (!$("#newBusiness").is(":visible")) {
				$('#onlineStore').fadeOut(400,function(){
					$('#newBusiness').fadeIn(400);	
				});
				
				$("#newBusinessButton").addClass("selected");
				$("#onlineStoreButton").removeClass("selected");
				$("#learnMore").attr("href", Sosign.language=="fr"?"your-website.fr.html":"your-website.en.html")
			}
		});
		$("#onlineStoreButton").click(function() {
			if (!$("#onlineStore").is(":visible")) {
				$('#newBusiness').fadeOut(400,function(){
					$('#onlineStore').fadeIn(400);	
				});
				$("#onlineStoreButton").addClass("selected");
				$("#newBusinessButton").removeClass("selected");
				$("#learnMore").attr("href", Sosign.language=="fr"?"ecommerce-channels.fr.html":"ecommerce-channels.en.html")
			}
		});
	},
	topSlideShowOld: function(){
		
		var currentPosition = 0;
		var slideWidth = 850;
		var slides = $('.slide');
		var numberOfSlides = slides.length;

		/* Remove scrollbar in JS */
		$('#mainBannerContainer').css('overflow', 'hidden');
		
		/* Wrap all .slides with #slideInner div */
		slides
		.wrapAll('<div id="slideInner"></div>')
		/* Float left to display horizontally, readjust .slides width */
		.css({
		    'float' : 'left',
		    'width' : slideWidth
		});

		/*  Set #slideInner width equal to total width of all slides */
		$('#slideInner').css('width', slideWidth * numberOfSlides);


		/* Hide left arrow control on first load */
		manageControls(currentPosition);

		/* Create event listeners for .controls clicks */
		$('.control')
		  .bind('click', function(){
		  /* Determine new position */
		    currentPosition = ($(this).attr('id')=='rightControl')
		  ? currentPosition+1 : currentPosition-1;

		  /* Hide / show controls */
		  manageControls(currentPosition);
		  /* Move slideInner using margin-left */
		  $('#slideInner').animate({
		      'marginLeft' : slideWidth*(-currentPosition)
		    });
		    /* clear the timer */
		    window.clearInterval(slideInterval);
		    setSlideInterval();
		  });

		  // manageControls: Hides and shows controls depending on currentPosition
		  function manageControls(position){
		    /* Hide left arrow if position is first slide */
		    if(position==0){ 
		    	$('#leftControl').hide();
		    }
		    else{ 
		    	$('#leftControl').show(); 
		    }
		    /* Hide right arrow if position is last slide */
		    if(position==numberOfSlides-1){ 
		    	$('#rightControl').hide() 
		    }
		    else{ 
		    	$('#rightControl').show() 
		    }
		  }
		  
		  /* set up timer using setinterval */
		  function setSlideInterval() {
			/* set up the toppage slideshow */
			slideInterval = window.setInterval(function(){
				if (currentPosition == numberOfSlides-1) {
					currentPosition = currentPosition-1;
				} else {
					currentPosition = currentPosition+1;
				}
				manageControls(currentPosition);
				 $('#slideInner').animate({
				        'marginLeft' : slideWidth*(-currentPosition)
				  });
				
			},9000);
		 }
		setSlideInterval();
	},
	showMoreInfo: function() {
		$("#moreInfo").show();
		$("div#contact a").hide();
	}
	
};

/* initialize javascript functions */
Sosign.init();
