// GENERIC FUNCTIONS
var mainOverlay;
var promptOverlay; 

var taLib = {
	
	init : function(){
		mainOverlay = $('a[rel="#popup"]').overlay({
				oneInstance: false, 
				api: true
		});
		
		promptOverlay = $("div#prompt-box").overlay({oneInstance: true, api: true});
		$(".tooltip[title]").tooltip('#tool-tip');
		$(".helper-popup[title]").tooltip(
			{
				tip : '#tool-tip',
				events: { 
					def : 'mouseover,mouseout',
					tooltip: 'mouseover,mouseout' 
			    }
			});
	},
	
	clearField : function(elem){
		if(elem.value==elem.defaultValue){
			$(elem).val('');
			$(elem).removeClass('empty');
		}
	},
	
	highlight : function(selector, defaultColor){
		if($(selector).length > 0){
			
			var curBg = defaultColor == undefined ? '#FFFFFF' : defaultColor;
			
			$(selector).animate({
				backgroundColor: '#F9FFB9'
			}, 1000, function(){
				$(selector).animate({
					backgroundColor: curBg
				}, 1000, function(){
				})
			});
		}
	}
	
};

// MIN-MAX
var minMax = {

	init : function(){
		
		$('.min-max-content').each(function(){
			var linkHtml = '<a href="#" class="min-max-link"><span class="min-max-icon">+</span> <span class="text">Maximise</span></a>';
			$(this).parent().prepend(linkHtml);
			$(this).hide();
		});
		
		$('.min-max-link').click(function(){
			
			var contentElem = $(this).parent('div').children('.min-max-content');
			
			if(contentElem.is(':visible')) {
				$(this).children('.text').html('Maximise');
				$(this).children('.min-max-icon').html('+');
				contentElem.slideUp();
			}
			else
			{
				$(this).children('.text').html('Minimise');
				$(this).children('.min-max-icon').html('-');
				contentElem.slideDown();					
			}
			
			return false;
		});
		
	}
	
};

// MINI BASKET


var miniBasket = {
	
	basketActive : false,
	
	init : function(){
		
		$('#basket-btn, #mini-basket').mouseover(function(){
			miniBasket.showBasket();
		});
		
		$('#basket-btn, #mini-basket').mouseout(function(){
			miniBasket.hideBasketDelay();
		});
		
		$('body').click(function(){
			miniBasket.hideBasket();
		});
		
	},
	
	showBasket : function(){
		miniBasket.basketActive = true;
		$('#basket-btn').addClass('active');
		$('#mini-basket').fadeIn();
	},
	
	hideBasketDelay : function(){
		miniBasket.basketActive = false;
		setTimeout('miniBasket.hideBasket();', 600);
	},
	
	hideBasket : function(){
		if( !miniBasket.basketActive ){
			$('#basket-btn').removeClass('active');
			$('#mini-basket').fadeOut();
		}
	}
	
};


// PROMO BOX

var promoBox = {
	
	curImageNumber : 1 ,
	
	numImages : 1 ,
	
	next : function(){
		
		var nextImageNumber;
		
		if( promoBox.numImages > promoBox.curImageNumber ){
			nextImageNumber = promoBox.curImageNumber + 1;
		}else{
			nextImageNumber = 1;
		}
		
		var nextImage = $( '#promo-link-' + nextImageNumber );
		var curImage = $( '#promo-link-' + promoBox.curImageNumber );
		
		promoBox.curImageNumber = nextImageNumber;
		
		if( nextImage.length > 0){
			curImage.hide();
			nextImage.show();
		}
	
		return false;	
	},

	previous : function(){
		
		var prevImageNumber;
		
		if( promoBox.curImageNumber > 1 ){
			prevImageNumber = promoBox.curImageNumber - 1;
		}else{
			prevImageNumber = promoBox.numImages;
		}
		
		var prevImage = $( '#promo-link-' + prevImageNumber );
		var curImage = $( '#promo-link-' + promoBox.curImageNumber );
		
		promoBox.curImageNumber = prevImageNumber;
		
		if( prevImage.length > 0){
			curImage.hide();
			prevImage.show();
		}
		
		return false;	
	},
		
	init : function(){
		promoBox.numImages = $( '.promo-link' ).length;
		
		if (promoBox.numImages > 1) {
			$('#promo').append('<div id="promo-buttons"><a id="promo-previous" href="#"></a><a id="promo-next" href="#"></a></div>');
		}	
		
		var i = 1;
		
		if( promoBox.numImages > 0 ){
			$( '.promo-link' ).each(function(){
				$(this).attr('id','promo-link-' + i);
				i++;
			});
			
			$('#promo-link-1').show();

		}
		
		$( '#promo-buttons #promo-next' ).click( function(){
			return promoBox.next();
		});
		
		$( '#promo-buttons #promo-previous' ).click( function(){
			return promoBox.previous();
		});
		
	}
		
};


