/**
*	@author:	Bureau-va (andrew.roberts@bureau-va.com)
*	@version: 	1.6
*	@since:		15-09-10
*				17-09-10	Added slide insert method, preview hover, and qstring
*
*/
var viewer, windowHeight,windowWidth, open_project, imgPreset,ratio,hRatio,wRatio,availablespace = 0, mobile = false,ani_timer = null,c = 0,controls,controlactive = false, clickBlock = false, mSection,
zoomFactor = 1.6,
PANAMOUNT = 0.2,
autoclose = true, // our work - only keep 1 project open at a time
domain_name = location.protocol + '//' + location.hostname,
vpath = domain_name+ location.pathname,
p_height = 100,
activity = 'viewlist',
si = true, vclick = false;

// mobile detect
var deviceAgent = navigator.userAgent.toLowerCase();
var agentID = deviceAgent.match(/(iphone|ipod|ipad)/);
if (agentID) mobile = true;

$(document).ready(function(){

	$('body').addClass('js_enabled');
	if(mobile) $('body').addClass('mobile');
	windowWidth = $('#page-wrap').width();
	if($.browser.msie && parseFloat($.browser.version) < 7) $('body').addClass('ie6');

	//
	// Watch links
	$('.section > h2 > a, .section .sub-section > h3 a, a.picturestory').unbind('click').live('click', function(e, extra){

		e.preventDefault();
		if(clickBlock) return;
		
		clickBlock = true;
		var mylink = $(this),
		wrap = mylink.parent().parent(),
		innerwrap = $('> div',wrap);
		mylink.addClass('loading');
		
		if( wrap.hasClass('active')){
			// close
			wrap.removeClass('active');
			mylink.removeClass('active').find('em').remove();
			// close viewer (our work)
			$('.projects li a').each(function(){
				if($(this).hasClass('active')) $(this).trigger('click');
			});			
			innerwrap.displayThis();
			clickBlock = false;
			setTimeout(function(){ mylink.removeClass('loading'); },300);
			
			rebuildHash();
		}else{
			
			if( !wrap.hasClass('sub-section') && !mylink.hasClass('picturestory')){ //main sections only
			$('#page-wrap > div.active').each(function(){
				//close open section
				$(this).removeClass('active').find('h2 a').removeClass('active');
				$(this).find('div:first').displayThis();
				$('a em',$(this)).remove();
			});
			}
			// Open
			wrap.addClass('active');
			if(!mylink.hasClass('picturestory')) mylink.prepend('<em>Hide </em>').addClass('active');

			var link = mylink.attr('href'),
			src = link + '.ajax';
			hash = link.replace(vpath,'/');
			window.location.hash = hash;
			
			// Does content exist but is hidden?
			if( innerwrap.length > 0 ){
				innerwrap.displayThis();
				clickBlock = false;
				setTimeout(function(){ mylink.removeClass('loading'); },300);
			}else{

				$.ajax({ 
					url: src,
					success: function(data){
						
						if( mylink.hasClass('picturestory') ){
							
							wrap = mylink.parent().parent().closest('li');
							wrap.css({ height: wrap.find('img').height()+'px' });
							
							// build the new existing first slide
							var slide = $('.content',wrap),
							slideimg = $('img',wrap),
							newli = $('<li></li>');
							newli.append(slide).append(slideimg);
							wrap.prepend(data);
							//var wrappos = wrap.position();
							//$('html,body').animate({scrollTop : wrappos.top -35 + 'px'},400);							
							//
							$('ul.picture-story',wrap).prepend(newli);
							pictureStory(wrap);
							
						}else{
							wrap.append(data);
							$('> div',wrap).css({ display:'none', overflow:'hidden', position: 'relative', zoom: '1'}).displayThis();
							if($('#s_projects',wrap).length > 0) watchProjects();
							//gmaps
							if($('#geolat').length > 0 ) gmap();
						}
						
						clickBlock = false;
						
						if(extra!=undefined){
							extra = extra.replace('#','');
							$('h3 a[href$="'+extra+'"],  a.picturestory[href$="'+extra+'"]',wrap).trigger('click');
						}
						setTimeout(function(){ mylink.removeClass('loading'); },300);
						fieldhint();
					},
					timeout: 5000,					
					error: function(){ 
						clickBlock = false;
						mylink.removeClass('loading');
					}
				});
			
			}
			// GA page view
			_gaq.push(['_trackPageview', link]);
		}
	});

	//
	// Horizontal header links	
	$('#header .horiz li a').click(function(e){
		e.preventDefault();
		var mylink = $(this),
		link = mylink.attr('href'),
		src = link + '.ajax',
		wrap = $('#page-wrap');
		hash = link.replace(vpath,'/');
		window.location.hash = hash;
			
		if(mylink.hasClass('active')){
			$('#top-panel').displayThis();
			mylink.removeClass('active');
			$('em',mylink).remove();
		}else{
		
			if( $('#top-panel').height() > 0 && $('#top-panel').css('display') != 'none'){
				$('#top-panel').animate({height:'toggle'}, 400, function(){
					$('#top-panel').remove();
					$('#header .horiz li a').removeClass('active');
					$('#header .horiz li a em').remove();
					mylink.addClass('active');
					mylink.prepend('<em>Hide</em> ');
					getTopPanelData(src);
				});
			}else{

				$('#top-panel').remove();
				mylink.addClass('active');
				mylink.prepend('<em>Hide</em> ');
				getTopPanelData(src);
			}
			
		}
		_gaq.push(['_trackPageview', link]);
		function getTopPanelData(src){
			$.ajax({ 
				url: src, 
				success: function(data){
					wrap.prepend(data);
					$('#top-panel').css('display','none').displayThis();
					clickBlock = false;
					fieldhint();
				}
			});
		}
	});
	
	//
	// Picture story img trigger
	$('.panels li img').unbind('click').live('click',function(){
		
		var wrap = $(this).closest('.pic-wrap'),
		el = $('.controls .next',wrap);
		if(wrap.length==0){
			wrap = $(this).parent()
			el = $('.controls .picturestory',wrap);
		}
		el.trigger('click');

	}).live('mouseenter',function(){
		el = $('.controls .start, .controls .next',$(this).closest('.panel'));
		el.addClass('over');
		
	}).live('mouseleave',function(){	
		el = $('.controls .start, .controls .next',$(this).closest('.panel'));
		el.removeClass('over');	
	});
	
	$('.panels .panel > img').live('mouseenter',function(){
		$(this).css('opacity','0.9');
	}).live('mouseleave',function(){
		$(this).css('opacity','1');
	})
	
	//
	// Hash present - deep link
	var hash = window.location.hash,
	hash = hash.replace('#',''),
	linkparts = hash.split("/"),
	rebuild = '';

	$.each(linkparts,function(ind,val){
		if(ind>0){
			//find link and trigger
			rebuild += '/'+val;
			clickBlock=false;
			if(!$('a[href="'+rebuild+'"]').hasClass('active'))
				$('a[href="'+rebuild+'"]').delay(1000).trigger('click',hash);
		}
	});
	
	// Resize techniques for picture story and project viewers
	$(window).resize(function(){

		windowWidth = $('#page-wrap').width();
		// Viewer
		viewerEl = $('.projects li.active .viewer');
		if(viewerEl.length>0){
			windowHeight = Seadragon.Utils.getWindowSize().y;
			SetContainerHeight(viewerEl,false);
		}
		
		//picture stories
		if($('ul.picture-story').length>0){

			$('ul.picture-story').each(function(){
				var story = $(this);
				wrap = story.parent().parent().closest('li');
				currentStoryPage = wrap.data('currentStoryPage');
				var h = $('li:nth-child('+currentStoryPage+') img',story).height();
				story.parent().parent().css('height',h+'px');				
				n=1;
				
				$('li',story).each(function(){
					// set new widths
					$(this).css('width',windowWidth+'px');
					if( n == currentStoryPage ){
						var nxtPos = $('li:nth-child('+currentStoryPage+')',story).position();
						story.css({left: -nxtPos.left+'px'});
					}
					n++;
				});
			});
		}
		
	});
	
	var cache = [];
	$.preLoadImages = function() {
		var args_len = arguments.length;
		for (var i = args_len; i--;) {
		  var cacheImage = document.createElement('img');
		  cacheImage.src = arguments[i];
		  cache.push(cacheImage);
		}
	}
	jQuery.preLoadImages("/layout/img/viewer_left_ro.png","/layout/img/viewer_right_ro.png","/layout/img/viewer_up_ro.png","/layout/img/viewer_down_ro.png");
});

