var maxZIndex=1;
var previousPage;
var intCurrentSearchRow, intSearchResultCount;
var rdioState, intCurrentRdioTrackDuration;

$(document).ready(function() {
	var genreMenuTimeoutID, musicMenuTimeoutID, searchTimeoutID, aboutMenuTimeoutID;
	
	// Load our header banner
	loadBanner('89207', 'headerbanner', 0);
	
	// Set up genre dropdown
	$("#menu-genres").click(function() {
		if ($('#menu-genres-sub').css('display')=='block') {
			clearTimeout(genreMenuTimeoutID);
			$('#menu-genres-sub').slideUp('fast');
		} else {
			clearTimeout(genreMenuTimeoutID);
			center=Math.floor($(this).offset().left + ($(this).outerWidth()/2)) - ($("#menu-genres-sub").outerWidth()/2);
			$("#menu-genres-sub").offset({left:center});
			$("#menu-genres-sub").css('z-index',++maxZIndex);
			$("#menu-genres-sub").slideDown('fast');
		};
	});
	$("#menu-genres").hover(function() {
		clearTimeout(genreMenuTimeoutID);
	},function() {
		// Start timer to kill it
		genreMenuTimeoutID=setTimeout(function() { $("#menu-genres-sub").slideUp('fast'); }, 200);
	});
	$("#menu-genres-sub").hover(function() {
		clearTimeout(genreMenuTimeoutID);
	},function() {
		genreMenuTimeoutID=setTimeout(function() { $("#menu-genres-sub").slideUp('fast'); }, 200);
	});
	
	// Set up music menu dropdown
	$("#menu-music").click(function() {
		if ($('#menu-music-sub').css('display')=='block') {
			clearTimeout(musicMenuTimeoutID);
			$('#menu-music-sub').slideUp('fast');
		} else {			
			clearTimeout(musicMenuTimeoutID);
			center=Math.floor($(this).offset().left + ($(this).outerWidth()/2)) - ($("#menu-music-sub").outerWidth()/2);
			$("#menu-music-sub").css('z-index',++maxZIndex);
			$("#menu-music-sub").offset({left:center});
			$("#menu-music-sub").slideDown('fast');
		};
	});
	$("#menu-music").hover(function() {
		clearTimeout(musicMenuTimeoutID);
	},function() {
		// Start timer to kill it
		musicMenuTimeoutID=setTimeout(function() { $("#menu-music-sub").slideUp('fast'); }, 200);
	});
	$("#menu-music-sub").hover(function() {
		clearTimeout(musicMenuTimeoutID);
	},function() {
		musicMenuTimeoutID=setTimeout(function() { $("#menu-music-sub").slideUp('fast'); }, 200);
	});

	// Set up about menu dropdown
	$("#menu-about").click(function() {
		clearTimeout(aboutMenuTimeoutID);
		center=Math.floor($(this).offset().left + ($(this).outerWidth()/2)) - ($("#menu-about-sub").outerWidth()/2);
		$("#menu-about-sub").css('z-index',++maxZIndex);
		$("#menu-about-sub").offset({left:center});
		$("#menu-about-sub").slideDown('fast');		
	});
	$("#menu-about").hover(function() {
		clearTimeout(aboutMenuTimeoutID);
	},function() {
		// Start timer to kill it
		aboutMenuTimeoutID=setTimeout(function() { $("#menu-about-sub").slideUp('fast'); }, 200);
	});
	$("#menu-about-sub").hover(function() {
		clearTimeout(aboutMenuTimeoutID);
	},function() {
		aboutMenuTimeoutID=setTimeout(function() { $("#menu-about-sub").slideUp('fast'); }, 200);
	});
	
	$('#searchquery').keydown(function(e) {
		if (e.which==40) {
			updateSearchRow(1);
			return false;
		} else if (e.which==38) {
			updateSearchRow(-1);
			return false;
		} else if (e.which==13) {
			$('.match:eq('+intCurrentSearchRow+')').click();
			return false;
		};
	});
	
	function updateSearchRow(s) {
		if ((intCurrentSearchRow+s)>=0 && (intCurrentSearchRow+s)<intSearchResultCount) {
			$('.match:eq(' + intCurrentSearchRow + ')').removeClass('highlighted');
			intCurrentSearchRow+=s;
			$('.match:eq(' + intCurrentSearchRow + ')').addClass('highlighted');
		};
	};
	
	// Set up search dropdown
	$("#searchquery").keydown(function(e) {
		if (e.which==38 || e.which==40 || e.which==13) {
			return;
		};
		clearTimeout(searchTimeoutID);
		searchTimeoutID=setTimeout(function() {
			strQuery=$("#searchquery").val();
			
			if (strQuery=='') {
				$("#searchdropdown").hide();
			} else {
				arrQuery=strQuery.split(" ");
				$("#searchwait").html('<img src="/images/waitsmall.gif">');
				$.getJSON("/ajax/search.asp", { q:strQuery }, function(json) {					
					$("#searchwait").html('displaying ' + json.count + ' matches');

					intSearchResultCount=0;
					h="";
					// Walk each result 'section'
					for (i=0; i<json.results.length; i++) {
						if (json.results[i].matches.length>0) {
							h+="<div class=\"section\">" + json.results[i].section + ":</div>\n";
		
							// Walk each match 
							for (j=0; j<json.results[i].matches.length; j++) {
								intSearchResultCount++;
								matchString=json.results[i].matches[j].display;
								re=new RegExp("(" + arrQuery.join("|") + ")", "ig")
								matchString=matchString.replace(re, "<span class=\"highlight\">$1</span>");
								
								h+="<div class=\"match\" onclick=\"urlClick('" + json.results[i].matches[j].href + "');\">" + matchString + "</div>\n";
							};
						};
					};
					$("#searchdropdown #searchresults").html(h);
					intCurrentSearchRow=-1;
					updateSearchRow(1);
				})
				$("#searchdropdown").slideDown('fast');
			};
		}, 250);
	});

	$("#searchquery").focus(function() {
		if($("#searchquery").val()) {
			$("#searchdropdown").slideDown('fast');
		}
	});

	$("#searchquery").blur(function() {
		$("#searchdropdown").slideUp('fast');
	});
	
	// Watch for page location changes every half second
	setInterval(detectPageChange, 500);
	
	// Rdio Events
	cb.playingTrackChanged = function(playingTrack, sourcePosition) {
		$('#rdio_artisttrack').html(playingTrack.artist + ' &ldquo;' + playingTrack.name + '&rdquo;');
		
		// Alert the user if there's a problem with the track
		if (playingTrack.can_sample) {
			$('#rdio_nowplaying').html('NOW PLAYING');
		} else {
			$('#rdio_nowplaying').html('<span style="color:red;">ERROR:</span> CAN\'T STREAM');
		};
		
		// Store duration, we'll need it later
		intCurrentRdioTrackDuration=playingTrack.duration;
	}

	cb.ready = function() {
	};
	
	cb.positionChanged = function(position) {
		updateRdioPos(position);
	};
	
	cb.playStateChanged = function(playState) {
		rdioState=playState;
		
		if (playState==0 || playState==2) {
			$('#rdio_button>img').attr('src','/images/rdio_play.png');
		} else if (playState==1) {
			$('#rdio_button>img').attr('src','/images/rdio_pause.png');
		};
	};

	cb.queueChanged = function(newQueue) {
		alert(newQueue);
	};

	$('#rdio_button>img').click(function() {
		if (rdioState==0 || rdioState==2) {
			$("#rdio_api_swf").get(0).rdio_play();
		} else if (rdioState==1) {
			$("#rdio_api_swf").get(0).rdio_pause();
		};
	});	
});

