// ---------------------------------------- Mobile Extensions ----------------------------------------

if (document.addEventListener){
	/*	No Drag Script
		Because moving the page accidentally and ruining
		your mobile experience is such a drag.
	*/
	//document.addEventListener('touchmove', function (e) { e.preventDefault(); }, false);
}

if (window.addEventListener){
	/*	Local Storage
		Because asking the server repeatedly. for 
		the same thing is annoying.
	*/
	window.addEventListener("storage", handleStorage, false);
} else {
	window.attachEvent("onstorage", handleStorage, false);
}

// ---------------------------------------- Variables ----------------------------------------
// Server Details
var serverEmail = "djswivel@djswivel.com";
var serverRoot = "http://" + document.location.hostname;
var siteName = "DJ Swivel";
var twitterAccount = "http://twitter.com/djswivel";

// Cache expiry time.
var cacheExpiry = 3600; //Every Hour

// Tweet Timer
var tweetTimer;

// Random Captcha Code
var contactCaptcha1 = Math.floor(Math.random()*11);
var contactCaptcha2 = Math.floor(Math.random()*11);
var contactCaptchaCode = contactCaptcha1+contactCaptcha2;

// ---------------------------------------- iScroll ----------------------------------------
var scrollPages = [];

// -------------------- Album Covers --------------------
function getAlbumHeight(){
	$('#album_grid').each(function(){		
		var contentCount = $(this).find('.box').length;
		var contentRows = Math.ceil(contentCount / 8);
		var contentPages = Math.ceil(contentCount / 32);
		if (Browser.isWebkit && Browser.supportsTouch || contentCount < 33) {
			var contentMax = 32 * contentPages;
		} else {
			var contentMax = 8 * contentRows;	
		}
		var contentHeight = contentRows * 128;
		var contentSpace = contentMax - contentCount;
		$(this).css("height", contentHeight + "px");
		for (var i=0; i < contentSpace; i++){
			$('#album_grid').append('<div class="box cutout"></div>');	
		}
		if (contentCount > 32 && !Browser.supportsTouch){
			$('#album_grid .box').css({'margin':'1px 0px'});
			$('#album_grid .box:nth-child(8n+1)').css({'margin':'1px 0px 1px 1px'});
		}
	});
}

function getAlbumScrollbar(){
    if (Browser.isWebkit && Browser.supportsTouch) {
		var scrollAlbums;
		scrollAlbums = new iScroll("music_albums",{
			bounce:false,
			hScroll: false,
			vScroll: true,
			hScrollbar: false,
			vScrollbar: false,
			snap: 'div'
		});
		scrollPages.push(scrollAlbums);
    } else {
		$('#album_container').addClass('viewport');
		$('#album_grid').addClass('overview');
		$('#music_albums').prepend('<div class="scrollbar"><div class="track"><div class="thumb"><div class="end"></div></div></div></div>');
		$('#music_albums').tinyscrollbar({ size: 510 });		
	}
};

// -------------------- Track List --------------------
function getTrackHeight(){
	$('#track_list').each(function(){
		var contentCount = $(this).find('> ul > li').length;
		var contentHeight = contentCount * 32;
		$(this).css("height", contentHeight + "px");
	});
}

function getTrackScrollbar(){
    if (Browser.isWebkit && Browser.supportsTouch) {	
		var scrollTracks;
		scrollTracks = new iScroll("album_tracks",{
			bounce:false,
			hScroll: false,
			vScroll: true,
			hScrollbar: false,
			vScrollbar: true,
			snap: 'li',
			scrollbarClass: 'scrollbar'
		});
		scrollPages.push(scrollTracks);
	} else {
		$('#track_list').addClass('viewport');
		$('#track_list ul').addClass('overview');
		$('#album_tracks').prepend('<div style="top:4px;" class="scrollbar"><div class="track"><div class="thumb"><div class="end"></div></div></div></div>');
		$('#album_tracks').tinyscrollbar({ size: 246 });		
	}
};

// -------------------- Biography --------------------
function getBioScrollbar(){
    if (Browser.isWebkit && Browser.supportsTouch) {
		var scrollBio;
		scrollBio = new iScroll("bio_text",{
			bounce:false,
			hScroll: false,
			vScroll: true,
			hScrollbar: false,
			vScrollbar: true,
			scrollbarClass: 'scrollbar'
		});
		scrollPages.push(scrollBio);
	} else {
		$('#bio_text .textholder').addClass('viewport');
		$('#bio_text .textholder .textbox').addClass('overview');
		$('#bio_text').prepend('<div class="scrollbar"><div class="track"><div class="thumb"><div class="end"></div></div></div></div>');
		$('#bio_text').tinyscrollbar();
	}
};

// -------------------- Press Releases --------------------
function getPressHeight(){
	$('#press_list').each(function(){
		var contentCount = $(this).find('> ul > li').length;
		var contentHeight = contentCount * 112;
		$(this).css("height", contentHeight + "px");
	});
}

function getPressScrollbar(){
    if (Browser.isWebkit && Browser.supportsTouch) {
		var scrollPress;
		scrollPress = new iScroll("press_releases",{
			bounce:false,
			hScroll: false,
			vScroll: true,
			hScrollbar: false,
			vScrollbar: true,
			snap: 'li',
			scrollbarClass: 'scrollbar'
		});
		scrollPages.push(scrollPress);
	} else {
		$('#press_list').addClass('viewport');
		$('#press_list ul').addClass('overview');
		$('#press_releases').prepend('<div style="top:8px;" class="scrollbar"><div class="track"><div class="thumb"><div class="end"></div></div></div></div>');
		$('#press_releases').tinyscrollbar({ size: 432 });		
	}
};

// -------------------- Press Release --------------------
function getPressReleaseScrollbar(){
    if (Browser.isWebkit && Browser.supportsTouch) {
		var scrollPress;
		scrollPress = new iScroll("press_text",{
			bounce:false,
			hScroll: false,
			vScroll: true,
			hScrollbar: false,
			vScrollbar: true,
			scrollbarClass: 'scrollbar'
		});
		scrollPages.push(scrollPress);
	} else {
		$('#press_text .textholder').addClass('viewport');
		$('#press_text .textholder .textbox').addClass('overview');
		$('#press_text').prepend('<div class="scrollbar"><div class="track"><div class="thumb"><div class="end"></div></div></div></div>');
		$('#press_text').tinyscrollbar();
	}
};

// -------------------- Scroller Update --------------------
function updateScroller(){
	getAlbumHeight();
    if (Browser.isWebkit && Browser.supportsTouch) {
		getTrackHeight();
		getPressHeight();
		for (var i = 0; i < scrollPages.length; i++){
			scrollPages[i].scrollTo(0,0,500);
			scrollPages[i].refresh();
		}
	} else {
		$('#album_grid').each(function(){		
			var contentCount = $(this).find('.box').length;
			if (contentCount < 33){
				$('#album_container').css({'height':'514px'});	
			} else {
				$('#album_container').css({'height':''});
			}
		});
		$('#music_albums').tinyscrollbar_update();
		$('#album_tracks').tinyscrollbar_update();
		$('#bio_text').tinyscrollbar_update();
		$('#press_releases').tinyscrollbar_update();
		$('#press_text').tinyscrollbar_update();		
	}
}

// -------------------- Scroller Reset --------------------
function resetScroller(){
    if (Browser.isWebkit && Browser.supportsTouch) {	
		for (i = 0; i < scrollPages.length; i++){
			scrollPages[i].scrollTo(0,0,500);
			scrollPages[i].refresh();
		}
	} else {
		return false;	
	}
}


// ---------------------------------------- HTML5 Cache Support ----------------------------------------
function supportsLocalStorage() {
  try {
    return 'localStorage' in window && window['localStorage'] !== null;
  } catch (e) {
    return false;
  }
}

function handleStorage(e){
	//IE8 Support
	if (!e) { e = window.event;}
}

function setCacheTime(){
	if (!supportsLocalStorage()) { return false; }
	
	var now = new Date().getTime();
	var currentTime = Math.round(now/1000).toString();
	var lastVisit = currentTime;
	
	if(localStorage.getItem("timeStamp")){
		lastVisit = localStorage.getItem("timeStamp");
		var timeDifference = parseInt(currentTime) - parseInt(lastVisit);
		if (timeDifference > cacheExpiry){
			clearCache();		
		}
	} else {
		clearCache();	
	}

	//Check local storage for quota space. Save data if possible.
	try {
		localStorage.setItem("timeStamp", currentTime);
	} catch (e) {
		//No storage space available.
	}
}

function clearCache(){
	if (!supportsLocalStorage()) { return false; }
	
	//Clear Local Storage
	localStorage.clear();
}

