/** Code 42 site main scripts
 *
 * Contains all core scripts required for Code 42 site:
 * - header
 * - footer
 * - scrollgallery
 * - pro urls
 * - css browser selector
 */


/**
 * jquery.site.header.js
 * 
 * Code 42 site header widget.
 * 
 */

$.widget('ui.header', {

	options: {
		displayOpts: {
			url: "js/html/jquery.site.header.html"
		},
		ready: function(self) { }
	},
	
	_create: function() {
		var self = this;
		var element = this.element;
	
		element.addClass('header');

		// Load the view URL contents as HTML then initialize the widget
		element.load(self.options.displayOpts.url, function() {
			
			var isC42Press = document.location.href.indexOf("press") != -1;
			
			if(isC42Press){
				element.find("a").each(function(){
					var orig = $(this).attr("href");
					if(!orig.match(/^http/)){
						$(this).attr("href", '/' + orig);
					}
				});
			}
			
			self.options.ready && self.options.ready.call(self);
		});
		
	}
	
});


/**
 * jquery.c42.footer.js
 * 
 * A shared footer widget.
 * 
 * @displayOpts:
 *  - barc42 : turn c42 bar on / off 
 * 	- barClients : turn client bar on / off, pass in scrollgallery options to customize it
 * 	- tweets : turn tweets on / off
 *  - contained : footer contained to site default width 930px
 *  - mainBar : turns the main bar on / off, this includes the tweets
 * 	- url : url for footer view, defaults to : /js/html/jquery.c42.footer.html
 */

$.widget('ui.footer', {

	options: {
		displayOpts: {
			mainBar: true,
			barc42: true,
			barClients: true,
			tweets: true,
			url: "js/html/jquery.c42.footer.html"
		},
		ready: function(self) { }
	},
	
	_create: function() {
		var self = this;
		var element = this.element;
	
		element.addClass('footer');

		// Load the view URL contents as HTML then initialize the widget
		element.load(self.options.displayOpts.url, function() {
			
			// set current year for copyright
			$("#footer-current-year").text((new Date).getFullYear());
			
			var isEnterprise = document.location.href.indexOf("enterprise") != -1;
			var isBusiness = document.location.href.indexOf("business") != -1;
			var isPROSupport = document.location.href.indexOf("/business/support") != -1;
			var isPROeSupport = document.location.href.indexOf("support.crashplanpro") != -1;
			
			if(isEnterprise || isPROeSupport){
				$("#twitter-footer").attr("href","http://www.twitter.com/crashplanpro");
				$("#facebook-footer").attr("href","http://www.facebook.com/pages/CrashPlan-PRO/33510439819");
			}else if(isBusiness || isPROSupport){
				$("#twitter-footer").attr("href","http://www.twitter.com/crashplanpro");
				$("#facebook-footer").attr("href","http://www.facebook.com/pages/CrashPlan-PRO/33510439819");
			}else {
				$("#twitter-footer").attr("href","http://www.twitter.com/crashplan");
				$("#facebook-footer").attr("href","http://www.facebook.com/CrashPlan");
			}
			
			// set footer width to 874px if contained is true
			if(self.options.displayOpts.contained){
				$(this).css("width","874px");
			}
			
			self.barc42 = $(this).find('#c42-bar');
			self.tweets = $(this).find('#footer-tweet');
			self.mainBar = $(this).find('#main-footer');
			
			if (typeof(self.options.displayOpts.barClients) == "object") {
				self.barClients = $(this).find('#client-scroller').scrollgallery(self.options.displayOpts.barClients);
			} else {
				self.barClients = $(this).find('#client-scroller').scrollgallery();
			}
			
			self.options.displayOpts.tweets ? self.tweets.tweet() : self.tweets.hide();
			self.options.displayOpts.barClients ? self.barClients.show() : self.barClients.hide();
			self.options.displayOpts.barc42 ? self.barc42.show() : self.barc42.hide();
			self.options.displayOpts.mainBar ? self.mainBar.show() : self.mainBar.hide();
			
			element.fixProUrls();
			
			// append crashplan.com to footer relative links
			element.find("a").each(function(){
				var orig = $(this).attr("href");
				if(!orig.match(/^http/)){
					$(this).attr("href", 'http://www.crashplan.com' + orig);
				}
			});
			
			self.options.ready && self.options.ready.call(self);
		});
		
		
	}
	
});

/**
* jquery.c42.scrollgallery.js
* 
* A scrolling gallery widget.
* 
* @options:
* - slideClass : CSS class for all slides
* - listItemClass : CSS class for each list item on each slide
* - url : url for gallery view, defaults to : scrollgallery.html
*/

