(function($){
	$.fn.clearDefault = function(){
		return this.each(function(){
			var default_value = $(this).val();
			$(this).bind('focus', function(){
				if ($(this).val() == default_value) $(this).val("");
			});
			$(this).bind('blur', function(){
				if ($(this).val() == "") $(this).val(default_value);
			});
		});
	};
})(jQuery);


$(document).ready(function() {

	/* 	LOG ENTRIES
		-------------------------------------------------------------*/
		refresh_lognav = function() {
			$('a.ln-prev', '#lognav').removeClass('ln-prev-off');
			$('a.ln-next', '#lognav').removeClass('ln-next-off');
			
			change_logentries = function(entry_index) {
				$('.active-entry').stop().animate({ opacity: 0 }, function() {
					$(this).css('display', 'none').removeClass('active-entry');
				});
								
				$('.entry:eq('+entry_index+')', '#log').css({ display: 'block', opacity: '0' }).stop().animate({ opacity: 1 }, function() {
					if($('img', $(this)).length == 0 && $('#log').hasClass('photo-active')) {
						rollin_photopanel();
					}
					
					$(this).addClass('active-entry');
					refresh_lognav();
				});
			}
			
			$('a.ln-prev').one('click', function() {
				var current_entry_index = $('.active-entry', '#log').index();
				var next_entry_index = current_entry_index - 1;
				change_logentries(next_entry_index);
				return false;
			});
			
			$('a.ln-next').one('click', function() {
				var current_entry_index = $('.active-entry', '#log').index();
				var next_entry_index = current_entry_index + 1;
				change_logentries(next_entry_index);
				return false;
			});
			
			if($('.entry', '#log').length == 1) {
				$('a.ln-prev', '#lognav').addClass('ln-prev-off');
				$('a.ln-next', '#lognav').addClass('ln-next-off');
				return;
			}
			
			if($('.active-entry', '#log').index() == 0) {
				$('a.ln-prev').unbind('click').bind('click', function() { return false; }).addClass('ln-prev-off');
			}
			
			if($('.active-entry', '#log').index() == ($('.entry', '#log').length - 1)) {
				$('a.ln-next').unbind('click').bind('click', function() { return false; }).addClass('ln-next-off');
			}
		}
		
		rollin_photopanel = function() {
			$('#log').animate({ width: '-=' + '326px' });
			$('.photo').stop().animate({ width: '0' }, function() {
				$(this).css({ display: 'none' });
				$('#log').removeClass('photo-active');
			});			
		}
		
		rollout_photopanel = function() {
			$('#log').animate({ width: '+=' + '326px' });
			$('.photo').css({ display: 'block', width: '0' }).stop().animate({ width: '325px' }, function() {
				$('#log').addClass('photo-active');
			});			
		}
		
		$('#log a.e-photolink').click(function() {
			if($('#log').hasClass('photo-active')) {
				rollin_photopanel();
			} else {
				rollout_photopanel();
			}
			
			return false;
		});

		refresh_lognav();
	
	
	/* 	GALLERY SLIDER
		-------------------------------------------------------------*/
		add_slide_overlays = function() {
			$('#slider li').each(function() {
				$(this).append($('<div />').addClass('slide-overlay').css({ opacity: 0 }));
			});
			
			$('#slider li:not(.active-slide) .slide-overlay').animate({ opacity: 1 });
		}
		
		slide_gal = function(destination_index, direction) {
			var dir = (direction < 0) ? '+=' : '-=';
			
			$('#gallery #slider').stop().animate({ marginLeft: dir + 620 }, function() {
				$('.active-slide', '#slider').removeClass('active-slide');
				$('li:eq('+destination_index+')', '#slider').addClass('active-slide');
				refresh_galnav();
			});
			
			$('.active-slide .slide-overlay', '#slider').stop().animate({ opacity: 1 });
			$('li:eq('+destination_index+') .slide-overlay', '#slider').stop().animate({ opacity: 0 });
			
			$('.active-post', '#gallery').stop().animate({ opacity: 0 }, function() {
				$(this).css({ display: 'none' }).removeClass('active-post');
			});
			
			$('.post:eq('+destination_index+')', '#gallery').css({ display: 'block', opacity: '0' }).stop().animate({ opacity: 1 }, function() {
				$(this).addClass('active-post');
			});
		}
		
		bind_actions = function() {
			$('#gallery a.s_prev').one('click', function() {
				var active_index = $('.active-slide', '#slider').index();
				var destination_index = active_index - 1;
				slide_gal(destination_index, -1);
				return false;
			});

			$('#gallery a.s_next').one('click', function() {
				var active_index = $('.active-slide', '#slider').index();
				var destination_index = active_index + 1;
				slide_gal(destination_index, 1);
				return false;
			});
		}
				
		refresh_galnav = function() {
			bind_actions();
			$('.s_prev_off, .s_next_off').removeClass('s_prev_off s_next_off');
			
			if($('#gallery .active-slide').index() == 0) {
				$('#gallery a.s_prev').unbind('click').click(function() { return false; });
				$('#gallery a.s_prev').addClass('s_prev_off');
			}
				
			if($('#gallery .active-slide').index() == $('#gallery #slider li').length -1) {
				$('#gallery a.s_next').unbind('click').click(function() { return false; });
				$('#gallery a.s_next').addClass('s_next_off');
			}
		}
		
		add_slide_overlays();
		refresh_galnav();
		
		
	/* 	IMAGE MAP
		-------------------------------------------------------------*/
		var timeout = null;
		
		$('img.overlay').css({ display: 'none' });
		
		plot_activate = function(index) {
			clearTimeout(timeout);
			$('.overlay:eq('+index+')').css({ display: 'block' });
			$('body').css('background-position', 'center -9999px');
		}
		
		plot_deactivate = function(index) {
			$('.overlay:eq('+index+')').css({ display: 'none' });
			timeout = setTimeout(function() {
				$('body').css('background-position', 'center 120px');
			}, 1000);
		}
		
		slider_position = function() {
			return Math.ceil(Math.abs(parseInt($('#b_wrap ul').css('left').slice(0, -2)) / $('.block').outerWidth(true)));
		}
		
		block_in_right_position = function(index) {
			switch(index - slider_position()) {
				case 3:
				case 4:
					return true;
					break;
				default:
					return false;
			}
		}
		
		block_visible = function(index) {
			var pos = slider_position();
			return (index >= pos && index < (pos + 5));
		}
		
		block_activate = function(index) {
			if(!$('.b-major', '.block:eq('+index+')').hasClass('b-major-r')) {
				if(block_in_right_position(index)) { $('.b-major', '.block:eq('+index+')').addClass('b-major-r'); }
				else { $('.b-major', '.block:eq('+index+')').removeClass('b-major-r'); }
			}
			
			$('.map-twin #b_wrap').css('height', '470px');
			$('.b-major-active').removeClass('b-major-active');
			$('.b-major', '.block:eq('+index+')').addClass('b-major-active');
			unbind_event_handlers();
		}
		
		nav_check = function() {
			$('#b_nav a')
				.removeClass('prev-off')
				.removeClass('next-off');
						
			if(slider_position() == 0 || $('.block').length == 0)
				$('#b_nav a.prev').addClass('prev-off');

			if(slider_position() == $('#b_wrap .block').length - 5 || $('#b_wrap .block').length <= 5)
				$('#b_nav a.next').addClass('next-off');
		}
		
		bind_event_handlers = function() {
			$('area')
				.bind('mouseover', function() {
					plot_activate($(this).index());

					if(!block_visible($(this).index())) {
						var direction = ($(this).index() > (slider_position() + 5)) ? 1 : -1;
						var new_pos = (direction < 0) ? $(this).index() : ($(this).index() - 4);
						if(new_pos > 7) new_pos = 7;
						
						if(direction > 0) {
							$('.b-major-r').removeClass('b-major-r');
							$('.b-major', '.block:eq('+$(this).index()+')').addClass('b-major-r');
						}
						
						$('#b_wrap ul').stop().animate({ left: -1 * (new_pos * $('.block').outerWidth(true)) }, 500, function() {
							nav_check();
						});
					}

					$('.block:eq('+$(this).index()+') .b-minor', '#blocks').addClass('b-minor-active');
				})
				.bind('mouseout', function() {
					plot_deactivate($(this).index());
					$('.block:eq('+$(this).index()+') .b-minor', '#blocks').removeClass('b-minor-active');
				})
				.bind('click', function() {
					block_activate($(this).index());
					$('html').stop().animate({ scrollTop: 600 });
					return false;
				});

			$('.block')
				.bind('mouseover', function() {
					plot_activate($(this).index());
				})
				.bind('mouseout', function() {
					plot_deactivate($(this).index());
				});

			$('.b-minor').each(function() {
				if($(this).siblings('.b-major').length > 0) {
					$(this)
						.bind('click', function() {
							block_activate($(this).parent().index(), true);
							return false;
						})
						.bind('mouseover', function() {
							$(this).addClass('b-minor-active');
						})
						.bind('mouseout', function() {
							$(this).removeClass('b-minor-active');
						});
				}
			});
							
			$('#b_nav .prev').one('click', function() {
				if($(this).hasClass('prev-off')) return false;
				unbind_event_handlers();
				var element_width = $('.block').outerWidth(true);
				var slide_distance = element_width;
				
				if($('#b_wrap ul').attr('class') !== '') {
					var visible_elements = parseInt($('#b_wrap ul').attr('class').slice(6));
					var total_elements = $('.block').length;
					var current_position = parseInt($('#b_wrap ul').css('left').slice(0, -2), 10);
					slide_distance = ((-1 * visible_elements * element_width) < current_position) ? (-1 * current_position) : (visible_elements * element_width);
				}
				
				$('#b_wrap ul').animate({ left: '+=' + slide_distance }, function() {
					bind_event_handlers();
					nav_check();
				});
				return false;
			});

			$('#b_nav .next').one('click', function() {
				if($(this).hasClass('next-off')) return false;
				unbind_event_handlers();
				var element_width = $('.block').outerWidth(true);
				var slide_distance = element_width;
				
				if($('#b_wrap ul').attr('class') !== '') {
					var visible_elements = parseInt($('#b_wrap ul').attr('class').slice(6));
					var total_elements = $('.block').length;
					var current_position = parseInt($('#b_wrap ul').css('left').slice(0, -2), 10);
					slide_distance = ((-1 * current_position + (visible_elements * 2 * element_width)) > (total_elements * element_width)) ? ((total_elements * element_width) + (current_position) - (visible_elements * element_width)) : (visible_elements * element_width);
				}
				
				$('#b_wrap ul').animate({ left: '-=' + slide_distance }, function() {
					bind_event_handlers();
					nav_check();
				});
				return false;
			});
		}
		
		unbind_event_handlers = function() {
			$('area')
				.unbind('mouseover')
				.unbind('mouseout')
				.unbind('click')
				.bind('click', function() { reset_panels(); return false; });
				
			$('.block')
				.unbind('mouseover')
				.unbind('mouseout');
				
			$('.b-minor')
				.unbind('click')
				.bind('click', function() { reset_panels(); return false; })
				.unbind('mouseover')
				.unbind('mouseout')
				.removeClass('b-minor-active');
				
			$('#b_nav .prev, #b_nav .next')
				.unbind('click')
				.bind('click', function() { return false; });
		}
		
		$('a.b-close').click(function() {
			$('.map-twin #b_wrap').css('height', '300px');
			$(this).parent().removeClass('b-major-active');
			$('.b-minor-active').removeClass('b-minor-active');
			bind_event_handlers();
			return false;
		});
		
		if($('#blocks').length > 0) {
			bind_event_handlers();
			nav_check();
		}
		
		reset_panels = function() {
			$('.overlay').css({ display: 'none' });
			$('.b-major-active').removeClass('b-major-active');
			$('.b-minor-active').removeClass('b-minor-active');
			bind_event_handlers();
		}
		
		$(document).bind('click', function(event) {
			if($('.b-major-active').length > 0) {
				if($(event.target).parents('.b-major-active').length == 0 && $(event.target).parents('#b_nav').length == 0) {
					reset_panels();
				}
			}
		});
		
		start_from_right = function() {
			if($('.block').length > 5) {
				$('#b_wrap ul', '.start_from_right').css({ left: -1 * $('.block').outerWidth(true) * ($('.block').length - 5) });
				nav_check();
			}
		}
		
		$(window).load( function() {
			if($('.start_from_right').length > 0) start_from_right();
		});
		

	/* 	EXTERNAL LINKS
		-------------------------------------------------------------*/
		
		$("a.external").click( function() {
			window.open( $(this).attr("href") );
			return false;
		});
	


	/*	CLEAR INPUT FIELDS ONFOCUS
		-------------------------------------------------------------*/
		
		$("input.clearinput").clearDefault();	
		
		
		
	/*	Contact form validation
		-------------------------------------------------------------*/	
		
		$('#contactform').submit(function() {
			var error = false;
			
			$('.required', $(this)).each(function() {
				if($(this).val() == '') {
					error = true;
					$(this).addClass('error');
				}
			});
			
			if(error) {
				$('.required-notice', $(this)).addClass('error-notice');
			}
			
			return !error;
		});
		
	
});

