debug = 0;

var SOCO = {};
var pageTitle = document.title;


/**
 * Global functions
 */
function trackPageview(href) {
	var href = href.toLowerCase();

	if (debug > 0) {
		console.log('pageTracker', '_trackPageview('+href+')');
	}

	if (window.pageTracker) {
        pageTracker._trackPageview(href);
	}
}

function trackEvent(category, action, label) {
	if (debug > 0) {
		console.log('pageTracker', '_trackEvent('+category+', '+action+', '+label+')');
	}

	if (window.pageTracker) {
		// _trackEvent(category, action, opt_label, opt_value)
        pageTracker._trackEvent(category, action, label);
	}
}

function cleanSplit(str, separator){
	if(!str)return new Array();
	var a=str.split(separator),i=a.length;
	while(i>=0){if(a[i]=='')a.splice(i,1);i--;}
	return a;
}

function handleElement(href, tracking) {
	var parts = cleanSplit(href, '/');
	var el = parts[1];

	// track page view
	if (tracking) {
        trackPageview(href);
	}

	// scroll to element
	if ($('#' + el).length > 0) {
		elTop = $('#' + el).offset().top;

		if($.browser.safari){
			bodyEl = $("body")
		} else{
			bodyEl = $("html")
		}

   		bodyEl.animate({scrollTop: elTop}, 400);
	}
}

/**
 * SWFAddress
 */
SOCO.swfAddressComponents = function() {
	SWFAddress.addEventListener(SWFAddressEvent.CHANGE, handleSWFAddress);

	function handleSWFAddress(event) {
		var seourl = '#' + event.value;
		var url = event.value + '.aspx';
		var parts = cleanSplit(seourl, '/');

		if (seourl == '#/') {
			return false;
		}

		// handle page categorie
		if (seourl.match('home') || seourl.match('drinks') || seourl.match('story')) {
			handleElement(seourl, true);
		}
		
		// handle drinks categorie, e.g. "/#/drinks/rock-n-shots"
		if (seourl.match('cocktails') || seourl.match('longdrinks') || seourl.match('rock-n-shots')) {
			p = (parts.length == 3) ? parts[parts.length-1] : parts[3];
			
			if (!seourl.match('/drinks/rezepte/')) {
				$('ul.drinksList').fadeOut(150);
				$('ul#' + p).fadeIn(500);
			} else {
				$('ul.drinksList').hide();
				$('ul#' + p).show();
			}

			$('ul#drinksNav li').removeClass('selected');
			$('ul#drinksNav li.' + p).addClass('selected');
		}

		// handle shadowbox
		if(seourl.match('/drinks/rezepte/') || seourl.match('coupon') || seourl.match('creative')) {
			var $anchor = $("a[href='"+url+"']");

			// open Shadowbox
			$anchor.click();
		}

		return false;
	}
};


/**
 * jCarousel
 */
SOCO.jCarouselComponents = function() {
	function initCallback(carousel) {
	    // Pause autoscrolling if the user moves with the cursor over the clip.
	    carousel.clip.hover(function() {
	        carousel.stopAuto();
	    }, function() {
	        carousel.startAuto();
	    });
	};
	
	function onBeforeAnimation(carousel, item, idx, state) {
		// Add image reflection
		$(item).find('img').reflect({
			height: 0.2,
			opacity: 0.4
		});
	}
	
	$('#teaser-row').jcarousel({
        auto: 3,
		wrap: 'circular',
		scroll: 1,
		animation: 'slow',
		buttonNextHTML: null,
		buttonPrevHTML: null,
        initCallback: initCallback,
		itemVisibleInCallback: {
            onBeforeAnimation: onBeforeAnimation
        }
    });
};


/**
 * Shadowbox
 */
