/**
 * @author dt.john
 */
 $(document).ready(function(){
	window.validateForms = {};
	DOMUtilities.init();
	FancyBox.init();
	Map.init();
	ImageFade.init();
	HomeSlide.init();
	Showcase.init();
	Contact.init();
	Search.init();
    if ($('#pagination').length){
        $('#pagination a').each(function(){
            var str = $(this).html();
            var pos;
            if(str.search(/last/i) != -1){
                pos = 'last';
            }else if(str.search(/first/i) != -1){
                pos = 'first';
            }
            if(pos == 'last'){
                $('#pagination a:last').css('width','40px');
            }else if(pos == 'first'){
                $('#pagination a:first').css('width','40px');
            }
        });
    }
 });
 var Contact = {
 	
 	init: function(){
		if($('#form_contact').length){
			window.validateForms['form_contact'] = new FormValidator('form_contact',{name: 'Name Required', email: 'Email Address Required',message: 'Message Required'});
		}
		$('#form_contact').submit(function(s){	
			s.preventDefault();
			return false;
		});
		$('#form_contact input.submit').click(function(e){
			if(window.validateForms['form_contact'].validate()){
				e.preventDefault();
				$.post(
					'/codebehind/contact.php',
					$('#form_contact').serialize(),
					function(response){
						if(response.success){
							var success = response.success;
						}						
					},
					'json'
				);		
				$('#contact_success').fadeIn('fast',function(){
					$('#contact_success').animate({
						opacity: 1.0
					}, 3000, function(){
						$('#contact_success').fadeOut('slow');
					});
				});
				return false;
			}
		});
		
	}
 }
 var Search = {
 	init: function(){
		if($('#project_search_form').length){
			$('#project_search_form').submit(function(e){
				e.preventDefault();
				if($('input#keywords').val().length > 3){
					$('#project_search_form').unbind('submit').submit();
				}else{
					var searchError = '<span id="search_error">Search must contain more than 3 characters.</span>';
					$('#project_search_form span.inputWrapper').addClass('error');
					$('#content').append(searchError);
				}
			});
			$('input#keywords').keyup(function(e){
				e.preventDefault();
				if ($('input#keywords').val().length > 3) {
					if($('#project_search_form span.inputWrapper').hasClass('error')){
						$('#project_search_form span.inputWrapper').removeClass('error');
						$('#search_error').remove();
					}
				}
				return false;
			});
		}
	}
 }
 
