spafinder.classes.overview = Class.create({
	initialize: function() {
		this.carousels();
		this.starbox();
		this.observers();
		this.ellipsis();
		this.setTreatmentCalendar();
	},
	observers: function() {
		try {
			$$('#spabooker .booking').first().observe('click', function(event) {
				return this.openTreatmentWindow(event);
			}.bind(this));
		} catch(e) {}
		try {
			$$('#spabooker .close').first().observe('click', function(event) {
				return this.closeTreatmentWindow(event);
			}.bind(this));
		} catch(e) {}
		try {
			$$('#content .spabooker-services .treatment .details .first a').each(function(element){
				element.observe('click', function(event) {
					return this.toggle(event.element().rel);
				}.bind(this));
			}.bind(this));
		} catch(e) {}
		try {
			$('treatmentCategoryID').observe('change', function(event) {
				return this.getTreatmentCategories(event);
			}.bind(this));
		} catch(e) {}
	},
	ellipsis: function() {
		if ( $('ellipsis') !== null ) {
			var element = $('ellipsis');
			var text = element.innerHTML;
			if ( text.length > 560 ) {
				var a = new Element('a', {'class':'read-more', 'href':'javascript:void(0);'}).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'});
		}
	},
	openTreatmentWindow: function(event) {
		$$('#spabooker .treatments').first().setStyle({
			display: 'block',
			zIndex: 1000,
			position: 'absolute'
		});
	},
	closeTreatmentWindow: function(event) {
		$$('#spabooker .treatments').first().setStyle({display: 'none'});
	},
	getTreatmentCategories: function(event) {
		if (!(element = $(event.element()))) return;
		var treatmentSubCategory = $('treatmentSubCategoryID');
		var treatmentCategoryId = element.options[element.options.selectedIndex].value;
		treatmentSubCategory.options.length = 0;
		treatmentSubCategory.options[treatmentSubCategory.options.length] = new Option('(Optional)', '');
		treatmentSubCategory.options[treatmentSubCategory.options.length] = new Option('---', '');
		new Ajax.Request('/onlinebooking/action.do', {
			method: 'get',
			parameters: {treatmentID: treatmentCategoryId, action: 'getTreatmentSubCategories'},
			onSuccess: function(transport, json) {
				(json ? Object.inspect(json) : transport.responseText.evalJSON()).treatmentTypes.each(function(element) {
					treatmentSubCategory.options[treatmentSubCategory.options.length] = new Option(element.typeName, element.typeId);
				});
			}
		});
	},
	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) {
					$('treatmentCategoryID').show();
					$('treatmentSubCategoryID').show();
					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: 1001});
				$('treatmentCategoryID').hide();
				$('treatmentSubCategoryID').hide();
			});
		}
	},
	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);
					
				}
			}
		});
		
	},
	starbox: function() {
		$$('#breadcrumb .reviews span.starbox').each(function(element) {
			spafinder.Document.stars(element, parseFloat(element.innerHTML.stripTags()), {
				ratedUrl: '/assets/images/common/star-blue-23x21.gif',
				ghostUrl: '/assets/images/common/star-white-23x21.gif'
			});
		});
		$$('#content .hreview-aggregate span.starbox', '#content .hreview .publication span.starbox').each(function(element) {
			spafinder.Document.stars(element, parseFloat(element.innerHTML.stripTags()), {
				ratedUrl: '/assets/images/common/star-blue-17x16.gif',
				ghostUrl: '/assets/images/common/star-gray-17x16.gif'
			});
		});
		$$('#content .hreview .categories span.starbox', '#sidebar .reviews .header .reviewer div.starbox').each(function(element) {
			spafinder.Document.stars(element, parseFloat(element.innerHTML.stripTags()));
		});
	}
});
document.observe("dom:loaded", function() {
	var overview = new spafinder.classes.overview();
});