$.widget('ui.scrollgallery', {

	options: {
		slideClass: "scroller-slide",
		listItemClass: "client",
		url: "js/html/scrollgallery.html",
		ready: function(self) { }
	},
	
	_create: function() {
		var self = this;
		var element = this.element;
	
		element.addClass('scrollgallery');
		
		// Load the view URL contents as HTML then initialize the widget
		element.load(self.options.url, function() {
			var o = self.options;

			var totalWidth = 0;
			var positions = [];
			var scrollCounter = 1;
			var currentSlide;
			var nextSlide;
			var previousSlide;
			var slideClass = $("."+o.slideClass).length;

			// find sum total width of all slides
			$("."+o.slideClass).each(function(i){
				positions[i]= totalWidth;
				totalWidth += $(this).width();
			
				// If slide has no width, set default width of 720px wide
				if(!$(this).width()){
					$(this).width(720);
				}
			});

			if(scrollCounter <= 1){$("#scroller-previous").addClass("scroller-nav-disabled");}
		
			$("#scroller-content").width(totalWidth);
			
			$("."+o.slideClass+":first").addClass("slide-visible");
			$("#scroller-previous").unbind("click").click(function(){
				$("#scroller-next").removeClass("scroller-nav-disabled");
				currentSlide = $(".slide-visible").attr("id");
				previousSlide = $("#"+currentSlide).prev().attr("id");
				if(!previousSlide || previousSlide == undefined){ 
					previousSlide = currentSlide;
				}else{
					$("#scroller-previous").removeClass("scroller-nav-disabled");
					$("#"+currentSlide).removeClass("slide-visible");

					$("#"+previousSlide).addClass("slide-visible");

					scrollCounter--;

					if(scrollCounter <= 1){ scrollCounter = 1;}

					$("."+o.slideClass+" ul").animate({marginLeft:-positions[scrollCounter-1]+"px"}, 500);
					if(scrollCounter <= 1){$("#scroller-previous").addClass("scroller-nav-disabled");}
				}
				
			});
		
		
			$("#scroller-next").unbind("click").click(function(e){
				$("#scroller-previous").removeClass("scroller-nav-disabled");
				currentSlide = $(".slide-visible").attr("id");
				nextSlide = $("#"+currentSlide).next().attr("id");
				if(!nextSlide || nextSlide == undefined){ 
					nextSlide = currentSlide;
				}else{
					$("#scroller-next").removeClass("scroller-nav-disabled");
					$("#"+currentSlide).removeClass("slide-visible");

					$("#"+nextSlide).addClass("slide-visible");
					scrollCounter++;

					if(scrollCounter > slideClass){ scrollCounter = scrollCounter / 2; }

					$("."+o.slideClass+" ul").animate({marginLeft:-positions[scrollCounter-1]+"px"}, 500);
					if(scrollCounter >= slideClass){$("#scroller-next").addClass("scroller-nav-disabled");}
				}
			});

			
			self.options.ready && self.options.ready.call(self);
		});
		
		
	}
	
});


/*
PRO urls script
sets all PRO url links correctly in footer
*/