function fieldhint(){

	$('input.hint').each(function(){
		if($(this).attr("value") == '') $(this).attr("value",$(this).attr("title"));

		$(this).unbind("blur").bind("blur",function(){
			if($(this).attr("value") == ''){
				$(this).attr("value",$(this).attr("title"));
			}
		}).unbind("focus").bind("focus",function(){
			if($(this).attr("value") == $(this).attr("title")) $(this).attr("value","");

		})
	});
}

function pictureStory(wrap){
	
	var carousel = $('ul.picture-story',wrap),
	picwrap = $('.pic-wrap',wrap);
	picwrap.css({position:'relative', height: '100%', overflow: 'hidden'});
	
	carousel.css({width:'40000px', position: 'absolute', left:'0px'});
	var storyItems = $('ul.picture-story li',wrap);

	// store data against obj
	wrap.data('currentStoryPage', '2');
	wrap.data('storyItemsLength', storyItems.length);

	var first = $('.picture-story li:first',wrap);
	var box = $('.content',first).html();
	var prev = $('<li class="prev-wrap"><a class="prev loading" href="{matrix:TARGETPAGE}"><span></span></a></li>');
	var next = $('<li class="next-wrap"><a class="next" href="{matrix:TARGETPAGE}"><span></span></a></li>');
	var s_controls  = $('<ul class="controls horiz full"></ul>').append(prev).append(next);
	$('.content:first',wrap).html(box).append(s_controls);	
	var counter =  $('<li class="end sbindex"><a class="story-page" href="#"><span></span></a></li>').bind('click',function(e){ e.preventDefault(); GotoStoryBoard(carousel, 1); });
	s_controls.append(counter);
	$('.content',first).hide();

	storyItems.each(function(){
		$(this).css({float:'left',width: windowWidth + 'px'})
	});
	
	prev.unbind('click').bind('click',storyPrev);
	next.unbind('click').bind('click',storyNext);
	
	// trigger next slide onload
	s_controls.hide();
	$('ul.picture-story li:nth-child(2) img').bind('load',function(){
		setTimeout(function(){
		s_controls.show();
		picwrap.addClass('picture-story');
		$('.controls:first',picwrap).remove();
		GotoStoryBoard(carousel,2);
		$('a.loading',prev).removeClass('loading');							
		},400);
	});
	
	function GotoStoryBoard(storyBoard,itemNumber){

		var panel = storyBoard.closest('li'),
		mTop = 89;
		
		wrap.data('currentStoryPage',itemNumber);
		$('li',s_controls).removeClass('active');
		
		if(itemNumber==1){
			mTop = 0;
			rebuildHash();
		}
		
		var nextItem = $('> li:nth-child('+(itemNumber)+')', storyBoard);
		var box = $('.content .text-box',nextItem).html();
		
		$('.content .text-box',nextItem).hide();
		$('.content:first .text-box',storyBoard.parent()).html(box);

		var nxtPos = nextItem.position();
		if(mTop==0){
			//
			// Back to beginning state
			next.show();
			panel.animate({height: parseInt(nextItem.find('img').height())+mTop + 'px'}, 300 ,function(){
				storyBoard.animate({left: -nxtPos.left+'px', marginTop: mTop+'px'}, 450, "easeOutQuad",function(){
				$('.next',nextItem.closest('.pic-wrap')).addClass('start');
				$('.sbindex,.prev-wrap',nextItem.closest('.pic-wrap')).hide();
				});
			});
		}else{
			storyBoard.animate({left: -nxtPos.left+'px' }, 450, "easeOutQuad", function(){
				panel.animate({height: parseInt(nextItem.find('img').height()) + 'px'}, 300, function(){
					// Scroll to top. This must initiate only on the second slide
					if(itemNumber==2 && !mobile){
						var p = nextItem.closest('.pic-wrap').offset();
						$('html,body').animate({scrollTop : p.top + 'px'},400);
					}
					$('.next',nextItem.closest('.pic-wrap')).removeClass('start');
					$('.sbindex,.prev-wrap',nextItem.closest('.pic-wrap')).show();
				});
			});
		}
		
	}
	function storyNext(e){
	
		e.preventDefault();
		var wrap = $(this).parent().closest('li'),
		storyBoard = $(this).closest('.pic-wrap').find('ul.picture-story'),
		currentStoryPage = wrap.data('currentStoryPage');
		currentStoryPage++;
		
		if(wrap.data('storyItemsLength')==currentStoryPage+1) next.hide();
		
		if($('> li:nth-child('+(currentStoryPage)+')', storyBoard).length>0){
			wrap.data('currentStoryPage',currentStoryPage);
			GotoStoryBoard(storyBoard,currentStoryPage);
		}else{
			currentStoryPage--;
		}

	}
	function storyPrev(e){
		e.preventDefault();
		var wrap = $(this).parent().closest('li'),
		storyBoard = $(this).closest('.pic-wrap').find('ul.picture-story'),
		currentStoryPage = wrap.data('currentStoryPage');
		
		currentStoryPage--;
		next.show();
		
		if($('> li:nth-child('+(currentStoryPage)+')', storyBoard).length>0){
			wrap.data('currentStoryPage',currentStoryPage);
			GotoStoryBoard(storyBoard,currentStoryPage);
		}else{
			currentStoryPage++;
		}
		
	}

}