// ADD DELEGATE TABS

var addTabs = {
	
	show : function( tabNumber ){
		$('.add-tab:visible').hide();
		$('#add-tab-' + tabNumber).show();
		
		$('#add-tab-links li.active').removeClass('active');
		$('#add-tab-link-' + tabNumber).addClass('active');
	}
	
};

// AJAX

var taAjax = {
	
	config : {
		loaderId : '#ajax-loader'
	},
	
	sCount : 0 ,
	
	postJson : function( url , container, vars, clear ){
			
		var containers = container.split("/");
				
		if( vars == null )
		{
			var vars = '';
		}
		
		if( clear == true )
		{
			for (var i = 0; i < containers.length; i++) {
				$(containers[i]).html('');
			}
		}
		
		$(taAjax.config.loaderId).fadeIn('fast');
		
		try{
			$.post( url , vars , function( data ){
				
				var json = data;
				
				for( var i = 0 ; i < json.response.length; i++ )
				{	
					switch( json.response[i].type )
					{
						case 'HTML':
							$(containers[i]).html(json.response[i].data);
							break;
						case 'SUCCESS':
							taAjax.success( json.response[i].data );
							break;
						case 'COMPLETE':
							taAjax.complete( json.response[i].data );
							break;
						case 'WARNING':
							taAjax.warn( json.response[i].data );
							break;
						case 'JS':
							eval( json.response[i].data );
							break;
					}
					
				}
				
				$(taAjax.config.loaderId).hide();
				
			},'json');
		}
		catch(e){
			warn(e);
			$(taAjax.config.loaderId).hide();
		}
		
		return false;
		
	},
	
	postJsonForm : function( url , container, formId, fieldValues ){
		
		if (fieldValues == undefined) {
			var fieldValues = {};
		}
		
		$('form' + formId + ' input, form' + formId + ' select').each(function(){
			if(  
				( $(this).attr('checked') && $(this).attr('type') == 'checkbox' ) || 
				$(this).attr('type') != 'checkbox'
			){
				fieldValues[$(this).attr('name')] = $(this).val();
			}
		});
		
		return this.postJson( url , container, fieldValues );
	},

	postJsonFormRefresh : function( url , container, formId ){
		var fieldValues = { 'refresh' : '1' };
		this.postJsonFormClear( url , container, formId, fieldValues );
		return false;
	},
	
	postJsonFormClear : function( url , container, formId, fieldValues ){
		this.postJsonForm( url , container, formId, fieldValues );
		$('form' + formId).html('<p>Please wait...</p>');
		return false;
	},
	
	complete : function( message ){
				
		dms.closeOverlay();
		
		// Display success message to user 
		taAjax.sCount++;
	
		$('#ajax-complete').html( message );
		$('#ajax-complete').fadeIn('fast');
		setTimeout( 'taAjax.hidecomplete('+taAjax.sCount+')' , 5000 );
		return false;
	} ,

	hidecomplete : function( hide_sCount )
	{
		if (hide_sCount == taAjax.sCount) {
			$('#ajax-complete').fadeOut('slow');
		}
		return false;
	} ,
	
	success : function( message ){
		
		dms.closeOverlay();
		
		// Display success message to user 
		taAjax.sCount++;
	
		$('#ajax-success').html( message );
		$('#ajax-success').fadeIn('fast');
		setTimeout( 'taAjax.hidesuccess('+taAjax.sCount+')' , 5000 );
		return false;
	} ,

	hidesuccess : function( hide_sCount )
	{
		if (hide_sCount == taAjax.sCount) {
			$('#ajax-success').fadeOut('slow');
		}
		return false;
	} ,
	
	warn : function( message ){
		
		dms.closeOverlay();
		
		$("div#warning-box p").html( message );
		var warning = $("div#warning-box").overlay({oneInstance: false, api: true}); 
		warning.load(); 
	} ,
	
	postJsonPrompt : function( url, container, message, vars ){
		
		var pad = $("div#prompt-box .pad");
		//pad.html('');
		
		pad.html('<p>' + message + '</p><p><a href="#" onclick="promptOverlay.close(); return taAjax.postJson(\'' + url + '\', \'' + container + '\', \'' + vars + '\')">Yes</a><a href="#" onclick="promptOverlay.close(); return false;">No</a></p>');
		
		/*
		var messageP = document.createElement('p');
		messageP.innerHTML = message;
		pad.append(messageP);
		
		var linkP = document.createElement('p');
		pad.append(linkP);
		
		var yesLink = document.createElement('a');
		yesLink.setAttribute('onclick','promptOverlay.close(); return taAjax.postJson(\'' + url + '\', \'' + container + '\', \'' + vars + '\')');
		yesLink.href = '#';
		yesLink.innerHTML = 'Yes';
		
		linkP.appendChild(yesLink);
		
		var noLink = document.createElement('a');
		noLink.setAttribute('onclick','promptOverlay.close(); return false;');
		noLink.href = '#';
		noLink.innerHTML = 'No';
		
		linkP.appendChild(noLink);
		*/
				
		promptOverlay.load();
	}
	
};

