if(!String.prototype.trim) {
	String.prototype.trim = function() { return $.trim(this); };
}

function setupTail() {
	var mapClassToPng = { 'concorso' : 'tail-blue.png', 'blog' : 'tail-orange.png', 'support' : 'tail-red.png', 'areariservata' : 'tail-green.png' };
	var selectedMenuItemClass = 'selected-menu-item',
		menuItemsSelector = '#mainNav li',
		aMenuItems = $(menuItemsSelector),
		tailPng,
		$tail;
	var $pagewidthDiv = $('.pagewidth');
	aMenuItems.each(function() {
		var id = $(this).attr('id');
		if(id) {
			if($pagewidthDiv.hasClass(id)) {
				tailPng = mapClassToPng[$(this).closest('ul').attr('class').trim()];
				if(tailPng) {
					$tail = $('<div style="height:36px;width:100%;background:url(images/' + tailPng + ');background-position: top right;position:absolute;top:0;right:36px;z-index:-5;background-repeat:no-repeat"></div>');
					$(this).addClass(selectedMenuItemClass);
					$tail.css('top', $(this).offset().top);
					$('body').append($tail);
					return false;
				}
			}
		}
	});
}

function setupBlogpostMouseover() {
	var blogpostSelector = '#latest-blogpost .blogpost',
		blogpostSubsectionsSelector = blogpostSelector + '>section', 
		onHoverBackground = 'url(http://www.samsungyoungdesignaward.com/images/aside-gnd.gif)',
		oldBackground;
	$(blogpostSelector)
		.hover(function() {
			$(blogpostSubsectionsSelector).css('background-image', onHoverBackground);
		},
		function() {
			$(blogpostSubsectionsSelector).css('background-image', 'none');
		});
}

function setupPreviousEditions() {
	var yearSelector = 'ul.previous-editions > li',
		selectedYearClass = 'selected';
		$(yearSelector).bind('click mouseover', function() {
			if($(this).hasClass(selectedYearClass)) {
				return;
			}
			$(yearSelector).filter('.' + selectedYearClass).removeClass(selectedYearClass);
			$(this).addClass(selectedYearClass);
		});
}


function setupPanes(paneContainerSelector, homeMainSelector, homeNavSelector, panesSelector, menuItemsTextSelector, paneColors) {
	var slideTime = 3000,
		currentPaneIndex = 0,
		prevBottom = 0,
		$paneContainer = $(paneContainerSelector),
		$panes = $(panesSelector),
		$homeNav = $(homeNavSelector),
		$homeMain = $(homeMainSelector),
		$menuItems = $(menuItemsTextSelector);
	$homeMain.css({ 'background-color' : paneColors[$panes.eq(currentPaneIndex).attr('id')].bgColor });
	$menuItems.eq(0).css({ 'color' : paneColors[$panes.eq(currentPaneIndex).attr('id')].textColor });
	$.tools.tabs.addEffect('syda2011', function(tabIndex, done) {
		$paneContainer.stop(true, false);
		$homeMain.stop(true, false);
		$menuItems.stop(true, false);
		if(currentPaneIndex == tabIndex) { return; }
		var i, panes = this.getPanes(),
			newContainerPaneTop = 0,
			newBackgroundColor = paneColors[panes.eq(tabIndex).attr('id')].bgColor,
			newMenuItemTextColor = paneColors[panes.eq(tabIndex).attr('id')].textColor;
		for(i = 0; i < tabIndex; i++) {
			newContainerPaneTop -= panes.eq(i).outerHeight();
		}
		$paneContainer.animate({ top: newContainerPaneTop }, slideTime/5, 'easeOutExpo');
		$homeMain.animate({ 'background-color': newBackgroundColor }, slideTime*2, 'easeOutExpo');
		$menuItems.eq(tabIndex).css({ 'color' : newMenuItemTextColor });
		$menuItems.filter(function(index){ return index != tabIndex; }).css({ 'color' : '#FFF' });
		currentPaneIndex = tabIndex;
		done.call();
	});
	$homeNav.tabs(panesSelector, { effect: 'syda2011', rotate: true, tabs: 'li' });
}

