function preloadImage(src) {
	var	Img	= new Image();
	Img.src	= src;
}

function loadGoogleMap(id) {
	if (GBrowserIsCompatible()) {
		var map = new GMap2(dojo.byId(id));
		map.setCenter(new GLatLng(35.829809,14.479042), 17);
		map.setMapType(G_NORMAL_MAP);
		map.addControl(new GLargeMapControl3D());
		map.addControl(new GMapTypeControl());
		map.addControl(new GScaleControl());
		map.enableScrollWheelZoom();
		map.enableDoubleClickZoom();
		
		var markerIcon		= new GIcon(G_DEFAULT_ICON);
		markerIcon.image	= 'img/map_icon.png';
		markerIcon.iconSize	= new GSize(50, 56);
		markerIcon.iconAnchor	= new GPoint(30, 36);
		markerIcon.shadow	= null;
		
		var marker = new GMarker(new GLatLng(35.829809,14.479042), {icon:markerIcon});
		//GEvent.addListener(marker, "click", function() {
		//var html = '<div style="width: 210px; padding-right: 10px"><a href="/apis/maps/signup.html">Sign up<\/a> for a Google Maps API key, or <a href="/apis/maps/documentation/index.html">read more about the API<\/a>.<\/div>';
		//marker.openInfoWindowHtml(html);
		//});
		map.addOverlay(marker);
		//GEvent.trigger(marker, "click");
	}	
}


function loadAssets() {
	var	cnt	= 0;
	for (var i = 0; i < Assets.length; i++) {
		if (Assets[i].url && Assets[i].w && Assets[i].h) loadAsset(Assets[i], cnt++);
	}
	
	resizeAssetCont();
}

function loadAsset(data, index) {
	if (data.type == 'Image') loadImage(data, index);
	if (data.type == 'Video') loadVideo(data, index);
}

function loadImage(data, index) {
	if (data.url && data.w && data.h) {
		var	elAssetCont		= dojo.byId("AssetCont");
		var	elThumbsCont	= dojo.byId("ThumbsCont");
		
		var	padding		= (500 - data.h) / 2;
		elAssetCont.innerHTML	+= '<div class="GalleryImage" style="padding:'+ padding +'px;"><img src="'+ data.url +'" width="'+ data.w +'" height="'+ data.h +'" title="'+ data.name +'" border="0" /></div>';

		var	width		= Math.floor(data.w * (40 / data.h));
		var	margin		= Math.floor((40 - width) / 2);
		elThumbsCont.innerHTML	+= '<div class="ThumbCont" id="Thumb'+ (index + 1) +'" onclick="scrollToAsset('+ (index + 1) +');"><div class="ImgCont"><img src="'+ data.url +'" style="margin-left: '+ margin +'px;" width="'+ width +'" height="40" border="0" /></div><span>'+ (index+1) +'</span></div>';
	}
}

function loadVideo(data, index) {
	if (data.vid && data.w && data.h) {
		var	elAssetCont	= dojo.byId("AssetCont");
		var	elThumbsCont	= dojo.byId("ThumbsCont");
		
		var	marginTop	= (500 - data.h) / 2;
		
		elAssetCont.innerHTML	+= '<div class="GalleryVideo" title="'+ data.name +'"><iframe class="youtube-player" style="margin-top:'+ marginTop +'px;" type="text/html" width="'+ data.w +'" height="'+ data.h +'" src="http://www.youtube.com/embed/'+ data.vid +'" frameborder="0"></iframe></div>';
		
		elThumbsCont.innerHTML	+= '<div class="ThumbCont" id="Thumb'+ (index + 1) +'" onclick="scrollToAsset('+ (index + 1) +');"><span>'+ (index+1) +'</span></div>';
	}
}