var dms = {
	
	init : function(){
		if( $('#company-input').hasClass('hide') ) $('#company-input').hide();
		if( $('#company-dropdown').hasClass('hide') ) $('#company-dropdown').hide();
	} ,
	
	isInt : function( n ){
		return !isNaN(parseInt(n));
	} ,
	
	plusTicket : function( id ){
		
		var val = $(id).val();
		var quantity = 0;
		
		if (dms.isInt(val)) {
			quantity = parseInt(val);
			quantity++;
		}
		
		$(id).val(quantity);
		
		return false;
	} ,
	
	minusTicket : function( id ){
		
		var val = $(id).val();
		var quantity = 0;
		
		if (dms.isInt(val)) {
			quantity = parseInt(val);
			if( quantity > 0 ) quantity--;
		}
		
		$(id).val(quantity);
		
		return false;
	} ,
	
	removeDelegate : function( url, container ){
		taAjax.postJsonPrompt( url, container, 'Are you sure you want to remove this delegate?', 'remove-delegate=1' );
		return false;
	} ,
	
	removeTicket : function( url, container ){
		taAjax.postJsonPrompt( url, container, 'Are you sure you want to remove this pass?', 'remove-ticket=1' );
		return false;
	} , 
	
	removeDiscount : function( url, container ){
		taAjax.postJsonPrompt( url, container, 'Are you sure you want to remove this booking code?', 'remove-discount=1' );
		return false;
	} ,
	
	// This function is buggy - mainOverlay.load() makes overlay appear briefly
	closeOverlay : function(){
		try {
			mainOverlay.load();
			mainOverlay.close();
			// $('.simple_overlay').fadeOut();
		}catch( e ){
			// alert(e);
		}
	} ,
	
	updateCompanySelect : function( typeId ){
		
		var typeElem = $('select#member-type #opt-type-'+typeId);
		
		switch( typeElem.hasClass('textinput') )
		{
			case true:
				$('#company-dropdown').hide();
				$('#company-input').show();
				$('input#member-company-text').val('');
			break;
			
			case false:
				$('#company-input').hide();
				$('#company-dropdown').show();
				$('select#member-company').val('');
				$('select#member-company optgroup').hide();
				$('select#member-company optgroup#opt-' + typeId ).show();
			break;
		}
	} ,
	
	updateCompanySelectYesNo : function( elem ){
		
		var typeId = elem.value;
		
//		var typeElem = $('select#member-type #opt-type-'+typeId);
		
		switch( $(':selected', elem).hasClass('textinput') )
		{
			case true:
				$('#company-dropdown').hide();
				$('#company-input').show();
				$('input#member-company-text').val('');
			break;
			
			case false:
				$('#company-input').hide();
				$('#company-dropdown').show();
				$('select#member-company').val('');
			break;
		}
	}
	
};

// INIT SCRIPTS

$(document).ready(function(){
	miniBasket.init();
	promoBox.init();
	taLib.init();
	minMax.init();
	dms.init();
	
	
	$('input.order-ticket').blur(function(){
		var total = 0;
		
		$('input.order-ticket').each(function(){
			total += Number($(this).val());
		});
		
		$('#running-total').html('<strong>&pound;' + total + '</strong>');
	});
});