$.fn.ntext = function(){
	return $(this).text().replace(/^\s+|\s+$/g,'');
}

$.fn.customSelect = function(){
	if(!$.browser.msie6()){
		$(this).each(function(){
			var s = $(this), o = s.offset(), d = $('<div>'), v = $('<div>').addClass('custom-select-value').text(this.options[this.selectedIndex].text);
			s.css({opacity:0,zIndex:3000,position:'relative'}).bind('change',function(){
				$(this.customSelect).find('.custom-select-value').text(this.options[this.selectedIndex].text)
			});
			d.css({position:'absolute',zIndex:2000,width:s.outerWidth()}).addClass('custom-select').append(v);
			$(s).before(d);	
			s.get(0).customSelect = d.get(0);
		});	
	}
}

$.browser.msie6 = function(){
   return ($.browser.msie && typeof document.body.style.maxHeight == 'undefined') ? true : false;
}

var affUI = {
	init:function(){
		Cufon.now(); // Prevents browser flicker when replacing elements
		this.cssFix();
		this.subMenus(); 		// Sub menus for main nav
		this.langMenu(); 		// Top language dropdown		
		this.datePickers();	// Widget datepickers
		this.widgetInit(); 	// Other widget stuff
		this.setSearch(); 	// Search default value setter
		this.scrollPanes(); 	// Adds scroller to class="scrollpane"
		//this.dropShadows();	// Layout dropshadows
		this.galleryImages();
		this.floorplanImages();
		this.mapSelectionsInit();
		this.videoSelectionsInit();
	},
	scrollPanes:function(){
		$('.scrollpane').jScrollPane({showArrows:false, scrollbarWidth: 5});		
	},
	widgetInit:function(){
		$('.booking-controls button').hover(
			function(){
				var i = $(this).find('img');
				i.attr('src', i.attr('src').replace(/off\.gif/,'.gif'));
			},
			function(){
				var i = $(this).find('img');
				i.attr('src', i.attr('src').replace(/\.gif/,'off.gif'));			
			}
		);
		$('#book-your-stay form fieldset.booking-method label').click(function(){ 
			$(this).parent().find('label').each(function(){
				$(this).removeClass('active');
				Cufon.replace(this,{fontFamily:'Gotham Medium'});
			});
			$(this).addClass('active');
			Cufon.replace(this,{fontFamily:'Gotham Medium'});
		});
		
		$('#book-your-stay select').customSelect();
		
	},
	setSearch:function(){
		$('#search-term').focus(function(){
			var inp = $(this);
			inp.val(inp.val() == inp.get(0).defaultValue ? '' : inp.val());
		}).blur(function(){
			var inp = $(this);
			inp.val(inp.val() =='' ? inp.get(0).defaultValue : inp.val());
		});
			
	},
	datePickers:function(){
		$('.affui-datepicker').datepicker();		
		$('.affui-pickdate').click(function(){ $(this).prev().focus(); });
	},
	cssFix:function(){
		$('ul').find('li:last').addClass('last-child');
		$('ul').find('li:first').addClass('first-child');
	},
	dropShadows:function(){
		
		var ff2OSX = false;
		var ua = navigator.userAgent.toLowerCase();
		if (/firefox[\/\s](\d+\.\d+)/.test(ua)) {
			var firefox_version = new Number(RegExp.$1);
			if (firefox_version < 3 && ua.indexOf('mac') != -1) {
				ff2OSX = true;
			}
		}
	
		if(!ff2OSX){
			$('.shadow').dropShadow({left:-2,top:-2,bleedX:2,bleedY:2,color:'#868674',opacity:0.30});
		}else{
			$('.shadow').dropShadow({left:-1,top:-1,bleedX:0,bleedY:0,color:'#DDD9D4'});
		}
		
	},
	langMenu:function(){
		$('.language>ul>li.active>a:first')
			.bind('mouseover',function(e){
				var c = this;
				var o = $(c).offset();
				
				e.preventDefault();
				clearTimeout(c.langTimer);
				
				if(!c.langMenu && !c.langsActive){
					c.langsActive = true;
					var d = $('<div>').addClass('generated-langs');
					var u = $('.language>ul').clone(true);	
					u.find('li').each(function(){		
						if($(this).ntext() == $(c).ntext()) $(this).remove();
					});	
					d.append(u);
					d.bind('mouseover',function(e){
						c.langsActive = true;
					}).bind('mouseout',function(e){
						if(c.langsActive){
							c.langsActive = false;
							c.langTimer = setTimeout(function(){
								if(c.langsActive == false && c.langMenu){
									$(c.langMenu).slideUp('fast',function(){ $(this).remove(); c.langMenu = null; c.langsActive = false });
								}						
							},350);					
						}						
					});
					
					d.css({position:'absolute',display:'none',top:o.top + $(c).outerHeight(), left:o.left});
					$('body').append(d);	
					d.slideDown('fast',function(){ c.langsActive = true; c.langMenu = d.get(0); });				
				}
			})
			.bind('mouseout',function(e){
				var c = this;
				if(c.langsActive){
					c.langsActive = false;
					c.langTimer = setTimeout(function(){
						if(c.langsActive == false && c.langMenu){
							$(c.langMenu).slideUp('fast',function(){ $(this).remove(); c.langMenu = null; c.langsActive = false });
						}						
					},350);					
				}				
			});
	},
	subMenus:function(){
		$('#mainnav>ul>li>a').each(function(){
			
			if($(this).next('ul').length > 0){
								
				$(this).bind('mouseover',function(e){
					var c = this;
					var o = $(c).offset();

					e.preventDefault();
					clearTimeout(c.menuTimer);
									
					if(!c.myMenu && !c.menuActive){
						c.menuActive = true;
						var u = $(this).next('ul').clone(true);	
						
						u.bind('mouseover',function(e){
							c.menuActive = true;
						}).bind('mouseout',function(e){
							if(c.menuActive){
								c.menuActive = false;								
								c.menuTimer = setTimeout(function(){
									if(c.menuActive == false && c.myMenu){										
										$(c.myMenu).slideUp('fast',function(){ $(this).remove(); c.myMenu = null; c.menuActive = false });
									}						
								},250);					
							}						
						});

						$('body').append(u);	
						
						c.myMenu = u.get(0); 
						
						u.css({visibility:'hidden',cssFloat:'left',display:'block'});
						var w = u.width();
						var h = u.height();
						w = $.browser.msie6() ? 200 : w;			
												
						u.css({visibility:'visible',display:'none'});
						u.css({position:'absolute',zIndex:10001,height:h,width:w,display:'none',top:o.top + $(c).outerHeight()+5, left:o.left-3});						
						u.slideDown('fast',function(){ c.menuActive = true; });				
					}
				})
				.bind('mouseout',function(e){
					var c = this;
					if(c.menuActive){
						c.menuActive = false;
						c.menuTimer = setTimeout(function(){
							if(c.menuActive == false && c.myMenu){
								$(c.menuMenu).slideUp('fast',function(){ $(this).remove(); c.myMenu = null; c.menuActive = false });
							}						
						},250);					
					}				
				});
			}
		});
	},
	offersInit:function(options){
		var ops = {onClick:function(){}};
		
		if(options instanceof Object){
			for(k in options){
				ops[k] = options[k];
			}
		}
		
		var radioOn = 'images/radioon.gif';
		var radioOff = 'images/radiooff.gif';
		var clickCallback = typeof clickCallback != 'undefined' ? clickCallback : function(){};
		
		$('input[type=\'radio\']').each(function(){
			var img = $('<img>').attr('src', this.checked ? radioOn : radioOff).css({cursor:'pointer'});	
			
			function checkSelected(e){
				e.preventDefault();
				var me = $(e.data.element);

				$('input[name=\''+me.attr('name')+'\']').each(function(){
					$(this).prev('img').attr('src', radioOff);
					this.checked = false;
				});
				
				me.prev('img').attr('src', radioOn);
				me.get(0).checked = true;	
				
				ops.onClick.call(me);			
				
			}
			
			$(img).bind('click', {element:this}, checkSelected);							
			$(this).before(img).hide();
			$(this).next('label').bind('click',{element:this},checkSelected);	
			
		});	
	},
	filterOfferSelection:function(){		
		
		var loader = $('<img>').attr('src','images/ajax-loader.gif').css({position:'absolute',top:150,left:250,zIndex:5000});
		
		$('.offer').removeClass('active');
		$('#special-offers').append(loader).removeShadow();
		
		var wait = setTimeout(function(){			
		
			var selectedLocation = parseInt($('input[name=\'destination\']:checked').val());		
			var selectedInterest = parseInt($('input[name=\'interests\']:checked').val());	
		
			selectedLocation = isNaN(selectedLocation) ? [] : [selectedLocation];
			selectedInterest = isNaN(selectedInterest) ? [] : [selectedInterest];
			
			var results = affUI.offers.runFilter(selectedLocation,selectedInterest);	

			for(i=0;i<results.length;i++){
				$('#offer-'+results[i].id).addClass('active');
			}		
	
			if(results.length == 0){
				$('blockquote.empty').addClass('active');
			}
		
			$('#special-offers').redrawShadow();
			
			loader.remove();
			
		},100);		
		
	},
	sendFilters:function(){
		var selectedLocation = parseInt($('input[name=\'destination\']:checked').val());		
		var selectedInterest = parseInt($('input[name=\'interests\']:checked').val());
		
		window.location.replace('specials.html?selectedLocation='+selectedLocation+'&selectedInterest='+selectedInterest);		
		
	},
	mapLightBox:function(mapSrc){
	   
	   $(document.documentElement).css('overflow','hidden');
	   
		var mapWidth = 600;
		var mapHeight = 525;
		
	   var st = document.documentElement.scrollTop||document.body.scrollTop;
	   var wh = $(window).height();
	   var ww = $(window).width();
		
	   var d = $('<div>').addClass('map-lightbox').css({zIndex:8000,background:'#000',opacity:0.85,position:'absolute',top:0,left:0,width:ww,height:wh+st});	   
	   var ifr = $('<iframe>').addClass('map-iframe').attr({scrolling:'no',border:'0','frameBorder':'none',src:'maps.html?'+mapSrc}).css({zIndex:8001,position:'absolute',border:0,width:mapWidth,height:mapHeight,top:(wh/2-mapHeight/2)+st,left:(ww/2-mapWidth/2)});	 

	   $('body').append(d);	 
	   $('body').append(ifr);
	   
	   $(window).bind('resize', affUI.redrawMapLightBox);
	},
	videoLightBox:function(videoSrc){
	   
	   $(document.documentElement).css('overflow','hidden');
	   
		var mapWidth = 524;
		var mapHeight = 385;
		
	   var st = document.documentElement.scrollTop||document.body.scrollTop;
	   var wh = $(window).height();
	   var ww = $(window).width();
		
	   var d = $('<div>').addClass('video-lightbox').css({zIndex:8000,background:'#000',opacity:0.85,position:'absolute',top:0,left:0,width:ww,height:wh+st});	   
	   var ifr = $('<iframe>').addClass('video-iframe').attr({scrolling:'no',border:'0','frameBorder':'none',src:'videos.html?'+videoSrc}).css({zIndex:8001,position:'absolute',border:0,width:mapWidth,height:mapHeight,top:(wh/2-mapHeight/2)+st,left:(ww/2-mapWidth/2)});	 

	   $('body').append(d);	 
	   $('body').append(ifr);
	   
	   $(window).bind('resize', affUI.redrawMapLightBox);
	},
	
	redrawMapLightBox:function(){
	   if($('.map-lightbox').length > 0){
	      setTimeout(function(){
      	   var st = document.documentElement.scrollTop||document.body.scrollTop;
      	   var wh = $(window).height();
      	   var ww = $(window).width();
				var iw = $('.map-iframe').outerWidth();
				var ih = $('.map-iframe').outerHeight();
      	   $('.map-lightbox').css({top:0,left:0,width:ww,height:wh+st});   
      	   $('.map-iframe').css({top:(wh/2-ih/2)+st,left:(ww/2-iw/2)});
      	},10);
	   }
	},
	
	redrawVideoLightBox:function(){
	   if($('.video-lightbox').length > 0){
	      setTimeout(function(){
      	   var st = document.documentElement.scrollTop||document.body.scrollTop;
      	   var wh = $(window).height();
      	   var ww = $(window).width();
				var iw = $('.video-iframe').outerWidth();
				var ih = $('.video-iframe').outerHeight();
				
      	   $('.video-lightbox').css({top:0,left:0,width:ww,height:wh+st});   
      	   $('.video-iframe').css({top:(wh/2-ih/2)+st,left:(ww/2-iw/2)});
      	},10);
	   }
	},
	
	closeMapLightBox:function(){
	 	$('.map-lightbox, .map-iframe').remove();
	 	$(document.documentElement).css('overflowY','auto');
	 	$(window).unbind('resize', affUI.redrawMapLightBox);
	},
	closeVideoLightBox:function(){
	 	$('.video-lightbox, .video-iframe').remove();
	 	$(document.documentElement).css('overflowY','auto');
		$('object,embed').show();
	 	$(window).unbind('resize', affUI.redrawVideoLightBox);
	},
	galleryImages:function(){
		$('.gallery-images a').lightBox({fixedNavigation:true,overlayOpacity:.65,imageBtnPrev:'images/btnprev.gif',imageBtnNext:'images/btnnext.gif',imageBtnClose:'images/btnclose.gif'});	
	},
	floorplanImages:function(){
		$('.floorplan-images a').lightBox({txtImage:'Floorplan',fixedNavigation:true,overlayOpacity:.65,imageBtnPrev:'images/btnprev.gif',imageBtnNext:'images/btnnext.gif',imageBtnClose:'images/btnclose.gif'});
		$('.floorplan-list div.image>a').lightBox({txtImage:'Floorplan',fixedNavigation:true,overlayOpacity:.65,imageBtnPrev:'images/btnprev.gif',imageBtnNext:'images/btnnext.gif',imageBtnClose:'images/btnclose.gif'});
	},
	mapSelectionsInit:function(){
		$('#map-selection a').click(function(e){
			e.preventDefault();
			affUI.mapLightBox($(this).attr('href'));
			return false;
		});	
	},
	videoSelectionsInit:function(){
		$('.video-list .image>a').click(function(e){
			e.preventDefault();
			e.stopPropagation();
			var href = $(this).attr('href');
			$('object,embed').hide();
			affUI.videoLightBox(href.substr(href.indexOf('?')+1));
			return false;
		});	
	}
	
}

/*
 * This gets set before the DOM is ready
 */

Cufon.replace(Array(
	'#page-content h2',
	'#form-content h2',
	'.hotel-info h2',
	'#special-offers>h2',
	'#offer-details>h2',
	'#content-container>h2', 
	'#my-affinia h2',
	'.partner-info>h4',
	'.other-hotels h2'), {fontFamily:'Gotham Light'});

Cufon.replace(Array(
	'#myaffinia-overview h2',
	'.offer .offer-details h3',
	'#hotel-information blockquote h3'), {fontFamily:'Gotham Medium'});
	
Cufon.replace(Array(
	'#mainnav>ul>li>a'), {hover:true,fontFamily:'Gotham Medium'});

Cufon.replace(Array(
	'.hotel-quick-info h3',
	'.hotel-quick-info h4', 
	'.hotel-info h1',
	'.hotel-info h3',
	'.partner-info h3',
	'.events-intro h3'),{fontFamily:'Gotham Book'});