SOCO.shadowboxComponents = function() {
	var tpl = [];
	tpl.push('<div id="sb-container">');
	tpl.push('	<div id="sb-overlay"></div>');
	tpl.push('	<div id="sb-wrapper">');
	tpl.push('		<div id="sb-title">');
	tpl.push('			<div id="sb-title-inner"></div>');
	tpl.push('		</div>');
	tpl.push('		<div id="sb-wrapper-inner">');
	tpl.push('			<div id="sb-body">');
	tpl.push('				<div id="sb-body-inner"></div>');
	tpl.push('				<div id="sb-loading">');
	tpl.push('					<div id="sb-loading-inner"><span>{loading}</span></div>');
	tpl.push('				</div>');
	tpl.push('			</div>');
	tpl.push('		</div>');
	tpl.push('		<div id="sb-info">');
	tpl.push('			<div id="sb-info-inner">');
	tpl.push('				<div id="sb-counter"></div>');
	tpl.push('				<div id="sb-nav">');
	//tpl.push('				<a id="sb-nav-close" title="{close}" onclick="Shadowbox.close()"></a>');
	tpl.push('					<a id="sb-nav-next" title="N&auml;chter Drink" onclick="Shadowbox.next()"></a>');
	tpl.push('					<a id="sb-nav-play" title="{play}" onclick="Shadowbox.play()"></a>');
	tpl.push('					<a id="sb-nav-pause" title="{pause}" onclick="Shadowbox.pause()"></a>');
	tpl.push('					<a id="sb-nav-previous" title="Vorheriger Drink" onclick="Shadowbox.previous()"></a>');
	tpl.push('				</div>');
	tpl.push('			</div>');
	tpl.push('		</div>');
	tpl.push('		<a id="sb-nav-close" title="Schliessen" onclick="Shadowbox.close()"></a>');
	tpl.push('	</div>');
	tpl.push('</div>');

	Shadowbox.skin.markup = tpl.join('');

	Shadowbox.init({
		overlayColor: '#000',
		overlayOpacity: 0.3,
		viewportPadding: -1,
		displayCounter: false,
		modal: true,
		handleOversize: 'none',
		onOpen: function(item) {
			if ($("#contentNote").length > 0) {
				$('#contentNote').remove();
			}
        },
		onFinish: function() {
			var url = SWFAddress.getValue();

			if (url.match('/drinks/rezepte/')) {
				var $anchor = Shadowbox.getCurrent().link;
				var href = $anchor.pathname;
				var path = href.substr(0, href.length-5); // "/drinks/rezepte/cocktails/caipi.aspx" to "/drinks/rezepte/cocktails/caipi"
				var parts = cleanSplit('#' + path, '/');
				// var text = $anchor.text;
				var text = $anchor.firstChild.innerHTML;

				SWFAddress.setValue(path);
				SWFAddress.setTitle(text + ' - ' + pageTitle);

				// set body class
			    $('iframe#sb-player').load(function() {
					var id = parts[parts.length-1];
					$(this).contents().find('body').attr({'id' : id});

			    	return false;
			    });
			}

			// Added hint to Creative Teaser
			if (url.match('creative')) {
				$('#sb-nav').append('<p id="contentNote" style="color:#fff6e9;text-indent:20px;font-family:Georgia,serif;font-size:15px;">MACH DICH BEREIT: WEITERE INFORMATIONEN ZUM CREATIVE EXCHANGE KOMMEN SCHON BALD.</p>');
			}
		}
	});
};


/**
 * Navigation
 */
SOCO.navigationComponents = function() {
	/*
	$('ul.nav a').not('ul.nav li.photos a, ul.nav li.creative a').bind({
		click: function() {
			var href = $(this).attr('href');
			var path = $(this).attr('href').substr(1);
			var text = $(this).text();

			if(path == SWFAddress.getValue()) {
				handleElement(href, false);
			} else {
				SWFAddress.setValue(path);
				SWFAddress.setTitle(text + ' - ' + pageTitle);
			}

			return false;
		}
	});
	*/
	
	$('ul.drinksList a, a#couponLink').bind({
		click: function() {
			var href = $(this).attr('href');
			var path = href.substr(0, href.length-5); // e.g. "/drinks/rezepte/cocktails/caipi.aspx" to "/drinks/rezepte/cocktails/caipi"
			var text = $(this).find('span').text();

			SWFAddress.setValue(path);
			SWFAddress.setTitle(text + ' - ' + pageTitle);

			return false;
		}
	});

	$("ul.drinksList li").hover(
		function () {
			$(this).addClass('hover');
		},
		function () {
			$(this).removeClass('hover');
		}
	);

};