function watchProjects(){

	var sd = '<script type="text/javascript" src="/layout/js/seadragon-min.js"></script>';
	$('head').append($(sd));
	windowHeight = Seadragon.Utils.getWindowSize().y;
	//
	// Seadragon config params
	Seadragon.Config.imagePath = 'img/';
	Seadragon.Config.animationTime = '2';
	Seadragon.Config.maxZoomPixelRatio = '1';
	Seadragon.Config.minZoomImageRatio = '1';
	Seadragon.Config.autoHideControls = false;
	
	var listitems = $('#s_projects .projects li'),
	toggled = false,
	viewerBtns = $('#views a'),
	namepreviews = $('.preview.name',listitems),
	imagepreviews = $('.preview.image',listitems),
	metaheadings = $('> div.viewone',listitems),
	viewtwo =  $('> div.viewtwo',listitems),
	pheadings = $('.projects-head:first'),
	thumbheadings = $('.thumbview');

	viewtwo.hide();
	metaheadings.show();

	listitems.each(function(){
		
		var wrap = $(this), 
		focus,
		myLink = wrap.find('a');
		myLink.attr('id', 'a_' + c);
		wrap.find('.preview').css({ height: '0px', overflow:'hidden', opactity:'0' })
		
		wrap.unbind('mouseenter').bind('mouseenter',function(){
			
			myLink.addClass('hover');
			if(wrap.find('.viewer').length > 0 || toggled || vclick ) return;
			acord = $(this),
			focus = acord;
			//ani_timer = setTimeout(function(){
				$('> div.viewone',acord).css('display','none');
				acord.find('.preview.name').stop().animate({height:p_height-30+'px'}, 300).css('opacity', '1');
				acord.find('.preview.image').stop().animate({height:p_height+'px', opacity: '1'}, 300)
				
			//},0);
			
		}).unbind('mouseleave').bind('mouseleave',function(){

			myLink.removeClass('hover');
			if(wrap.find('.viewer').length > 0 || toggled || vclick )  return;
			$(this).find('.preview').stop().animate({height:'0px', opacity: '0'}, 300, function(){
				$('> div.viewone',focus).css('display','inline');
			});
			clearTimeout(ani_timer);
		});
		
		$(this).unbind('click').bind('click',openViewerHandler);
		c++;
	});
	
	$('#views .view-thumbs, #views .view-list').click(function(e){
		e.preventDefault();
		
		var p = $('.projects li.active');
		if(p.length){
			// close active Viewer
			 $('h3 a',p).trigger('click');
		}
		
		viewerBtns.removeClass('on');

		if(activity == 'viewlist'){
			$('#views .view-thumbs').addClass('on');

			activity = 'viewthumb';
			listitems.trigger('mouseenter');
			$('h3 a',listitems).removeClass('hover');
			pheadings.hide();
			thumbheadings.show();		
			toggled=true;
		
		}else{
			
			$('#views .view-list').addClass('on');
			activity = 'viewlist';
			toggled=false;
			listitems.trigger('mouseleave');
			pheadings.show();
			thumbheadings.hide();			
		}

	});
}

