var aBeautifulSmile = {

	init: function(){
	
		// Common setup
		aBeautifulSmile.setupDropdown();
		aBeautifulSmile.replaceSelects($('.callbackSelect'));
		aBeautifulSmile.initFormExtras();
		aBeautifulSmile.initFormDefaultValueReplace();
		aBeautifulSmile.initDatepicker();
		
		// Get width of window
		windowWidth = $(window).width();
				
	},
	
	setupDropdown: function(){
	
	    $("ul.dropdown li").hover(function(){
	    
	        $(this).addClass("hover");
	        $('ul:first',this).css('visibility', 'visible');
	    
	    }, function(){
	    
	        $(this).removeClass("hover");
	        $('ul:first',this).css('visibility', 'hidden');
	    
	    });
	
	    $aDropdown = $("ul.dropdown li:has(ul)");
	    $aDropdown.css({
	    	//'borderBottomLeftRadius': '0',
	    	//'borderBottomRightRadius':'0'
	    });
	    
	    $dropdownLink = $aDropdown.find("a:first");
	    $dropdownLink.append('<div class="arrow-down"></div>');
	    
	    $firstSub = $aDropdown.find("li:first");
	    $firstSub.css({
	    	//'borderTopRightRadius': '5px',
	    });
	    
	    $lastSub  = $aDropdown.find("li:last a");
	    $lastSub.css({
	    	'borderBottom': '0px'
	    });
	    //$("ul.dropdown li ul li:has(ul)").find("a:first").append(" &raquo; ");
	
	},
	
	replaceSelects: function($selects){
	
		// @TODO
		// if($showForm.size() > 0) is a temporary fix for form toggling
		// Form toggling should not be built it automatically, but should be done in a callback option
		// ^ Not every selected option will pop open a form
	
		$selects.each(function(){
		
			var $original = $(this).css({'position':'absolute','top':'-100000px'});
			
			var $selectWidget   = $('<div class="Canvas-select" id="Canvas-select-' + $original.attr('name') + '"><div class="Canvas-select-selected"><span></span><a class="Canvas-select-arrow"></a></div><div class="Canvas-select-options"></div></div>');
			var $selectOptions  = $('.Canvas-select-options', $selectWidget);
			var $selectSelected = $('.Canvas-select-selected', $selectWidget);
			
			$('span',$selectSelected).text($('option:selected', $original).text());
			$selectSelected.click(function(e){
				// allows document click to close this
				e.stopPropagation();
				$selectOptions.toggle();
				$('.Canvas-select-arrow').addClass('Canvas-select-arrow-active');
			});
			
			$('option', $original).each(function(){
				$('<a class="Canvas-select-option" rel="' + $(this).val() + '">' + $(this).text() + '</a>')
					.click(function(){
						var selectedValue = $(this).attr('rel');
						var $showForm = $('#' + selectedValue);
						$('span',$selectSelected).text($(this).text());
						$original.val(selectedValue);
						
						if($showForm.size() > 0){
							$('#Callback form, #Callback form .formExtras').hide();
							$showForm.show();
						}
						
					})
					.appendTo($selectOptions)
				;
			});
			$(':last', $selectOptions).addClass('lastOption');
			
			$original.before($selectWidget);
		
		});
		
		$(document).click(function(){
			$('.Canvas-select-options').hide();
			$('.Canvas-select-arrow').removeClass('Canvas-select-arrow-active');
		});
	
	},
	
	initFormExtras: function(){
	
		$('#Callback form :input').focus(function(){
			$(this).siblings('.formExtras').slideDown();
		});
	
	},
	
	initFormDefaultValueReplace: function(){
		
		$('#Callback form :input').DefaultValue();	
	},
	
	initDatepicker: function(){
	
		$('.dateSelect').each(function(index){
		
			$datepicker = $(this);
			
			var $cal   = $('.dateCalendar', $datepicker);
			var $input = $('.dateField', $datepicker);
			
			//var today = new Date();
			var oneWeek = new Date();
				oneWeek.setDate(oneWeek.getDate() + 7);
				
			$cal.DatePicker({
				flat: true,
				format: 'B d, Y',
				current: oneWeek,
				date: oneWeek,
				calendars: 1,
				starts: 0,
				onBeforeShow: function(){
					if($input.val() != "Date" && $input.val() != ""){
						$cal.DatePickerSetDate(new Date($input.val()), true);
					}
				},
				onChange: function(formatted, dates) {
					$input.val(formatted);
					$cal.stop().slideUp();
				},
				onRender: function(date) {
					return {
						disabled: (date.getDay()%6==0 ? true : false) || (date.valueOf() < oneWeek.valueOf())
					}
				}
			});
			$input.focus(function(){
				if($input.val() != "Date" && $input.val() != ""){
					$cal.DatePickerSetDate(new Date($input.val()), true);
				}
				$cal.stop().slideDown();$(this).blur();}
			);

		});
	
	}

};

$(document).ready(function(){
	aBeautifulSmile.init();
});
