/*

Brillobox
www.brillobox.net
4104 Penn Avenue, Pittsburgh PA

core.js
Zach Raffensperger (www.zachraffensperger.com)

*/

// jquery.cookie.js (http://www.stilbuero.de/)
jQuery.cookie=function(key,value,options){if(arguments.length>1&&(value===null||typeof value!=="object")){options=jQuery.extend({},options);if(value===null){options.expires=-1;} if(typeof options.expires==='number'){var days=options.expires,t=options.expires=new Date();t.setDate(t.getDate()+days);} return(document.cookie=[encodeURIComponent(key),'=',options.raw?String(value):encodeURIComponent(String(value)),options.expires?'; expires='+options.expires.toUTCString():'',options.path?'; path='+options.path:'',options.domain?'; domain='+options.domain:'',options.secure?'; secure':''].join(''));} options=value||{};var result,decode=options.raw?function(s){return s;}:decodeURIComponent;return(result=new RegExp('(?:^|; )'+encodeURIComponent(key)+'=([^;]*)').exec(document.cookie))?decode(result[1]):null;};

// jquery.hoverIntent.js r5 (Brian Cherne, http://cherne.net/brian/resources/jquery.hoverIntent.html)
(function($){$.fn.hoverIntent=function(f,g){var cfg={sensitivity:5,interval:100,timeout:0};cfg=$.extend(cfg,g?{over:f,out:g}:f);var cX,cY,pX,pY;var track=function(ev){cX=ev.pageX;cY=ev.pageY;};var compare=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);if((Math.abs(pX-cX)+Math.abs(pY-cY))<cfg.sensitivity){$(ob).unbind("mousemove",track);ob.hoverIntent_s=1;return cfg.over.apply(ob,[ev]);}else{pX=cX;pY=cY;ob.hoverIntent_t=setTimeout(function(){compare(ev,ob);},cfg.interval);}};var delay=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);ob.hoverIntent_s=0;return cfg.out.apply(ob,[ev]);};var handleHover=function(e){var p=(e.type=="mouseover"?e.fromElement:e.toElement)||e.relatedTarget;while(p&&p!=this){try{p=p.parentNode;}catch(e){p=this;}}if(p==this){return false;}var ev=jQuery.extend({},e);var ob=this;if(ob.hoverIntent_t){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);}if(e.type=="mouseover"){pX=ev.pageX;pY=ev.pageY;$(ob).bind("mousemove",track);if(ob.hoverIntent_s!=1){ob.hoverIntent_t=setTimeout(function(){compare(ev,ob);},cfg.interval);}}else{$(ob).unbind("mousemove",track);if(ob.hoverIntent_s==1){ob.hoverIntent_t=setTimeout(function(){delay(ev,ob);},cfg.timeout);}}};return this.mouseover(handleHover).mouseout(handleHover);};})(jQuery);

// init
var speed 		= 1000;
var removeLink	= '<a href="#close" class="close">Close</a>';
var loadingHTML	= '<span id="loading"><img src="/assets/i/loading_lg_bl.gif" width="16" height="16" alt="Loading" /></span>';
var loading		= false;

// adds loading bar
function addLoading(element) {
	element.css('position', 'relative');
	element.append(loadingHTML);
	return;
}

// removes loading bar
function removeLoading(element) {
	element.find('#loading').remove();
	return;
}	