function resizeAssetCont() {
	var	elAssetCont		= dojo.byId("AssetCont");
	var	elMainCont		= dojo.byId("MainCont");
	var	elRightContent	= dojo.byId("RightContent");

	var	assetWidth	= 0;
	var	totalWidth	= 0;
	for (var i = 0; i < elAssetCont.childNodes.length; i++) {
		assetWidth	= dojo.marginBox(elAssetCont.childNodes[i]).w
		totalWidth	+= assetWidth;
	}
	elAssetCont.style.width		= totalWidth +'px';
	elRightContent.style.width	= totalWidth + 'px';

	//	Factor in additional width to allow last asset to scroll all the way to left
	if (dojo.byId("MainInnerCont").offsetWidth - assetWidth > 0) 
		dojo.byId("MainCont").style.paddingRight	= (dojo.byId("MainInnerCont").offsetWidth - assetWidth) + 20 + 'px';

	elMainCont.style.width	= dojo.marginBox(elRightContent).w - 40 +'px';	// Take into account additional right padding for corner markers

	checkAssetsScrollable();
}

function checkAssetsScrollable() {
	var	elMainInnerCont	= dojo.byId("MainInnerCont");
	if (elMainInnerCont.scrollWidth - elMainInnerCont.scrollLeft > elMainInnerCont.offsetWidth) {
		dojo.addClass(elMainInnerCont, "Scrollable");
	} else {
		dojo.removeClass(elMainInnerCont, "Scrollable");
	}
}


function checkSectionContentScroll() {
	var	elContent	= dojo.byId("SectionContent");
	var	elOuter		= dojo.byId("SectionContentOuter");
		
	//	Determine position of div bottom (relative to 
	var	divBottom	= elContent.offsetHeight - elOuter.scrollTop;
	if (divBottom > elOuter.offsetHeight) {
		dojo.removeClass(dojo.byId("ContentScrollDown"), "Hid");
	} else {
		dojo.addClass(dojo.byId("ContentScrollDown"), "Hid");
	}
	
	//	Determine position of div top
	var	divTop	= -1 * elOuter.scrollTop;
	if (divTop < 0) {
		dojo.removeClass(dojo.byId("ContentScrollUp"), "Hid");
	} else {
		dojo.addClass(dojo.byId("ContentScrollUp"), "Hid");
	}
}

function scrollSectionContent(dir) {
	//	Dir = 1 for down; -1 for up
	var	amount			= 250;
	var	scrollSpeed		= 200;
	var	elOuter			= dojo.byId("SectionContentOuter");
	var	scrollStopPos	= (elOuter.scrollStopPos) ? elOuter.scrollStopPos + dir * amount : dir * amount;
	/*
	elOuter.scrollTop	= elOuter.scrollTop + dir * amount;
	*/
	
	
	
	startScroll(elOuter, 'v', scrollStopPos, scrollSpeed, checkSectionContentScroll, checkSectionContentScroll);
	
//	checkSectionContentScroll();
}


function startScroll(el, scrollType, scrollStopPos, scrollSpeed, scrollCallback, scrollEndCallback) {
	//	Check that not attempting to scroll too much
	if (scrollStopPos < 0) scrollStopPos = 0;
	if (scrollType == 'h') {
		if (scrollStopPos > el.scrollWidth - el.offsetWidth) scrollStopPos = el.scrollWidth - el.offsetWidth;
	} else {
		if (scrollStopPos > el.scrollHeight - el.offsetHeight) scrollStopPos = el.scrollHeight - el.offsetHeight;
	}
	
	//	Set scrolling parameters
	el.scrollStopPos		= scrollStopPos;
	el.scrollType			= scrollType;
	el.scrollSpeed			= scrollSpeed;
	el.scrollCallback		= scrollCallback;
	el.scrollEndCallback	= scrollEndCallback;

	//	Start scrolling (if not set already)
	if (!el.isScrolling) return scrollEl(el);
}


