var prevLoc=window.location.href;
setInterval(function(){
	if(prevLoc != window.location.href){
		prevLoc = window.location.href;
		var urlParts=window.location.href.split('#/');
		if(urlParts.length>1){
			loadPage(urlParts[1]);
		} else {
			closePageContainer();
		}
	}
}, 200);

var insertNeighbour=false;
var pageContainer=false;
var jobElement=false;
var leftPosition=0;
var windowWidth;
var homeBodySlider;
var imageTally=0;
var setImageSliderWidth=false;
var pageRequest=false;
var scrollHandle=false;
var customScroller=false;
var AJAX=ROOT+'/'+CONTROLLER+'/ajax/';

function toggleForm(){
	if(drag){
		drag.fireEvent('mouseover');
	}
	if(contactOpener.open){
		contactOpener.start({
			height:0,
			paddingTop:0
		});
		contactOpener.open=false;
	} else {
		contactOpener.start({
			height:164,
			paddingTop:10
		});
		contactOpener.open=true;
	}
}
window.addEvent('resize', function(){
	drag.dispose();
	$('home-page-load-notifier').set('text', 'Hold on, adjusting for the perfect fit...');
	initialize();
});
function resetForm(){
	$$('#top-form input.text, #top-form textarea').each(function(el){
		el.value=el.name;
		el.addClass('unfocussed');
		el.addEvent('focus', function(){
			var tThis=$(this);
			if(tThis.hasClass('unfocussed')){
				tThis.removeClass('unfocussed');
				tThis.value='';
			}
		});
	});
}
window.addEvent('domready', function(){
	windowWidth=$(window).getWidth();
	homeBodySlider=$('home-body-slider');
	if(PARAMS.alias!='home'){
		window.location.href="/#"+window.location.href.split(ROOT)[1];
	} else {
		initOnce();
	}
	resetForm();
	$('contact-submit').addEvent('click', function(){
		var elements=$$('#top-form input.text, #top-form textarea');
		var contact={};
		for(var i=0; i<elements.length; i++){
			el=$(elements[i]);
			contact[el.name]=el.value;
		}
		new Request.JSON({
			url:AJAX+'sendcontact',
			onSuccess:function(data){
				resetForm();
				toggleForm();
			},
			onError:function(){
				alert("There was a problem sending your enquiry. Please try again");
			}
		}).post(contact);
	});
	contactOpener=new Fx.Morph($('top-form'), {link:'cancel'});
	contactOpener.open=false;
});

//Function to intialize site on first load
function initOnce(){
	$$('#main-menu a').each(function(el){
		el=$(el);
		el.store('effector', new Fx.Morph(el, {duration:200, link:'cancel', transition:'back:out'}));
		//get this menu entry's link
		var hrefParts=el.href.split('/');
		var linkAlias=''
		for(var i=3; i<hrefParts.length; i++){
			linkAlias+='/'+hrefParts[i];
		}
		el.store('linkAlias', linkAlias);
		//If a menu item is clicked...
		el.addEvent('click', function(){
			var link=$(this);
			if(!link.href.test('javascript:')){
				pageToLoad=link.retrieve('linkAlias');
				//Find Central Point for inserting page
				var cols=$$('div.home-column');
				var targetX=windowWidth/2;
				cols.each(function(el){
					var elPos=el.getPosition().x;
					if(elPos>targetX-300 && elPos<targetX-70){
						pageColumn=el;
					}
				});
				insertNeighbour=pageColumn;

				if(pageContainer && pageToLoad!=window.location.href.split('#')[1]){
					new Fx.Tween(pageContainer, {onComplete:function(){
							pageContainer.dispose();
							window.location.href='#'+pageToLoad
						}
					}).start('width', 0);
					homeBodySlider.retrieve('slider').start('left', leftPosition);
				} else {
					window.location.href='#'+link.retrieve('linkAlias');
				}
				return false;
			}
		});
		el.addEvent('mouseover', function(){
			var el=$(this);
			el.retrieve('effector').start({
				color:'#000000',
				paddingLeft:10
			})
		});
		el.addEvent('mouseout', function(){
			var el=$(this);
			el.retrieve('effector').start({
				color:'#666666',
				paddingLeft:0
			})
		});
	});
	initialize();
}

