// JavaScript Document

var checkUrl;
var currHash;
var terms = 0;
var checkInterval = 300; //ms
var timeout	= 400;
var closetimer = 0;
var termsCalled = false;


$(document).ready(function() {
	$(".genres").hover(
		function () {
			mopen();
		},
		function () {
			mclosetime();
		}
	);
	$(".gNav").hover(
		function () {
			mcancelclosetime();
		}
	);
	$("#the-bar a:not(.ignore)").click(function(){
		modifyPath( $(this).attr('pathname') );
		return false;
	});
	if($.browser.msie){
		buildHistoryFrame();
	}
});


function initTerms(){
	if(!termsCalled){
		$.ajax({
			type: "GET",
			url: "/process/searchExport.php",
			success: function(html){
				terms = html.split("||||");
				initSearch();
				termsCalled = true;
			}
		});
	}else{
		initSearch();
	}
}
/*
var helvetica = {
	src: '/swf/helveticaneue.swf'
	,wmode: 'transparent'
};

sIFR.activate(helvetica); // From revision 209 and onwards
*/
function mopen(){
	mcancelclosetime();
	$('.gNav').slideDown("normal");
}
function mclose(){
	$('.gNav').slideUp(100);
}
function mclosetime(){
	closetimer = window.setTimeout(mclose, timeout);
}
function mcancelclosetime(){
	if(closetimer){
		window.clearTimeout(closetimer);
		closetimer = null;
	}
}
function refreshInitHeights(selector){
	$(selector + ' .slidercont').css('position', 'absolute');
	$(selector + ' .slidercont').css('left', '0px');
	
	$(selector + ' .moredetails').each(function (i, domElement){
		var extend = $(domElement);
		var num = extend.find('.slidercont:first').height();
		extend.height(Number(num));
		extend.css('display', 'none');
	});
	$(selector + " .itemCont").hover(
	  function () {
		$(this).children('.item:first').addClass("active");
	  },
	  function () {
		$(this).children('.item:first').removeClass("active");
	  }
	);
	$(selector + ' .expandcall').click(function() {
		$(this).toggleClass('active');
		$(this).parents('.itemCont:first').toggleClass('activeopen').find('.moredetails:first').slideToggle('normal');
		return false;
	});
	$(selector + ' a.aue').click(function(){
		modifyPath( $(this).attr('pathname') );
		return false;
	});
	$(selector + ' .rate a.up,' + selector + ' .rate a.down').click(function(){
		var obj = this.parentNode;
		$(obj).css('background-image','none');
		$(obj).html("<img height=\"20\" src=\"/images/pl_loader.gif\"/>");
		$.ajax({
			type: "POST",
			url: "/process/rating.php",
			data:
			"itemId=" + $(obj).attr('rel') +
			"&dir=" + $(this).attr('rel'),
			success: function(data){
				var dataArray = data.split('|');
				$(obj).html("<span style=\"color: #" + dataArray[1] + "\">" + dataArray[0] + "</span>");
			}
		});
		return false;
	});
}