$.fn.displayThis = function(){
	$(this).animate({ height: 'toggle' }, 500);
}

function openViewerHandler(e){
	//open sesame
	e.preventDefault();
	
	// Reset states
	vclick = true;
	var v = $(this);
	$(v).unbind('click').removeClass('hover').addClass('active').addClass('visited');
	
	
	var	mylink = $(v).find('a:first'),
	link = mylink.attr('href')
	src = link + '.ajax';
	mylink.prepend('<em>Hide </em>');
	
	if(autoclose){
		$('#s_projects .projects li').each(function(){
			var k = $('h3 a',$(this)), id = k.attr('id');
			if( id != mylink.attr('id') && $(this).hasClass('active')){
				k.unbind('click').bind('click', closeViewerHandler);
				k.trigger('click');
			}

		})
	}	
	
	v.find('.preview.name').stop();
	v.find('.preview.image').stop();
	
	//setTimeout(function(){
	$('.preview.image',v).hide();
	$('> div.viewone',v).hide();
	$('.preview.name',v).css('height','70px').show();
	$('> div.viewtwo',v).show();
	//},200);
	
	mylink.unbind('click').bind('click', closeViewerHandler);
	v.find('.preview.name').bind('click', function(){
		mylink.trigger('click')
	});
	mylink.addClass('active').addClass('loading');
	
	hash = link.replace(vpath,'/');
	window.location.hash = hash;
	
	var wrap = $(v),
	viewerEl = wrap.find('.viewer');
	
	// Get dzi
	$.ajax({ 
		url: src, 
		success: function(data){
			wrap.append(data);
			wrap.find('.viewer').css({height: '0px', overflow: 'hidden'});
			setTimeout(function(){ mylink.removeClass('loading'); },300)
			openProject(wrap);
			vclick = false;
		},
		timeout: 5000,
		error: function(){
			mylink.removeClass('loading');
			vclick = false;
		}
	});
	_gaq.push(['_trackPageview', link]);
}
function closeViewerHandler(e){

	e.preventDefault();
	var link = this,
	link_id = this.id;
	link = $('#'+link_id);
	wrap = link.closest('li');
	viewerEl = wrap.find('.viewer');
	link.addClass('loading').find('em').remove();

	viewerEl.animate({height: '0px'},500, function(){
		
		viewerEl.remove();
		wrap.removeClass('active');
		
		switch(activity){
		case 'viewthumb':
			$('.projects-head:first').hide();
			$('> div.viewtwo',wrap).hide();
			$('#s_projects .thumbview').show();
			$('.preview',wrap).show();
			break;
		default:
			$('> div.viewtwo',wrap).hide();
			$('.preview.name',wrap).hide();
			$('> div.viewone',wrap).show();
			activity='none';
			break;
		}
		//
		$('h3 a',wrap).unbind('click');
		wrap.unbind('click').bind("click",openViewerHandler);
		$('.preview.name',wrap).unbind('click');
		link.removeClass('loading').removeClass('hover');
	});
	$(this).removeClass('active');
	rebuildHash();
}
function openProject(obj){

	var a_id = obj.find('a').attr('id'),
	src = obj.find('.viewer span').text(),
	container_id = a_id +'_contain',
	wrap = $('.viewer',obj);
	wrap.html('');
	wrap.append('<div id="'+container_id+'" class="lg_img"></div>');
	open_project = a_id;

	SetContainerHeight(wrap,true);
	initDragon(container_id,src);
}
function initDragon(container_id,src) {

	Seadragon.Config.animationTime = 2.0;
	
	if(mobile){
		Seadragon.Config.autoHideControls = false;
		Seadragon.Config.springStiffness = 5.0;
		Seadragon.Config.animationTime = 0;
	}

	viewer = new Seadragon.Viewer(container_id);
	viewer.setDashboardEnabled(false); //rm btns
	viewer.addEventListener("open",PrepareImage);
	viewer.openDzi(src); // open the source
	
	// MOBILE EVENT LISTENERS
	/*
	$('#' + container_id).bind("touchstart", touchStart, false);
	$('#' + container_id).bind("gesturechange", gestureChange, false);
	$('#' + container_id).bind("gestureend", gestureEnd, false);
	*/
	// CUSTOM BUTTONS
	makeControls(container_id);
	
}
function PrepareImage(){

	var tc = new Seadragon.tc(viewer);
	var surface = viewer.drawer.elmt;

	Seadragon.Utils.addEvent(surface, "mousedown", onMouseDown);
	Seadragon.Utils.addEvent(surface, "click", onMouseClick);
	//Seadragon.Utils.addEvent(surface, "mousemove",  onMouseMove);
	Seadragon.Utils.addEvent(surface, "touchstart", onMouseDown);
	Seadragon.Utils.addEvent(surface, "touchend", onMouseClick);	

	var mybounds = viewer.viewport.getBounds();
	var original_dim = viewer.source.dimensions;
	var center = viewer.viewport.getCenter();
	ratio = viewer.viewport.getAspectRatio();
	hRatio = original_dim.y/original_dim.x;
	wRatio = original_dim.x/original_dim.y;

	//var newWidth = 1;
	//var newHeight = newWidth/ratio;
	var newWidth = mybounds.width*0.6;
	var newHeight = mybounds.height*0.6;
	x = 0;
	y = 0;
	//
	// pan and zoom viewer to area
	imgPreset = new Seadragon.Rect(x, y, newWidth, newHeight);
	viewer.viewport.fitBounds(imgPreset);
	Seadragon.Config.animationTime = '0.6';
	
	$('#v_instruct').delay(2200).animate({opacity:'1'}).bind('mousedown',rmInsructions);

}