function scrollEl(el) {
	var	scrollsPerSec	= 50;
	if (!el.scrollSpeed) el.scrollSpeed = 150;
	
	var	pixelsPerScroll	= Math.floor(el.scrollSpeed / scrollsPerSec);
	
	//	Determine scroll direction	
	if (el.scrollType == 'h') {
		currPos	= el.scrollLeft;
		dir		= (el.scrollLeft < el.scrollStopPos) ? 1 : -1;
	} else {
		currPos	= el.scrollTop;
		dir		= (el.scrollTop < el.scrollStopPos) ? 1 : -1;
	}
	
	if (currPos != el.scrollStopPos) {
		moveAmount	= (Math.abs(currPos - el.scrollStopPos) > pixelsPerScroll) ? pixelsPerScroll : Math.abs(currPos - el.scrollStopPos);
		if (el.scrollType == 'h') {
			el.scrollLeft += dir * moveAmount;
		} else {
			el.scrollTop += dir * moveAmount;
		}
		
		el.isScrolling	= true;
		setTimeout(function () {scrollEl(el); el = null;}, 1000 / scrollsPerSec);
		if (el.scrollCallback) el.scrollCallback();
	} else {
		el.isScrolling	= false;
		if (el.scrollEndCallback) el.scrollEndCallback();
	}
}


function scrollNextAsset() {
	if (Page == 'Gallery') {
		var	elAssetCont	= dojo.byId("AssetCont");
		if (!elAssetCont.currScrolledAsset) elAssetCont.currScrolledAsset = 0;
		scrollToAsset(elAssetCont.currScrolledAsset + 1);
	}
}

function scrollPrevAsset() {
	if (Page == 'Gallery') {
		var	elAssetCont	= dojo.byId("AssetCont");
		if (!elAssetCont.currScrolledAsset) elAssetCont.currScrolledAsset = 0;
		scrollToAsset(elAssetCont.currScrolledAsset - 1);
	}
}

function scrollToAsset(num) {
	if (num <= Assets.length) {
		var	scrollStopPos	= 0;
		var	elAssetCont		= dojo.byId("AssetCont");
		var	elMainInnerCont	= dojo.byId("MainInnerCont");
		if (!num) num = 0;
		if (!elAssetCont.currScrolledAsset) elAssetCont.currScrolledAsset = 0;
		
		selectGalleryThumb(num, elAssetCont.currScrolledAsset);
		
		elAssetCont.currScrolledAsset = num;
		
		//	Calculate distance from left
		if (elAssetCont.currScrolledAsset > 0) {
			scrollStopPos	= dojo.marginBox(dojo.byId("LeftContent")).w;
			for (var i = 0; i < elAssetCont.currScrolledAsset - 1; i++) {
				scrollStopPos	+= dojo.marginBox(elAssetCont.childNodes[i]).w
			}
		} else {
			scrollStopPos	= 0;
		}
				
		startScroll(elMainInnerCont, 'h', scrollStopPos, 300, changeAssetsScrollSpeed, checkAssetsScrollable);
	}
}

function changeAssetsScrollSpeed() {
	var	elMainInnerCont	= dojo.byId("MainInnerCont");
	
	var	distance	= Math.abs(elMainInnerCont.scrollStopPos - elMainInnerCont.scrollLeft);
	scrollSpeed		= 300 * Math.pow(2, distance/1000);
	if (scrollSpeed > 2000) scrollSpeed = 2000;
	
	elMainInnerCont.scrollSpeed	= scrollSpeed;
}

function selectGalleryThumb(newIndex, oldIndex) {
	var elNewThumb	= dojo.byId("Thumb"+ newIndex);
	var	elOldThumb	= dojo.byId("Thumb"+ oldIndex);
	
	if (elOldThumb) dojo.removeClass(elOldThumb, "Selected");
	if (elNewThumb) dojo.addClass(elNewThumb, "Selected");
}


function resizeBody() {
	var elAllCont		= dojo.byId("AllCont");  
	var windowHeight	= window.innerHeight;
	
	var	requiredHeight	= 0;
	requiredHeight += dojo.marginBox(dojo.byId("TopCont")).h;
	requiredHeight += dojo.marginBox(dojo.byId("MainOuterCont")).h;
	requiredHeight += dojo.marginBox(dojo.byId("BottCont")).h;
	requiredHeight += dojo.marginBox(dojo.byId("ThumbsCont")).h;
	
	if (requiredHeight <= windowHeight) requiredHeight = windowHeight;
	
	elAllCont.style.height = requiredHeight +"px"; 
}
