var colorboxOptions = {
	scroll: false,
	opacity: .7,
	fixed: true
}

$(function(){
	
	$('#nav_contact>a,.contact_link').slideInContact();

	$('#adverts').advertSpinner();
	
	$('#calculate').calculateSavings();
	
	$('#search_order').submitOnChange();
	
	// show property page
	$('#property_info').tabs();
	$('#gallery').gallerify();
	$('#google_map>.thumb').loadMap();
	// packages table highlighting
	$('#packages').highlightColumn();
	
	$('.feature_list.closed').featureListSlide();
	$('#ad_sell>p>a,#ad_valuation>p>a,#viewing>a,.popup_form').colorbox(colorboxOptions)
	
});


$.fn.slideInContact = function(){
	return this.each(function(){
		var page = $('html,body');
		$(this).click(function(){
			var contact = $('#contact');
			if (!contact.is(':animated')) {
				if (contact.length) {
					contact.is(':visible') ? contact.slideUp(500) : contact.slideDown(500);
				} else {
					$.get(this.href,function(data){
						var data = $(data).hide().insertBefore('#header');
						$('<a class="close">Close</a>').slideInContact().appendTo('#contact_sleeve>.sleeve');
						data.slideDown(500);
						data.find('form').submit(function(){
							var validForm = true;
							$(this).find('[required]').each(function(){
								var input = $(this);
								if (input.val() == '') {
									input.add(input.prev('label')).wrap('<div class="fieldWithErrors"/>');
									validForm = false;
								}
							});
							return validForm;
						});
					});
				}
				page.animate({scrollTop:0},500);
			}
			return false;
		});
	});
}


$.fn.advertSpinner = function(){
	return this.each(function(){
		var container = $(this);
		var slides = $('>div',this);
		var scrollAmount = container.width();
		var ul = $('>ul',slides);
		var items = $('>li',ul);
		var timer;
		
		items.eq(0).clone().appendTo(ul);
		
		var slideGallery = function(e){
			var currentScroll = slides.scrollLeft();
			var nextPos;
			if (e.data.direction == 'prev') {
				if (currentScroll) {
					nextPos = currentScroll-scrollAmount;
				} else {
					slides.scrollLeft(scrollAmount*(items.length))
					nextPos = scrollAmount*(items.length-1);
				}
			} else {
				nextPos = currentScroll + scrollAmount;
			}
			slides.animate({scrollLeft: nextPos},500,function(){
				if (nextPos >= scrollAmount*(items.length)) {
					slides.scrollLeft(0);
				}
			});
		}
		
		slides.css({height: items.outerHeight()});
		ul.css({width: items.outerWidth(true) * items.length * 2 + 'px'});
		
		var prevButton = $('<button id="button_prev"><img src="/images/button_prev.png" alt="Previous" /></button>')
			.bind('click',{direction:'prev'},function(e){
				window.clearInterval(timer);
				if (!slides.is(':animated')) {
					slideGallery(e);
				}
			}).appendTo(container);
		var nextButton = $('<button id="button_next"><img src="/images/button_next.png" alt="Next" /></button>')
			.bind('click',{direction:'next'},function(e){
				window.clearInterval(timer);
				if (!slides.is(':animated')) {
					slideGallery(e);
				}
			}).appendTo(container);
			
		timer = window.setInterval(function(){
			slideGallery({data:{direction:'next'}});
		},7000);
		
	});
}

$.fn.submitOnChange = function(){
	return this.each(function(){
		var form = $(this);
		
		form.find('input').hide();
		form.find('select').change(function(){
			form.submit();
		});
	});
}


$.fn.tabs = function(){
	return this.each(function(){
		var sections = $(this).children('.section');
		var tabStrip = $('<ul id="tab_strip"></ul>');

		sections.each(function(i){
			var section = $(this);
			var sectionHeader = section.children('h2:first').hide();

			var link = $('<a/>').text(sectionHeader.text()).attr('href','#'+section.attr('id')).click(function(){
				sections.hide().filter('#'+$(this).attr('href')).show();
				$(this).parent().addClass('on').siblings().removeClass('on');
				return false;
			});
			link.wrap('<li/>').parent().appendTo(tabStrip);
			
			if (i==0) link.click();
			
		});
		
		tabStrip.prependTo(this);

	});
}