//
// Prevent default zoom on click
var mouseDownTime;
var zoomPreClick;
var onControls = false;
var isGesture = false;

function onMouseDown(event) {

	if(mobile){
	isGesture = false;
	if(event.touches.length > 1) isGesture= true;	
	}
	mouseDownPos = Seadragon.Utils.getMousePosition(event);
	mouseDownTime = new Date().getTime(); 
	zoomPreClick = viewer.viewport.getZoom();
	rmInsructions();
}
function onMouseClick(event) {
	event = Seadragon.Utils.getEvent(event);
	 if(isGesture) return;
	// negate any zoom change that may have happened:
	if (viewer.viewport.getZoom() != zoomPreClick) {
	viewer.viewport.zoomTo(zoomPreClick);
	}
}
function onMouseMove(){
	if(controlactive && onControls == false){
		clearTimeout(ani_timer);
		ani_timer = setTimeout(function(){
			controls.animate({opacity: '0'}, 1000);
			controlactive = false;
		},2000);		
		controlactive = true;
		return;
	}
	clearTimeout(ani_timer);
	controls.stop().animate({opacity: '1'}, 700);
	controlactive = true;
	
}

function SetContainerHeight(wrap,animate){
	
	var cw = 180, stop = false;
	availablespace = windowHeight - cw;

	if(mobile) availablespace = windowHeight;
	
	$('.lg_img').css({'height':availablespace+'px'});
	if($('.lg_img').parent().height() > 1){
		$('.lg_img').parent().css({'height':availablespace+'px'});
	}
	
	if(animate){
		wrap.animate({height:availablespace+'px'},650,function(){
		pos = wrap.parent().offset();
		if(mobile){

			var cST = $(window).scrollTop();
			//window.scrollTo(0,pos.top);
			$('html,body').animate({scrollTop : pos.top-cST + 'px'},1000);
			
		}else{
			$('html,body').animate({scrollTop : pos.top-35 + 'px'},1000);
		}
		});
	}else{
		wrap.css({height:availablespace+'px'});
	}

}

