/* scripts for Frieda B */

var homeImage = 0;
var picRoot = "images/";
var pic = new Array();
var timeoutId;

$(document).ready( function() {
	//initialise everything
	contentFade();
	expanders();
	expanderCocktails();
	slideShow();
	checkboxReplace();
	gallery();
	messageBox();
	setTimeout( function() { recommendations(); }, 3000 );
	previewEvent();
	previewPress();
	previewGallery();
	arrowUp();
	giveFocus();
});

var slideShow = function() {
	//put images into array
	var picCount = 0;
	$('#loader input').each( function() {
		pic[picCount] = $(this).val();
		picCount ++;
	});

	if ( pic.length > 0 ) {
		//load images
		loadImage( 0 );
		
		//show bar
		$('#loader').append('<div id="bar"></div>');
		
		//build buttons
		for ( var i=0; i < pic.length; i++ ) {
			$('#bar').append('<a id="bar_' + i +'" href="#"><span>' + (i+1) + '</span></a>');
		}
		bindButtons();
	}
}

var bindButtons = function() {
	$('#bar a').click( function() {
		unbindButtons(); //this is to prevent multiple timeouts occurring
		clearTimeout( timeoutId );
		homeImage = $(this).attr('id').substr(4);
		loadImage( homeImage ); 			
		return false;
	});
}

var unbindButtons = function() {
	$('#bar a').unbind();
}


var loadImage = function(i) {
	var img = new Image();
	
	$(img).load( function() {
		//hide it
		$(this).hide();
		//put the image into its container
		$('#loader').append(this);
		//change button colour
		$('#loader .on').removeClass('on');
		$('#loader #bar_' + homeImage).addClass('on');
		//fade image in
		$(this).fadeIn( 1000, function() {
			//remove unwanted image
			$(this).parent().find('img:first').remove();
			timeoutId = setTimeout( function() { loadImage( nextImage() ) }, 6000 )
			unbindButtons();
			bindButtons();
		});
	})
	.error( function() {
		//alert('error');
	})
	.attr({ src: picRoot + pic[i] });
}

var nextImage = function() {
	//increment the image counter
	homeImage++;	
	if ( homeImage > pic.length-1 ) {
		homeImage = 0;
	}
	
	return homeImage;
}

var checkboxReplace = function() {
	//set up the 
	$('label.checkbox-replace').each( function() {
		var text = $(this).text();
		var checked = '';

		if ( $(this).parent().find(':checkbox').attr('checked') ) {
			checked = ' checked';
		}
		$(this).parent().append('<a class="checkbox-replace' + checked + '" href="#" onclick="checkboxToggle(this); return false;">' + text + '</a>');
		$(this).hide();
		$(this).parent().find(':checkbox').hide();
	});
}

var checkboxToggle = function(e) {
	if ( $(e).hasClass('checked') ) {
		$(e).removeClass('checked').parent().find(':checkbox').attr({ checked: '' });
	}
	else {
		$(e).addClass('checked').parent().find(':checkbox').attr({ checked: 'checked' });
	}
}


var gallery = function() {
	$('#gallery-thumbnails a').click( function() {
		//get data
		var thumb = $(this).find( 'img' ).attr( 'src' );
		var dotIndex = thumb.lastIndexOf( "." );
		
		if ( dotIndex > -1 ) {
			var src = thumb.substr( 0, dotIndex-2 ) + '.' + thumb.substr( dotIndex+1, thumb.length );
			var alt = $(this).find( 'img' ).attr( 'alt' ).split("|");
			var caption = alt[0];
			var date = alt[1];
			
			//load the new image
			loadLightbox();
			loadLightboxImage( src, caption, date );
		}
				
		this.blur();
		return false;
	});
}

var loadLightbox = function() {
	try {
		if ( document.getElementById( 'lightbox' ) === null ) {
			$('body').append('<div id="lightbox-overlay"></div><div id="lightbox"></div>');
		}
		
		$('#lightbox-overlay').hide().height( $(document).height() ).show();
		$('#lightbox').css({ top: $(window).scrollTop() + "px" });
	}
	catch(e) {
		//alert(e);
	}
}