$.fn.gallerify = function(){
	return this.each(function(){
		var mainImage = $('#main_image>img');
		var thumbs = $('#thumbs>li');
		var numerator = $('#progress>span');

		var changeImage = function() {
			var li = $(this).parent();
			mainImage.attr('src',this.href);
			numerator.text(thumbs.index(li)+1);
			thumbs.removeClass('on');
			li.addClass('on');
			return false;
		}
		
		var switchNextPrev = function(e){
			var current = thumbs.filter('.on');
			var next;
			if (e.data.direction == 'prev') {
				next = current.prev().length ? current.prev() : thumbs.last();
			} else {
				next = current.next().length ? current.next() : thumbs.first();
			}
			next.children('a').click();
		}

		var nextButton = $('<button id="button_next"><img src="/images/button_gallery_next.png" alt="Next" /></button>')
			.bind('click',{direction:'next'},switchNextPrev).insertAfter(mainImage);
		var prevButton = $('<button id="button_prev"><img src="/images/button_gallery_prev.png" alt="Previous" /></button>')
			.bind('click',{direction:'prev'},switchNextPrev).insertAfter(mainImage);
			
		thumbs.delegate('a','click',changeImage);

	});
}



$.fn.calculateSavings = function(){
	return this.each(function(){
		var results = $('#calculate_results').hide();
		var input = $('input.text',this);
		var rows = $('tr',this);
		var typicalPercentage = rows.first().data('percentage');
		var typicalFixed = rows.first().data('fixed');
		var savings = $('.saving>span',this);

		$('.signup>a',this).colorbox(colorboxOptions);
		
		$('form',this).submit(function(){
			var value = input.val();
			value = parseFloat(value.replace(/[£,]/g,''));
			if (!isNaN(value)) {
				if (results.is(':hidden')) {
					results.slideDown();
					$('input.submit',this).attr({
						alt: 'Recalculate',
						src: '/images/button_recalculate.png'
					});
				}

				rows.each(function(){
					var row = $(this);
					var cost = Math.round((value*row.data('percentage'))+row.data('fixed'));
					var saving = ('£'+Math.round(((value*typicalPercentage)+typicalFixed)-cost)).replace(/^£-/,'−£');
					row.children('.output').children('span').text(cost);
					row.children('.saving').children('span').text(saving);
				});
			}

			return false;
		});
	});
}

$.fn.highlightColumn = function(){
	return this.each(function(){
		var table = $(this).children('table');
		var cells = table.find('[class^=opt]');
		
		cells.filter(function(){
			return this.className.match(/signup/);
		}).children().colorbox(colorboxOptions);
		
		cells.mouseover(function(){
			var cell = $(this);
			var index = cell.parent().children().index(cell);
			table.addClass('hover_'+index);
		}).mouseout(function(){
			table.removeClass('hover_0 hover_1 hover_2 hover_3 hover_4 hover_5');
		});
		
	});
}

$.fn.featureListSlide = function(){
	return this.each(function(){
		var container = $(this);

		var header = container.children('h2');
		var list = header.nextAll().hide();
		header.wrapInner('<a href="#"/>').children('a').click(function(){
			if (list.is(':visible')) {
				list.slideUp(function(){                    
					container.addClass('closed').removeClass('open');
				});
			} else {
				list.slideDown(function(){
					container.addClass('open').removeClass('closed');
				});
			}

            return false;
		});
	});
}



$.fn.loadMap = function(){
	return this.each(function(){
		var container = $(this);
		var loc = container.data('location').split(',');
		var latlng = new google.maps.LatLng(loc[0],loc[1]);
		var mapOptions = {
			zoom: 15,
			center: latlng,
			mapTypeId: google.maps.MapTypeId.ROADMAP
		};
		
		var map = new google.maps.Map(container.get(0),mapOptions);
		
		var marker = new google.maps.Marker({
			position: latlng,
			map: map
		});
		
		// google maps can’t draw properly if the map isn’t visible (onload), so trigger a redraw on show
		$('#tab_strip>li:last-child>a').click(function(e){
			e.preventDefault();
			google.maps.event.trigger(map,'resize');
			map.setCenter(latlng);
		});
	});
}


$(document).ready(function () {
    $('.top_nav_li').hover(
        function () {
            //show its submenu
            $(this).addClass("top_nav_active");
            $('ul', this).slideDown(100);
        },
        function () {
            //hide its submenu
            $(this).removeClass("top_nav_active");
            $('ul', this).slideUp(100);
        }
    );

    $('.sub_nav_li').hover(
        function () {            
            $(this).addClass("sub_nav_active");
        },
        function () {            
            $(this).removeClass("sub_nav_active");
        }
    );

});

