
var current_language='';
var active_menu=null;
var ytplayer=null;

$(document).ready(function () 
{
	//$('#ui-bg').fadeIn("slow");

	// init loader
	loader();
	
	// intro 
	$('#ui-intro').ready (function ()
	{
		ajax_req({
			e: $(this),
			ctx: {header:null, body:'#ui-intro', footer:null},
			header: 'Home',
			method: 'get',
			data: {s: '', c:'menu-home'},
			urldata: null,
			pre_handler: null,
			post_handler: function()
			{
				// intro video
				swfobject.embedSWF(
						'http://www.youtube.com/v/-ia62thj_s4&enablejsapi=1&rel=0&fs=1&autoplay=1&autohide=1&controls=0',
					    'ytvideo', '640', '390', '8',
					    null, null,
					    {allowScriptAccess: 'always', allowFullScreen: 'true'},
					    {id: 'ytplayer'}
				);
				
				set_opacity('#ui-intro',1.0);
				$('#ui-intro').find('.skip').click(function ()
				{
					document.getElementById('ytplayer').stopVideo();
					$('#ui-intro').empty();
					$('#ui-intro').fadeOut('slow');
					$('#menu-vflow').click();
				});

			},
			animate: {header:false, body:false, footer:false}
		});
	});
	
	//$('#ui-content').css({'opacity':1.0});
	$('#content-body-text').css({'opacity':0.7});
	$('#ui-menu').css({'opacity':0.7});
	
	$('#aif-menu li:hover').css('cursor','pointer');
	
	// load galleria
	try {
		Galleria.loadTheme('css/galleria-classic/galleria.classic.js');
	} catch (e)
	{
		alert (e.message);
	}
	
	bind_menu_common_events ();
	bind_menu_events ();
	
	// FIXME remove
	//$('#menu-home').click();

	
});

function onYouTubePlayerReady(playerId) 
{
	ytplayer=document.getElementById("ytplayer");
	ytplayer.addEventListener("onStateChange", "ytStateChange");
}

function ytStateChange (newState)
{
	if (newState==0) $('#ui-intro').find('.skip').click();
}

function loader ()
{
	if ($('#ui-loader').html()!="") return $('#ui-loader');
	
	$('#ui-loader').append('<img src="css/images/ui-loader.gif" alt=""/>');
	$('#ui-loader').addClass('ui-loader');
	return $('#ui-loader');
}

function bind_menu_common_events ()
{

	$('#aif-menu li').click(
		function() 
		{			
			ui_onclick_menu($(this));
			if (active_menu=="menu-photo") $('.slideshow').cycle('destroy');
			active_menu=$(this).attr('id');
			
			/* do not propagate click event */
			return false; 
		}
	);
}

function bind_ajax_req(options)
{	
	$(options['selector']).click(
		function()
		{
			$.extend(options,{e:$(this)});
			ajax_req(options);

			// do not propagate click event 
			return false; 
		}
	);
}

/* get requested page in paged views
 * e: element
 * o: offset (page)
 */
function get_page (e,o)
{
	ajax_req ({
		e: $(e),
		ctx: {body: '#events-container'},
		method: 'get',
		data: {'o': o, show_all_events: true, c: active_menu},
		urldata:"",
		pre_handler: null,				
		post_handler: function()
		{
			set_opacity('#content-body-text',0.7); 
		}
	});
}

/* ajax_req (e, ctx, content, method, data, urldata, pre_handler, post_handler)
 * 
 * options: {
 * 	e: selector ('.class', '#id', $(e) ..)
 * 	ctx: {header: selector, body: selector, footer: selector, error: selector} 
 * 	header: content header html
 * 	footer: content footer html
 * 	method: {'get','post'}
 * 	data: {a:'A', b:'B', ..}
 * 	urldata: "a=A&b=B&.."
 * 	pre_handler: function (opt)
 * 	post_handler: function (opt)
 * }
 */