var isCP = !!document.location.hostname.match(/crashplan.com$/);
var isCPP = !!document.location.hostname.match(/crashplanpro.com$/);
var isDev = (window.buildEnv == 'dev');
$.fn.fixProUrls = function() {
	if (isDev) {
		return;
	}
	
	if (isCPP) {// if cpp, anything not tagged goes to cp
		this.each(function() {
			$(this).find('a:not(.crashplanpro-app)').each(function() {
				var href = $.trim($(this).attr('href'));
				if (href.match(/^\//)) {
					$(this).attr('href', 'http://www.crashplan.com' + href);
				}
			});
		});
	} else if (isCP) { // if cp, anything tagged goes to cpp
		this.each(function() {
			$(this).find('a.crashplanpro-app').each(function() {
				var href = $.trim($(this).attr('href'));
				if (!href.match(/^http/)) {
					href = (href.charAt(0) != '/' ? '/' : '') + href;
					$(this).attr('href', 'https://www.crashplanpro.com' + href);
				}
			});
		});
	}
};


/*
CSS Browser Selector v0.4.0 (Nov 02, 2010)
Rafael Lima (http://rafael.adm.br)
http://rafael.adm.br/css_browser_selector
License: http://creativecommons.org/licenses/by/2.5/
Contributors: http://rafael.adm.br/css_browser_selector#contributors
*/

function css_browser_selector(u){var ua=u.toLowerCase(),is=function(t){return ua.indexOf(t)>-1},g='gecko',w='webkit',s='safari',o='opera',m='mobile',h=document.documentElement,b=[(!(/opera|webtv/i.test(ua))&&/msie\s(\d)/.test(ua))?('ie ie'+RegExp.$1):is('firefox/2')?g+' ff2':is('firefox/3.5')?g+' ff3 ff3_5':is('firefox/3.6')?g+' ff3 ff3_6':is('firefox/3')?g+' ff3':is('gecko/')?g:is('opera')?o+(/version\/(\d+)/.test(ua)?' '+o+RegExp.$1:(/opera(\s|\/)(\d+)/.test(ua)?' '+o+RegExp.$2:'')):is('konqueror')?'konqueror':is('blackberry')?m+' blackberry':is('android')?m+' android':is('chrome')?w+' chrome':is('iron')?w+' iron':is('applewebkit/')?w+' '+s+(/version\/(\d+)/.test(ua)?' '+s+RegExp.$1:''):is('mozilla/')?g:'',is('j2me')?m+' j2me':is('iphone')?m+' iphone':is('ipod')?m+' ipod':is('ipad')?m+' ipad':is('mac')?'mac':is('darwin')?'mac':is('webtv')?'webtv':is('win')?'win'+(is('windows nt 6.0')?' vista':''):is('freebsd')?'freebsd':(is('x11')||is('linux'))?'linux':'','js']; c = b.join(' '); h.className += ' '+c; return c;}; css_browser_selector(navigator.userAgent);



/* html5shiv to enable html5 elements for non-supporting browsers */

// iepp v2.1pre @jon_neal & @aFarkas github.com/aFarkas/iepp
// html5shiv @rem remysharp.com/html5-enabling-script
// Dual licensed under the MIT or GPL Version 2 licenses
/*@cc_on(function(a,b){function r(a){var b=-1;while(++b<f)a.createElement(e[b])}if(!window.attachEvent||!b.createStyleSheet||!function(){var a=document.createElement("div");return a.innerHTML="<elem></elem>",a.childNodes.length!==1}())return;a.iepp=a.iepp||{};var c=a.iepp,d=c.html5elements||"abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|subline|summary|time|video",e=d.split("|"),f=e.length,g=new RegExp("(^|\\s)("+d+")","gi"),h=new RegExp("<(/*)("+d+")","gi"),i=/^\s*[\{\}]\s*$/,j=new RegExp("(^|[^\\n]*?\\s)("+d+")([^\\n]*)({[\\n\\w\\W]*?})","gi"),k=b.createDocumentFragment(),l=b.documentElement,m=b.getElementsByTagName("script")[0].parentNode,n=b.createElement("body"),o=b.createElement("style"),p=/print|all/,q;c.getCSS=function(a,b){try{if(a+""===undefined)return""}catch(d){return""}var e=-1,f=a.length,g,h=[];while(++e<f){g=a[e];if(g.disabled)continue;b=g.media||b,p.test(b)&&h.push(c.getCSS(g.imports,b),g.cssText),b="all"}return h.join("")},c.parseCSS=function(a){var b=[],c;while((c=j.exec(a))!=null)b.push(((i.exec(c[1])?"\n":c[1])+c[2]+c[3]).replace(g,"$1.iepp-$2")+c[4]);return b.join("\n")},c.writeHTML=function(){var a=-1;q=q||b.body;while(++a<f){var c=b.getElementsByTagName(e[a]),d=c.length,g=-1;while(++g<d)c[g].className.indexOf("iepp-")<0&&(c[g].className+=" iepp-"+e[a])}k.appendChild(q),l.appendChild(n),n.className=q.className,n.id=q.id,n.innerHTML=q.innerHTML.replace(h,"<$1font")},c._beforePrint=function(){if(c.disablePP)return;o.styleSheet.cssText=c.parseCSS(c.getCSS(b.styleSheets,"all")),c.writeHTML()},c.restoreHTML=function(){if(c.disablePP)return;n.swapNode(q)},c._afterPrint=function(){c.restoreHTML(),o.styleSheet.cssText=""},r(b),r(k);if(c.disablePP)return;m.insertBefore(o,m.firstChild),o.media="print",o.className="iepp-printshim",a.attachEvent("onbeforeprint",c._beforePrint),a.attachEvent("onafterprint",c._afterPrint)})(this,document)@*/