function initHeights(){
	if($.browser.msie){
		historyManager();
	}
	currHash = location.hash;
	checkUrl = setInterval("checkUrlChange()", checkInterval);

	$('.slidercont').css('position', 'absolute');
	$('.slidercont').css('left', '0px');
	if(location.hash.search("#playlists-manage") != -1 ){
		$('.slidercont').css('top', '0px');
	}else{
		$('.slidercont').css('bottom', '0px');
	}
	$('.moredetails').each(function (i, domElement){
		var extend = $(domElement);
		var num = extend.find('.slidercont:first').height();
		extend.height(Number(num));
		extend.css('display', 'none');
	});
	$(".itemCont").hover(
	  function () {
		$(this).children('.item:first').addClass("active");
	  },
	  function () {
		$(this).children('.item:first').removeClass("active");
	  }
	);
	$('.expandcall').click(function() {
		$(this).toggleClass('active');
		$(this).parents('.itemCont:first').toggleClass('activeopen').find('.moredetails:first').slideToggle('normal');
		return false;
	});
	$('a.aue').click(function(){
		modifyPath( $(this).attr('pathname') );
		return false;
	});
	if($('.genreFeature').length > 0){
		setTimeout ("setGenreFeature()", 500 );
	}
	if(location.hash == "#home" || location.hash == "#"){
		loadslideshow();
		loadHearWhere();
	}

	initTerms();

    
    try{
        var pageTitle = $('#pageTitle').html();
        document.title = pageTitle + " - Immergent - The Record Store";
    }catch(e){}

	$('.showHideLink').click(function(){
		$('#hideBio').slideToggle(0, function(){
			$('.showHideLink').hide();
			$('.showLessLink').show();
		});
		return false;
	});
	$('.showLessLink').click(function(){
		$('#hideBio').slideToggle(0, function(){
			$('.showLessLink').hide();
			$('.showHideLink').show();
		});
		return false;
	});

	if(location.hash.search("#playlists-manage") != -1 ){
		$.getScript("/js/jquery-ui-1.7.3.custom.min.js", function(){
			$(".playlist-admin ul.playlist-track-listing").sortable({
				handle : '.handle',
				update : function () {
					var playlistId = $(this).attr('rel');
					var itemContArray = $(this).find('.itemCont');

					var order = "";
					for(var i = 0; i < itemContArray.length; i++){
						order += $(itemContArray[i]).attr('rel') + ',';
					}
					order = order.substr(0, order.length-1);

					$.ajax({
						type: "POST",
						url: "/process/playlistReorder.php",
						data:
						"playlistId=" + playlistId +
						"&order=" + order,
						success: function(data){}
					});
				}
			});
		});
		
		$(".playlist-admin ul.playlist-track-listing .playlist-remove").click(function(){
			var playlistId = $(this).parents('ul.playlist-track-listing').attr('rel');
			var remove = $(this).parents('.itemCont').attr('rel');
			$.ajax({
				type: "POST",
				url: "/process/playlistRemove.php",
				data:
				"playlistId=" + playlistId +
				"&remove=" + remove,
				success: function(data){}
			});
			$(this).parents('.itemCont:first').fadeOut(350, function(){
				$(this).remove();
			});
			return false;
		});
		$("select[name='sort']").sSelect({ddMaxHeight: '300px'});
	}
	if(location.hash.search("#playlists/") != -1 || location.hash == "#playlists"){
		$.ajax({
			type: "GET",
			url: "/process/playlistExport.php",
			success: function(html){
				var playlistterms = html.split("||||");
				$("#searchplaylists").focus().autocomplete(playlistterms, {
					width: 248,
					scrollHeight: 400
				});
			}
		});
		$("select[name='sort']").sSelect({ddMaxHeight: '300px'});
	}

	$('.rate a.up, .rate a.down').click(function(){
		var obj = this.parentNode;
		$(obj).css('background-image','none');
		$(obj).html("<img height=\"20\" src=\"/images/pl_loader.gif\"/>");
		$.ajax({
			type: "POST",
			url: "/process/rating.php",
			data:
			"itemId=" + $(obj).attr('rel') +
			"&dir=" + $(this).attr('rel'),
			success: function(data){
				var dataArray = data.split('|');
				$(obj).html("<span style=\"color: #" + dataArray[1] + "\">" + dataArray[0] + "</span>");
				$('h4.rating-feature').html("<span style=\"color: #" + dataArray[1] + "\">" + dataArray[0] + "</span>");
			}
		});
		return false;
	});

	if(location.hash.search("#album/") != -1 || location.hash.search("#artist/") != -1){
		$.ajax({
			type: "POST",
			url: "/process/getSimilarArtists.php",
			data:
			"amg_id=" + $("input[name='amg_id']").val() +
			"&classical=" + $("input[name='classical']").val(),
			success: function(data){
				if(data.indexOf('fail') == -1){
					$('#similarArtist .featured-list .opti-loader').slideUp(600);
					$('#similarArtist .featured-list .hidden').html(data);
					$('#similarArtist .featured-list .hidden').slideDown(600);
					refreshInitHeights('#similarArtist .featured-list .hidden');
				}else{
					$('#similarArtist').slideUp(300);
				}
			}
		});
		$('#moreAlbums .ajaxmorelink').click(function(){
			getMoreAlbums();
			return false;
		});
		$('#moreTracks .ajaxmorelink').click(function(){
			getMoreTracks();
			return false;
		});
		getMoreAlbums();
		$('#moreTracks .opti-loader').hide();
	}

	$('#hideBio').hide();
	$('.showLessLink').hide();
}
function getMoreAlbums(){
	$('#moreAlbums .opti-loader').slideDown(100);
	$.ajax({
		type: "POST",
		url: "/process/getMoreAlbums.php",
		data:
		"artist_name=" + $("input[name='artist_name']").val() +
		"&artist_mnid=" + $("input[name='artist_mnid']").val() +
		"&page=" + $("input[name='album_page']").val() +
		"&size=" + $("input[name='size']").val() +
		"&mnId=" + $("input[name='mnId']").val(),
		success: function(data){
			if(data.indexOf('immergent-search-fail') == -1){
				if(data.indexOf('immergent-search-done') != -1){
					$('#moreAlbums .ajaxmorelink').replaceWith("<p style=\"text-align: center; color: #666666\"><em>Sorry, no more albums</em></p>");
					$('#moreAlbums .opti-loader').slideUp(600);
				}else{
					var currpage = $("input[name='album_page']").val();
					$('#moreAlbums .opti-loader').slideUp(600);
					$('#moreAlbums .albums-section').append(data);
					$('#moreAlbums .albums-section .page' + currpage).slideDown(1000);
					refreshInitHeights('#moreAlbums .albums-section .page' + currpage);
					$("input[name='album_page']").val(Number($("input[name='album_page']").val()) + 1);
				}
			}else{
				$('#moreAlbums').slideUp(300);
			}
		}
	});
}
function getMoreTracks(){
	$('#moreTracks .opti-loader').slideDown(100);
	$.ajax({
		type: "POST",
		url: "/process/getMoreTracks.php",
		data:
		"artist_name=" + $("input[name='artist_name']").val() +
		"&artist_mnid=" + $("input[name='artist_mnid']").val() +
		"&page=" + $("input[name='track_page']").val(),
		success: function(data){
			if(data.indexOf('immergent-search-fail') == -1){
				if(data.indexOf('immergent-search-done') != -1){
					$('#moreTracks .ajaxmorelink').replaceWith("<p style=\"text-align: center; color: #666666\"><em>Sorry, no more tracks</em></p>");
					$('#moreTracks .opti-loader').slideUp(600);
				}else{
					var currpage = $("input[name='track_page']").val();
					$('#moreTracks .opti-loader').slideUp(600);
					$('#moreTracks .tracks-section').append(data);
					$('#moreTracks .tracks-section .page' + currpage).slideDown(1000);
					refreshInitHeights('#moreTracks .tracks-section .page' + currpage);
					$("input[name='track_page']").val(Number(currpage) + 1);
				}
			}else{
				$('#moreTracks').slideUp(300);
			}
		}
	});
}