function ajax_req (options)
{
	// FIXME refactor ??
	var e = options['e'];
	var ctx = options['ctx'];
	var data = options['data'];
	var urldata = options['urldata'];
	var header = options['header']; //e.attr('title');
	var footer = options['footer']; //e.attr('title');
	var method = options['method'];
	var pre_handler = options['pre_handler'];
	var post_handler = options['post_handler'];
	var animate = options['animate'];
	
	if (!header) header=e.attr('title');
	
	if (String(method).toLowerCase() == "get" && !data['p']) data['p']='';
	else data['p']=e.attr('title');
	
	if (String(method).toLowerCase() == "get" && data['o']) data['o']=e.attr('title');
	
	if (String(method).toLowerCase() == "get" && isset(data['show_all_events'])) 
	{
		data['show_all_events'] = (isset(options['selector']))? $('#showAll').hasClass('showAll') : !$('#showAll').hasClass('showAll');
	}

	if (!urldata) urldata="";
	else urldata="&"+urldata;
	
	if (!animate) animate={header:true, body:true, footer:true};
	
	$.ajax({
		method: method, 
		url: "index.php?cp=1" + urldata, 
		data: data,
		beforeSend: function (xhr,settings)
					{
						/* FIXME move to ui-beforeSend(ctx) / show loader	 */
						// ui
						if ($(ctx['footer'] && animate.footer) && animate.footer) $(ctx['footer']).fadeOut('fast');
						if (animate.body) $(ctx['body']).fadeOut('fast');
						if ($(ctx['header']) && animate.header) $(ctx['header']).fadeOut('fast');
						
						var offset = $(ctx['body']).offset();
						if (!offset) offset={top:0, left:0};
						$('#ui-loader').css('left',offset.left + (($(ctx['body']).width()-$('#ui-loader').width())/2));
						$('#ui-loader').css('top',offset.top + (($(ctx['body']).height()-$('#ui-loader').height())/2));
						$('#ui-loader').fadeIn("slow");

						if (pre_handler != null) pre_handler(options);
						
						// FIXME add return??

					},
		error: 		function (xhr, status)
					{
						// FIXME handle error
						if (ctx['error']) $(ctx['error']).html(status);
					},
		success: 	function (html)
					{ 

						$(ctx['body']).html(html);
	
						// google stats
						//_gaq.push(['_trackPageview', '/'+page]);
					},
		complete: 	function()
					{ 
						if ($(ctx['header'])) $(ctx['header']).html(header);
						if ($(ctx['footer'])) $(ctx['footer']).html(footer);
						
						if (post_handler != null) post_handler(options);
						
						$('#ui-loader').fadeOut("slow");
						// FIXME hide loader / move to ui-afterSend
						// ui
						//$('#' + page + '_body .loading').hide("fast");
						if ($(ctx['header']) && animate.header) $(ctx['header']).fadeIn('fast');
						if (animate.body) $(ctx['body']).fadeIn('fast');
						if ($(ctx['footer']) && animate.footer) $(ctx['footer']).fadeIn('fast');
					}
	});
}


function ui_onclick_menu (e)
{
	
	/* do not animate if it's the current menu */
	if (($(e).attr('id') == active_menu || $(e).find('li#'+active_menu).length>0 || $(e).parents('li#'+active_menu).length>0) && $(e).hasClass('state-open')) return;

	var ul = $(e).children('ul');
	var sbl = $(e).siblings('li');
	
	/* toggle icon & close siblings menu */
	sbl.find('span.ui-icon-carat-1-s:visible').toggleClass("ui-icon-carat-1-e ui-icon-carat-1-s");
	sbl.find('ul:visible').slideUp("fast");
	sbl.find('li.state-open').removeClass('state-open');
	
	/* toggle icon & open current menu */
	$(e).children('span:visible').toggleClass("ui-icon-carat-1-e ui-icon-carat-1-s");
	ul.slideDown("fast");
	$(e).addClass('state-open');
}


function set_opacity(e,v)
{
	return $(e).css({'opacity':v});
}

function rand(min,max)
{
	min = Math.floor(min);
    max = Math.floor(max);
    val = max - min + 1;
    return min + Math.floor(val * (Math.random() % 1));
}

function envUnpack (env)
{
	var u="";
	var i=0;
	for (var k in env) 
	{
		u+=k+'='+env[k];
		if (++i < env.length) u+='&';
	}
	return u;
}

function isset (e)
{
	 return (typeof(e) != "undefined")?true:false;
}

function lightbox (selector, options)
{
	if(!options) options={};
	$.extend(options, {
		imageLoading:	'css/lightbox-images/lightbox-ico-loading.gif',
		imageBtnPrev:	'css/lightbox-images/lightbox-btn-prev.gif',
		imageBtnNext:	'css/lightbox-images/lightbox-btn-next.gif',
		imageBtnClose:	'css/lightbox-images/lightbox-btn-close.gif',
		imageBlank:		'css/lightbox-images/lightbox-blank.gif'
	});
	$(selector).lightBox(options);
}

