/*
	Author: Johnathan Burgess
	File: Main JS File for http://www.danielbuilders.net/
*/


(function ($) {
	// Google Analytics for http://www.danielbuilders.net/
	$.trackPage('UA-2394046-11', {onload: false});
	$.fn.track.defaults.debug = true;
	
	//
	
})(jQuery);





$(window).bind("load", function() {
	
	//
	
});





$(document).ready(function () {

	//

});





/* form functions and custom form elements */
(function ($) {
	var cStatus = 'Sending';
	var ellip = '.';
	var _initDotAmt = 0;
	var _maxDotAmt = 3;
	var _dotSpeed = 200;
	
	var sendInterval = '';
	var _t = _initDotAmt;

	var _namefd = $('#contactForm .name'),
		_emailfd = $('#contactForm .email'),
		_phonefd = $('#contactForm .phone'),
		_messagefd = $('#contactForm .notes'),
		_budgetfd = $('#contactForm .projectbudget'),
		sendButton = $("li.contact-buttons a#sendform"),
		clearButton = $("li.contact-buttons a#clearform")
	
	var fds = [_namefd, _emailfd, _phonefd, _messagefd];
	var fdsDef = [];
	var fdsErr = [];
	var errMessages = [	'* Name', 
						'* Email',
						'* Phone',
						'* Notes'	];
	var btns = [sendButton, clearButton];
	
	var cErrMessages = [];
	var invalidEmail = 'Email Address is Not Valid';					
	var successMessage = 'Message was sent successfully!';
	
	var initPass = false;
	
	contact = {
		runSendingAnim : function() {
			var newStatus = cStatus;
			
			for(var i=0; i<_t; i++) {
				newStatus += ellip;
			}
			
			$('#contact #prompter #success_message').text(newStatus);
			
			if(_t < _maxDotAmt) {
				_t = _t + 1;
			} else {
				_t = _initDotAmt;
			}
		},	

		runInterval : function(_bool) {
			if(sendInterval != '') {
				window.clearInterval(sendInterval);
				sendInterval = '';
			}
				
			_t = _initDotAmt;
			
			if(_bool) {
				if(sendInterval == '') {
					sendInterval = window.setInterval('contact.runSendingAnim()', _dotSpeed);
				}
			}
		},
		
		toggleLoader : function(_bool) {
			var _loader = $('#prompter #load-holder .loader');
		
			if(_bool) {
				_loader.fadeIn(500);
			} else {
				_loader.fadeOut(500);
			}
		},
		
		setPrompt : function(_mess) {
			$('.prompter').text(_mess);
			
			//var promptSpd = 200;
			//var currMessage = $('#contact #prompter #success_message').text();
			//var messLength = currMessage.length;

			/*
if(_mess !== currMessage) {
				if(messLength > 0) {
					$('#contact #prompter #success_message').animate({opacity:0.0}, promptSpd,
						function() {
							$('#contact #prompter #success_message').text(_mess)
							$('#contact #prompter #success_message').animate({opacity:1.0}, promptSpd)
						}
					)
				} else {
					$('#prompter #success_message').css({opacity:0.0})
					$('#prompter #success_message').text(_mess)
					$('#prompter #success_message').animate({opacity:1.0}, promptSpd)
				}
			}
*/
			
			/*
if(_mess == cStatus) {
				contact.runInterval(true);
			} else {
				contact.runInterval(false);
				contact.toggleLoader(false);
			}
*/
		},
		
		initEventHandlers : function() {
			initPass = true;

			sendButton.bind('click',
				function(event) {
					/*
contact.toggleLoader(true);
					
					contact.toggleBtns(false);
					setTimeout('contact.ContactFormSubmit()',800);
*/
					
					contact.setPrompt(cStatus);
					contact.ContactFormSubmit()
				}
			);
			
			clearButton.bind('click',
				function(event) {
					/*
contact.setPrompt('');
					contact.toggleLoader(false);
					contact.runInterval(false);
					
					for(var i=0; i<fds.length; i++) {
						fds[i].val(function(){ return this.defaultValue; });
						fds[i].stop().animate({backgroundColor: '#999'}, 300)
					}
*/
				}
			);
			
			
			
			for(var i=0; i<fds.length; i++) {
				fdsDef.push(fds[i].val());
				fds[i].attr('indexVal', function() {return i})
				var _i,
					thisDef

				var initOpacity = 0.6;
				fds[i].css('opacity', initOpacity);
				
				fds[i].focus(function(){
					_i = $(this).attr('indexVal');
					thisDef = fdsDef[_i];

					$(this).stop().animate({'opacity':1.0}, 300);
					
					if($(this).val() == thisDef) {
						$(this).val('');
					}
				})
				fds[i].blur(function(){
					$(this).stop().animate({'opacity':initOpacity}, 200);

					if ($.trim($(this).val()) == '') {
						$(this).val(thisDef ? thisDef : '');
					}
				})

				fds[i].keypress(
					function (e) {
						if ((e.which && e.which == 13) || (e.keyCode && e.keyCode == 13)) {  
							sendButton.click();
							
							return false;  
						} else { 
							return true;  
						}
					}
				);
			}
			
			_budgetfd.focus(function(){
				$(this).stop().animate({'opacity':1.0}, 300);
			})
			_budgetfd.blur(function(){
				$(this).stop().animate({'opacity':initOpacity}, 200);
			})
			
			$('#budget').change(function() {
				if($(this).val() == 'no') {
					$('.chkbudget').show(300);
				} else {
					$('.chkbudget').hide(200);
				}
			})
			
			$('#deadline').change(function() {
				if($(this).val() == 'no') {
					$('.chkdeadline').show(300);
				} else {
					$('.chkdeadline').hide(200);
				}
			})
			
			//
			
		},

		initCustomForms : function(){
			//jQuery('select').customSelect();
			//jQuery('input:radio').customRadio();
			jQuery('input:checkbox').customCheckbox();
		},
		
		validateEmail : function(_email) {
			var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
			var address = _email;
			
			if(!reg.test(address)) {
				return false;
			} else {
				return true;
			}
		},
		
		ContactFormSubmit : function() {
			for(var i=0; i<fds.length; i++) {
				if(fds[i].val() == fdsDef[i] || fds[i].val() == '') {
					initPass = false;
					
					contact.setPrompt('Please fill out all of the fields.');
				} else {
					var emailVal = fds[1].val();
				
					if(!contact.validateEmail(emailVal) && initPass) {
						initPass = false;
						
						contact.setPrompt('Please enter a valid email address.');
					} else {
						initPass = true;
					}
				}
			}
			
			if(initPass) {
				$('#contactForm').submit();	
			}
		}

	}

})(jQuery);