function initialize(){
	homeBodySlider.set('html', '');
	homeBody=$('home-body');
	$('home-page-load-notifier').fade('in');
	homeBody.setStyle('height', $(window).getHeight()-135);
	homeBody.addClass('loading');
	if(pageRequest){
		pageRequest.cancel();
	}
	pageRequest=new Request.HTML({
		url:AJAX+'loadhomepage',
		onSuccess:function(el, list, HTML, other){
			$('home-page-load-notifier').fade('out');
			homeBody.removeClass('loading');
			homeBodySlider.set('html', HTML);
			homeBodySlider.setStyle('width', (homeBodySlider.getElements('.home-column').length*240)+windowWidth);
			scrollHandle=new Drag('main-slider', {
				modifiers:{x:'left', y:false},
				onDrag:function(el, evt){
					var amount=(parseInt(el.getStyle('left'))-10)/(windowWidth-100);
					if(amount<0){
						el.setStyle('left', 10);
						this.stop();
					} else if(amount>=100){
						el.setStyle('left', windowWidth-100);
						this.stop();
					}
					var offSet=(homeBodySlider.getWidth()-(2*windowWidth))*amount;
					leftPosition=-offSet;
					homeBodySlider.setStyle('left', -offSet);

					var hue=(amount)*359;
					var col=new Color([hue, 70, 90].hsbToRgb());
					el.setStyle('background-color', col);
				}
			});
			initHomepage();
		}
	}).post({height:$(window).getHeight(), get:GET});
}

//Initializes the homepage
function initHomepage(){
	$$('.item-content-background').each(function(el){
		el=$(el);
		el.setStyle('opacity', 0);
		el.store('transition', new Fx.Morph(el, {duration:200, link:'cancel'}));
	});
	$$('.item-content').each(function(el){
		el=$(el);
		el.store('transition', new Fx.Tween(el, {duration:300, link:'cancel'}));
	});
	$$('.home-item').each(function(el){
		var hrefParts=el.getElement('a').href.split('/');
		var linkAlias=''
		for(var i=3; i<hrefParts.length; i++){
			linkAlias+='/'+hrefParts[i];
		}
		el.store('linkAlias', linkAlias);

		el.addEvent('mouseenter', function(){
			el=$(el);
			$(this).getElement('div.item-content').retrieve('transition').start('top', 10);
			$(this).getElement('div.item-content-background').retrieve('transition').start({
				width:240,
				opacity:.9
			});
		});
		
		el.addEvent('mouseleave', function(){
			el=$(el);
			$(this).getElement('div.item-content').retrieve('transition').start('top', 156);
			$(this).getElement('div.item-content-background').retrieve('transition').start({
				width:0,
				opacity:.9
			});
		})

		el.addEvent('click', function(){
			jobEl=$(this);
			if(!jobEl.retrieve('linkAlias')){
				showVacancy();
			} else {
				insertNeighbour=jobEl.getParents('.home-column')[0];
				insertPage=jobEl;
				if(pageContainer){
					new Fx.Tween(pageContainer, {onComplete:function(){
							pageContainer.dispose();
							window.location.href='#'+insertPage.retrieve('linkAlias');
						}
					}).start('width', 0);
				} else {
					scrollHandle.detach();
					window.location.href='#'+insertPage.retrieve('linkAlias');
				}
			}
		});
	});
	$('home-body-slider').store('slider', new Fx.Tween($('home-body-slider')));
	$$('.item-content-background').each(function(el){
		if(el.hasClass('thinking')){
			var colors=['#ff3800', '#ffbd00', '#fffc00'];
			var textColors=['#fff', '#333', '#333'];
		} else if(el.hasClass('creating')){
			var colors=['#54d879', '#00dcf0', '#00afff'];
			var textColors=['#333', '#333', '#fff'];
		} else {
			var colors=['#0062d3', '#1829b1', '#ce29a2'];
			var textColors=['#fff', '#fff', '#fff'];
		}
		var num=Number.random(0,2);
		el.setStyle('background-color', colors[num]);
		el.getSiblings('.item-content')[0].setStyle('color', textColors[num]);
	});
	initDrag();
	var urlParts=window.location.href.split('#/');
	if(urlParts.length>1){
		var cols=$$('div.home-column');
		var targetX=windowWidth/2;
		cols.each(function(el){
			var elPos=el.getPosition().x;
			if(elPos>targetX-300 && elPos<targetX-70){
				pageColumn=el;
			}
		});
		insertNeighbour=pageColumn;
		loadPage(urlParts[1]);
	}
}

