function Crawler(config){this.type=config.type=='scroll'||config.type=='crawl'?config.type:'scroll';this.target=$('#'+config.target);this['class']=config['class'];this.id=config.id;this.items=config.items;switch(this.type){case'crawl':this.speed=config.crawl.speed;break;case'scroll':this.speed=config.scroll?config.scroll.speed:0;this.area=config.scroll?config.scroll.area:0;break;}
this.delay=config.delay;this.scrollPosition=0;this.scrollDirection=1;this.height=0;this.itemIndexTop=0;this.itemIndexBottom=0;this.pause=false;this.interval=null;this.maxHeight=0;this.init=function(){if (!this.items || !this.items.length) {return false;}$(this.target).append('<ul id="'+this.getId()+'" class="'+this['class']+'"><\/ul>');this.charge();this.reset();$(this.target).mouseenter({self:this},function(event){var self=event.data.self;var area=(self.area>0&&self.area<100?self.area:100)/2;var factor=10-self.speed;factor=factor>0&&factor<=10?factor:1;$(self.target).mousemove({self:event.data.self},function(event){var h=$(this).parent().height();var pageY=($(window).scrollTop()-event.pageY)*-1;var mouseY=event.pageY-$(this).parent().position().top;mouseY=mouseY>0?(mouseY>h?h:mouseY):0;var scrollPosition=false;var scrollDirection=false;var lTop=Math.round(h*area/100);var lBottom=h-Math.round(h*area/100);if(mouseY<lTop){scrollDirection=-1;scrollPosition=Math.round((lTop-mouseY)/lTop*100);}
if(mouseY>lBottom){scrollDirection=1;scrollPosition=Math.round((mouseY-lBottom)/(h-lBottom)*100);}
if(scrollPosition===false||scrollDirection===false){self.pause=true;}
else{self.pause=false;self.scrollPosition=Math.round(scrollPosition/factor);self.scrollDirection=scrollDirection;}});self.start();});$(this.target).mouseleave({self:this},function(event){var self=event.data.self;self.stop();self.reset();$(self.target).unbind('mousemove');});$(window).resize({self:this},function(event){var self=event.data.self;self.charge();});}
this.getHTML=function(index){var item=this.items[index];return'<li><div><h2>'+item.label+'<\/h2><p>'+item.teaser+'<\/p><\/div><img src="'+item.media+'" alt="'+item.label+'" /><\/li>';}
this.charge=function(event){var self=event&&event.data.self?event.data.self:this;self.maxHeight=$(self.target).height()*2;if(self.height<self.maxHeight){var index,item,offset,top;var h;var lTop=Math.round(self.maxHeight/4)*-1;var firstPosition=$('#'+self.getId()+' li:first').position();if(!firstPosition){firstPosition={left:0,top:0};}
if(firstPosition.top>lTop){while(firstPosition.top>lTop){index=(self.items.length-1)-(self.itemIndexTop%self.items.length);$('#'+self.getId()).prepend(self.getHTML(index));h=$('#'+self.getId()+' li:first').height();top=firstPosition.top-h;$('#'+self.getId()+' li:first').click({self:this,index:index},self.itemClick);$('#'+self.getId()+' li:first').css('top',top);self.itemIndexTop++;self.height+=h;firstPosition.top=top;}}
var h;var lBottom=Math.round(self.maxHeight*.75);var lastPosition=$('#'+self.getId()+' li:last').position();if(!firstPosition){lastPosition={left:0,top:0};}
if(lastPosition.top<lBottom){while(lastPosition.top<lBottom){index=self.itemIndexBottom%self.items.length;$('#'+self.getId()).append(self.getHTML(index));h=$('#'+self.getId()+' li:last').height();top=lastPosition.top+h;$('#'+self.getId()+' li:last').click({self:this,index:index},self.itemClick);$('#'+self.getId()+' li:last').css('top',top);self.itemIndexBottom++;self.height+=h;lastPosition.top=top;}}}}
this.itemClick=function(event){var self=event.data.self;var loaded=$(event.currentTarget).hasClass('hi');$('#'+self.getId()+' li.hi').removeClass('hi');if(loaded){loadContent(location.pathname+location.search);}
else{$(event.currentTarget).addClass('hi');var item=self.items[event.data.index];loadContent(item.url,false,true);}};this.stop=function(){var self=this;self.pause=true;if(self.interval){window.clearInterval(self.interval);self.interval=null;}}
this.start=function(){var self=this;if(self.interval){self.stop();}
this.pause=false;var interval=window.setInterval(function(){self.scroll(self);},1);self.interval=interval;}
this.scroll=function(self){if(self.pause){return false;}
var count=$('#'+self.getId()+' li').get().length;if(!count){self.stop();return false;}
var lTop=self.maxHeight*-.25;var lBottom=self.maxHeight*.75;$('#'+self.getId()+' li').each(function(index){var offset,top;offset=$(this).position();top=offset.top-self.scrollPosition*self.scrollDirection;$(this).css('top',top);var h=$(this).height();if(top+h<lTop){self.height-=h;$(this).remove();}
if(top-h>lBottom){self.height-=h;$(this).remove();}});self.charge();}
this.crawl=function(self){return false;if(self.pause){return false;}
var count=$('#'+self.getId()+' li').get().length;if(!count){self.stop();return false;}
$('#'+self.getId()+' li').each(function(index){$(this).animate({top:'-='+$(this).height()},self.speed,'swing',function(){var offset=$(this).position();if(offset.top<0){self.height-=$(this).height();$(this).remove();}
if((index+1)==count){self.charge();}});});}
this.reset=function(){var i,items,offset;items=$('#'+this.getId()+' li').get();offset={left:0,top:0};var position;for(i=0;i<items.length;i++){position=$('#'+this.getId()+' li:gt('+i+')').position();if(position.top>$(this.target).scrollTop()){if(offset.top*-1>position.top){offset.top=position.top;}
offset.top*=-1;break;}
offset.top=Math.round(position.top);}
if(offset.top||offset.left){$('#'+this.getId()+' li').each(function(index){$(this).animate({left:'+='+offset.left,top:'+='+offset.top});});}}
this.getId=function(){return this.id?this.id:'crawler';}
this.init();return this;}
function updateSideBarPosition(event){var offset=$('#main').offset();var left=offset.left-$(window).scrollLeft()-$('#sideBar').width()+$('#sideBar .edgeRight').width();$('#sideBar').css('left',left);}