// from jquery-ui
function buildScrollbar (pane,content) 
{
	//scrollpane parts
	var scrollPane = $( pane ),
		scrollContent = $( content );
	
	
	//build slider
	var scrollbar = $( ".scroll-bar", scrollPane ).slider({
		slide: function( event, ui ) {
			if ( scrollContent.width() > scrollPane.width() ) {
				scrollContent.css( "margin-left", Math.round(
					ui.value / 100 * ( scrollPane.width() - scrollContent.width() )
				) + "px" );
			} else {
				scrollContent.css( "margin-left", 0 );
			}
		}
	});
	
	//append icon to handle
	var handleHelper = scrollbar.find( ".ui-slider-handle" )
	.mousedown(function() {
		scrollbar.width( handleHelper.width() );
	})
	.mouseup(function() {
		scrollbar.width( "100%" );
	})
	.append( "<span class='ui-icon ui-icon-grip-dotted-vertical'></span>" )
	.wrap( "<div class='ui-handle-helper-parent'></div>" ).parent();
	
	//change overflow to hidden now that slider handles the scrolling
	scrollPane.css( "overflow", "hidden" );
	
	//size scrollbar and handle proportionally to scroll distance
	function sizeScrollbar() {
		var remainder = scrollContent.width() - scrollPane.width();
		var proportion = remainder / scrollContent.width();
		var handleSize = scrollPane.width() - ( proportion * scrollPane.width() );
		scrollbar.find( ".ui-slider-handle" ).css({
			width: handleSize,
			"margin-left": -handleSize / 2
		});
		handleHelper.width( "" ).width( scrollbar.width() - handleSize );
	}
	
	//reset slider value based on scroll content position
	function resetValue() {
		var remainder = scrollPane.width() - scrollContent.width();
		var leftVal = scrollContent.css( "margin-left" ) === "auto" ? 0 :
			parseInt( scrollContent.css( "margin-left" ) );
		var percentage = Math.round( leftVal / remainder * 100 );
		scrollbar.slider( "value", percentage );
	}
	
	//if the slider is 100% and window gets larger, reveal content
	function reflowContent() {
			var showing = scrollContent.width() + parseInt( scrollContent.css( "margin-left" ), 10 );
			var gap = scrollPane.width() - showing;
			if ( gap > 0 ) {
				scrollContent.css( "margin-left", parseInt( scrollContent.css( "margin-left" ), 10 ) + gap );
			}
	}
	
	//change handle position on window resize
	/*	
	$( window ).resize(function() {
		resetValue();
		sizeScrollbar();
		reflowContent();
	})
	*/;
	//init scrollbar size
	setTimeout( sizeScrollbar, 10 );//safari wants a timeout
}


function init_map(lat, lon) 
{

	var latlng = new google.maps.LatLng(lat, lon);
	var mapOpt = {
	  zoom: 15,
	  center: latlng,
	  mapTypeId: google.maps.MapTypeId.ROADMAP
	};
	var map = new google.maps.Map(document.getElementById("map_canvas"), mapOpt);
	var marker = new google.maps.Marker({
	    position: latlng,
	    map: map, 
	    title:"BeYoga"
	    });
}