function setupJuryPane(juryPaneSelector, juryMemberClass) {
	var JURY_PIC_ZOOM_TIME = 300,
		K_ESC = 27,
		JURY_PANE_EVENT_NAMESPACE = 'jury-pane',
		zoomed = false,
		zooming = false,
		zoomedImg = new Image(),
		$zoomedImg = $(zoomedImg),
		$juryPane = $(juryPaneSelector),
		$juryOverlay = $(document.createElement('div')),
		overlayProperties = { opacity: '0.75', background: '#000', position: 'absolute', left: 0, top: 0, width: $juryPane.width(), height: $juryPane.height() };
	$juryOverlay.css(overlayProperties);
	$(juryPaneSelector + ' ' + juryMemberClass).click(function(){
		if(zooming || zoomed) { return; }
		zooming = true;
		var ZOOMIN_FACTOR = 1.32,
			img = $(this).children('img').eq(0),
			imgWidth = img.width(), imgHeight = img.height(),
			imgDefaultCoords = { left: img.position().left + img.parent().position().left, top: img.position().top + img.parent().position().top, width: imgWidth, height: imgHeight }, 	imgCenter = { x: imgDefaultCoords.left + Math.round(img.width()/2), y: imgDefaultCoords.top + Math.round(img.height()/2) },
			zoominSize = { width: imgWidth * ZOOMIN_FACTOR, height: imgHeight * ZOOMIN_FACTOR },
			zoominPos = { top: Math.max(0, imgCenter.y - Math.round(zoominSize.height/2)), left: Math.max(0, imgCenter.x - Math.round(zoominSize.width/2)) };
		zoomedImg.src = img.get(0).src;
		$zoomedImg.data('defaultCoords', imgDefaultCoords);
		$zoomedImg.css('position', 'absolute').css(imgDefaultCoords);
		$juryPane.append($juryOverlay);
		$juryOverlay.click(function(){ if(zoomed) { $zoomedImg.click(); } });
		$juryPane.append($zoomedImg);
		function closeOverPic(){
			if(zooming) { return; }
			if(zoomed) {
				zooming = true;
				imgDefaultCoords = $(this).data('defaultCoords');
				$(this).animate({ width: imgDefaultCoords.width, height: imgDefaultCoords.height, top: imgDefaultCoords.top, left: imgDefaultCoords.left }, JURY_PIC_ZOOM_TIME, 'easeOutExpo', function() {
					$(this).remove();
					$juryOverlay.remove();
					$(document).unbind('.' + JURY_PANE_EVENT_NAMESPACE);
					zoomed = false;
					zooming = false;
				});
			}
		}
		$zoomedImg.click(closeOverPic);
		$zoomedImg.animate({ top: zoominPos.top, left: zoominPos.left, width: zoominSize.width, height: zoominSize.height }, JURY_PIC_ZOOM_TIME, 'easeOutExpo', function(){
			zoomed = true;
			zooming = false;
			var that = this;
			$(document).bind('keydown.' + JURY_PANE_EVENT_NAMESPACE, function(eventObject) {
				if(eventObject.which == K_ESC) { closeOverPic.call(that); }
			});
			$(document).bind('click.' + JURY_PANE_EVENT_NAMESPACE, function(eventObject) { closeOverPic.call(that); });
		});
	});
}

function setupTweet() {
	var TWEET_FADE_TIME = 100,
		$tweet = $('.right-column #seguici ul#tweet'),
		$tweetIcon = $('#twitter-icon img'),
		tweetIconBackground = 'url("../images/twitter-hover.png") 0 0 no-repeat';
	$tweetIcon.hover(function() {
		if($tweet.is(':animated')) { return; }
		$tweetIcon.css('background', tweetIconBackground);
		$tweet.fadeIn(TWEET_FADE_TIME);
	},
	function(e) {
		if(isOver(e, $tweet)) { return; }
		$tweet.fadeOut(TWEET_FADE_TIME);
		$tweetIcon.css('background-image', 'none');
	});
	$tweet.hover(function() {},
	function(e) {
		if($tweet.is(':animated') || isOver(e, $tweetIcon)) { return; }
		$tweet.fadeOut(TWEET_FADE_TIME);
		$tweetIcon.css('background-image', 'none');
	});
	function isOver(e, $x) {
		return (e.pageX >= $x.offset().left && e.pageX <= $x.offset().left + $x.width()
		&& e.pageY >= $x.offset().top && e.pageY <= $x.offset().top + $x.height());
	}
}