function loadPage(pageAlias){
	scrollHandle.detach();
	imageTally=0;
	createPageContainer();
	if(pageRequest){
		pageRequest.cancel();
	}
	pageRequest=new Request.HTML({
		url:AJAX+'loadpage',
		onSuccess:function(list, items, HTML){
			pageContainer.set('html', HTML);
			pageContainer.removeClass('loading');
			pageContainer.getElement('div.page-images').setStyles({
				height:parseInt($('home-body').getStyle('height'))-20,
				width:parseInt($(window).getWidth())-260
			});
			if(!setImageSliderWidth){
			} else {
				$('image-slider').setStyle('width', parseInt($(window).getWidth())-260);
				setImageSliderWidth=false;
			}
		},
		onError:function(){
			closeJob();
			scrollHandle.attach();
		}
	}).post({alias:pageAlias, height:parseInt($('home-body').getStyle('height'))-20});
}

function loadProfile(person){
	imageTally=0;
	if(pageRequest){
		pageRequest.cancel();
	}
	pageRequest=new Request.HTML({
		url:AJAX+'loadprofile',
		onSuccess:function(items, list, HTML){

			new Fx.Tween(pageContainer.getElement('div.page-images-holder'), {
				onComplete:function(){
					pageContainer.getElement('div.page-images-holder').set('html', HTML);
					var ptHeight=$('profile-text').getSize().y;
					var pText=$('profile-text-container');
					var fSize=10;
					while(pText.getSize().y<=ptHeight){
						fSize++;
						pText.setStyle('font-size', fSize);
						pText.setStyle('line-height', '1.2em');
					}
					pText.setStyle('font-size', fSize-1);
					new Fx.Tween(pageContainer.getElement('div.page-images-holder')).start('opacity', 1);
				}
			}).start('opacity', .1);
			
		}
	}).post({alias:person, height:parseInt($('home-body').getStyle('height'))-20});
}



function initDrag(){
		drag=new Element('IMG');
		drag.src='/static/images/framework/drag.png';
		drag.setStyles({
			position:'absolute',
			opacity:0,
			left:10,
			top:90
		});
		drag.onload=function(){
			initDragBubble();
		}
		drag.injectInside(document.body);
		drag.addEvent('mouseover', function(){
			new Fx.Morph(drag, {transition:'back:in', onComplete:function(){drag.dispose()}}).start({
				left:50,
				top:155,
				opacity:0
			});
		});
}
function initDragBubble(){
	new Fx.Morph(drag, {transition:'back:out'}).start({
		left:25,
		top:100,
		opacity:1
	});
}

function createPageContainer(){
	pageContainer=new Element('DIV');
	pageContainer.setStyles({
		height:$('home-body').getStyle('height'),
		overflow:'hidden',
		width:0,
		float:'left'
	});
	pageContainer.addClass('loading');
	pageContainer.store('expander', new Fx.Tween(pageContainer));
	pageContainer.injectAfter(insertNeighbour);

	itemLeft=pageContainer.getLeft();
	containerLeft=parseInt(homeBodySlider.getStyle('left'));
	targetWidth=parseInt($(window).getWidth());

	var target=0-(itemLeft-containerLeft);
	$('home-body-slider').retrieve('slider').start('left', target);
	pageContainer.retrieve('expander').start('width', targetWidth);
}








function showPic(item){
	var im=$(item);
	im.getParent('a').setStyle('opacity', 0);
	im.getParent('a').setStyle('visibility', 'visible');
	im.getParent('a').fade('in');
}
function closePageContainer(){
	new Fx.Tween(pageContainer, {onComplete:function(){pageContainer.dispose();}}).start('width', 0);
	$('home-body-slider').retrieve('slider').start('left', leftPosition);
	scrollHandle.attach();
}
function closePage(){
	var urlParts=window.location.href.split('#/');
	window.location.href='#';
	closePageContainer();
}