/*
 * Header download modal
 */
SOCO.downloadModal = function() {
	var oModal = $('#downloadModal');
	
	$('#header a.download').bind({
		click: function(e) {
			oModal.toggle();
			e.preventDefault();
		},
		mouseenter: function() {
			// oModal.show();
		}
	});
	
	$('.container, #downloadModal a').bind('click', function (e) {
		if ($(e.target).is('#header a.download')) {
			return false;
		}
		oModal.hide();
	});
};

String.prototype.supplant = function (o) {
    return this.replace(/{([^{}]*)}/g,
        function (a, b) {
            var r = o[b];
            return typeof r === 'string' || typeof r === 'number' ? r : a;
        }
    );
};


/**
 * Additional Tracking
 */
SOCO.additionalTracking = function() {
	// share buttons
	$('ul.share-box a, div.tooltip-share span').bind({
		click: function() {
			var href = '#/share/' + $(this).text();
			//trackPageview(href);
			trackEvent('Tooltip', 'Share', href);
		}
	});

	$('ul#teaser-row a').not('ul#teaser-row a.fifth').bind({

		click: function() {
			var href = '#/teaser/' + $(this).attr('href');
			trackEvent('Teaser', 'Clicked', href);
		}
	});
};


/**
 * Story
 */
SOCO.storyComponents = function() {
	var templates = {
		historyItem : '<div class="story date-{className}"><p>{description}</p></div>'
	};

	loadData('/style/js/dataStory.json', initHistory);

	function loadData(url, callback) {
		//console.log("load data");
		$.getJSON(url, {}, callback);
	}

	function initHistory(data, textStatus) {
		//console.log("initStory", textStatus);
		if (textStatus === 'success') {
			var historyItems = [];
			$.each(data.story, function(i, item) {
				//console.log(item);
				historyItems.push(templates.historyItem.supplant(item));
			});
			$('#historypanes .items').append(historyItems.join(''));
		}
	}

	 var api = $("#historypanes").scrollable({
		 onSeek: function()  {
 			var position = this.getIndex();
			//console.log(position);
			if (position == "0") {
				$(".story-nav .prev").addClass("disabled");
			} else {
				$(".story-nav .prev").removeClass("disabled");
			}
			if (position == "12") {
				$(".story-nav .next").addClass("disabled");
			} else {
				$(".story-nav .next").removeClass("disabled");
			}

			// track page view
			var href = $("#history-tabs .current").text();
        	trackPageview('#/story/' + href);
        }
	}).navigator({
		navi: "#history-tabs",
		naviItem: 'span',
		activeClass: 'current'
	});
	$(".story-nav span").mouseover(function () {
		$(this).addClass("high");
	});
	$(".story-nav span").mouseleave(function () {
		$(this).removeClass("high");
	});

	$(".story-nav .prev").addClass("disabled");

	$("#history-tabs #t1 span").addClass("current");

	$("#history-tabs li span").mouseover(function () {
		$(this).toggleClass("active-hover");
	});
	$("#history-tabs li span").mouseout(function () {
		$(this).toggleClass("active-hover");
	});
};

/**
 * IOS Components
 */
SOCO.removeForIos = function() {
	var deviceAgent = navigator.userAgent.toLowerCase();
	var agentID = deviceAgent.match(/(iphone|ipod|ipad)/);
	if (agentID) {
 		$('#teaser-row .hide-ios').remove();
	}
};

SOCO.shadowboxComponents();

$(function() {
	$('a button').bind('click', function() {
		var oIstance = $(this).closest('a');
		
		if (oIstance.attr('rel').length) {
			oIstance.trigger('click');
		} else {
			window.location = oIstance.attr('href');
		}
	});

	SOCO.swfAddressComponents();
	SOCO.removeForIos();
	SOCO.jCarouselComponents();
	SOCO.navigationComponents();
	SOCO.downloadModal();
	SOCO.additionalTracking();
	
	if ($('#history-page').length) {
		SOCO.storyComponents();		
	}
});