function loadHearWhere(){
	$('#hearWhere').html("<iframe frameborder=\"0\" scrolling=\"no\" allowtransparency=\"true\" name=\"hearWhere\" width=\"384\" height=\"575\" src=\"http://widget.hearwhere.com/widget.php?key=a6cbb07b33cd9731d62fbb2dada08ff9\"></iframe>");
}

function initSearch(){
	if(terms != 0){
		$("#search").focus().autocomplete(terms, {
			width: 248,
			scrollHeight: 400
		});
		$("#inner-search").focus().autocomplete(terms, {
			width: 248,
			scrollHeight: 400
		});
	}else{

	}
}
function insertSearch(keyword, type){
	if(type == "artist" || type == "song" || type == "album"){
		$.ajax({
			type: "POST",
			url: "/process/searchInsert.php",
			data: "keyword=" + keyword  + "&type=" + type,
			success: function(html){}
		});
	}
}
function setGenreFeature(){
	$('.genreFeature .expandcall').click();
}

function loadslideshow(){
	var flashvars = {
		xmlPath: "/photo-machine/photoMachineXML.php"
	};
	var params = {
		wmode: "transparent"
	};
	var attributes = {};
	attributes.id = 'slideshowPlace';
	swfobject.embedSWF("/photo-machine/photoMachine.swf", 'slideshowPlace', "600", "450", "9.0.115", "swf/expressInstall.swf", flashvars, params, attributes);
}
function createCookie(name,value,days) {
	var expires;
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		expires = "; expires="+date.toGMTString();
	}
	else expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}