function urlClick(url) {
	window.location=url;
	$("#searchdropdown").slideUp('fast');
};

function detectPageChange() {
	currentPage=window.location.hash.substr(2);
	if (currentPage != previousPage) {
		previousPage=currentPage;
		loadPage(currentPage);
	};
};

function reloadPage() {
	loadPage(window.location.hash.substr(2));
};

function loadPage(page) {
	page=unescape(page);
	// Examine our page url and figure out where we're going, start by looking at the first thing after the hash
	firstSlash=page.indexOf('/',1);
	secondSlash=page.indexOf('/',firstSlash+1);
	type=page.substr(1, firstSlash-1);

	 _gaq.push(['_trackPageview', '#!' + page]);

	// Value is the part between the first and second slashes
	if (secondSlash>0) {
		value=page.substr(page.indexOf('/',1)+1, secondSlash-firstSlash-1);
	// Value is the part after the first slash (we couldn't find a second flash)
	} else {
		value=page.substr(page.indexOf('/',1)+1);
	}
	
	// Get the stuff after the second slash (query)
	query=page.substr(secondSlash+1);
	
	switch(type) {
	case 'genre':
		url="/genre.asp?ajax=true&id=" + value;
		break;
	case 'artist':
		url="/artist.asp?ajax=true&id=" + value;
		break;
	case 'release':
		url="/release.asp?ajax=true&id=" + value;
		break;
	case 'page':
		url="/page/" + value + ".asp?ajax=true&" + query;
		break;
	case 'about':
		url="/page/about/" + value + ".asp?ajax=true";
		break;
	case 'video':
		url="/page/video.asp?ajax=true&id=" + value;
		break;
	case '':
		url="/page/home.asp?ajax=true";
		break;
	default:
		url="/404.asp?ajax=true";
	}

	// Dim the screen
	openScreen();
	
	// Reload header banner
	loadBanner('89207', 'headerbanner', 0);
	
	// Center and display 'loading' box
	intLeft=($(window).width()-$('#pageLoading').outerWidth(true))/2;	
	intTop=($(window).height()-$('#pageLoading').outerHeight(true))/2+$(window).scrollTop();
	$("#pageLoading").show();
	$("#pageLoading").offset({left:intLeft, top:intTop});
	
	$("#content").load(url, function() {
		$("#pageLoading").hide();
		$("#screen").hide();
		pageLoaded();
	});

};

