/**
 * @author dt.john
 */
function tabbedNav(){
	$('#tabbed_nav a').not('#tabbed_nav.contactNav a').click(function(){
		var hrefVal = $(this).attr('href');
		hrefVal = hrefVal.substring(1);
		$('#tabbed_nav a').removeClass('active');
		$(this).addClass('active');
		$('.subContainer').hide();
		$('#'+hrefVal).show();
		return false;
	});
}
function faqToggle(){
	var faqButton;
	$('.faqQuestion').click(function(){
		faqButton = $(this).find('.faqButton');
		if (faqButton.hasClass('faqRead')) {
			// Show FAQ Answer
			$(this).next('div.faqAnswer').slideDown("slow");
			faqButton.removeClass('faqRead').addClass('faqHide');
		}else if (faqButton.hasClass('faqHide')) {
			// Hide FAQ Answer
			$(this).next('div.faqAnswer').slideUp("slow");
			faqButton.removeClass('faqHide').addClass('faqRead');
		}
		return false;
	});
}
function readmore(){
	$('a.readmore').click(function(){
		var rmLink = $(this);
		var hrefVal = $(this).attr('href');
		hrefVal = hrefVal.substring(1);
		if(rmLink.hasClass('opened')){
			rmLink.removeClass('opened');
			$('#'+hrefVal).slideUp("slow");
			rmLink.text('Read More');
		}else{
			rmLink.addClass('opened');
			$('#'+hrefVal).slideDown("slow");
			rmLink.text('Close');
		}
		return false;
	});
}
function accordian(){
	$('.accordian li a').click(function(){
		var link = $(this);
		var hrefVal = link.attr('href');
		hrefVal = $('#'+hrefVal.substring(1));
		if(hrefVal.hasClass('opened')){
			link.removeClass('active');
			hrefVal.slideUp("slow").removeClass('opened').addClass('closed');
		}else{
			link.addClass('active');
			hrefVal.slideDown("slow").removeClass('closed').addClass('opened');
		}
		return false;
	});
}
var animating = false;
function homeSliderInit(){
    $('#home_slider_wrapper').hover(
        function(){
        $('#slider_nav_container').show('slow')
        },
        function(){
        $('#slider_nav_container').hide('slow')
        }
    );    
	//add click events
	$('#slider_nav a').click(function(){
		if(animating == false){
			animating = true;
			var hrefVal = $(this).attr('href');
			hrefVal = hrefVal.substring(1);
			var slide = $('#'+hrefVal);
			var link = $(this);
			var caption = $('#'+hrefVal+'_caption');
			goToSlide(slide,link,caption);
		}
		return false;
	});
	$('#btn_next_slide').click(function(){
		if(animating == false){
			animating = true;
			nextSlide();
		}
		return false;
	});
	$('#btn_previous_slide').click(function(){
		if(animating == false){
			animating = true;
			prevSlide();
		}
		return false;
	});
}
function goToSlide(slide,link,caption){
	// Remove Active class from Elements
	$('#slider_nav a,#slider_captions li,#home_slider li').removeClass('active');	

	// Add Active class to elements
	slide.addClass('active');
	link.addClass('active');
	caption.addClass('active');
	
	// Fade in Elements
	slide.fadeIn("slow",function(){
		$('#home_slider li').not(slide).hide();
		animating = false;
	});	
}
function nextSlide(){
	var currentSlide = $('#home_slider li.active');
	var slideNext;
	if(currentSlide.hasClass('last')){
		slideNext = $('#home_slider li.first');	
	}else{
		slideNext = $('#home_slider li.active').next();	
	}
	slideNextId = slideNext.attr('id');
	goToSlide($('#'+slideNextId),$('#'+slideNextId+'_nav'),$('#'+slideNextId+'_caption'));
}
function prevSlide(){
	var currentSlide = $('#home_slider li.active');
	var slidePrev;
	if(currentSlide.hasClass('first')){
		slidePrev = $('#home_slider li.last');	
	}else{
		slidePrev = $('#home_slider li.active').prev();	
	}
	slidePrevId = slidePrev.attr('id');
	goToSlide($('#'+slidePrevId),$('#'+slidePrevId+'_nav'),$('#'+slidePrevId+'_caption'));
}