function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}
function eraseCookie(name) {
	createCookie(name,"",-1);
}
function jsEnabled(){
	if( readCookie('jsenabled') == null){
		createCookie('jsenabled', true, 7);
	}
	if( readCookie('jsenabled') ){
		if( location.pathname != '/'){ //not homepage or already hash url
			location.href = location.protocol + '//' + location.host + '/#' + location.pathname.substr(1);
		}else if( location.hash.length > 1 && location.hash != '#home'){
			eraseCookie('jsenabled');
			$(document).ready(function() {
				loadUrl();
			});
		}else{
			location.hash = "#home";
			$(document).ready(function() {
				loadUrl();
			});
			eraseCookie('jsenabled');
		}
	}
}
function modifyPath(request){
	clearInterval(checkUrl);
	if(request.charAt(0) != '/') //ie work around
		request = '/' + request;
	if(request == '/' || request == '/index.php'){
		location.hash = "#home";
	}else{
		location.hash = '#' + request.substr(1);
	}
	loadUrl();
}
function loadUrl(){
	var request = location.hash.substr(1);
	var check = request.split("sandbox");
	if(check.length > 1){
		$('#container').remove();
		$('#wrapper').html("<div id='loader-img'><img src='/images/logo-ajax.jpg'/><br/><img src='/images/ajax-loader.gif'/></div>");
		window.scrollTo(0, 0);
		$.ajax({
			cache: true,
			type: "GET",
			url: "/",
			data:
			"tpl=sandbox" +
			"&secondaryParam=" + encodeURIComponent(check[1]) +
			"&pageType=aue",
			success: function(html){
				clearInterval(checkUrl);
				$('#loader-img').remove();
				$('#container').remove();
				$('#wrapper').html(html);

				$('#wrapper').ready(function(){
					initHeights();
					pageTracker._trackPageview(trackUrl);
					if($('#search-keyword').length > 0){
						insertSearch(document.getElementById('search-keyword').innerHTML, tpl);
					}
				});

			}
		});
	}else{
		var trackUrl = '/' + request;
		var page = "";
		var sort = "";
		var tags = "";
		var secondaryParam = "";
		var tpl;

		var searchPatternPagination = /((artists-)?(albums-)?search)\/(.*)\/page\/([0-9]+)/;
		var searchPattern = /((artists-)?(albums-)?search)(\/)(.*)/;
		var playlistsPattern = /(playlists-manage|playlists(?!-edit)(?!-create))(\/sort=([rda]))?(\/tags=([0-9,]+))?(\/page=([0-9]+))?(\/st=(.*))?/;

		var result = searchPattern.exec(request);
		var resultPagination = searchPatternPagination.exec(request);
		var resultPlayists = playlistsPattern.exec(request);

		if(result && !resultPagination){
			tpl = result[1];
			secondaryParam = result[5];
		}else if(resultPagination){
			tpl = resultPagination[1];
			secondaryParam = resultPagination[4];
			page = "&page=" + resultPagination[5];
		}else if(resultPlayists){
			tpl = resultPlayists[1];
			if(resultPlayists[3])
				sort = "&sort=" + resultPlayists[3];
			if(resultPlayists[9])
				secondaryParam = resultPlayists[9];
			if(resultPlayists[5])
				tags = "&tags=" + resultPlayists[5];
			if(resultPlayists[7])
				page = "&page=" + resultPlayists[7];
			page = page + sort + tags;
		}else{
			request = request.split('/');
			tpl = request[0];
			if(request.length > 1)
				secondaryParam = request[1];
		}

		$('#container').remove();
		$('#wrapper').html("<div id='loader-img'><img src='/images/logo-ajax.jpg'/><br/><img src='/images/ajax-loader.gif'/></div>");
		window.scrollTo(0, 0);

		secondaryParam = decodeURIComponent(secondaryParam);

		$.ajax({
			type: "GET",
			url: "/",
			data:
			"tpl=" + tpl +
			"&secondaryParam=" + encodeURIComponent(secondaryParam) +
			"&pageType=aue" + page,
			success: function(html){
				clearInterval(checkUrl);
				$('#loader-img').empty();
				$('#container').empty();
				$('#wrapper').html(html);

				$('#wrapper').ready(function(){
					initHeights();
					pageTracker._trackPageview(trackUrl);
					if($('#search-keyword').length > 0){
						insertSearch(document.getElementById('search-keyword').innerHTML, tpl);
					}
				});

			}
		});
	}
}
function checkUrlChange(){
	if(currHash != location.hash){
		clearInterval(checkUrl);
		loadUrl();
	}else if($.browser.msie){
		try{
			var iframeHash = window.frames["ieHistory"].location.search.substr(1);
			if(location.hash.substr(1) != iframeHash && pageIsReady){
				pageIsReady = false;
				location.hash = '#' + iframeHash;
			}
		}catch(e){}
	}
}
function submitSearch(form){
	if(form.search.value == ""){
		return false;
	}else{
		clearInterval(checkUrl);
		location.hash = "#" + form.type.value + encodeURIComponent(htmlspecialchars_decode(form.search.value));
		loadUrl();
		return false;
	}
}
function submitSearchPaginate(form){
	clearInterval(checkUrl);
	var searchParam = form.search.value;
	if(searchParam != ""){
		searchParam = encodeURIComponent(form.search.value) + '/';
	}
	location.hash = "#" + form.type.value + searchParam + "page/" + form.page.value;
	loadUrl();
	return false;
}
/*
 * IE history YUI workaround
 */
