spafinder.classes.overview = Class.create({
	initialize: function() {
		this.stars();
		this.setTreatmentCalendar();
		this.carousels();
		this.ellipsis();
		
		try{
			YAHOO.util.History.onReady(function(){
				window.overview.tab((YAHOO.util.History.getCurrentState('tab') || 'overview'));
			});
			YAHOO.util.History.register('tab', (YAHOO.util.History.getBookmarkedState('tab') || 'overview'), function(state){
				window.overview.tab(state);
			});
			YAHOO.util.History.initialize('yui-history-field', 'yui-history-iframe');
		}catch(e){}

		$$('#services-view.spabooker .details .first a').each(function(element){
			element.observe('click', function(event) {
				this.toggle(event.element().rel);
			}.bind(this));
		}.bind(this));
		$$('#tabs a').each(function(a){
			a.observe('click', function(event){
				this.tab(a.hash);
				event.stop();
			}.bind(this));
		}.bind(this));
	},
	tab: function(hash){
		if (hash === null) return;
		hash = hash.replace(/^#/, '');
		$$('#tabs a').invoke('removeClassName', 'active');
		$$('#tabs a[href="#'+hash+'"]').invoke('addClassName', 'active');
		$$('#content div.view').invoke('removeClassName', 'clear').invoke('addClassName', 'hide');
		$$('#'+hash+'-view').invoke('removeClassName', 'hide').invoke('addClassName', 'clear');
		//scroll to tabs if not in view
		if ( $('tabs').viewportOffset().top > document.viewport.getHeight() ){
			Effect.ScrollTo('tabs', {duration: 0.2});
		}
		var state = (YAHOO.util.History.getCurrentState("tab") || hash);
		if (hash !== state){
			//store hash in yui history manager
			YAHOO.util.History.navigate('tab', hash);
		} else if ((hash == 'deals') && (state == 'deals')){
			//track DEALS page views for SF
			pageViewTracker.each(function(url){
				if (url.indexOf('vt=1') == -1){
					var img = new Image(1, 1);
					img.src = url;
				}
			});
			//track page views for GA
			pageTracker._trackPageview(window.location.href);
		} else {
			//track NON-DEALS page views for SF
			pageViewTracker.each(function(url){
				if (url.indexOf('vt=1') != -1){
					var img = new Image(1, 1);
					img.src = url;
				}
			});
			//track page views for GA
			pageTracker._trackPageview(window.location.href);
		}
		if ((hash == 'overview') || (hash === 'address')){
			$('map-'+hash).contentDocument.location.reload(true);
		}
	},
	ellipsis: function(){
		$$('.ellipsis').each(function(element){
			var text = element.innerHTML;
			if ( text.length > 560 ) {
				var a = new Element('a', {'class':'read-more', 'href':'#read-more', 'onclick':'return false;'}).update("Read more");
				element.update(text.substr(0, 560) + '&#8230;').appendChild(a);
				element.select('a[class="read-more"]').first().observe('click', function(event) {
					element.update(text);
				});
			}
		});
	},
	toggle: function(element) {
		if (!(element = $(element))) return;
		if ( element.getStyle('display') != 'block' ) {
			element.setStyle({display: 'block'});
		} else {
			element.setStyle({display: 'none'});
		}
	},
	setTreatmentCalendar: function() {
		if ( $('str_apptOptionDate') !== null ) {
			Zapatec.Calendar.setup({
				weekNumbers    : false,
				disableYearNav : true,
				electric       : false,
				showsTime      : false,
				inputField     : "str_apptOptionDate",
				button         : "str_apptOptionDate",
				ifFormat       : "%m/%d/%Y",
				daFormat       : "%m/%d/%Y",
				onClose        : function(calendar) {
					calendar.destroy();
				},
				dateStatusFunc : function(date) {
					date.setHours(0,0,0,0);
					var now = new Date().setHours(0,0,0,0);
					if ( date < now ) {
						return true;
					}
					return false;
				}
			});
			$('str_apptOptionDate').observe('click', function(event) {
				$$('div[class="calendar"]').first().setStyle({zIndex: 100001});
			});
		}
	},
	carousels: function() {
		var scroller = new Carousel($('scroller').down('.carousel'), $('scroller').down('.carousel').select('.slide'), $('scroller').select('a.carousel-control'), {
			duration: 0.5,
			visibleSlides: 5,
			wheel: false,
			disabledClassName: 'inactive',
			selectedClassName: 'active'
		});
		var viewer = new Carousel($('viewer'), $('viewer').select('.slide'), $('scroller').select('a.carousel-jumper'), {
			auto: true,
			frequency: 5,
			circular: true,
			wheel: false,
			disabledClassName: 'inactive',
			selectedClassName: 'active',
			beforeMove: function() {
				viewer.controls.invoke('removeClassName', viewer.options.selectedClassName);
			},
			afterMove: function() {
				if ( !Object.isUndefined(viewer.current) ) {
					var index = viewer.current._index + 1;
					if ( index == (viewer.slides.length) ) {
						scroller.first();
					} else if ( index > scroller.options.visibleSlides ) {
						scroller.next();
					}
					var jumper = 'gallery-jumper-' + (index).toPaddedString(2);
					$(jumper).addClassName(viewer.options.selectedClassName);
				}
			}
		});
	},
	stars: function() {
		$$('#breadcrumb .reviews span.starbox').each(function(element) {
			spafinder.Document.stars(element, element.select('.average')[0].innerHTML, {
				ratedUrl: '/assets/images/common/star-blue-23x21.gif',
				ghostUrl: '/assets/images/common/star-white-23x21.gif'
			});
		});
		$$('#contact .rating .stars').each(function(element){
			spafinder.Document.stars(element, element.select('.average')[0].innerHTML, {
				ratedUrl: '/assets/images/spas/overview/star-blue-20x18.gif',
				ghostUrl: '/assets/images/spas/overview/star-white-20x18.gif'
			});
		});
		$$('#reviews-view .hreview-aggregate .stars', '#reviews-view .hreview .publication .stars').each(function(element){
			spafinder.Document.stars(element, element.select('.average')[0].innerHTML, {
				ratedUrl: '/assets/images/common/star-blue-17x16.gif',
				ghostUrl: '/assets/images/common/star-gray-17x16.gif'
			});
		});
		$$('#reviews-view .hreview .categories .stars', '#sidebar .hreview .stars', '#nearby-spas .stars').each(function(element){
			spafinder.Document.stars(element, element.select('.average')[0].innerHTML);
		});
	}
});
document.observe("dom:loaded", function() {
	window.overview = new spafinder.classes.overview();
});