// Gallery Slider
function gallerySliderInit(){
	var galleryCount = $('#gallery_slide_container').children().length;
	var galleryWidth = galleryCount * 599;
	$('#gallery_slide_container').css('width',galleryWidth+'px');
	
	// Build "pagination" for gallery
	if(galleryCount > 1){
		var galleryNavOpen = '<div id="gallery_nav" class="container">';
		var galleryPrev = '<div id="prev_container" class="container"><a id="btn_gallery_previous" class="galleryNav button" href="#previous">Previous</a></div>';
		var galleryPagesTop = '<div id="gallery_pages" class="container">';
		var galleryPages = '';
		var galleryPagesBottom = '</div>';
		var galleryNext = '<div id="next_container" class="container"><a id="btn_gallery_next" class="galleryNav button" href="#next">Next</a></div>'
		var galleryNavClose = '</div>';
		for (var i=0; i<galleryCount; i++) {
			var countNumber = i+1;
			galleryPages += '<a id="gallery_button_'+countNumber+'" class="galleryButton" href="#gallery_'+countNumber+'">'+countNumber+'</a>'
		};
		var galleryNavInsert = galleryNavOpen+galleryPrev+galleryPagesTop+galleryPages+galleryPagesBottom+galleryNext+galleryNavClose;
		$('#gallery_wrapper').after(galleryNavInsert);
		$('#gallery_button_1').addClass('active');
		$('#gallery_pages').css('width',(galleryCount * 21)+'px');
		$('#gallery_nav').css('width',(36+(galleryCount * 21))+'px');
		
		// Set Click Events
		$('a.galleryButton').click(function(){
			gallerySlide($(this),galleryCount);
			return false;
		});
		$('#btn_gallery_previous').click(function(){
			if (!$(this).hasClass('disabled')) {
				gallerySlideNextPrev('previous',galleryCount);
			}
			return false;
		});
		$('#btn_gallery_next').click(function(){
			if (!$(this).hasClass('disabled')) {
				gallerySlideNextPrev('next',galleryCount);
			}
			return false;
		});
		disableCheck(1,galleryCount);
	}
}
function gallerySlideNextPrev(type,galleryCount){
	var currentNumber = parseInt($('#gallery_nav a.active').text());
	if(type == 'next'){
		var newSlideNumber = currentNumber + 1;
	}else if(type == 'previous'){
		var newSlideNumber = currentNumber - 1;
	}
	var link = $('#gallery_button_'+newSlideNumber);
	slideAction(link,newSlideNumber,galleryCount);
}
function slideAction(link,number,galleryCount){
	$('a.galleryButton').removeClass('active');
	link.addClass('active');
	var slideDistance = (number - 1) * 599;
	$('#gallery_slide_container').animate({left: '-'+slideDistance+'px'});
	disableCheck(number,galleryCount);
}
function gallerySlide(link,galleryCount){
	var number = parseInt(link.text());
	slideAction(link,number,galleryCount);	
}
function disableCheck(number,galleryCount){
	if(number > 1){
		$('#btn_gallery_previous').removeClass('disabled');
		if (number == galleryCount) {
			$('#btn_gallery_next').addClass('disabled');
		}else {
			$('#btn_gallery_next').removeClass('disabled');
		}
	}else if(number < galleryCount){
		$('#btn_gallery_next').removeClass('disabled');
		if (number == 1) {
			$('#btn_gallery_previous').addClass('disabled');
		}
	}
}
function openTab(){
	if(document.location.hash != ''){
		var hrefVal = document.location.hash;
		var navElem = $('#tabbed_nav a');
		for (var i=0; i<navElem.length; i++) {
			if($(navElem[i]).attr('href') == hrefVal){
				$('#tabbed_nav a').removeClass('active');
				$('.subContainer').hide();
				$(navElem[i]).addClass('active');
				$('#'+$(navElem[i]).attr('href').substr(1)).show();
				return false;
			}
		}
	}
}
function initScripts(){
	if($('tabbed_nav')) tabbedNav();
	if($('faq_wrapper')) faqToggle();
	if($('a.readmore')) readmore();
	if($('#home_slider_wrapper')) homeSliderInit();
	if($('#gallery_slide_container')) gallerySliderInit();
	if($('#tabbed_container')) openTab();
	if($('.accordian')) accordian();
}