// VIEWER CONTROLS
function makeControls(container_id) {
	
	var viewercontrols = $('<div class="viewercontrols"></div>');
	var instruct = $('<div id="v_instruct"></div>').css('opacity','0');
	
	var panleft = $('<a href="#" class="panleft"></a>').bind('click',PanLeft);
	var panright = $('<a href="#" class="panright"></a>').bind('click',PanRight);
	var panup = $('<a href="#" class="panup"></a>').bind('click',PanUp);
	var pandown = $('<a href="#" class="pandown"></a>').bind('click',PanDown);
	var zoomin = $('<a href="#" class="zoomin"></a>').bind('click',zoomIn);
	var zoomout = $('<a href="#" class="zoomout"></a>').bind('click',zoomOut);
	viewercontrols.append(panleft).append(panup).append(panright).append(pandown).append(pandown).append(zoomout).append(zoomin);

	$('#'+container_id+' > div').append(viewercontrols);
	if(si) $('#'+container_id+' > div').append(instruct);
	
	controls = $('.viewercontrols a');
	controls.each(function(){
		$(this).bind('mouseenter', function(){ 		
			onControls=true;
			//onMouseMove();
		}).bind('mouseleave', function(){
			onControls=false;
		})
	})
}
function PanLeft(e){
	e.preventDefault();
	center = viewer.viewport.getCenter();
	PanBy(- PANAMOUNT,0,false);
	_gaq.push(['_trackEvent', 'Project Viewer - Panleft', 'clicked']);
}
function PanRight(e){
	e.preventDefault();
	center = viewer.viewport.getCenter();
	PanBy(+ PANAMOUNT,0,false);
	_gaq.push(['_trackEvent', 'Project Viewer - Panright', 'clicked']);
}
function PanUp(e){
	e.preventDefault();
	center = viewer.viewport.getCenter();
	PanBy(0,- PANAMOUNT,false);
	_gaq.push(['_trackEvent', 'Project Viewer - Panup', 'clicked']);
}
function PanDown(e){
	e.preventDefault();
	center = viewer.viewport.getCenter();
	PanBy(0,+ PANAMOUNT,false);
	_gaq.push(['_trackEvent', 'Project Viewer - Pandown', 'clicked']);
}
function imgReset(){
	viewer.viewport.fitBounds(imgPreset, false);
}
function zoomIn(e){
	if(e) e.preventDefault();
	var currentZoom = viewer.viewport.getZoom(),
	newZoom = currentZoom*zoomFactor;
	viewer.viewport.zoomTo(newZoom);
	viewer.viewport.applyConstraints();
	rmInsructions();
	_gaq.push(['_trackEvent', 'Project Viewer - zoomin', 'clicked']);
}
function zoomOut(e){
	if(e) e.preventDefault();
	var currentZoom = viewer.viewport.getZoom(),
	newZoom = currentZoom/zoomFactor;
	viewer.viewport.zoomTo(newZoom);
	viewer.viewport.applyConstraints();
	rmInsructions();
	_gaq.push(['_trackEvent', 'Project Viewer - zoomout', 'clicked']);
}
function PanTo(x,y,instant){
	viewer.viewport.panTo(new Seadragon.Point(x, y),instant);
	viewer.viewport.applyConstraints();
}
function PanBy(x,y,instant){
	if(mobile){
		Seadragon.Config.springStiffness = 1.0;
		Seadragon.Config.animationTime = 0.7;
	}
	viewer.viewport.panBy(new Seadragon.Point(x, y),instant);
	viewer.viewport.applyConstraints();
	rmInsructions();
}
function rmInsructions(){
	if($('#v_instruct').length) $('#v_instruct').animate({opacity:0},800, function(){$(this).remove(); si=false;});
}