var pageIsReady = false;
function historyManager(){
	try{
		pageIsReady = false;
		window.frames["ieHistory"].location.search = '?' + location.hash.substr(1);
	}catch(e){}
}
function iframeReady(){
	pageIsReady = true;
}
function buildHistoryFrame(){
	$('#historyManager').html("<iframe name=\"ieHistory\" width=\"1\" height=\"1\" src=\"http://"+ location.host +"/empty\"></iframe>");
}
function submitProfileEdit(form){
	if(form.bio.value == ""){
		$('#textError').html("Please enter something about yourself.");
		return false;
	}
	
	$('#container').remove();
	$('#wrapper').html("<div id='loader-img'><img src='/images/logo-ajax.jpg'/><br/><img src='/images/ajax-loader.gif'/></div>");
	window.scrollTo(0, 0);

	$.ajax({
		type: "POST",
		url: "process/editProfile.php",
		data: 
		"bio=" + form.bio.value,
		success: function(data){
			if (data.indexOf('success') != -1) {	
				clearInterval(checkUrl);
				location.hash = '#' + 'profile';
				loadUrl();
			}
			else {
				clearInterval(checkUrl);
				location.hash = '#' + 'profile-edit';
				loadUrl();
			}
		}
	});
	return false;
}

function getHearWhereArtist(artist){
	artist = encodeURIComponent(htmlspecialchars_decode(artist));
	var showString = "";
	
	$.ajax({
		type: "POST",
		data: "artist=" + artist,
		url: "/process/hearWhereProxy.php",
		success: function(json){
			var hearWhere = eval('(' + json + ')');
			if(hearWhere.shows.show){
				if(hearWhere.shows.show.length){
					showString = "<ul>";
					for(var i = 0; i < hearWhere.shows.show.length; i++){
						showString += formatShow(hearWhere.shows.show[i]);
					}
					showString += "</ul>";
				}else if(hearWhere.shows.show){
					showString = "<ul>";
					showString += formatShow(hearWhere.shows.show);
					showString += "</ul>";
				}
			}else{
				$('#hearWhereCont').hide();
				return;
			}
			$('#hearWhere').html(showString);
		}
	});
}