function init() {
	
	// contentNav
	$('.contentNav > li').click(function(event) {
			$(this).toggleClass('hi');
			//$(this).find('.detail').slideToggle();
			$(this).find('.detail').animate({
					height: "toggle",
					opacity: "toggle" 
				},'normal'
			);
			event.preventDefault();
		}
	);
	
	// contact
	var topNavSavedSelectedItem;
	$('.toggleContact').click(function(event) {
		toggleContact();
		event.preventDefault();
	});
	
	if ($('#contentContact').is(':visible')) {
		gMapInit();
	}
}

function initUI() {
	
	// remove noscript classes
	$('#wrapper').removeClass('noscript');
	if (window.caseStudies && window.caseStudies.length) {
		$('#sideBar').removeClass('noscript');
	}
	
	// sideBar position
	updateSideBarPosition(null);
	$(window).scroll(updateSideBarPosition);
	$(window).resize(updateSideBarPosition);
	
	// crawler, scroller
	var conf={
		'target':'caseStudies',
		'class':'caseStudies',
		'id':false,
		'crawl':{
			'speed':500,
			'delay':2500
		},
		'scroll':{
			'speed':5, // 1 - 10
			'area':60 // 1 - 100
		},
		'type':'scroll', // scroll, crawl
		'items':window.caseStudies
	};
	var c=new Crawler(conf);
}
function toggleContact(){$('#contentContact').slideToggle('slow',function(){if($(this).is(':visible')){topNavSavedSelectedItem=$('#topNav li.hi');}
if(topNavSavedSelectedItem){$(topNavSavedSelectedItem).toggleClass('hi');}
$('.toggleContact').parent().toggleClass('hi');gMapLoad();});}
function loadContent(url,container,removeContentClass){$.ajax({url:url+(url.indexOf('?')==-1?'?':'&')+'content-type=json&content=content',success:function(data){var selector;switch(container){case'contact':selector='#contentContact .contentContainer';break;default:if($('#contentContact').is(':visible')){toggleContact();}
if($('.content:visible:first').attr('id')=='contentContact'){selector='.content:visible:last .contentContainer';}
else{selector='.content:visible .contentContainer';}}
if(window.contentClass){if(removeContentClass){$(selector).parent().removeClass(window.contentClass);}
else{$(selector).parent().addClass(window.contentClass);}}
$(selector).html(data);$(window).scrollTop(0);switch(container){case'contact':gMapSetLink();break;}}});}