$(document).ready(function() {

	// feedback btn
	$('#feedback_btn').live('click', function() {
		$.ajax({
			url: '/home/_feedback/',
			dataType: 'html',
			success: function(data) {$('body').append(data);}
		});
		return false;
	});
	$('#feedback_close').live('click', function() { $('#feedback').remove(); return false; });

	// button enlarge links
	$('.photo .btn-i').live('click', function() {
		photo = $(this).parent();
		btn = $(this);
		if (photo.data('enlarged') == true) {
			photo.animate({'width': photo.data('oWidth'), 'height': photo.data('oHeight')}, speed/4, '', function() {
				photo.css('background-image', photo.data('oBG'));
			});
			photo.data('enlarged', false);
			btn.addClass('expand').removeClass('collapse');
			return false;
		}
		var img = new Image();
		addLoading(photo);
		img.onload = function() {
			photo.data('enlarged', true);
			btn.addClass('collapse').removeClass('expand');
			removeLoading(photo);
			photo.data('oWidth', photo.width());
			photo.data('oHeight', photo.height());
			photo.data('oBG', photo.css('background-image'));
			photo.css('background-image', 'url(' + img.src + ')');
			photo.animate({'width': '645px', 'height': '475px'}, speed/2, '', function() {});}
		img.onerror = function() {
			removeLoading(photo);
			alert("Error loading image.");
		}	
		img.src = photo.prop('rel');
		return false;
	});


	// event fields
	function expandField(element, entry_id, json_url, field) {
		boxID = 'expand_' + entry_id + '_' + field;
		if (loading === true || element.length == 0 || json_url == '') return false;
		if ($('#' + boxID).length == 1) {
			closeField($('#' + boxID));
			return false;
		}
		loading = true;
		addLoading(element);
		url = json_url + entry_id;
		url = url.replace('//','/');
		$.getJSON(url, function(data) {
			removeLoading(element);
			b = data['b'];
			//l = data['l'];
			content = data[entry_id][field];
			element.parent().parent().after('<span class="unit" style="display: none;" id="' + boxID + '">' + b + content + '<p>' + removeLink + '</p></div>');
			try {FB.XFBML.parse(document.getElementById(boxID));} catch(e) {console.log(e);}
			$('#' + boxID).fadeIn(speed);
			loading = false;
			return data;
		});
	}
	function closeField(element) {
		element.fadeOut(speed/2, function() {$(this).remove();});
		return;
	}
	$('.close').live('click', function() {
		closeField($(this).parent().parent());
		return false;
	});
	$('.share').click(function() {
		expandField($(this), $(this).prop('rel'), '/events/json/', 'event_share');
		return false;
	});
	$('.more').click(function() {
		expandField($(this), $(this).prop('rel'), '/events/json/', 'event_description');
		return false;
	});
	$('.poster').click(function() {
		expandField($(this), $(this).prop('rel'), '/events/json/', 'event_poster');
		return false;
	});
	$('.youtube').click(function() {
		expandField($(this), $(this).prop('rel'), '/events/json/', 'event_youtube');
		return false;
	});
	
	// open external links with "http..." in new windoe
	//$('a[href^=http]').click(function() {
	//	return true; // disabled
	//	var destination = $(this).prop('href');
	//	if (confirm("You are now leaving Brillobox.com. Close the new window to return. Click cancel to remain on our website. ")) window.open(destination);
	//	return false;
	//});
	
	var player 			= $("#jplayer");
	var trackContainer 	= $('.tracks');
	var tracks 			= trackContainer.find('a');
	var forward 		= $('#forward');
	var reverse 		= $('#reverse');
	var volumeCookie	= 'brillobox_volume';
	var cookieOptions 	= {path: '/'};
	var vol				= 0.5;//($.cookie(volumeCookie) == undefined) ? 0.5 : $.cookie(volumeCookie);
	
	//if ($.cookie(volumeCookie) == undefined) {
	//	$.cookie(volumeCookie, vol, cookieOptions);
	//}
	
	player.jPlayer({
		ready: function () {
			if (tracks.length > 0) {tracks.first().trigger("click");} else {$('body').find('.track').first().trigger("click");}
		},
		swfPath: "/assets/Jplayer.swf",
		supplied: "mp3",
		volume: vol,
		preload: "auto",
		//errorAlerts: true,
		backgroundColor: 'transparent',
		cssSelectorAncestor: "",
		cssSelector: {
			"play" : "#play",
			"pause" : "#pause",
			"stop" : "#stop",
			"seekBar" : "#p-load",
			"videoPlay" : "",
			"playBar" : "#p-play",
			"mute" : "#v-min",
			"unmute" : "#v-max",
			"volumeBar" : "#volume",
			"volumeBarValue" : "#v-value",
			"currentTime" : "#p-time",
			"duration" : "#p-total"
		}
	});
	tracks.click(function() {
		changeTrack($(this).prop('rel'));
		return false;
	});
	$('.track').click(function() {
		changeTrack($(this).prop('rel'));
		return false;
	});
	forward.click(function() {
		next = jQuery.data(player, 'forward');
		if (next == "") tracks.first().trigger('click');
		changeTrack(next);
		return false;
	});
	reverse.click(function() {
		previous = jQuery.data(player, 'reverse');
		if (previous == "") tracks.last().trigger('click');
		changeTrack(previous);
		return false;
	});
	player.bind($.jPlayer.event.volumechange, function(event) {
		//var vol = event.jPlayer.status.volume;
		//$.cookie(volumeCookie, vol, cookieOptions); 
	});
	player.bind($.jPlayer.event.play, function(event) {
		link = $('a[rel="' + jQuery.data(player, 'current') + '"]');
		link.addClass('pause').removeClass('play');
		jQuery.data(player, 'playing', true);
		
	});
	player.bind($.jPlayer.event.pause, function(event) {
		link = $('a[rel="' + jQuery.data(player, 'current') + '"]');
		link.addClass('play').removeClass('pause');
		jQuery.data(player, 'playing', false);
	});
	player.bind($.jPlayer.event.stop, function(event) {
		jQuery.data(player, 'playing', false);
	});
	function changeTrack(entry_id) {
		console.log('Current: ' + jQuery.data(player, 'current'));
		prevLink = $('a[rel="' + jQuery.data(player, 'current') + '"]');
		if (jQuery.data(player, 'current') == entry_id) {
			if (jQuery.data(player, 'playing') == true) {player.jPlayer("pause");} else {player.jPlayer("play");}
			removeLoading(prevLink);
			return false;
		}
		player.jPlayer("pause");
		prevLink.addClass('current');
		newLink = $('a[rel="' + entry_id + '"]');
		addLoading(newLink);
		$.getJSON('/music/json/' + entry_id, function(data) {
			artist = data[entry_id]['music_artist'];
			title = data[entry_id]['title'];
			$('#player').find('#track').html(artist + ': ' + title);
			player.jPlayer('setMedia', { 
				mp3: data[entry_id]['music_file']
			});
			jQuery.data(player, 'current', entry_id);
			if (jQuery.data(player, 'current') != undefined && jQuery.data(player, 'reverse') != undefined) player.jPlayer('play');
			jQuery.data(player, 'forward', data['next']);
			jQuery.data(player, 'reverse', data['previous']);
			removeLoading(newLink);
			newLink.addClass('current');
			return false;
		});
	}


	// input content hide/restore and highlighting
	var inputs = $("input, textarea");
	var inputDefaults = [];
	inputs.each(function() {
		if ($(this).prop('title') != '') inputDefaults[inputs.index(this)] = $(this).prop('title');
	});
	inputs.focus(function() {
		if ($(this).prop('readonly') == true) return false;
		c = $(this).parent();
		c.addClass('focus');
		tag = $(this).get(0).tagName;
		d = inputDefaults[inputs.index(this)];
		o = $(this).val();
		if (tag == 'SELECT') {return;} else if (tag == 'INPUT') {
			if (d == o) $(this).val('');
		} else if (tag == 'TEXTAREA') {
			if (d == o) $(this).text('');
		}
	});
	inputs.blur(function() {
		if ($(this).prop('readonly') == true) return false;
		c = $(this).parent();
		c.removeClass('focus');
		tag = $(this).get(0).tagName;
		d = inputDefaults[inputs.index(this)];
		o = $(this).val();
		if (tag == 'SELECT') {return;} else if (tag == 'INPUT') {
			if (o == '' || o == ' ') $(this).val(d);
		} else if (tag == 'TEXTAREA') {
			if (o == '' || o == ' ') $(this).text(d);
		}
	});

});