var loadLightboxImage = function(src, caption, date) {
	var img = new Image();
	
	$(img).load( function() {
		//change lightbox shape to match image dimensions
		var imageWidth = this.width;
		var imageHeight = this.height;
		var lightboxWidth = $('#lightbox').width();
		var lightboxHeight = $('#lightbox').height();
		var captionHtml = '<p id="caption">' + caption + ' <span>' + date + '</span></p>';
		//var controlsHtml = '<div id="controls"><a id="prev" href="#" onclick="previousGalleryImage(this); return false;"><span>previous</span></a><a id="close" href="#" onclick="closeGalleryImage(this); return false;"><span>close</span></a><a id="next" href="#" onclick="nextGalleryImage(this); return false;"><span>next</span></a></div>';
		var controlsHtml = '<div id="controls"><span id="prev"><a href="#" onclick="previousGalleryImage(this); return false;"><span>previous</span></a></span><span id="close"><span><a href="#" onclick="closeGalleryImage(this); return false;"><span>close</span></a></span></span><span id="next"><a href="#" onclick="nextGalleryImage(this); return false;"><span>next</span></a></span></div>';
		
		//calculate animation speed
		var speedHorizontal = lightboxWidth - imageWidth;
		if ( speedHorizontal < 0 ) {
			speedHorizontal = -speedHorizontal;
		}
		var speedVertical = lightboxHeight - imageHeight;
		if ( speedVertical < 0 ) {
			speedVertical = -speedVertical;
		}

		$('#lightbox').append(this).find('img').hide();

		$('#lightbox')
			.animate({
				height: imageHeight
				}, (speedVertical*4)+1)
			.animate({
				marginLeft: -(imageWidth/2),
				width: imageWidth
				}, (speedHorizontal*4)+1, function() {
					$('#lightbox img').fadeIn(1000);
					$('#lightbox').append(captionHtml).find('#caption').css({marginTop: '-' + $(this).find('#caption').height() + 'px' }).animate({ marginTop: 0 }, 1000);
					$('#lightbox').append(controlsHtml).find('#controls').css({ marginTop: '0' }).animate({ marginTop: '-' + $(this).find('#controls').height() }, 1000);
				});
	})
	.error( function() {
		//alert('error');
	})
	.attr({ src: src });
}

var closeGalleryImage = function(e) {
	//remove lightbox
	$('#lightbox').fadeOut(600, function() { 
		$(this).remove(); 
	});
	$('#lightbox-overlay').remove(); 
}

var nextGalleryImage = function(e) {
	//get current image
	var image = $('#lightbox img').attr('src');
	
	//remove existing image from lightbox
	$('#lightbox img').remove();
	$('#lightbox #controls').remove();
	$('#lightbox #caption').remove();

	//load next image into lightbox
	var src = $('#gallery-thumbnails a[href=' + image + ']').next().attr('href');
	var alt ='';
	
	if ( src == undefined ) {
		src = $('#gallery-thumbnails a:first').attr('href');
		alt = $('#gallery-thumbnails a:first').find('img').attr('alt').split("|");
	}
	else {
		alt = $('#gallery-thumbnails a[href=' + image + ']').next().find('img').attr('alt').split("|");
	}

	var caption = alt[0];
	var date = alt[1];
	
	loadLightboxImage( src, caption, date );
}

var previousGalleryImage = function(e) {
	//get current image
	var image = $('#lightbox img').attr('src');
	
	//remove existing image from lightbox
	$('#lightbox img').remove();
	$('#lightbox #controls').remove();
	$('#lightbox #caption').remove();

	//load next image into lightbox
	var src = $('#gallery-thumbnails a[href=' + image + ']').prev().attr('href');
	var alt ='';
	
	if ( src == undefined ) {
		src = $('#gallery-thumbnails a:last').attr('href');
		alt = $('#gallery-thumbnails a:last').find('img').attr('alt').split("|");
	}
	else {
		alt = $('#gallery-thumbnails a[href=' + image + ']').prev().find('img').attr('alt').split("|");
	}

	var caption = alt[0];
	var date = alt[1];
	
	loadLightboxImage( src, caption, date );
}

var messageBox = function() {
	$('.error').hide().slideDown(1000);
	$('.success').hide().slideDown(1000);
}

var recommendations = function() {
	var currentPromoClass = $('#promo-left').attr('class');
	var newPromoClass = '';
	var newPromoText = '';
	
	if ( currentPromoClass == 'timeout' ) {
		newPromoClass = 'worldsbestbars';
		newPromoText = '"A local gem" - Listed in Worlds Best Bars';
	}
	else {
		newPromoClass = 'timeout';
		newPromoText = '"Recommended" - Time Out Eating & Drinking Guide 2007/8';
	}
			
	$('#promo-left').fadeOut(1000, function() {
		$(this).removeClass(currentPromoClass).addClass(newPromoClass);
		$(this).find('span').text(newPromoText);
		$(this).fadeIn(1000);
		setTimeout( function() { recommendations(); }, 3000 );
	});
}