function setupLoginForm(showError) {
	var LOGIN_ANIMATION_TIME = 320,
		$submitButton = $('.login-form .submitForm'),
		$registerButton = $('.login-form .register'),
		$loginViewport = $('.login-viewport'),
		$loginForm = $('.login-form'),
		$loginHead = $('.login-head'),
		$loginBody = $('.login-body'),
		$forgotPassword = $('.forgot-password'),
		$slash = $('.login-viewport .slash'),
		$usernameField = $('.login-form input[name=login_mail]'),
		$passwordField = $('.login-form input[type=password]'),
		slashImage = 'images/slash.png',
		slashImageHoverLeft = 'images/slash-hover-left.png',
		slashImageHoverRight = 'images/slash-hover-right.png';
	
	setSlashBackground(slashImage);
	var loginOpen = false;
	var viewportWidth;

	$(window).resize(function() { seguiciFix.positionSeguici($loginViewport, 0); });
	$(window).load(function(){
		$loginViewport.show();
		if(showError) {
			expandLoginForm(false);
			$forgotPassword.css({ top: $loginViewport.height(), left: $usernameField.position().left });
			$forgotPassword.show();
		}
		else {
			collapseLoginForm(false);
		}
	});
	setupInputBackgrounds($usernameField.add($passwordField));
	function setupInputBackgrounds($inputs) {
		var placeholderSupported = 'placeholder' in document.createElement('input'),
			removeInputBackgroundImage = function removeInputBackgroundImage() { 
				$(this).css('background-image', 'none');
			};
		var setInputBackgroundImage = function setInputBackgroundImage() {
				if($(this).val().length == 0) { 
					$(this).css('background-image', $(this).data('bgImage'));
				}
			};
		$inputs.each(function() {
			if( placeholderSupported ) {
				removeInputBackgroundImage.call(this);
			}
			else {
				$(this).data('bgImage', $(this).css('background-image'));
				$(this).focus(removeInputBackgroundImage);
				$(this).blur(setInputBackgroundImage);
				if($(this).val().length > 0) { 
					removeInputBackgroundImage.call(this);
				}
			}
		});
	}
	function setSlashBackground(slashImage) {
		$slash.css('background-image', 'url(' + slashImage + ')');
	}
	$loginHead.click(function() {
		if($loginViewport.is(':animated')) {
			return;
		}
		if(loginOpen) {
			collapseLoginForm(true);
		}
		else {
			expandLoginForm(true);
		}
	});
	
	$submitButton.hover(function(){
		setSlashBackground(slashImageHoverLeft);
	}, function() {
		 setSlashBackground(slashImage);
	});

	$registerButton.hover(function(){
		 setSlashBackground(slashImageHoverRight);
	}, function() {
		 setSlashBackground(slashImage);
	});

	function expandLoginForm(animate) {
		loginOpen = true;
		viewportWidth = $loginViewport.width();
		var viewportNewWidth = $loginBody.width() + viewportWidth;
		seguiciFix.positionSeguici($loginViewport, $loginBody.width());
		var newCoords = { width: viewportNewWidth };
		function afterExpand() {
			//$loginBody.find('input:first').focus();
			$('body').bind('click.login', function(e){
				if($loginViewport.has(e.target).length == 0) {
					collapseLoginForm(true);
				}
			});
			if(showError) {
				$loginViewport.css('overflow', 'visible');
			}
		}
		if(animate) {
			$loginViewport.animate(newCoords, LOGIN_ANIMATION_TIME, afterExpand);
		}
		else {
			$loginViewport.css(newCoords);
			afterExpand();
		}
	}
	function collapseLoginForm(animate) {
		//showError = false;
		$loginViewport.css('overflow', 'hidden');
		var newCoords = { width: viewportWidth };
		if(animate) {
			$loginViewport.animate(newCoords, LOGIN_ANIMATION_TIME, function(){
				seguiciFix.positionSeguici($loginViewport, 0);
				$('body').unbind('click.login');
				loginOpen = false;
			});
		}
		else {
			seguiciFix.positionSeguici($loginViewport, 0);
			$loginViewport.css(newCoords);
		}
	}
	
}

function setupLogout(logoutSelector) {
	var $logout = $(logoutSelector);
	if($logout.length == 0)
		return;
	$(window).resize(function() { seguiciFix.positionSeguici($logout, 0); });
	seguiciFix.positionSeguici($logout, 0);
}

function SeguiciFix($asideSeguici) {
	var LOGIN_SEGUICI_OVERLAP_THREASHOLD = 18;
	function overlapsSeguici($overlappingElement, addedWidth) {
		var elementNewLeft = $overlappingElement.offset().left - addedWidth;
		return ($asideSeguici.offset().left + $asideSeguici.width()) - elementNewLeft > LOGIN_SEGUICI_OVERLAP_THREASHOLD;
	}
	this.positionSeguici = function($overlappingElement, addedWidth) {
		if(overlapsSeguici($overlappingElement, addedWidth)) {
			$asideSeguici.css({ top: $overlappingElement.height() });
		}
		else {
			$asideSeguici.css({ top: 0 });
		}
	}
}
var seguiciFix;
$(function(){ seguiciFix = new SeguiciFix($('#seguici')); });