// custom forms plugin
(function(jQuery){
	// custom checkboxes module
	jQuery.fn.customCheckbox = function(_options){
		var _options = jQuery.extend({
			checkboxStructure: '<div></div>',
			checkboxDisabled: 'disabled',
			checkboxDefault: 'checkboxArea',
			checkboxChecked: 'checkboxAreaChecked'
		}, _options);
		return this.each(function(){
			var checkbox = jQuery(this);
			if(!checkbox.hasClass('outtaHere') && checkbox.is(':checkbox')){
				var replaced = jQuery(_options.checkboxStructure);
				this._replaced = replaced;
				if(checkbox.is(':disabled')) replaced.addClass(_options.checkboxDisabled);
				else if(checkbox.is(':checked')) replaced.addClass(_options.checkboxChecked);
				else replaced.addClass(_options.checkboxDefault);

				replaced.click(function(){
					if(checkbox.is(':checked')) checkbox.removeAttr('checked');
					else checkbox.attr('checked', 'checked');
					changeCheckbox(checkbox);
				});
				checkbox.click(function(){
					changeCheckbox(checkbox);
				});
				replaced.insertBefore(checkbox);
				checkbox.addClass('outtaHere');
			}
		});
		function changeCheckbox(_this){
			_this.change();
			if(_this.is(':checked')) {
				_this.attr('value', 'yes');
				_this.get(0)._replaced.removeClass().addClass(_options.checkboxChecked);
			} else {
				_this.attr('value', 'no');
				_this.get(0)._replaced.removeClass().addClass(_options.checkboxDefault);
			}
		}
	}

	// custom radios module
	jQuery.fn.customRadio = function(_options){
		var _options = jQuery.extend({
			radioStructure: '<div></div>',
			radioDisabled: 'disabled',
			radioDefault: 'radioArea',
			radioChecked: 'radioAreaChecked'
		}, _options);
		return this.each(function(){
			var radio = jQuery(this);
			if(!radio.hasClass('outtaHere') && radio.is(':radio')){
				var replaced = jQuery(_options.radioStructure);
				this._replaced = replaced;
				if(radio.is(':disabled')) replaced.addClass(_options.radioDisabled);
				else if(radio.is(':checked')) replaced.addClass(_options.radioChecked);
				else replaced.addClass(_options.radioDefault);
				replaced.click(function(){
					if(jQuery(this).hasClass(_options.radioDefault)){
						radio.attr('checked', 'checked');
						changeRadio(radio.get(0));
					}
				});
				radio.click(function(){
					changeRadio(this);
				});
				replaced.insertBefore(radio);
				radio.addClass('outtaHere');
			}
		});
		function changeRadio(_this){
			jQuery(_this).change();
			jQuery('input:radio[name='+jQuery(_this).attr("name")+']').not(_this).each(function(){
				if(this._replaced && !jQuery(this).is(':disabled')) this._replaced.removeClass().addClass(_options.radioDefault);
			});
			_this._replaced.removeClass().addClass(_options.radioChecked);
		}
	}

	// custom selects module
	jQuery.fn.customSelect = function(_options) {
		var _options = jQuery.extend({
			selectStructure: '<div class="selectArea"><span class="left"></span><span class="center"></span><a href="#" class="selectButton"></a><div class="disabled"></div></div>',
			hideOnMouseOut: false,
			copyClass: true,
			selectText: '.center',
			selectBtn: '.selectButton',
			selectDisabled: '.disabled',
			optStructure: '<div class="optionsDivVisible"><div class="select-top"></div><div class="select-center"><ul></ul></div><div class="select-bottom"></div>',
			optList: 'ul'
		}, _options);
		return this.each(function() {
			var select = jQuery(this);
			if(!select.hasClass('outtaHere')) {
				if(select.is(':visible')) {
					var hideOnMouseOut = _options.hideOnMouseOut;
					var copyClass = _options.copyClass;
					var replaced = jQuery(_options.selectStructure);
					var selectText = replaced.find(_options.selectText);
					var selectBtn = replaced.find(_options.selectBtn);
					var selectDisabled = replaced.find(_options.selectDisabled).hide();
					var optHolder = jQuery(_options.optStructure);
					var optList = optHolder.find(_options.optList);
					if(copyClass) optHolder.addClass('drop-'+select.attr('class'));

					if(select.attr('disabled')) selectDisabled.show();
					select.find('option').each(function(){
						var selOpt = jQuery(this);
						var _opt = jQuery('<li><a href="#">' + selOpt.html() + '</a></li>');
						if(selOpt.attr('selected')) {
							selectText.html(selOpt.html());
							_opt.addClass('selected');
						}
						_opt.children('a').click(function() {
							optList.find('li').removeClass('selected');
							select.find('option').removeAttr('selected');
							jQuery(this).parent().addClass('selected');
							selOpt.attr('selected', 'selected');
							selectText.html(selOpt.html());
							select.change();
							optHolder.css({left:-9999,top:-9999});
							return false;
						});
						if(selOpt.attr('title') != 'default'){
							optList.append(_opt);
						}
					});
					replaced.width(select.outerWidth());
					replaced.insertBefore(select);
					optHolder.css({
						width: select.outerWidth(),
						position: 'absolute',
						left:-9999,
						top:-9999
					});
					jQuery(document.body).append(optHolder);

					var optTimer;
					replaced.hover(function() {
						if(optTimer) clearTimeout(optTimer);
					}, function() {
						if(hideOnMouseOut) {
							optTimer = setTimeout(function() {
								optHolder.css({left:-9999,top:-9999});
							}, 200);
						}
					});
					optHolder.hover(
					function(){
						if(optTimer) clearTimeout(optTimer);
					},
					function() {
						if(hideOnMouseOut) {
							optTimer = setTimeout(function() {
								optHolder.css({left:-9999,top:-9999});
								
							}, 200);
							selectBtn.removeClass('hover-btn');
						}
					});
					selectBtn.hover(
						function(){
							jQuery(this).addClass('hover-btn');
						},
						function(){
							jQuery(this).removeClass('hover-btn');
						}
					)
					selectBtn.click(function() {
						if(optHolder.css('left') == '-9999px') {
							if(_activeDrop) _activeDrop.css({left:-9999,top:-9999});
							optHolder.children('ul').css({height:'auto', overflow:'hidden'});
							optHolder.css({
								top: replaced.offset().top + replaced.outerHeight(),
								left: replaced.offset().left,
								display: 'block'
							});
							if(optHolder.children('ul').height() > 200) optHolder.children('ul').css({height:200, overflow:'auto'});
							_activeDrop = optHolder;
						}
						else{
							optHolder.css({left:-9999,top:-9999});
						}
						return false;
					});
					replaced.addClass(select.attr('class'));
					select.addClass('outtaHere');
					//If need scroll auto-height
					//if (optList.height() > 144 ) optList.parent().addClass('scrollable');
				}
			}
		});
	}

	// event handler on DOM ready
	var _activeDrop;
	jQuery(function(){
		jQuery('body').click(hideOptionsClick)
		jQuery(window).resize(hideOptions)
	});
	function hideOptions() {
		if(_activeDrop && _activeDrop.length) {
			_activeDrop.css({left:-9999,top:-9999});
			_activeDrop = null;
		}
	}
	function hideOptionsClick(e) {
		if(_activeDrop && _activeDrop.length) {
			var f = false;
			jQuery(e.target).parents().each(function(){
				if(this == _activeDrop.get(0)) f=true;
			});
			if(!f) {
				_activeDrop.css({left:-9999,top:-9999});
				_activeDrop = null;
			}
		}
	}
})(jQuery);