/* bind ajax requests to menu */
function bind_menu_events ()
{	/* FIXME remove
	bind_ajax_req({
		selector: '#menu-home', 
		ctx: {header:'#content-header', body: '#content-body', footer: '#content-footer'},
		header: 'Home',
		method: 'get',
		data: {s: '', c:'menu-home'},
		urldata: null,
		pre_handler: null,
		post_handler: function()
		{
			//set_opacity('#content-body-text',0.7);
			$("#ytpl").ytplaylist({playerWidth:640, playerHeight:390, autoPlay:true, addThumbs:false, showRelated:false, player:'yt'});
		}
	});
	*/
	
	bind_ajax_req({
		selector: '#menu-vflow', 
		ctx: {header:'#content-header', body: '#content-body', footer: '#content-footer'},
		header: 'Vinyasa Flow',
		method: 'get',
		data: {s: '', c:'menu-vflow'},
		urldata: null,
		pre_handler: null,
		post_handler: function()
		{
			set_opacity('#content-body-text',0.7);
		}
	});
	
	bind_ajax_req({
		selector: '#menu-about', 
		ctx: {header:'#content-header', body: '#content-body', footer: '#content-footer'},
		header: 'About Anna',
		method: 'get',
		data: {s: '', c:'menu-about'},
		urldata: null,
		pre_handler: null,
		post_handler: function()
		{
			set_opacity('#content-body-text',0.7);
		}
	});
	
	bind_ajax_req({
		selector: '#menu-press', 
		ctx: {header:'#content-header', body: '#content-body', footer: '#content-footer'},
		header: 'Press',
		method: 'get',
		data: {s: '', c:'menu-press'},
		urldata: null,
		pre_handler: null,
		post_handler: function()
		{
			bind_ajax_req({
				selector: '.slideshow', 
				ctx: {header:'#content-header', body: '#content-body', footer: '#content-footer'},
				method: 'get',
				data: {s: '', c:'menu-press', p: true},
				urldata: null,
				pre_handler: null,
				post_handler: function()
				{
					$('#galleria').galleria({
		    			extend:	function(options) 
		    			{
    						this.bind('image', function(e) {
    							$(e.imageTarget).click(this.proxy(function() {
    								this.openLightbox();
    							}));
    						});
			 			}
		    		});
				}
			});
		}
	});
	
	bind_ajax_req({
		selector: '#menu-schedule', 
		ctx: {header:'#content-header', body: '#content-body', footer: '#content-footer'},
		header: 'Schedule',
		method: 'get',
		data: {s: '', c:'menu-schedule'},
		urldata: null,
		pre_handler: null,
		post_handler: function()
		{
			set_opacity('#content-body-text',0.7);
			bind_ajax_req({
				selector: '#showAll', 
				ctx: {body: '#events-container'},
				header: 'Schedule',
				method: 'get',
				data: {s: '', c:'menu-schedule', show_all_events:true},
				urldata: null,
				pre_handler: null,
				post_handler: function(options)
				{
					var e = options['e'];
					$(e).toggleClass('showAll hideAll');
					if ($(e).hasClass('showAll')) 
					{
						$(e).html('Show All');
						$(e).attr('title', 'Show All');
					}
					else if ($(e).hasClass('hideAll'))
					{
						$(e).html('Hide All');
						$(e).attr('title', 'Hide All');
					}

					lightbox('.attachments a');
					set_opacity('#content-body-text',0.7);
				}
			});

			lightbox('.attachments a');
		}
	});
	
	bind_ajax_req({
		selector: '#menu-links', 
		ctx: {header:'#content-header', body: '#content-body', footer: '#content-footer'},
		header: 'Links',
		method: 'get',
		data: {s: '', c:'menu-links'},
		urldata: null,
		pre_handler: null,
		post_handler: function()
		{
			set_opacity('#content-body-text',0.7);
		}
	});
	
	bind_ajax_req({
		selector: '#menu-gallery', 
		ctx: {header:'#content-header', body: '#content-body', footer: '#content-footer'},
		header: 'Gallery',
		method: 'get',
		data: {s: '', c:'menu-gallery'},
		urldata: null,
		pre_handler: null,
		post_handler: function()
		{
			$('.ui-custom-btn').button();
		}
	});
	
	bind_ajax_req({
		selector: '#menu-photo', 
		ctx: {header:'#content-header', body: '#content-body', footer: '#content-footer'},
		header: 'Photo',
		method: 'get',
		data: {s: 'menu-gallery', c:'menu-photo'},
		urldata: null,
		pre_handler: null,
		post_handler: function()
		{
		    $('.slideshow').cycle({
		    		fx: 'fade',
		    		speed: 2000,
		    		random: 0,
		    		height:"auto",
		    		fit:1,
		    		timeoutFn:  function(currSlideElement, nextSlideElement, options, forwardFlag) {return rand(3800, 7600);}
		    });
		    
			bind_ajax_req({
				selector: '.slideshow,.album-icon', 
				ctx: {header:'#content-header', body: '#content-body', footer: '#content-footer'},
				header: '',
				method: 'get',
				data: {s: 'menu-gallery', c:'menu-photo', p:true},
				urldata: null,
				pre_handler: null,
				post_handler: function()
				{
		    		$('#galleria').galleria({
		    			extend:	function(options) 
		    			{
		    				this.bind('image', function(e) {
		    					$(e.imageTarget).click(this.proxy(function() {
		    						this.openLightbox();
	    						}));
	    					});
	    				}
		    		});
		    	}
			});
		}
	});
	
	bind_ajax_req({
		selector: '#menu-video', 
		ctx: {header:'#content-header', body: '#content-body', footer: '#content-footer'},
		header: '',
		method: 'get',
		data: {s: 'menu-gallery', c:'menu-video'},
		urldata: null,
		pre_handler: null,
		post_handler: function()
		{
			$("#ytpl").ytplaylist({playerWidth:640, playerHeight:390, autoPlay:false, addThumbs:true, player:'yt'});
			buildScrollbar('.scroll-pane', '.scroll-content');
		}
	});
	
	bind_ajax_req({
		selector: '#menu-contacts', 
		ctx: {header:'#content-header', body: '#content-body', footer: '#content-footer'},
		header: '',
		method: 'get',
		data: {s: '', c:'menu-contacts'},
		urldata: null,
		pre_handler: null,
		post_handler: function()
		{
			set_opacity('#content-body-text',0.7);
		}
	});
		
}