function tallyImage(max){
	imageTally++;
	if(imageTally==max){
		initImageScroller();
	}
	initImageScroller();
	createCustomScroller();
}

function initImageScroller(){
	var iSlider=$('image-slider');
	if(iSlider){
		var contents=iSlider.getElements('img, div#profile-stats, div.item');
		var sWidth=0;
		for(var i=0; i<contents.length; i++){
			sWidth+=contents[i].getSize().x+20;
		}
		iSlider.setStyle('width', sWidth+20);
	}
	sliderWidth=sWidth;
}

function createCustomScroller(){
	if(customScroller){
		customScroller.dispose();
	}
	$('page-images').setStyle('overflow', 'hidden');
	customScroller=new Element('DIV');
	customScroller.setStyles({
		position:'absolute',
		left:0,
		bottom:0,
		height:10,
		borderTop:"solid 1px #999",
		backgroundColor:"#FFF",
		width:'100%'
	});
	customScroller.injectInside($('page-images'));
	customScrollerHandle=new Element('DIV');
	customScrollerHandle.setStyles({
		width:50,
		height:9,
		backgroundColor:'#999',
		backgroundImage:"url('static/images/framework/slider.png')",
		position:'relative',
		left:0,
		top:-5,
		cursor:'e-resize'
	});
	customScrollerHandle.injectInside(customScroller);
	$('image-slider').setStyle('position', 'absolute');
	new Slider(customScroller, customScrollerHandle, {steps:5000, range:[1, 5000], onChange:function(value){
			$('image-slider').setStyle('left', 0-((value/5000)*(sliderWidth+20-$('page-images').getSize().x)));
			//console.log(value);
	}});
	cDrag=new Drag($('image-slider'), {modifiers:{'x':'left', 'y':false}, onDrag:function(el){
		var left=parseInt(el.getStyle('left'));
		if(left>0){
			el.setStyle('left', 0);
		}
		if(left<-(sliderWidth+20-$('page-images').getSize().x)){
			el.setStyle('left', -(sliderWidth+20-$('page-images').getSize().x));
		}
	}});
}
// Function sets the slider width to the sreen width
function setWidth(){
	setImageSliderWidth=true;
}

function sendBubble(){
	bubbleContent=$('bubble-content').value;
	bubbleEmail=$('bubble-email').value;

	if(bubbleContent.trim()=='' || bubbleEmail.trim()=="Type your message here..."){
		alert('You must type a message!');
	} else if(bubbleEmail.trim()=='' || bubbleEmail.trim()=="...and your email address here"){
		alert('You must enter your email address!');
	} else  if(!bubbleEmail.test(/\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/)){
		alert("You must enter a valid email address");
	} else {
		new Request.JSON({
			url:AJAX+'addbubble',
			onSuccess:function(data){
				bubbleContent=data.content;
				bubbleSize=getBubbleSize();
				var bubbleBoard = $('bubble-board');
				bubbleBoard.newBubble(bubbleContent, getBubbleSize());
			}
		}).post({message:bubbleContent, email:bubbleEmail})
	}
}
function getBubbleText(){
	return bubbleContent;
	console.log("called from Flash")
}
function getBubbleSize(){
	if(bubbleContent.length<20){
		return 'small';
	} else if(bubbleContent.length<60){
		return 'med';
	} else {
		return 'large';
	}
}

function showVacancy(){
	cover=new Element('DIV');
	cover.setStyles({
		width:'100%',
		height:'100%',
		position:'absolute',
		left:0,
		top:0,
		backgroundColor:'#000000',
		opacity:0
	});
	cover.injectInside(document.body);
	new Fx.Tween(cover).start('opacity', .8);

	job=new Element('DIV');
	job.setStyles({
		width:700,
		position:'absolute',
		left:'50%',
		top:$(document).getHeight()/2,
		marginLeft:-350,
		backgroundColor:'#FFF',
		overflow:'auto'
	});
	job.injectInside(document.body);
	new Fx.Tween(job).start('opacity', 1);

	job.set('html', $('vacancy').get('html'));
	job.setStyle('margin-top', -(job.getHeight()/2));
}
function closeVacancy(){
	new Fx.Tween(job).start('opacity', 0);
	new Fx.Tween(cover, {onComplete:function(){job.dispose();cover.dispose()}}).start('opacity', 0);
}