function formatShow(obj){
	var showString = "";
	showString += "<li class=\"small\">"
	var t = obj.showTitle;
	var sa = obj.showAddress;
	var scs = obj.showCityState;
	var st = obj.showTime;
	var months = new Array("JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC");
	var days = new Array("SUN","MON","TUE","WED","THU","FRI","SAT");

	var theShow = obj.showDate.split('-');
	var sd = new Date(theShow[0], theShow[1], theShow[2]);
	var day = days[sd.getDay()];
	var date = sd.getDate();
	var month = months[sd.getMonth()];
	sd = day + " " + date + " " + month;

	var where = "<h2><span>";
	if(sa != null && sa != "null"){
		where += sa + "<br/>";
	}
	where += scs + " " + st + "</span></h2>";
	showString += "<h1>" + sd +  "</h1><h2>" + t + "</h2>" + where;
	showString += "</li>"
	return showString;
}

function adjustBlogHeight(height){
	$('#sandbox_iframe').attr('height', height);
}


function htmlspecialchars_decode (string, quote_style) {
    var optTemp = 0, i = 0, noquotes= false;
    if (typeof quote_style === 'undefined') {
        quote_style = 2;
    }
    string = string.toString().replace(/&lt;/g, '<').replace(/&gt;/g, '>');
    var OPTS = {
        'ENT_NOQUOTES': 0,
        'ENT_HTML_QUOTE_SINGLE' : 1,
        'ENT_HTML_QUOTE_DOUBLE' : 2,
        'ENT_COMPAT': 2,
        'ENT_QUOTES': 3,
        'ENT_IGNORE' : 4
    };
    if (quote_style === 0) {
        noquotes = true;
    }
    if (typeof quote_style !== 'number') { // Allow for a single string or an array of string flags
        quote_style = [].concat(quote_style);
        for (i=0; i < quote_style.length; i++) {
            // Resolve string input to bitwise e.g. 'PATHINFO_EXTENSION' becomes 4
            if (OPTS[quote_style[i]] === 0) {
                noquotes = true;
            }
            else if (OPTS[quote_style[i]]) {
                optTemp = optTemp | OPTS[quote_style[i]];
            }
        }
        quote_style = optTemp;
    }
    if (quote_style & OPTS.ENT_HTML_QUOTE_SINGLE) {
        string = string.replace(/&#0*39;/g, "'"); // PHP doesn't currently escape if more than one 0, but it should
        // string = string.replace(/&apos;|&#x0*27;/g, "'"); // This would also be useful here, but not a part of PHP
    }
    if (!noquotes) {
        string = string.replace(/&quot;/g, '"');
    }
    // Put this in last place to avoid escape being double-decoded
    string = string.replace(/&amp;/g, '&');

    return string;
}