var contentFade = function() {
	//main content fade
	if ( $.browser.msie && $.browser.version == "6.0" ) {
		//ie6-only events
	}
	else {
		$('#body').hide().fadeIn(1600);
		$('#body-home').hide().fadeIn(1600);
	}
}

var expanders = function() {
	$('.expanded-content').hide();
	$('.quote').append('<a href="#" onclick="expand( this ); return false;">Read more...</a>');
	$('.expanded-content').append('<a class="close-button" href="#" onclick="contract( this ); return false;">[ Close ]</a>');
}

var expand = function(e) {
	var h = $(e).parent().parent().find('.expanded-content').height();
	$(e).parent().slideUp(1000).parent().find('.expanded-content').css({ marginTop: ( h * (-1) ) }).show().animate({ marginTop: 0 }, 1000);
}

var contract = function(e) {
	$(e).parent().slideUp(1000).parent().parent().find('.quote').slideDown(1000);
}

var expanderCocktails = function() {
	$('.cocktail-list').hide();
	$('.cocktail-button').append('<a href="#" onclick="expandCocktails( this ); return false;"><img src="images/button_cocktails.gif" alt="Friedas favourite cocktails" /></a>');
	$('.cocktail-list').append('<a class="close-button" href="#" onclick="contractCocktails( this ); return false;">[ Close ]</a>');
}

var expandCocktails = function(e) {
	var h = $(e).parent().parent().find('.cocktail-list').height();
	$(e).parent().slideUp(2000).parent().find('.cocktail-list').css({ marginTop: ( h * (-1) ) }).show().animate({ marginTop: 0 }, 2000);
}

var contractCocktails = function(e) {
	$(e).parent().slideUp(2000).parent().parent().find('.cocktail-button').slideDown(2000);
}

var arrowUp = function() {
	$('.arrow-up').hover( function() {
		$(this).attr({ id: 'btnMoveUp', name: 'btnMoveUp' });
	}, function() {
		$(this).attr({ id: '', name: '' });
	});
}

var giveFocus = function() {
	//needs timeout in order to be able to detect fading-in text fields correctly
	setTimeout( function() {$('.give-focus').focus().select();}, 500 );
}

function resizeIframe(e) {
	thisHeight = e.contentWindow.document.body.scrollHeight + 'px';
	e.height = thisHeight;
}

var previewEvent = function() {
	if ( $('#event-refresh').is('h2') ) {
		$('h2#event-refresh').append('<a href="#" onclick="refreshPreviewEvent(); return false;">[ Refresh ]</a>');
		refreshPreviewEvent();
	}
}

var refreshPreviewEvent = function() {
	$('#preview-event-area').empty().append('<dt><p class="event-date">' + $('#txtTitle').val() + '</p></dt><dd><p class="event-title">' + $('#txtCopy').val() + ' <span class="event-time">' + $('#txtSuffix').val() + '</span></p></dd>');
}

var previewPress = function() {
	if ( $('#press-refresh').is('h2') ) {
		$('h2#press-refresh').append('<a href="#" onclick="refreshPreviewPress(); return false;">[ Refresh ]</a>');
		refreshPreviewPress();
	}
}

var refreshPreviewPress = function() {
	if ( $('#txtSnippet').val() == ''  ) {
		$('#preview-press-area').empty().append('<li><img src="gallery/press_' + $('#hdnImageId').val() + '.jpg" alt="" /><div class="data"><p>' + $('#txtFullText').val() + '</p></div></li>');
	}
	else {
		$('#preview-press-area').empty().append('<li><img src="gallery/press_' + $('#hdnImageId').val() + '.jpg" alt="" /><div class="data"><div class="quote"><p>' + $('#txtSnippet').val() + '</p></div><div class="expander-mask"><div class="expanded-content"><p>' + $('#txtFullText').val() + '</p></div></div></div></li>');
		expanders();
	}
}

var previewGallery = function() {
	if ( $('#gallery-refresh').is('h2') ) {
		$('h2#gallery-refresh').append('<a href="#" onclick="refreshPreviewGallery(); return false;">[ Refresh ]</a>');
		refreshPreviewGallery();
	}
}

var refreshPreviewGallery = function() {
	$('#preview-gallery-area #gallery-thumbnails').empty().append('<a href="gallery/gallery_' + $('#hdnImageId').val() + '.jpg" target="_blank"><img src="gallery/gallery_' + $('#hdnImageId').val() + '_t.jpg" alt="' + $('#txtCaption').val() + '|' + $('#txtDate').val() + '" /></a>');
	gallery();
}