// MOBILE EVENTS
var touchevent;
function gestureChange(e){
	event.preventDefault();
}
function gestureEnd(e) {
  if(touchevent){
  	touchevent = false;
  	return;
  }
  // Insert your code here
  var scale = event.scale;
  if(scale>1){ zoomIn(); }else{ zoomOut();}
}
function touchStart(e){
	
	if(event.touches.length > 1 || !viewer) return;

	var $el = $(e.target);
	var startX = event.changedTouches[0].clientX,
		startY = event.changedTouches[0].clientY,
		original_dim = viewer.source.dimensions,
		deltaX = 0,
		first,
		deltaY = 0,
		center = viewer.viewport.getCenter(),
		multiplyer = 3.2;
		
	if(mobile){
		Seadragon.Config.springStiffness = 5.0;
		Seadragon.Config.animationTime = 0;
	}	

	$el.bind("touchmove", touchMove, false).bind("touchend", touchEnd, false);

	function touchMove(event) {		
		updateTouch();
		event.preventDefault();
	}
	function updateTouch(){
		first = event.changedTouches[0] || null;
		deltaX = first.pageX;// - startX;
		deltaY = first.pageY;// - startY;
		var touch = event.touches[0]; 

		if(deltaX - startX > 0){
			var newX = center.x - (1/original_dim.x * ((deltaX - startX)*multiplyer));
			//var newX = (1/original_dim.x * (deltaX*multiplyer));
		}else if(deltaX - startX < 0){
			var newX = center.x + (1/original_dim.x * ((startX - deltaX)*multiplyer));
			//var newX = (1/original_dim.x * (deltaX*multiplyer));
		}else{
			var newX = center.x;
			//newX = 0;
		}
		if(deltaY - startY > 0){
			var newY =  center.y - (1/original_dim.y * ((deltaY - startY)*multiplyer));
			//var newY =  (1/original_dim.y * (deltaY*multiplyer));
		}else if(deltaY - startY < 0){
			var newY = center.y + (1/original_dim.y * ((startY - deltaY)*multiplyer));
			//var newY = (1/original_dim.y * (deltaY*multiplyer));
		}else{
			var newY = center.y;
			//newY = 0;
		}					
		PanTo(newX, newY, false);
	}
	function touchEnd(){			
		$el.unbind('touchmove touchend');
		//touchevent = true;
	}
}

// GOOGLE MAPS
function gmap() {
	var latlng = new google.maps.LatLng($('#geolat').text(),$('#geolong').text());
	var myOptions = {
	  zoom: 15,
	  center: latlng,
	  mapTypeId: google.maps.MapTypeId.TERRAIN
	};
	var map = new google.maps.Map(document.getElementById("g-map"), myOptions);
	var marker = new google.maps.Marker({ position: latlng, title: "loc" });
	marker.setMap(map);
	$('#geolat').remove();
}
function validate() {
   var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
   var address = $('#email').attr('value');
   $('#ns_error').hide();
   if(reg.test(address) == false) {
      //alert('Invalid Email Address');
      $('#ns_error').show();
      return false;
   }
}
function rebuildHash(){
	// rebuild hash deep link
	var hash = window.location.hash,
	hash = hash.replace('#',''),
	linkparts = hash.split("/"),
	rebuild = '';
	linkparts.pop();
	$.each(linkparts,function(ind,val){
		rebuild += val+'/';
	});
	window.location.hash = rebuild;
}
$.extend($.easing, { 
easeOutQuad: function (x, t, b, c, d) {
	return -c *(t/=d)*(t-2) + b;
}});