function getCache(page){
	if (!supportsLocalStorage()) { return false; }
	
	//Check local storage for data. Read data if it exists.
	if (localStorage.getItem(page)){
		window.cache[page]	= $.parseXML(localStorage.getItem(page));
	}
}

function setCache(page, data){
	if (!supportsLocalStorage()) { return false; }
	
	//Check local storage for quota space. Save data if possible.
	try {
		localStorage.setItem(page, data);
	} catch (e) {
		//No storage space available.
	}
}


// ---------------------------------------- Navigation ----------------------------------------
// -------------------- SWF Address Tracking --------------------
SWFAddress.addEventListener(SWFAddressEvent.CHANGE, handleSWFAddressCHANGE);

function handleSWFAddressCHANGE(event){
	//Remove Double Slash
	if (SWFAddress.getValue().indexOf('//') != -1){
		var correctAddress = SWFAddress.getValue().replace('//','/');
		SWFAddress.setValue(correctAddress);
		return false;
	}
	
	var pageRoot = serverRoot;
    var locationHash = SWFAddress.getValue();
    var locationSection = locationHash.split('/');
    var locationPage;
	var locationTitle = 'DJ Swivel';
	if(locationSection[1]){
	    locationPage = locationSection[1].toLowerCase();
        locationTitle += formatTitle(locationHash.replace(/\//g, ' - '));
    } else {
    	locationPage = '';
    }
	
	$('nav a').removeClass('selected');
	$('nav > ul > li > ul').removeClass('subselected');
	$('iframe,embed').empty().remove();
	
	switch (locationPage.toLowerCase()) {
	case 'music':
		getPage(2);
		$('nav > ul > li:eq(0) > a').addClass('selected');
		$('nav > ul > li:eq(0) > ul').addClass('subselected');
		getMusic(locationHash);
		break;
	case 'about':
		getPage(4);
		$('nav > ul > li:eq(1) > a').addClass('selected');
		$('nav > ul > li:eq(1) > ul').addClass('subselected');
		getAbout(locationHash);
		break;
	case 'press':
		getPage(6);
		$('nav > ul > li:eq(2) > a').addClass('selected');
		getPress(locationHash);
		break;
	case 'contact':
		getPage(8);
		$('nav > ul > li:eq(3) > a').addClass('selected');
		break;
	case 'blog':
		getPage(10);
		$('nav > ul > li:eq(4) > a').addClass('selected');
		break;
	case 'secret':
		break;
	default:
		getPage(0);
		getNews();
		break;
	}
	resizePages(1000);
	
	//Kill Videos
	$('#video_player').empty();
	$('#video_player').remove();
	$('footer').show();
}

// -------------------- SWF Address Formatting --------------------
function getHash(url){
	var hashTag = url.split('/');
    var newHash = '/';
    var i = 0;
	while (i < hashTag.length){
    	if(i > 1 && i < hashTag.length-1){
        	newHash += hashTag[i];
            if (i < hashTag.length-2){
            	newHash += '/';
			}
        }
        i++;
    }
	return newHash;
}

function toTitleCase(str) {
	 return str.replace(/\w\S*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
}      

function formatTitle(title) {
    return toTitleCase(title.substr(0, title.length));
}


// ---------------------------------------- Page Data ----------------------------------------
// -------------------- All Pages --------------------
function getPage(number){
	window.currentPage = number;
	$('footer .pagefilter').empty();
	$('footer .pagebuttons').empty();	
	resizePages(1000);		
}

// -------------------- Home Page --------------------
function getNews(){
	//Rotator
	
	//Twitter
	getCache("/twitter");
	if (window.cache["/twitter"]){		
		makeTweets(window.cache["/twitter"]);		
	} else {
		$('footer .pagefilter').empty().append(
				'<li>Loading Tweets</li>'
		);
		
		$.ajax({
			type: "GET",
			url: serverRoot+'/data/twitter',
			cache: true,
			dataType: 'xml',
			success: function(xml) {
				//Manage Data
				makeTweets(xml);
				
				//Short Term Data Cache
				if (!localStorage.getItem("/twitter")){
					window.cache["/twitter"] = xml;					
				}
				setCache("/twitter", $(xml).find('pageData').outerHTML());
			}
		});
	}
	
	//News
	getCache("/news");
	if (window.cache["/news"]){		
		makeNews(window.cache["/news"]);		
	} else {
		$('#news_info').empty().append(
				'Loading News Feed'
		);	
				
		$.ajax({
			type: "GET",
			url: serverRoot+'/data/news',
			cache: true,
			dataType: 'xml',
			success: function(xml) {
				//Manage Data
				makeNews(xml);
				
				//Short Term Data Cache
				if (!localStorage.getItem("/news")){
					window.cache["/news"] = xml;					
				}
				setCache("/news", $(xml).find('pageData').outerHTML());
			}
		});	
	}
}

function makeTweets(pageData){
	$('footer .pagefilter').empty();
	$('#tweet_holder').empty().append('<div class="tweettitle"><h3><a class="twittername" target="_blank" href="'+twitterAccount+'"><b>@djswivel</b></a></h3></div>');
	$(pageData).find('pageData').each(function(){
		//Twitter Feed
		if ($(this).find('> twitter').exists()) {
			$(this).find('> twitter > item').each(function(index,element){
				var tweetTime = $(this).find('> time').text();
				var tweetText = $(this).find('> text').text();
				var tweetSource = $(this).find('> source').text();
				$('#tweet_holder').append(
					'<div class="item">'
					+'<div class="tweettext">'
					+tweetText
					+' </div>'
					+'<div class="tweettime">'
					+tweetTime
					+' via '
					+tweetSource
					+'</div>'
					+'</div>'
				);			
			});
			
			//Bind News Controls
			var currentTweet = 0;
			var tweetCount = $(this).find('> twitter > item').length;
			
			//showTweet();
			
			function showTweet(){
				currentTweet == tweetCount? currentTweet = 0 : currentTweet;
				$('#tweet_holder .item').stop().css({'opacity':''}).hide();
				$('#tweet_holder .item:eq('+currentTweet+')').fadeIn(500,'easeOutQuad').delay(3000).fadeOut(500,'easeOutQuad');
				resetTimer();
			}
			
			function resetTimer(){
				currentTweet++;
				currentTweet == tweetCount? currentTweet = 0 : currentTweet;
				if (tweetTimer){
					clearInterval(tweetTimer);
				}
				tweetTimer = setInterval(showTweet, 5000);	
			}
			
			$('#tweet_holder .item .tweettext').each(function(index, element) {
				var tweetLink = Linkify($(this).outerHTML());
				$(this).replaceWith(tweetLink);
   			});
		}
	});	
}

function makeNews(pageData){
	$('#news_info').empty();
	$('#news_holder').empty();
	$('#news_controls').empty().append(
				'<div class="button"><a href="" class="prev">Previous Story</a></div><div id="news_pager"></div><div class="button"><a href="" class="next">Next Story</a></div>'
	);
	$(pageData).find('pageData').each(function(){
		//News Page
		if ($(this).find('> news').exists()) {
			$(this).find('> news > item').each(function(index,element){
				var newsTitle = $(this).find('> title').text();
				var newsLink = $(this).find('> url').text();
				var newsText = $(this).find('> body').text();
				var newsImage = $(this).find('> image > file').text();
				var newsImageDescription = $(this).find('> image > description').text();
				$('#news_holder').append(
					'<div class="item">'
					+'<div class="item_image">'
					+'<img id="newsItem'+index+'" alt="'+ newsImageDescription + '"src="'+ serverRoot +'/image/2/656/432/6' + newsImage + '"/></div>'
					+'<div class="info">'
					+'<h3>'+newsTitle+'</h3>'
					+newsText
					+'<a class="item_link" href="'+newsLink+'">'+'More</a>'
					+'</div>'
					+'</div>'
				);
				$('#news_pager').append(
					'<div class="item">'
					+'<div class="hover">'+index+'</div>'
					+'</div>'
				);		
				
				$('#news_holder a').each(function(index, element) {
                    var linkAddress = $(this).attr('href');
					if (!linkAddress.match(serverRoot)){
						$(this).attr('target','_blank');
					}
                });
				
				if ($(this).find('> url').exists()){				
					$('#newsItem'+index).css({'cursor':'pointer'});
					$('#newsItem'+index).bind('click', function (event) {
						event.preventDefault();
						
						if (!newsLink.match(serverRoot)){
						$(this).attr('target','_blank');
							window.open(newsLink,'_blank');
						} else {
							window.location = newsLink;
						}
						
						return false;
					});
				}				
			});
			
			//Bind News Controls
			var currentItem = 0;
			var itemCount = $(this).find('> news > item').length;
			var itemWidth = 672;
			
			$('#news #news_pager .item').each(function(index, element) {                
            	$(this).click(function(event){
					event.preventDefault();
					currentItem = index;
					getNewsPage();
				});
			});	
			
			$('#news_controls .prev').hide();
			$('#news_controls .next').hide();
			function getNewsPage(){
				if(currentItem < 0){
					currentItem = 0;
				}
				
				if(currentItem >= itemCount){
					currentItem = itemCount-1;
				}
				
				if(currentItem > 0){
					$('#news_controls .prev').fadeIn(500,"easeOutQuad");
				} else {
					$('#news_controls .prev').fadeOut(500,"easeOutQuad");
				}
				
				if(currentItem < (itemCount-1)){
					$('#news_controls .next').fadeIn(500,"easeOutQuad");
				} else {
					$('#news_controls .next').fadeOut(500,"easeOutQuad");
				}
				
				$('#news #news_holder').stop().animate({'margin-left':-currentItem * itemWidth},500,"easeOutExpo");
				$('#news #news_holder .item .info').stop().animate({'margin-left':-272},500,"easeOutExpo");
				$('#news #news_holder .item:eq('+currentItem+') .info').stop().delay(500).animate({'margin-left':0},500,"easeOutExpo");
				$('#news #news_pager .item').removeClass('active');
				$('#news #news_pager .item .hover').stop().fadeOut(500,"easeOutExpo");
				$('#news #news_pager .item:eq('+currentItem+')').addClass('active');
				$('#news #news_pager .item:eq('+currentItem+') .hover').stop().fadeIn(500,"easeOutExpo");
				
				var currentText = Number(currentItem+1);
			}
			
			$('#news_controls .prev').bind('click', function (event) {
				event.preventDefault();
				currentItem --;
				getNewsPage();
				return false;
			});
			
			$('#news_controls .next').bind('click', function (event) {
				event.preventDefault();
				currentItem ++;
				getNewsPage();
				return false;
			});
			
			getNewsPage();
		}
	});
}

// -------------------- About Page --------------------
function getAbout(page){
	//Kill Videos
	$('#video_player').empty();
	$('#video_player').remove();
	$('footer').show();
	
	var aboutPage = page.replace('about','').replace('//','/');
	
	//Sets Biography as the default section
	if (aboutPage == "/" || aboutPage == ""){
		aboutPage = "/bio";
	}

	getCache(aboutPage);
	
	if (window.cache[aboutPage]){		
		makeAbout(window.cache[aboutPage], page);		
	} else {
		
		$('footer .pagefilter').empty().append(
				'<li>Loading Biography</li>'
		);	
				
		$.ajax({
			type: "GET",
			url: serverRoot+'/data' + aboutPage,
			cache: true,
			dataType: 'xml',
			success: function(xml) {
				//Manage Data
				makeAbout(xml, page);
				
				//Short Term Data Cache
				if (!localStorage.getItem(aboutPage)){
					window.cache[aboutPage] = xml;					
				}
				setCache(aboutPage, $(xml).find('pageData').outerHTML());
			}
		});	
	}
}

function makeAbout(pageData, page){
	$('footer .pagefilter').empty();
	$('footer .pagebuttons').empty();
	$(pageData).find('pageData').each(function(){
		//Biography Page
		if ($(this).find('> biography').exists()) {
			$(this).find('> biography').each(function(){
				var bioTitle = $(this).find('> title').text();
				var bioText = $(this).find('> body').text();
				$('#bio_text .textholder .textbox').empty().append(
					'<h1>'+bioTitle+'</h1>'
					+ bioText
				);
			});
			
			window.aboutPageScroll = 0;
			scrollAbout(500);

			if (Browser.isWebkit && Browser.supportsTouch) {
				updateScroller();
						
				var bioPage = 0;
				if ($('#bio_text').height() < $('#bio_text .textholder').height()){
				} else {
					$('footer .pagebuttons').empty();	
				}
			} else {
				updateScroller();
				return false;
			}
		}
		//Default
		else {
			window.aboutPageScroll = 0;
			scrollAbout(500);	
		}
	});
}

// -------------------- About Page --------------------
function getPress(page){
	//Kill Videos
	$('#video_player').empty();
	$('#video_player').remove();
	$('footer').show();
	
	var pressPage = page.replace('//','/');

	getCache(pressPage);
	
	if (window.cache[pressPage]){		
		makePress(window.cache[pressPage], page);		
	} else {
		
		$('footer .pagefilter').empty().append(
				'<li>Loading</li>'
		);	
				
		$.ajax({
			type: "GET",
			url: serverRoot+'/data' + pressPage,
			cache: true,
			dataType: 'xml',
			success: function(xml) {
				//Manage Data
				makePress(xml, page);
				
				//Short Term Data Cache
				if (!localStorage.getItem(pressPage)){
					window.cache[pressPage] = xml;					
				}
				setCache(pressPage, $(xml).find('pageData').outerHTML());
			}
		});	
	}
}

function makePress(pageData, page){
	$('footer .pagefilter').empty();
	$('footer .pagebuttons').empty();
	$(pageData).find('pageData').each(function(){
		
		//Press Page
		if ($(this).find('> articles').exists()){
			$('#press_list ul').empty();
			var pressItems = "";
			$(this).find('> articles > item').each(function(){
				var articleTitle = $(this).find('> title').text();
				var articleLink = $(this).find('> title').attr('handle');
				var articlePublication = $(this).find('> publication').text();
				var articleDate = $(this).find('> date').text();
				var articleThumbnail = $(this).find('> thumbnail > item > file').text();
				pressItems += 
					'<li>'
					+'<div>'
					+'<a href ="" rel="press/'+ articleLink +'" onclick="SWFAddress.setValue(this.rel); this.blur(); return false;">'
					+ '<img src="'+ serverRoot +'/image/2/120/0/2' + articleThumbnail + '"/>'
					+'<h3 class="dividerH">'+articleTitle+'</h3>'
					+'<p><i><b>' + articlePublication + '</b> - ' + articleDate + '</i></p>'
					+'</a>'
					+'</div>'
					+'</li>'
				;
			});
			
			$('#press_list ul').append(pressItems);
			
			window.pressPageScroll = 0;
			scrollPress(500);
			
			if (Browser.isWebkit && Browser.supportsTouch) {
				updateScroller();
				
				var pressPage = 0;
				if ($('#press_list > ul > li').length > 4){
				} else {
					$('footer .pagebuttons').empty();	
				}
			} else {
				updateScroller();
				return false;
			}	
		}
		//Press Article
		else if ($(this).find('> article').exists()){
			window.pressPageScroll = -1;
			scrollPress(500);
			
			var pressItem ="";
			var pressInfo ="";
			
			$(this).find('> article').each(function(){
				var articleTitle = $(this).find('> title').text();
				var articleText = $(this).find('> body').text();
				var articleLink = $(this).find('> url').text();
				var articlePublication = $(this).find('> publication').text();
				var articleDate = $(this).find('> date').text();
				var pageType;
				if ($(this).find('> images').exists()){
					pageType = "images";
				} else if ($(this).find('> videos').exists()){
					pageType = "videos";
				} else if ($(this).find('> images').exists() && $(this).find('> videos').exists()){
					pageType = "media";
				} else {
					pageType = "text";				
				}

				pressInfo += '<h2 class="dividerH">'+articleTitle+'</h2>';
				if (articleLink != ""){
					pressInfo +='<a class="ejectbutton" href="'
						+articleLink+'" target="_blank">via <i><b>'
						+articlePublication
						+'</b> - '
						+articleDate
						+'</i></a>';
				} else {
					pressInfo += '<p><i><b>' + articlePublication + '</b> on ' + articleDate + '</i></p>';
				}
				$('#press_info').empty().append(pressInfo);
				pressItem += '<h3 style="margin-bottom:16px;"><b>' + articlePublication + '</b> - ' + articleDate + '</h3>'+articleText;
				if (pageType == "images" || pageType == "media"){
					$('#press_info').append('<div id="press_thumbs"></div>');
					$(this).find('> images item').each(function(index, element) {
						var imageThumb = serverRoot + "/image/2/80/80/2" + $(this).find('file').text();
						var imageLink = serverRoot +"/image/" +  $(this).find('file').text();
						$('#press_info #press_thumbs').append('<a href="'+imageLink+'"><img src="'+imageThumb+'"/></a>');
                    });
					
					$('#press_info #press_thumbs a').each(function(index, element) {
						$(this).click(function(event){
							event.preventDefault();
							$('.siteLightbox').empty().append('<img src="'+$(this).attr('href')+'"/>');
							lightBoxControls(index);	
							showLightbox();
							return false;
						});
					});
					
					function lightBoxControls(index){
						var imageCount = $('#press_info #press_thumbs a').length;
						$('.siteLightbox').prepend('<div class="lightboxControls"></div>');
						$('.siteLightbox .lightboxControls').append('<a href="/" class="prev_button">Previous</a><a href="/" class="next_button">Next</a><a href="/" class="close_button">Close</a>');						
						$('.siteLightbox .lightboxControls .prev_button').bind('click',function(event){
							event.preventDefault();								
							index --;
							if (index < 0){
								index = 0;
							}
							$('.siteLightbox img').remove();
							$('.siteLightbox').append('<img src="'+$('#press_thumbs a:eq('+index+')').attr('href')+'"/>');
							console.log('Loading Image: '+index+" : "+$('#press_thumbs a:eq('+index+')').attr('href'));
						});
						$('.siteLightbox .lightboxControls .next_button').bind('click',function(event){								
							event.preventDefault();
							index ++;
							if (index > imageCount-1){
								index = imageCount-1;
							}
							$('.siteLightbox img').remove();
							$('.siteLightbox').append('<img src="'+$('#press_thumbs a:eq('+index+')').attr('href')+'"/>');
							console.log('Loading Image: '+index+" : "+$('#press_thumbs a:eq('+index+')').attr('href'));
						});
						$('.siteLightbox .lightboxControls .close_button').bind('click',function(event){								
							event.preventDefault();
							hideLightbox();
						});
					}					
				}
			});
			
			$('#press_text .textholder .textbox').empty().append(pressItem);
			$('#press_text .textholder .textbox img').bind('load',function(){
				updateScroller();
			});
			$('footer .pagefilter').empty().append(
				'<li><a href ="" rel="press" onclick="SWFAddress.setValue(this.rel); this.blur(); return false;">Back to Press</a></li>'
			);
			
			if (Browser.isWebkit && Browser.supportsTouch) {
				updateScroller();
						
				var pressPage = 0;
				if ($('#press_text').height() < $('#press_text .textholder').height()){
				} else {
					$('footer .pagebuttons').empty();	
				}
			} else {
				updateScroller();
				return false;
			}
		}
		//Default
		else {
			window.pressPageScroll = 0;
			scrollPress(500);	
		}
	});
}

// -------------------- Lightbox --------------------
function showLightbox(){
	resizePages(0);
	$('.siteLightbox').fadeIn(500,"easeOutQuad", function(){
		resizePages(0);
	});
}

function hideLightbox(){
	$('.siteLightbox').fadeOut(500,"easeOutQuad", function(){
		$('.siteLightbox').css({'opacity':"",'display':""});
		resizePages(0);
	});
}

$('.siteLightbox').click(function(){
	//hideLightbox();
});


// -------------------- Music Page --------------------
function getMusic(page){
	//Kill Videos
	$('#video_player').empty();
	$('#video_player').remove();
	$('footer').show();
	
	var musicPage = page.replace('//','/');

	getCache(musicPage);
	
	if (window.cache[musicPage]){		
		makeMusic(window.cache[musicPage], page);		
	} else {
		
		$('footer .pagefilter').empty().append(
			'<li>Loading</li>'
		);	
				
		$.ajax({
			type: "GET",
			url: serverRoot+'/data' + musicPage,
			cache: true,
			dataType: 'xml',
			success: function(xml) {
				//Manage Data
				makeMusic(xml, page);
				
				//Short Term Data Cache
				if (!localStorage.getItem(musicPage)){
					window.cache[musicPage] = xml;					
				}
				setCache(musicPage, $(xml).find('pageData').outerHTML());
			}
		});	
	}
}

function makeMusic(pageData, page){
	$(pageData).find('pageData').each(function(){
		page = page.replace("/?filter=7","").replace("/?filter=9","").replace("/?filter=8","");
		// -------------------- Albums Page --------------------
		
		if ($(this).find('> albums').exists()) {
			//All Albums
			$('#album_grid').empty();
			$(this).find('albums > item').each(function(){
				var albumTitle = $(this).find('> title').text();
				var albumCover = $(this).find('> cover').text();
				var albumArtistLink = $(this).find('> artist').attr('handle');
				var albumLink = $(this).find('> title').attr('handle');
				var albumWidth = $(this).find('> cover').attr('width');
				var albumHeight = $(this).find('> cover').attr('height');
				
				$('#album_grid').append(
					'<div class="box cutout">'
					+ '<a alt="' + albumTitle
					+ '" href="javascript:getAlbum(\'' + page + '/' + albumArtistLink + '/' + albumLink + '\')"'
					+ 'rel="' + page + '/' + albumArtistLink + '/' + albumLink + '" onclick="SWFAddress.setValue(this.rel); this.blur(); return false;">'
					+ '<img src="'+ serverRoot +'/image/2/106/106/2' + albumCover + '"'
					+ ' width="106px"'
					+ ' height="106px"'
					+ 'style="margin:10px;"'
					+ '/></a>'
					+ '</div>'
				);
				$('.item img').bind("load", function () {
					//Do something cool.
				});
			});
								
			window.albumsLoaded = true;
			window.musicPageScroll = -1;
			scrollMusic(500);
			
			if (Browser.isWebkit && Browser.supportsTouch) {
				updateScroller();
				
				if($('#album_grid .box').length > 32){
					var albumPage = 0;
					/*
					$('footer .pagebuttons').empty().append('<li><a href="" class="pageup">Scroll Up</a></li><li><a href="" class="pagedown">Scroll Down</a></li>');	
		
					$('.pageup').bind('click', function (event) {
						event.preventDefault();
						$(this).blur();
						albumPage = albumPage - 4;
						if (albumPage < 0){
							albumPage = 0;	
						}
						scrollPages[0].scrollTo(0, -albumPage * 128, 500);
						return false;
					});
					$('.pagedown').bind('click', function (event) {
						event.preventDefault();
						$(this).blur();
						albumPage = albumPage + 4;
						var pageHeight = Math.ceil($('#album_grid').height()/128)-4;
						if (albumPage > pageHeight){
							albumPage = pageHeight;	
						}
						scrollPages[0].scrollTo(0, -albumPage * 128, 500);
						return false;
					});
					*/
				}  else {
					$('footer .pagebuttons').empty()	
				}
				$('footer .pagefilter').empty().append(
					'<li><a href ="" rel="music" onclick="SWFAddress.setValue(this.rel); this.blur(); return false;">All Music</a></li>'
					+'<li><a href ="" rel="music/?filter=7" onclick="SWFAddress.setValue(this.rel); this.blur(); return false;">Producer</a></li>'
					+'<li><a href ="" rel="music/?filter=8" onclick="SWFAddress.setValue(this.rel); this.blur(); return false;">Mixing</a></li>'
					+'<li><a href ="" rel="music/?filter=9" onclick="SWFAddress.setValue(this.rel); this.blur(); return false;">Engineer</a></li>'
				);			
			} else {
				$('footer .pagefilter').empty().append(
					'<li><a href ="" rel="music" onclick="SWFAddress.setValue(this.rel); this.blur(); return false;">All Music</a></li>'
					+'<li><a href ="" rel="music/?filter=7" onclick="SWFAddress.setValue(this.rel); this.blur(); return false;">Producer</a></li>'
					+'<li><a href ="" rel="music/?filter=8" onclick="SWFAddress.setValue(this.rel); this.blur(); return false;">Mixing</a></li>'
					+'<li><a href ="" rel="music/?filter=9" onclick="SWFAddress.setValue(this.rel); this.blur(); return false;">Engineer</a></li>'
				);
				updateScroller();
				return false;			
			}
		} else if($(this).find('> artist').exists()){
		//Artist Page

			var artistName = $(this).find('artist > name').text();
			var artistLink = $(this).find('artist > name').attr('handle');

			$('#album_grid').empty();		
			$(this).find('albums > item').each(function(){
				var albumTitle = $(this).find('> title').text();
				var albumCover = $(this).find('> cover').text();
				var albumLink = $(this).find('> title').attr('handle');
				var albumWidth = $(this).find('> cover').attr('width');
				var albumHeight = $(this).find('> cover').attr('height');
				
				$('#album_grid').append(
					'<div class="box cutout">'
					+ '<a alt="' + albumTitle
					+ '" href="javascript:getAlbum(\'' + page + '/' + albumLink + '\')"'
					+ 'rel="' + page + '/' + albumLink + '" onclick="SWFAddress.setValue(this.rel); this.blur(); return false;">'
					+ '<img src="'+ serverRoot +'/image/2/106/106/2' + albumCover + '"'
					+ ' width="106px"'
					+ ' height="106px"'
					+ 'style="margin:10px;"'
					+ '/></a>'
					+ '</div>'
				);
				$('.item img').bind("load", function () {
					//Do something cool.
				});
				
			});
			
			window.albumsLoaded = false;
			window.musicPageScroll = -1;
			scrollMusic(500);
			
			if (Browser.isWebkit && Browser.supportsTouch) {
				$('footer .pagefilter').empty().append(
					'<li><a href ="" rel="music" onclick="SWFAddress.setValue(this.rel); this.blur(); return false;">Back to Albums</a></li>'
				);
				updateScroller();
				return false;			
			} else {				
				updateScroller();
				
				if($('#album_grid .box').length > 32){
					var albumPage = 0;
					/*
					$('footer .pagebuttons').empty().append('<li><a href="" class="pageup">Scroll Up</a></li><li><a href="" class="pagedown">Scroll Down</a></li>');
					$('.pageup').bind('click', function (event) {
						event.preventDefault();
						$(this).blur();
						albumPage = albumPage - 4;
						if (albumPage < 0){
							albumPage = 0;	
						}
						scrollPages[0].scrollTo(0, -albumPage * 128, 500);
						return false;
					});
					$('.pagedown').bind('click', function (event) {
						event.preventDefault();
						$(this).blur();
						albumPage = albumPage + 4;
						var pageHeight = Math.ceil($('#album_grid').height()/128)-4;
						if (albumPage > pageHeight){
							albumPage = pageHeight;	
						}
						scrollPages[0].scrollTo(0, -albumPage * 128, 500);
						return false;
					});
					*/
				} else {
					$('footer .pagebuttons').empty()	
				}
				
				$('footer .pagefilter').empty().append(
					'<li><a href ="" rel="music" onclick="SWFAddress.setValue(this.rel); this.blur(); return false;">Back to Albums</a></li>'
				);			
			}
		} else if($(this).find('> album').exists()){
			
			var albumTitle = $(this).find('> album > title').text();
			var albumCover = $(this).find('> album > cover').text();
			var albumLink = $(this).find('> album > title').attr('handle');
			var albumWidth = $(this).find('> album > cover').attr('width');
			var albumHeight = $(this).find('> album  > cover').attr('height');
			var albumDescription = $(this).find('> album > description').text();
			var artistName = $(this).find('> album > artist').text();
			var artistLink = $(this).find('> album > artist').attr('handle');
			var albumCredits = "";
			var albumVideos = "";
			if ($(this).find('> album > credits > item').exists()){
				$(this).find('> album > credits > item').each(function(){
					albumCredits += '<li>'+ $(this).find('> name').text() +"</li>"
				});	
				albumCredits = '<ul id="album_credits">'+ albumCredits +'</ul>'
			} else {
				albumCredits = "";	
			}

			$('#album_videos').empty();
			if ($(this).find('> album > videos > item').exists()){
				$('#album_info').parent().removeClass('box62').addClass('box42');
				$('#album_videos').show();
				$(this).find('> album > videos > item').each(function(){
					albumVideos += '<li><a href="' + $(this).find('> url').text()
								+ '" target="_blank"><div class="name">' + $(this).find('> name').text()
								+ '</div></a></li>'
				});	
				albumVideos = '<ul>'+ albumVideos +'</ul>'
				$('#album_videos').append(
					'<h3>Videos</h3>'
					+ albumVideos
				);
			} else {
				$('#album_videos').hide();
				$('#album_info').parent().removeClass('box42').addClass('box62');
			}
			
			$('#album_videos li').each(function(index, element) {
				var width = $(this).width();
				var contentWidth = $('.name', this).width()+48+8;
				var differenceWidth = contentWidth - width;
				$(this).css({'width':width});
				
				if(differenceWidth > 0){
					$(this).hover(function(){
						$('.name',this).delay(250).stop().animate({'text-indent':-differenceWidth},1000,'easeOutExpo');
					}, function(){
						$('.name',this).stop().animate({'text-indent':0},1000,'easeOutExpo');
					});
					
					$(this).bind('touchstart',function(event){
						$('.name',this).delay(250).stop().animate({'text-indent':-differenceWidth},1000,'easeOutExpo');
					});
					
					$(this).bind('touchend',function(event){
						$('.name',this).stop().animate({'text-indent':0},1000,'easeOutExpo');
					});
					
				}
            });

			$('#album_cover').empty();
			$('#album_cover').append(
				'<img src="'+ serverRoot +'/image/2/234/234/2' + albumCover + '"'
				+ ' width="234px"'
				+ ' height="234px"'
				+ 'style="padding:10px;"'
				+ '/>'
			);
			
			$('#album_info').empty();					
			$('#album_info').append(
				'<h2>'
				+ '<a alt="' + artistName
				+ '" href="../"'
				+ ' onclick="SWFAddress.up(); this.blur(); return false;">'
				+ artistName + '</a><br><b>' + albumTitle +'</b></h2>'
				+ albumDescription
				+ albumCredits
			);
			
			var albumTracks = "";
			if ($(this).find('> album > tracks > item').exists()){			
				$(this).find('> album > tracks > item').each(function(){
					
					var trackCredits = "";
				
					if ($(this).find('> credits > item').exists()){
						trackCredits += "<ul>";
						$(this).find('> credits > item').each(function(){
							var creditItem = $(this).text();
							trackCredits += '<li>' + creditItem + '</li>'
						});
						/*
						//Producer
						if ($(this).find('> credits > item:contains("Producer")').exists()){
							trackCredits += '<li>Producer</li>'
						}
						//Mixing
						if ($(this).find('> credits > item:contains("Mixing")').exists()){
							trackCredits += '<li>Mixing</li>'
						}
						//Engineer						
						if ($(this).find('> credits > item:contains("Engineer")').exists()){
							trackCredits += '<li>Engineer</li>'
						}
						*/
						
						trackCredits += "</ul>";
					}
										
					if ($(this).find('> file').exists()){
						albumTracks += '<li class="has_audio"><b>'
									+ '<a rel="'+serverRoot+'/workspace'+ $(this).find('> file').text()
									+ '">'
									+ '<div class="number">' + $(this).find('> number').text() +"</div>"
									+ '<div class="audio">Play Audio</div>'
									+ '<div class="name">' + $(this).find('> name').text() +"</div>"
									+ '</a>'
									+ '</b>'
									+ '<div class="credits">' + trackCredits + '</div>'
									+ '</li>';
					} else {
						albumTracks += '<li>'
									+ '<div class="number">' + $(this).find('> number').text() +"</div>"
									+ '<div class="name">' + $(this).find('> name').text()  +"</div>"
									+ '<div class="credits">' + trackCredits + '</div>'
									+ '</li>';
					}
				});	
			} else {
				albumTracks = "";	
			}
			
			$('#track_list ul').empty();					
			$('#track_list ul').append(albumTracks);
			
			//Bind Clicks
			$('#album_videos a').click(function (event) {
				event.preventDefault();
				resetAudioPlayer();
				var videoSource = $(this).attr('href').replace("watch?v=","embed/");
				$('footer').hide();
				$('#music_album').append(				
					'<div id="video_player">'
					+'<div class="title"><h3>'+ artistName +' - <b>'+ $(this).text() +'</b></h3></div>'
					+'<div class="close"><a>Close</a></div>'
					+'<div class="video"><iframe width="1008px" height="440px" src="' + videoSource +'?theme=dark&rel=0&hd=1&autoplay=1&showinfo=0" frameborder="0" allowfullscreen></iframe><div>'
					+'<div>'
				);
				
				$('#video_player').click(function (event) {
					event.preventDefault();
					$(this).empty();
					$(this).remove();
					$('#video_player').empty();
					$('#video_player').remove();
					$('footer').show();
					return false;
				});		
				
				$('#video_player .close a').click(function (event) {
					event.preventDefault();
					$('#video_player').empty();
					$('#video_player').remove();
					return false;
				});	
				return false;
			});
			
			$('.has_audio a').click(function () {
				$(this).blur();
				getAudio($(this).attr('rel'), $('.name',this).text());	
				return false;
			});
			
			//Album Page
			window.musicPageScroll = 0;
			scrollMusic(500);
			
			if (Browser.isWebkit && Browser.supportsTouch) {					
				updateScroller();
				
				var trackPage = 0;
				if ($('#track_list > ul > li').length > 8){
					/*
					$('footer .pagebuttons').empty().append('<li><a href="" class="pageup">Scroll Up</a></li><li><a href="" class="pagedown">Scroll Down</a></li>');
					$('.pageup').bind('click', function (event) {
						event.preventDefault();
						$(this).blur();
						trackPage = trackPage - 8;
						if (trackPage < 0){
							trackPage = 0;	
						}
						scrollPages[1].scrollTo(0, -trackPage * 32, 500);
						return false;
					});
					$('.pagedown').bind('click', function (event) {
						event.preventDefault();
						$(this).blur();
						trackPage = trackPage + 8;
						var pageHeight = Math.ceil($('#track_list').height()/32)-8;
						if (trackPage > pageHeight){
							trackPage = pageHeight;	
						}
						scrollPages[1].scrollTo(0, -trackPage * 32, 500);
						return false;
					});
					*/
				} else {
					$('footer .pagebuttons').empty();	
				}
				
				$('footer .pagefilter').empty().append(
					'<li><a href ="" rel="music" onclick="SWFAddress.setValue(this.rel); this.blur(); return false;">Back to Albums</a></li>'
				);
			
			} else {
				$('footer .pagefilter').empty().append(
					'<li><a href ="" rel="music" onclick="SWFAddress.setValue(this.rel); this.blur(); return false;">Back to Albums</a></li>'
				);
				updateScroller();
				return false;			
			}
		}
	});
}

// ---------------------------------------- Audio Player ----------------------------------------
var audioArray = [];
function makeAudioPlayer(){
	var audioCheck = document.createElement('audio');
	if(Browser.isSafari == true) {
		console.log("Safari detected");
	}else{
		console.log("Safari not detected");
	}	
	
	if(!!(audioCheck.canPlayType && audioCheck.canPlayType('audio/mpeg;').replace(/no/, ''))) {// && !Browser.isSafari)) {
		audioCheck = null;
		console.log("MP3 Support Detected");
		$('#album_player').append(	
			'<div class="player">'
			+ '<div class="playtoggle"/>'
			+ '<span id="gutter">'
			+ '<span id="loading" />'
			+ '<span id="handle"/>'
			+ '</span>'
			+ '<span id="timeleft" />'
			+ '</div>'
		);
		
		$('.pageaudio').empty().append(	
			'<div class="playtoggle">'
			+'</div>'
		);		
	} else {
		//GET SWF OBJECT
		$.getScript(serverRoot + '/assets/js/swfobject.js', function(){
			$.getScript(serverRoot + '/assets/js/jquery.swfobject.min.js', function(){
				//Insert Flash
				$('#music_player').empty().append('<div id="audioPlayer"></div>');    
				if ($.flash.available){		
					var flashvars = {}
					flashvars.siteRoot = serverRoot;
					flashvars.siteName = siteName;
					
					var params = {}
					params.scale = "noscale";
					params.wmode = "transparent";
					params.salign = "TL";
					params.bgcolor = "#000000";
					params.allowfullscreen = "false";
					params.allowscriptaccess = "always";
					
					var attributes = {}
					attributes.id = "flashPlayer";
					attributes.name = "flashPlayer";
			
					swfobject.embedSWF(
						serverRoot+"/assets/swf/audioplayer.swf",
						"audioPlayer", "100%", "100%", "10.0.0",
						false, flashvars, params, attributes);
					
					$('.pageaudio').empty().append(	
						'<div class="playtoggle">'
						+'</div>'
					);	
				} else {
					$('#album_player').append('<p>You are unable to view the audio player. Please install Flash or user a browser that supports HTML5 mp3s.</p>');
				}
			});
		});
	}
}

function getAudio(source, songTitle){
	var audioCheck = document.createElement('audio');
	var scrubberStart = 0;
	var scrubberX = 0;
	if(!!(audioCheck.canPlayType && audioCheck.canPlayType('audio/mpeg;').replace(/no/, ''))) {
		//Reset for new track
		audioCheck = null;
		resetAudioPlayer();
				
		var audioSource = '<audio id="track_audio" src="' + source + '"/>'
		$('#album_player .player').append(audioSource)
		audioArray = $('#album_player .player #track_audio').get();
		var audio = audioArray[0];
		
		console.log("Now Playing: "+ songTitle + " at " + source);
		var timeleft = $('#album_player > .player #timeleft');		
		var loadingIndicator = $('#album_player > .player #loading');
		var positionIndicator = $('#album_player > .player #handle');

		if ((audio.buffered != undefined) && (audio.buffered.length != 0)) {
			$(audio).bind('progress', function() {
				var loaded = parseInt(((audio.buffered.end(0) / audio.duration) * 100), 10);
				console.log(songTitle + " - Loading: " + loaded);
				loadingIndicator.css({width: loaded + '%'});
			});
		} else {
			loadingIndicator.css({width: "0px"});
			positionIndicator.css({display: "block"});
			timeleft.text("Play: " + songTitle);
			$('.pageaudio').stop().animate({'margin-top':0},500,'easeOutExpo');
			
			// -------------------- Binding UI --------------------
			//Touch Events
			$('.player #gutter #handle').bind('touchstart',function(event){
				event.preventDefault();
				var touch = event.touches[0];
				console.log("Scurbber: Dragging");
				uiDragging = true;
				scrubberStart = touch.pageX;
				scrubberX = $('.player #gutter #handle').css('margin-left').replace('px', '');
			});
			
			$('.player #gutter #handle').bind('touchmove',function(event){
				event.preventDefault();
				var touch = event.touches[0];					
				var delta_x = touch.pageX - scrubberStart;
				var new_x = parseInt(scrubberX) + parseInt(delta_x);
				if(new_x < 0){
					new_x = 0;	
					$('.player #gutter #handle').css('margin-left', new_x + "px");
				} else {
					$('.player #gutter #handle').css('margin-left', new_x + "px");
				};		
				if(new_x > 160 - 18){
					new_x = 160 - 18;	
					$('.player #gutter #handle').css('margin-left', new_x + "px");
				} else {
					$('.player #gutter #handle').css('margin-left', new_x + "px");
				};
				var timeDifference = new_x / (160-18);
				audio.currentTime = audio.duration * timeDifference;			
			
				console.log("Scurbber: Moving from " + scrubberStart + " to " + new_x);
			});

			$('.player #gutter #handle').bind('touchend',function(event){
				event.preventDefault();
				console.log("Scurbber: Inactive");
				uiDragging = false;			
			});	
						
			//Mouse Events			
			$('.player #gutter #handle').bind('mousedown',function(event){
				event.preventDefault();
				console.log("Scurbber: Dragging");
				uiDragging = true;
				moveMouse();
				return false;
			});
			
			$('#music_album').bind('mousemove',function(event){
				event.preventDefault();
				moveMouse();
				return false;		
			});
			
			function moveMouse(){
				if (uiDragging == true){
					var offset = $('.player #gutter').offset();
					var pos_x = event.pageX-offset.left;
					var new_x = parseInt(pos_x) - 9;
					if(new_x < 0){
						new_x = 0;	
						$('.player #gutter #handle').css('margin-left', new_x + "px");
					} else {
						$('.player #gutter #handle').css('margin-left', new_x + "px");
					};		
					if(new_x > 160 - 18){
						new_x = 160 - 18;	
						$('.player #gutter #handle').css('margin-left', new_x + "px");
					} else {
						$('.player #gutter #handle').css('margin-left', new_x + "px");
					};
					var timeDifference = new_x / (160-18);
					audio.currentTime = audio.duration * timeDifference;
					console.log("Scurbber: Moving to " + new_x);
				}			
			}
			
			$('.player #gutter').bind('click', function(event){
				event.preventDefault();
				var offset = $('.player #gutter').offset();
				pos_x = event.pageX-offset.left;
				if (!pos_x > 0){
					pos_x = 0;
				} else if (pos_x > 160){
					pos_x = 160;	
				}
				var timeDifference = pos_x / (160);
				audio.currentTime = audio.duration * timeDifference;			
				console.log(event.pageX+":"+pos_x);
				return false;
			});
			
			$('.player #gutter #handle').bind('click', function(event){
				event.preventDefault();
				return false;
			});
		}
		
		$(audio).bind('timeupdate', function() {		
			var rem = parseInt(audio.duration - audio.currentTime, 10),
			pos = (audio.currentTime / audio.duration) * 100,
			mins = Math.floor(rem/60,10),
			secs = rem - mins*60;			  
			timeleft.text('-' + mins + ':' + (secs > 9 ? secs : '0' + secs));
			
			var scrubberPos = Math.round((audio.currentTime / audio.duration) * (160 - 18));
			
			if (uiDragging == false) {
				$('.player #gutter #handle').css({
					"margin-left": scrubberPos +"px"
				});
			}
		});
		
		$(audio).bind('play',function() {
			$(".playtoggle").addClass('playing');  
			$("#player_vu .box").addClass('active');
            
            if(!Browser.isSafari){
                $("#player_vu .needle").addClass('active');
            }
			
		}).bind('pause', function() {
			$(".playtoggle").removeClass('playing');
			$("#player_vu .box").removeClass('active');    
			$("#player_vu .needle").removeClass('active');    
		}).bind('ended', function(){
			$(".playtoggle").removeClass('playing');
			$("#player_vu .box").removeClass('active');    
			$("#player_vu .needle").removeClass('active');
			audio.pause();
			audio.currentTime = 0;
			$('.player #gutter #handle').css({'margin-left': "0px"})
		});
		
		audio.play();
		
		$(".playtoggle").click(function() {     
			if (audio.paused) { audio.play(); } 
			else { audio.pause(); }     
		});
	} else {
		$('.pageaudio').stop().animate({'margin-top':0},500,'easeOutExpo');
		$(".playtoggle").unbind('click');
		$(".playtoggle").click(function() {     
			getFlashMovie("flashPlayer").playToggle();    
		});

		//Play from flash
		getFlashMovie("flashPlayer").getTrack(source, songTitle);
	}
}

function playerToggle(onoff) {
	if (onoff == false){
		$(".playtoggle").removeClass('playing');
		$("#player_vu .box").removeClass('active');    
		$("#player_vu .needle").removeClass('active');  
	} else {
		$(".playtoggle").addClass('playing');  
		$("#player_vu .box").addClass('active');   
		$("#player_vu .needle").addClass('active');   
	}
}

function resetAudioPlayer(){
	if(audioArray.length > 0){
		audioArray[0].muted = true;
		audioArray[0].pause();
		audioArray[0].currentTime = 0;
		audioArray[0].currentSrc = null;
		audioArray[0].src = null;
	}
	
	for (var i = audioArray.length; i > 0; i--){
		audioArray.pop();
	}
	
	$('#track_audio').remove();
	$(".playtoggle").removeClass('playing');
	$("#player_vu .box").removeClass('active');    
	$("#player_vu .needle").removeClass('active');
	$('.player #handle').css({display: "none"});
	$('.pageaudio').stop().animate({'margin-top':72},500,'easeOutExpo');
	$('.player #gutter #handle').css({'margin-left': "0px"})
	$('.player #gutter #handle').unbind();
	$('.player #gutter').unbind();
	$('.player #timeleft').empty();	
}

//Gets the flash player instance
function getFlashMovie(movieName) {
	if (navigator.appName.indexOf("Microsoft") != -1) {
		return window[movieName];
	} else {
		return document[movieName];
	}
}

// ---------------------------------------- Secret Downloads ----------------------------------------
function unlockTheSecrets(secretNumber){
	switch (secretNumber) {
		case 'one':
			$('.master .one a').replaceWith('<a href="'+ serverRoot + '/assets/unlockables/Swivel Kicks & Toms.zip" class="secretButton">Download</a>');
			$('.master .one .status').addClass('unlocked');
			break;
		case 'two':
			$('.master .two a').replaceWith('<a href="'+ serverRoot + '/assets/unlockables/Swivel Snares & Claps.zip" class="secretButton">Download</a>');
			$('.master .two .status').addClass('unlocked');
			break;
		case 'three':
			$('.master .three a').replaceWith('<a href="'+ serverRoot + '/assets/unlockables/Swivel Hi Hats Cymbals FX.zip" class="secretButton">Download</a>');
			$('.master .three .status').addClass('unlocked');
			break;
		default:
			break;
	}
	
	window.currentPage = 5;
	resizePages(1000);
}


// ---------------------------------------- Touch Gestures ----------------------------------------
var touches = [];
var uiDragging = false;
var uiDragID;
function bindTouchEvents(){	
	//Fader Page1
	$('.faderPage1').click(function () {
		SWFAddress.setValue('secret');
		window.currentPage = 1;
		resizePages(1000);
		return false;
	});	
	
	//Fader Page2
	$('.faderPage2').click(function () {
		SWFAddress.setValue('secret');
		window.currentPage = 3;
		resizePages(1000);
		return false;
	});
	
	//Master Page
	$('.masterPage').click(function () {
		SWFAddress.setValue('secret');
		window.currentPage = 5;
		resizePages(1000);
		return false;
	});

	//Mixer Page
	$('.faderPage3').click(function () {
		SWFAddress.setValue('secret');
		window.currentPage = 7;
		resizePages(1000);
		return false;
	});	
	
	// -------------------- Identify Faders --------------------
	var faderGroups = [];
	$('.fader').each(function(index){
		$('.box',this).attr("id","fader"+index);
		faderGroups.push(0);
		var faderID = $('.box',this).attr("id");
		var currentGroup = faderGroups[index];
		var groupMax = $('#group .led',this).length;
		var groupBtn = $('#group .btn', this);
		var groupSelect = $('#group', this);
		function nextGroup(){
			currentGroup ++;
			if(currentGroup > groupMax){
				currentGroup = 0;
			}
			groupSelect.find('.led').removeClass('active');
			if (currentGroup > 0){
				groupSelect.find('.led:eq('+(currentGroup-1)+')').addClass('active');
			}
			
			faderGroups[index] = currentGroup;
			
			//Secret Item 3
			if (faderGroups[17] == faderGroups[18] && faderGroups[17] > 0){
				if (faderID == 'fader17' || faderID == 'fader18'){
					unlockTheSecrets('three');
				}
			}
		}
		
		groupBtn.click(function(){
			nextGroup();
		});
	});
	
	$('.pan .cut').each(function(index){
		$(this).attr("id","cut"+index);
	});

	// -------------------- Binding Events --------------------
	$('.pan .solo, .pan .cut').bind('click',function(){
		$(this).toggleClass('active');
	});
	
	$('.pan #cut9').click(function(event){
		var $cutButton = $(this);
		//Secret Item 2
		if($cutButton.hasClass('active')){
			unlockTheSecrets('two');
		}
	});

	$('.monitor .pad').bind('click',function(){
		$('.pad').removeClass('active');
		$(this).toggleClass('active');
	});	
	
	$('.fader .box').bind('touchstart',function(){
		event.preventDefault();
		var allTouches = event.touches;
		for (var i = 0; i < allTouches.length; i++){
			startTouch(allTouches[i], this);
		}
	});
	
	$('.fader .box').bind('touchmove',function(){
		event.preventDefault();
		var allTouches = event.touches;
		for (var i = 0; i < allTouches.length; i++){
			moveTouch(allTouches[i]);
		}
	});
	
	$('.fader .box').bind('touchend',function(){
		event.preventDefault();
		var allTouches = event.touches;
		removeTouch(allTouches);
	});	
	
	//Mouse Events			
	$('.fader .box').bind('mousedown',function(event){
		event.preventDefault();
		var offset = $(this).parent().offset();
		var pos_y = event.pageY-offset.top;
		uiDragging = true;
		uiDragID = $(this).attr('id');
		return false;	
	});
	
	$('.fader .box').bind('mousemove',function(event){
		event.preventDefault();
		if (uiDragging == true){
			var offset = $("#"+uiDragID).parent().offset();
			var pos_y = event.pageY-offset.top;
			var new_y = parseInt(pos_y) - 63;
			if(new_y < 0){
				new_y = 0;	
				$("#"+uiDragID).css('margin-top', new_y + "px");
			} else {
				$("#"+uiDragID).css('margin-top', new_y + "px");
			};		
			if(new_y > 382 - 126){
				new_y = 382 - 126;	
				$("#"+uiDragID).css('margin-top', new_y + "px");
			} else {
				$("#"+uiDragID).css('margin-top', new_y + "px");
			};
			console.log("Fader: Moving to " + new_y);
		}
		return false;
	});			
						
	onmouseup = function(event){
		uiDragging = false;

		if (uiDragID != "" && uiDragID != null){
			//Secret Item 1
			var offset = parseInt($("#"+uiDragID).css('margin-top'));
			console.log("Stopped Fader: " + uiDragID + " - at: " + offset);
			if(uiDragID == "fader0" && offset < 55){
				unlockTheSecrets('one');
			}
		}
		uiDragID = "";
	};
}

// ---------------------------------------- Touch Functions ----------------------------------------
function startTouch(finger, element){
	if(newTouch(finger)){
		element.start_x = finger.pageX;
		element.start_y = finger.pageY;
		element.current_x = $(element).css('margin-left').replace('px', '');
		element.current_y = $(element).css('margin-top').replace('px', '');	
		var t = {touch: finger, element: element};
		touches.push(t);
	}
}

function moveTouch(touch){
	for (var i = 0; i < touches.length; i++){
		if (touches[i].touch.identifier == touch.identifier){
			var delta_y = touch.pageY - touches[i].element.start_y;
			var delta_x = touch.pageX - touches[i].element.start_x;
			var new_y = parseInt(touches[i].element.current_y) + parseInt(delta_y);
			if(new_y < 0){
				new_y = 0;	
				$(touches[i].element).css('margin-top', new_y + "px");
			} else {
				$(touches[i].element).css('margin-top', new_y + "px");
			};		
			if(new_y > 254){
				new_y = 254;	
				$(touches[i].element).css('margin-top', new_y + "px");
			} else {
				$(touches[i].element).css('margin-top', new_y + "px");
			};
		}
	}		
}

function newTouch(touch){
	for (var i = 0; i < touches.length; i++){
		if (touches[i].touch.identifier == touch.identifier){
			return false;
		}
	}
	return true;	
}

function removeTouch(alltouches){
	var toRemove = [];
	for (var i = 0; i < touches.length; i++){			
		var found  = false;
		for (var j = 0; j < alltouches.length; j++ ) {
			if (touches[i].touch.identifier == alltouches[j].identifier){
				found = true;
			}			
		}
		if (!found){
			toRemove.push({obj: touches[i], ref: i })				
		}
	}   
	
	for (var i = 0; i < toRemove.length; i++){
		for (var j = 0 ; j < touches.length; j++){
			if (touches[j].touch.identifier == toRemove[i].obj.touch.identifier){
				touches.splice(j ,1);
			}
		}
	}
}

// ---------------------------------------- Contact Form ----------------------------------------
$('#contact #contactMathLabel').text(contactCaptcha1 + " + " + contactCaptcha2 +" =");
function validateContactForm(){
	var formError = false;
	
	if (validateName()){
	} else {
		formError = true;
	}
	
	if (validateEmail()){
	} else {
		formError = true;
	}
	
	if (validateSubject()){
	} else {
		formError = true;
	}
	
	if (validateMessage()){
	} else {
		formError = true;
	}
	
	if (validateMath()){
	} else {
		formError = true;
	}
	
	if (formError == true){
		return false;	
	} else {
		return true;	
	}
}

function validateName() {
	var contactName = $('#contact #contactName').val();
	if (contactName == null || contactName == ""){
		$('#contact #nameCheck').removeClass('success');
		$('#contact #nameCheck').addClass('error');
		return false;
	} else {
		$('#contact #nameCheck').removeClass('error');
		$('#contact #nameCheck').addClass('success');
		return true;
	}
}

function validateEmail() {
	var contactMail = $('#contact #contactMail').val();
	var atpos=contactMail.indexOf("@");
	var dotpos=contactMail.lastIndexOf(".");
	if (contactMail == null || contactMail == "" || atpos<1 || dotpos<atpos+2 || dotpos+2>=contactMail.length){
		$('#contact #mailCheck').removeClass('success');
		$('#contact #mailCheck').addClass('error');
		return false;
	} else {
		$('#contact #mailCheck').removeClass('error');
		$('#contact #mailCheck').addClass('success');
		return true;
	}
}

function validateSubject() {
	var contactSubject = $('#contact #contactSubject').val();
	if (contactSubject == null || contactSubject == ""){
		$('#contact #subjectCheck').removeClass('success');
		$('#contact #subjectCheck').addClass('error');
		return false;
	} else {
		$('#contact #subjectCheck').removeClass('error');
		$('#contact #subjectCheck').addClass('success');
		return true;
	}
}

function validateMessage() {
	var contactMessage = $('#contact #contactMessage').val();
	if (contactMessage == null || contactMessage == ""){
		$('#contact #messageCheck').removeClass('success');
		$('#contact #messageCheck').addClass('error');
		return false;
	} else {
		$('#contact #messageCheck').removeClass('error');
		$('#contact #messageCheck').addClass('success');
		return true;
	}
}

function validateMath(){
	var contactMath = $('#contact #contactMath').val();
	if (contactMath == null || contactMath == "" || contactMath != contactCaptchaCode){
		$('#contact #mathCheck').removeClass('success');
		$('#contact #mathCheck').addClass('error');
		return false;
	} else {
		$('#contact #mathCheck').removeClass('error');
		$('#contact #mathCheck').addClass('success');
		return true;
	}	
}

function sendContactForm(){
	var contactName = $('#contact #contactName').val();
	var contactMail = $('#contact #contactMail').val();
	var contactSubject = $('#contact #contactSubject').val();
	var contactMessage = $('#contact #contactMessage').val();

	$.post(serverRoot + "/assets/scripts/site.contact.php",{userEmail: serverEmail, senderName: contactName, senderEmail: contactMail, senderSubject: contactSubject, senderMessage: contactMessage}, function(data){
		if(data.gridStatus == "pass"){
			$('#contactForm').empty().append(
				'<div class="box"></div>'
				+'<div class="box dial"></div>'
				+'<div class="box"></div>'
				+'<div class="box"></div>'
				+'<div class="box"></div>'
				+'<div class="box22 cutout">'
                +'<div style="padding: 16px;">'
                +'<h4><b>Message</b> Sent</h4>'
                +'<p>Thanks for sending a message. Let\'s hope that it\'s interresting.</p>'
                +'<h5><a id="secret1" href="{}">Let\'s do something <b>different</b>.</a></h5>'
                +'</div></div>'
			);
			
			$('#secret1').bind("click", function(){
				window.currentPage = 3;
				resizePages(1000);
				return false;
			});
		}
	}, "json");
}

$('#contact #contactName').bind("blur", function(){
	validateName();	
});

$('#contact #contactMail').bind("blur", function(){
	validateEmail();	
});

$('#contact #contactSubject').bind("blur", function(){
	validateSubject();	
});

$('#contact #contactMessage').bind("blur", function(){
	validateMessage();	
});

$('#contact #contactMath').bind("blur", function(){
	validateMath();	
});

$('#contact input[type="reset"]').bind("click", function(event){
	event.preventDefault();
	$('#contact input[type="text"]').val("");
	$('#contact textarea').val("");
	$('#contact .verify').removeClass('error');
	$('#contact .verify').removeClass('success');	
	return false;
});

$('#contact input[type="submit"]').bind("click", function(event){
	event.preventDefault();
	if(validateContactForm()){
		sendContactForm()
	}
});

// ---------------------------------------- JavaScript ----------------------------------------
$(window).load(function(){	
	//Runtime	
	bindTouchEvents();
	getAlbumScrollbar();
	getTrackScrollbar();
	getBioScrollbar();
	getPressScrollbar();
	getPressReleaseScrollbar();
	
	//Header / Navigation
	$('header .logo').stop().delay(1000).animate({'margin-top':40},500,'easeOutExpo');
	
	$('header .logo').click(function () {
		$(this).blur();
		$('nav a').removeClass('selected');
		SWFAddress.setValue($(this).attr('rel'));	
		return false;
	});

	$('nav').stop().delay(1500).animate({'margin-top':40},500,'easeOutExpo');
	
	$('nav a').click(function () {
		$(this).blur();
		SWFAddress.setValue($(this).attr('rel'));	
		return false;
	});
	
	//Cache
	setCacheTime();
	
	//SWF Address
	var locationHash = location.hash.slice(1,location.hash.length);

    var locationSection = locationHash.split('/');
    var locationPage;
	var locationTitle = 'DJ Swivel';
	if(locationSection[1]){
	    locationPage = locationSection[1].toLowerCase();
        locationTitle += formatTitle(locationHash.replace(/\//g, ' - '));
    } else {
    	locationPage = '';
    }
	
	//Run Once
	if (Browser.isWebkit && Browser.supportsTouch) {
	
	} else {
		getMusic('/music');
		getAbout('/about');
		getPress('/press');
		getNews();
	}

	switch (locationPage.toLowerCase()) {
	case 'music':
		window.currentPage = 2;
		$('nav > ul > li:eq(0) > a').addClass('selected');
		$('nav > ul > li:eq(0) > ul').addClass('subselected');
		getMusic(locationHash);
		break;
	case 'about':
		window.currentPage = 4;
		$('nav > ul > li:eq(1) > a').addClass('selected');
		$('nav > ul > li:eq(1) > ul').addClass('subselected');
		getAbout(locationHash);
		break;
	case 'press':
		window.currentPage = 6;
		$('nav > ul > li:eq(2) > a').addClass('selected');
		getPress(locationHash);
		break;
	case 'contact':
		window.currentPage = 8;
		$('nav > ul > li:eq(3) > a').addClass('selected');
		break;
	case 'blog':
		window.currentPage = 10;
		$('nav > ul > li:eq(4) > a').addClass('selected');
		break;
	case 'secret':
		if(window.currentPage != 8){
			window.currentPage = 8;		
		}
		getNews();
		break;
	default:
		window.currentPage = 0;
		getNews();
		break;
	}

	resizePages(0);
	
    SWFAddress.setValue(locationHash);
	handleSWFAddressCHANGE(null);
});