function changeTitle(title) {
	document.title="EMIMusic.ca - " + title;
};

function openExternalURL(strURL) {
	window.open(strURL);
};

function addCommas(nStr) {
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}

function openScreen() {
	$('#screen').offset({left:0,top:0});
	$('#screen').width($(document).width());
	$('#screen').height($(document).height());
	$('#screen').show();
};

function showSignInBox() {
	openScreen();

	if ($('#signinbox').length==0) {
		$('#content').append('<div id="signinbox"></div>');
	};
	
	$('#signinbox').html('');
	$.get('/ajax/buildSigninBox.asp', function(data) {
		$('#signinbox').html(data);
		intLeft=($(window).width()-$('#signinbox').outerWidth(true))/2;	
		$('#signinbox').offset({left:intLeft,top:100});
		$('#signinbox').css('zIndex',++maxZIndex);
		$('#signinbox').show();
		
		$('#signinboxCancel').click(signinboxCancel);
		$('#signinboxSignIn').click(signinboxSignIn);
	});
};

function showMessageBox(strTitle, strMessage) {
	openScreen();
	if ($('#messagebox').length==0) {
		$('#content').append('<div id="messagebox"></div>');
	};

	$('#messagebox').html('');
	$('#messagebox').append('<div id="messageboxTitle">' + strTitle + '</div>');	
	$('#messagebox').append('<div id="messageboxMessage">' + strMessage + '</div>');	
	$('#messagebox').append('<div id="messageboxClose"><img src="/images/button-close.png" border="0"></div>');	
	intLeft=($(window).width()-$('#messagebox').outerWidth(true))/2;	
	$('#messagebox').offset({left:intLeft,top:100});
	$('#messagebox').css('zIndex',++maxZIndex);

	$('#messageboxClose').click(function() {
		$('#screen').hide();
		$('#messagebox').hide();			
	});
	
	
	$('#messagebox').fadeIn('fast');	
};

function signinboxCancel() {
	$('#screen').hide();
	$('#signinbox').hide();
};

function signinWithFacebook() {
	FB.login(function(response) {
	  if (response.session) {
		// user successfully logged in
	  	document.location.href='/signin_via_facebook.asp';
	  } else {
		// user cancelled login
	  }
	}, {perms: 'email,offline_access'});
};