/**
 * 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.");
			});
	},
	scrollTo: function(locality){
		//scrollTo setup
		$(locality+' a.scrollTo')
			.click(function(){
				$.scrollTo('#content', 800);
				return false;
			});
	},
	init: function(locality){
		if(locality == null) {
			locality = "body";
		}
		this.targetBlank(locality);
		this.inputAutoClear(locality);
		this.imgRollover(locality);
		this.scrollTo(locality);
	}
}
var FancyBox = {
	boxen: function(){
		if ($('.fancybox').length) {
			$(".fancybox").fancybox({
				'hideOnContentClick': true,
				'speedIn': 300,
				'speedOut': 300
			});
		}
		if ($('.projectFB').length) {
			$(".projectFB").fancybox({
				'speedIn': 300,
				'speedOut': 300,
				'padding': 0,
				'width': 960,
				'height': 731,
                'margin': 0,
                'autoScale': false,
                'autoDimensions': false,
				'hideOnContentClick': false,
                'titleShow': false,
                'scrolling': 'no',
                'onStart': function(){
                    document.body.style.overflowX = 'hidden';
                },
                'onClosed': function(){
                    document.body.style.overflowX = '';
                },
				'onComplete': function(){
					Cufon.replace('.projectSingle h1, .projectSingle h2, .projectSingle h3, .projectSingle h4, .projectSingle h5, .graphPercentage',{fontFamily: 'avantgarde'});
					Cufon.replace('a.slideNav, a.prevNextLink',{fontFamily: 'avantgarde', hover: true});
					projectDetailSlide.init();
				}
			});
		}
	},	
	init: function(){
		this.boxen();	
	}
}



var Map = {
	hoverOver: function(markerID){
		$('#location_'+markerID).addClass('hover');
	},
	hoverOut: function(markerID){
		$('#location_'+markerID).removeClass('hover');
	},
	getMarkerID: function(hoverElem,hoverType){
		markerID = hoverElem.attr('id');
		markerID = markerID.split('_');
		
		if(hoverType == 'over'){
			Map.hoverOver(markerID[1]);
		}else if(hoverType == 'out'){
			Map.hoverOut(markerID[1]);
		}		
	},
	setActive: function(){},
	init: function(){
		if($('a.mapMarker').length){
			// Set Hover Event
			$('a.mapMarker').hover(
				//Over State
				function(){
					Map.getMarkerID($(this),'over');
				},
				//Out State
				function(){
					Map.getMarkerID($(this),'out');
				}
			);
		}
		if($('a.region').length){
			$('a.region').hover(
				//Over State
				function(){
					Map.getMarkerID($(this),'over');
				},
				//Out State
				function(){
					Map.getMarkerID($(this),'out');
				}
			);
		}
	}
}

var HomeSlide = {
	stopAnimation: false,
	animating: false,
	delay: 4,
	currentSlide: 1,
	nextSlide: 2,
	totalSlides: 0,
	next: function(){
		if (HomeSlide.stopAnimation == false) {
			$('#home_slider_wrapper #home_slider_nav a').removeClass('active');
			$('#home_slider_wrapper #nav_' + HomeSlide.nextSlide + ' a').addClass('active');
			var slideID = $('#home_slider_wrapper #slide_' + HomeSlide.nextSlide);
			HomeSlide.goToSlide(slideID);
			HomeSlide.setSlideNumbers();
			$('#home_slider_wrapper').animate({opacity: 1.0},6000,'linear',function(){
				HomeSlide.next();
			});
		}	
	},
	goToSlide: function(slideID){
		$('#home_slider_wrapper #home_slider li').removeClass('active');
		$('#home_slider_wrapper #home_slider_meta li.active').fadeOut('fast');
		$('#home_slider_wrapper #home_slider_meta li').removeClass('active');		
		$('#home_slider_wrapper #title_'+HomeSlide.nextSlide).fadeIn('fast',function(){
			$(this).addClass('active');
		});
		slideID.addClass('active');
		slideID.fadeIn('slow',function(){
			$('#home_slider_wrapper #home_slider li:not(.active)').hide();
			HomeSlide.animating = false;
		});
	},
	setSlideNumbers: function(){
		var slideNumber = $('#home_slider_wrapper #home_slider li.active').attr('id');
		slideNumber = slideNumber.split('_');
		HomeSlide.currentSlide = parseInt(slideNumber[1]);
		if(HomeSlide.currentSlide < HomeSlide.totalSlides){
			HomeSlide.nextSlide = HomeSlide.currentSlide + 1;
		}else{
			HomeSlide.nextSlide = 1;
		}
	},
	init: function(){
		if($('#home_slider_wrapper').length){
			HomeSlide.totalSlides = $('#home_slider_wrapper #home_slider li').length;
			// Start Delay/Auto-cycle
			$('#home_slider_wrapper').animate({opacity: 1.0},3000,'linear',function(){
				HomeSlide.next();
			});
//			
//			// Click Event
//			$('#home_slider_wrapper #home_slider_nav a').click(function(){
//				if(HomeSlide.animating == false){
//					HomeSlide.stopAnimation = true;
//					HomeSlide.animating = true;
//					$('#home_slider_wrapper #home_slider_nav a').removeClass('active');
//					$(this).addClass('active');
//					slideID = $(this).attr('href').split('#');
//					var slideNumber = slideID[1].split('_');
//					HomeSlide.nextSlide = slideNumber[1];
//					var slideID = $('#home_slider_wrapper #'+slideID[1]);
//					HomeSlide.goToSlide(slideID);
//				}
//				return false;
//			});
		}
	}
}

var ImageFade = {
	animating: false,
	select: function(picID){
		$('#image_preview .picture').removeClass('active');
		picID.addClass('active');
		ImageFade.show(picID);
	},
	show: function(picID){
		picID.fadeIn('slow',function(){
			ImageFade.hide(picID);
		});
	},
	hide: function(picID){
		$('#image_preview .picture:not(.active)').hide();
		ImageFade.animating = false;
	},
	init: function(){
		if($('a.picThumb').length){
			$('a.picThumb').click(function(){
				if(ImageFade.animating == false){
					ImageFade.animating = true;
					picID = $(this).attr('href');
					picID = picID.substr(1);
					picID = $('#'+picID);
					if(!picID.hasClass('active')){
						$('a.picThumb').removeClass('active');
						$(this).addClass('active');
						ImageFade.select(picID);	
					}
				}
				return false;
			});
		}
	}
}


var Showcase = {
	animating: false,
	slideCount: 0,
	current: 0,
	startPosition: 145,
	position: 0,
	interval: 670,
	duration: 500, //in milliseconds
	width: 0,
	limitPosition: 0,
	next: function(){
		if($('#previous_showcase').hasClass('disabled')){
			$('#previous_showcase').removeClass('disabled');
		}
		Showcase.position = Showcase.position - Showcase.interval;
		$('#showcase_list').animate({
			left: Showcase.position+'px'
		}, Showcase.duration,'',function(){
			Showcase.animating = false;
			if (Math.abs(Showcase.position) >= Showcase.limitPosition) {
				// disable next button
				$('#next_showcase').addClass('disabled');
			}
		});
		$('#showcase_'+Showcase.current+'_info').fadeOut('normal').removeClass('active');
		Showcase.current++;
		$('#showcase_'+Showcase.current+'_info').fadeIn('normal').addClass('active');
		$('#showcase_current').text(""+Showcase.current);
	},
	prev: function(){
		if($('#next_showcase').hasClass('disabled')){
			$('#next_showcase').removeClass('disabled');
		}
		Showcase.position = Showcase.position + Showcase.interval;
		$('#showcase_list').animate({
			left: Showcase.position+'px'
		}, Showcase.duration,'',function(){
			Showcase.animating = false;
			if (Showcase.position >= Showcase.startPosition) {
				// disable previous button
				$('#previous_showcase').addClass('disabled');
			}
		});
		$('#showcase_'+Showcase.current+'_info').fadeOut('normal').removeClass('active');
		Showcase.current--;
		$('#showcase_'+Showcase.current+'_info').fadeIn('normal').addClass('active');
		$('#showcase_current').text(""+Showcase.current);
	},
	init: function(){
		if($('#showcase_wrapper').length){
			Showcase.current = 1;
			Showcase.slideCount = $('.showcaseSlide').length;
			Showcase.width = Showcase.slideCount * 670;
			$('#showcase_list').css('width',Showcase.width+'px');
			Showcase.position = Showcase.startPosition;
			Showcase.limitPosition = Showcase.width - Showcase.startPosition - Showcase.interval;
		}
		if($('#next_showcase').length){
				$('#next_showcase').click(function(){
					if(!$('#next_showcase').hasClass('disabled')){
						if(Showcase.animating == false){
							if (Math.abs(Showcase.position) < Showcase.limitPosition) {
								Showcase.animating = true;
								Showcase.next();
							}
						}
						
					}
					return false;
				});
		}
		if($('#previous_showcase').length){
				$('#previous_showcase').addClass('disabled');
				$('#previous_showcase').click(function(){
					if (!$('#previous_showcase').hasClass('disabled')) {
						if (Showcase.animating == false) {
							if (Math.abs(Showcase.position) <= Showcase.limitPosition) {
								Showcase.animating = true;
								Showcase.prev();
							}
						}
					}
					return false;
				});
		}
	}
}

var projectDetailSlide = {
	stopAnimation: false,
	animating: false,
	delay: 4,
	currentSlide: 1,
	nextSlide: 2,
	prevSlide: 0,
	totalSlides: 0,
	next: function(){
		$('#project_slide_show .slideNav').removeClass('active');
		$('#project_slide_show #nav_' + projectDetailSlide.nextSlide).addClass('active');
		var slideID = $('#project_slide_show #slide_' + projectDetailSlide.nextSlide);
		projectDetailSlide.goToSlide(slideID);
	},
	prev: function(){
		$('#project_slide_show .slideNav').removeClass('active');
		$('#project_slide_show #nav_' + projectDetailSlide.prevSlide).addClass('active');
		var slideID = $('#project_slide_show #slide_' + projectDetailSlide.prevSlide);
		projectDetailSlide.goToSlide(slideID);
	},
	goToSlide: function(slideID){
		$('#project_slide_show .projectSlide').removeClass('active');
		slideID.addClass('active');
		slideID.fadeIn('slow', function(){
			$('#project_slide_show .projectSlide:not(.active)').hide();
			projectDetailSlide.setSlideNumbers();
			projectDetailSlide.animating = false;
		});
		Cufon.replace('#project_slide_show a.slideNav',{fontFamily: 'avantgarde', hover: true});
	},
	setSlideNumbers: function(){
		var slideNumber = $('#project_slides li.active').attr('id');
		slideNumber = slideNumber.split('_');
		projectDetailSlide.currentSlide = parseInt(slideNumber[1]);
		if (projectDetailSlide.currentSlide < projectDetailSlide.totalSlides) {
			projectDetailSlide.nextSlide = projectDetailSlide.currentSlide + 1;
		}
		else {
			projectDetailSlide.nextSlide = 1;
		}
		if(projectDetailSlide.currentSlide == 1){
			projectDetailSlide.prevSlide = projectDetailSlide.totalSlides;
		}else{
			projectDetailSlide.prevSlide = projectDetailSlide.currentSlide - 1;
		}
	},
	init: function(){
		if ($('#project_slide_show').length) {
			projectDetailSlide.totalSlides = $('#project_slide_show .projectSlide').length;			
			// Click Event
			$('#project_slide_show .slideNav').click(function(){
				if (projectDetailSlide.animating == false) {
					projectDetailSlide.animating = true;
					$('#project_slide_show .slideNav').removeClass('active');
					$(this).addClass('active');
					var slideID = $(this).attr('href').split('#');
					slideID = $('#project_slide_show #' + slideID[1]);
					projectDetailSlide.goToSlide(slideID);
				}
				return false;
			});
			$('#project_slide_show #next_slide').click(function(){
				if (projectDetailSlide.animating == false) {
					projectDetailSlide.animating = true;
					projectDetailSlide.next();
				}
				return false;
			});
			$('#project_slide_show #prev_slide').click(function(){
				if (projectDetailSlide.animating == false) {
					projectDetailSlide.animating = true;
					projectDetailSlide.prev();
				}
				return false;
			});
		}
	}
}


/* Cookie Object */
var Cookie = {
	create: function(name,value,days){
		if (days) {
			var date = new Date();
			date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
			var expires = "; expires=" + date.toGMTString();
		}
		else {
			var expires = "";
		}
		document.cookie = name+"="+value+expires+"; path=/";
	},
	read: function(name){
		var nameEQ = name + "=";
		var ca = document.cookie.split(';');
		for(var i=0;i < ca.length;i++) {
			var c = ca[i];
			while (c.charAt(0)===' '){ c = c.substring(1,c.length); }
			if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
		}
		return null;
	},
	erase: function(name){
		Cookie.create(name,"",-1);
	}
}