$(document).ready(function(){
	DOMUtilities.init();
	FancyBox.init();
	initScripts();
    
    window.validateForms = {};
    if ($('#charter_request_form').length) {
        window.validateForms['charter_request_form'] = new FormValidator('charter_request_form', {
            Field1: "You must enter a business name",
            Field2: "You must enter a name",
            Field3: "You must enter a phone number",
            Field4: "You must enter a valid email"
        });
    }
    if ($('#teambuilding_request_form').length) {
        window.validateForms['teambuilding_request_form'] = new FormValidator('teambuilding_request_form', {
            Field1: "You must enter a business name",
            Field2: "You must enter a name",
            Field3: "You must enter a phone number",
            Field4: "You must enter a valid email"
        });
    }
    
    var processing = false;
    $('#charter_request_form, #teambuilding_request_form').each(function(){
        var form = this;
        $(this).submit(function(event){
            event.preventDefault();
            if( window.validateForms[this.id].validate() && (processing == false)){
                processing = true;
                $(form).find('input.submit').attr('src', $(form).find('input.submit').attr('src').replace(/_.\.png/,'_d.png'));
                $('.processing.indicator').show();
                $('#form_messages .success, #form_messages .fail').hide();
                $.post(this.action, $(this).serialize(),function(data){
                    if(data.success){
                        $('#form_messages .success').show();
                        if( form.id == 'charter_request_form' ){
                            _gaq.push(['_trackPageview', '/thanks_contact']);
                        }else if( form.id == 'teambuilding_request_form' ){
                            _gaq.push(['_trackPageview', '/thanks_team_building']);
                        }
                        // clear the form...
                        $(form).find(':input').each(function() {
                            switch(this.type) {
                                case 'password':
                                case 'select-multiple':
                                case 'select-one':
                                case 'text':
                                case 'textarea':
                                    $(this).val('');
                                    break;
                                case 'checkbox':
                                case 'radio':
                                    this.checked = false;
                            }
                        });
                    }else{
                        $('#form_messages .fail').show();
                    }
                    processing = false;
                    $(form).find('input.submit').attr('src', $(form).find('input.submit').attr('src').replace(/_.\.png/,'_i.png'));
                    $('.processing.indicator').hide();
                }, "json");
            }
        });
    });
    
 });
$.extend({
	keys: function(obj){
		var a = [];
		$.each(obj, function(k){ a.push(k) });
		return a;
	}
});
/**
 * DOM Utilies Object for handling basic DOM actions
 * @author					Dave Shepard
 * @version					1.0
 * @required libraries:		JQuery 1.3.2 or later
 * 
 * Usage:
 *     $(document).ready(function(){
 *     		DOMUtilities.init();
 *     });
 *     
 * Can be initialized via the init(); method to apply to entire <body> or
 * a scope can be passed to limit the initialization to the child elements
 * of a particular element. Individual methods can als be called and passed
 * a scope.
 */
var DOMUtilities = {
	targetBlank: function(locality){
		// XHTML 1.0 Strict work around for external links
		$(locality+' a[rel*="external"]').attr("target","_blank");
	},
	inputAutoClear: function(locality){
		$(locality+' input.clearField').focus(function(){
			if(this.defaultValue == this.value) this.value='';
		}).blur(function(){
			if(this.value == '') this.value = this.defaultValue;
		});
	},
	imgRollover: function(locality){
		// Image roll-over setup
		$(locality+' img.rollOver, '+locality+' input[type="image"].rollOver')
			.mouseover(function(){
				if (this.src.indexOf("_i.") != -1) {
					this.src = this.src.replace("_i.", "_o.");
				}
			}).mouseout(function(){
				if (this.src.indexOf("_o.") != -1) {
					this.src = this.src.replace("_o.", "_i.");
				}
				if(this.src.indexOf("_a.")) {
					this.src = this.src.replace("_a.","_i.");
				}
			}).filter("input").mousedown(function(){
				this.src = this.src.replace("_o.","_a.");
			}).mouseup(function(){
				this.src = this.src.replace("_a.","_i.");
			});
	},
	init: function(locality){
		if(locality == null) {
			locality = "body";
		}
		this.targetBlank(locality);
		this.inputAutoClear(locality);
		this.imgRollover(locality);
	}
}
var FancyBox = {
	boxen: function(){
		$("a.fancybox").fancybox({
			'hideOnContentClick':true,
			'zoomSpeedIn': 300,
			'zoomSpeedOut': 300
		});
	},	
	init: function(){
		this.boxen();	
	}
}