function signinboxSignIn() {
	strEmail=$('#signinboxFieldEmail').val();
	strButtonHTML=$('#signinboxSubmitRight').html();	// Remember the html for the buttons... we may need to redraw in the event of an error
	$('#signinboxSubmitRight').html('<img src="/images/waitmedium.gif">');

	$.getJSON('/ajax/sendSigninLink.asp?e=' + strEmail, function(data) {
		if (data.success==1) {
			// Give instruction to check email
			$('#signinboxTitle').html('Link sent to your email!');
			$('#signinboxDesc').html('We\'ve sent an email to <strong>' + strEmail + '</strong> with a link that you must click before you can enjoy all of the features of our site.<br><br>Please take a moment to go and check your email now... we\'ll wait right here.');
			$('#signinboxEmail').html('');
			$('#signinboxSubmitLeft').html('');
			$('#signinboxSubmitRight').html('<img src="/images/button-close.png" id="signinboxClose">');
			$('#signinboxClose').click(signinboxCancel);
		} else if (data.success==0) {
			$('#signinboxDesc').html('Parts of this site work WAY better if we know who you are. Don\'t worry, we\'re not going to force you to create a profile or anything.<br><br><span style="color:#ff0008;">Make sure you enter a valid email address.</span>');
			$('#signinboxSubmitRight').html(strButtonHTML);
			$('#signinboxCancel').click(signinboxCancel);
			$('#signinboxSignIn').click(signinboxSignIn);
		};
	});
};

function showRingtoneInstructions(intRingtoneID) {
	openScreen();

	if ($('#ringtonebox').length==0) {
		$('#content').append('<div id="ringtonebox"></div>');
	};
	$.getJSON('/ajax/getRingtone.asp?id='+intRingtoneID, function(data) {
		intLeft=($(window).width()-$('#ringtonebox').outerWidth(true))/2;	
		$('#ringtonebox').offset({left:intLeft,top:100+$(window).scrollTop()});
		$('#ringtonebox').css('zIndex',++maxZIndex);
		$('#ringtonebox').html('');
		$('#ringtonebox').append('<div id="ringtoneboxTrack">' + data.track + '</div>');
		$('#ringtonebox').append('<div id="ringtoneboxArtist">by <em>' + data.artist + '</em></div>');
		$('#ringtonebox').append('<div id="ringtoneboxInstruction"><a href="/linktrack/?track_id=' + data.track_id + '&vendor=Rogers" target="_blank"><img src="/images/ringtone_rogers.png" border="0"></a><a href="/linktrack/?track_id=' + data.track_id + '&vendor=Bell" target="_blank"><img src="/images/ringtone_bell.png" border="0"></a><a href="/linktrack/?track_id=' + data.track_id + '&vendor=Telus" target="_blank"><img src="/images/ringtone_telus.png" border="0"></a><a href="/linktrack/?track_id=' + data.track_id + '&vendor=Virgin" target="_blank"><img src="/images/ringtone_virgin.png" border="0"></a><a href="/linktrack/?track_id=' + data.track_id + '&vendor=Mobilicity" target="_blank"><img src="/images/ringtone_mobilicity.png" border="0"></a><a href="/linktrack/?track_id=' + data.track_id + '&vendor=Koodo" target="_blank"><img src="/images/ringtone_koodo.png" border="0"></a></div>');
		$('#ringtonebox').append('<div id="ringtoneboxClose"><img src="/images/button-close.png" border="0"></div>');
		
		$('#ringtoneboxClose').click(function() {
			$('#screen').hide();
			$('#ringtonebox').hide();			
		});
		$('#ringtonebox').fadeIn('fast');
	});
};

function loadBanner(zone, id, reload) {
	var cb=Math.random() * 1000000000000;
	var s="<a href='http://d1.openx.org/ck.php?n=a3d499af&amp;cb=" + cb + "' target='_blank'><img src='http://d1.openx.org/avw.php?zoneid=" + zone + "&amp;cb=" + cb + "&amp;n=a3d499af' border='0' alt='' /></a>";
	$('#'+id).html(s);
	
	// Set up interval, if not 0
	if (reload>0) {
		setTimeout('loadBanner(\'' + zone + '\', \'' + id + '\', ' + reload + ');', reload);		
	};
};

function playRdio(id) {
	$('#rdiobar').animate({
		bottom: '0'
	}, 500, function() {} );
	$("#rdiobar").slideDown();
	rdio = $('#rdio_api_swf').get(0);
	rdio.rdio_play(id);
};

function updateRdioPos(pos) {
	$('#rdio_time').html(secsToMinSecs(pos) + " / " + secsToMinSecs(intCurrentRdioTrackDuration));
};

function secsToMinSecs(t) {
	m=parseInt(t/60);
	s=parseInt(t%60);
	r=m + ":" + (s+100).toString().substr(1,2);
	return r;
};
