/* 
 * Bologna Iperbole
 *
 * @package		Iperbole
 * @author		Oskar Krawczyk (o.krawczyk@keepthinking.it)
 * @version		1.0
 * @dependecies	MooTools 1.2+
 * @copyright	Copyright (c) 2009-2010, Oskar Krawczyk (Keepthinking Ltd.)		
 * @link		http://keepthinking.it
 * 
 ======================================================================= */

Window.implement({
	$log: function(){
		if (typeof console !== 'undefined' && typeof console.log !== 'undefined'){
			console.log(arguments.length <= 1 ? arguments[0] : arguments);
		}
	},

	$hash: function(theHash){
		return (window.location.hash.split('#').getLast() == theHash);
	}
});

$extend(Selectors.Pseudo, {
	external: function() {
		var domain = window.location.host.toString();
		var href = $(this).get('href');
		
		if ($chk(href)) return (href.indexOf(domain) <= -1);
	}
});

var Common = new Class({
	Implements: [Options, Events],
	
	initialize: function(){
		this.changeTextEl = $$('#change-size-action a');
		this.newWindow();
		this.firefoxWindows();
		this.filterTabs();
		this.oc();
		this.changeTextSize();
		this.externalLinks();
		
		$$('.placeholder').each(function(input){
			input.addEvents({
				focus: function(){
					if (this.get('value') === this.get('title')){
						this.set('value', '');
					}
				},
				
				blur: function(){
					if (this.get('value') === ''){
						this.set('value', this.get('title'));
					}
				}
			});
		});
		
		if ($('search-hotels')) {
			$('search-hotels').addEvents({
				submit: function(){
					$("indirizzo").value = $("indirizzo").value.replace("/", "_");
					$("distanza").value = $("distanza").value.toFloat();
				}
			});
		}
		$$('.empty-rel').set('rel', '');
	},
	
	externalLinks: function() {
		var externalLinks = ($$('div[id=side] .google-map a[id=google-map-small]'));
		if (externalLinks) {
			externalLinks.set({'target': '_blank'});
		}
	},
	
	/* Unobtrusive new window opener
	 ======================================================================= */	
	newWindow: function(){
		this.popups = $$('.window, a:external');

		this.popups.each(function(el){
			if (!el.get('href').indexOf('#') && !el.get('href').indexOf('javascript:')){
				el.set('target', '_blank');
			}
		});
	},
	
	firefoxWindows: function(){
		
		// // don't like doing this
		// if (Browser.Engine.gecko && Browser.Platform.win && Browser.Engine.version === 19){
		// 	$$('.ocTrigger').set('styles', {
		// 		'padding-top': 1,
		// 		'padding-bottom': 6
		// 	});
		// 	
		// 	$$('#ui-basket, #ui-logged-actions').set('styles', {
		// 		'padding-top': 2
		// 	});
		// }
	},
	
	filterTabs: function(){
		var filterTabs = $$('.filterTab'), filterContainer = $$('.filterContainer');

		if (filterTabs.length > 0){
			filterTabs.each(function(filterTab, index){
				filterTab.addEvents({
					click: function(e){
						if (e) e.stop();

						filterTabs.removeClass('active');
						this.addClass('active')
						filterContainer.hide();
						filterContainer[index].show();
					}
				});
			});

			filterTabs[filterTabs[0].hasClass('active') ? 0 : 1].fireEvent('click');
		}
	},
	
	oc: function(){
		$$('.openCloseTrigger').each(function(trigger){
			var containerEl = $(trigger.get('class').substring(trigger.get('class').indexOf("[")+1, trigger.get('class').indexOf("]")));
			var forceClose = trigger.hasClass('forceClose');
			var openCloseLink = $$('.openCloseTrigger li a');
			if (openCloseLink.length) {
				openCloseLink = openCloseLink[0];
			} else {
				openCloseLink = $$('p.openCloseTrigger a')[0];
			}
			trigger.getElement('a').addEvents({
				click: function(e){
					if (e) e.stop();
					var ocFx = new Fx.Reveal(containerEl);
					containerEl.getElements('input').each(function(el) {
						if (containerEl.hasClass('oc_on')) el.erase('disabled');
						else el.set('disabled', 'disabled');
					});
					if (!e){
						containerEl.hide();
					} else {
						ocFx.toggle();
					}
					
					var oCLOld = openCloseLink.get('html');
					openCloseLink.set('html', openCloseLink.get('rel'));
					openCloseLink.set('rel', oCLOld);
					if (openCloseLink.hasClass('back_to_list')) {
						openCloseLink.removeClass('back_to_list');
						openCloseLink.addClass('func');
					}
					else {
						openCloseLink.removeClass('func');
						openCloseLink.addClass('back_to_list');
					}
					
					Cookie.write('ocStatus', (containerEl.hasClass('oc_on') ? 'closed' : 'opened'));
					containerEl.toggleClass('oc_on');
				}
			});
			
			if (!containerEl.hasClass('oc_on') && forceClose){
				trigger.getElement('a').fireEvent('click');
			}
			
			if (!containerEl.hasClass('forceOpen') && Cookie.read('ocStatus') === 'closed'){
				trigger.getElement('a').fireEvent('click');
			}
		});
	},
	
	changeTextSize: function() {
		this.changeTextEl.each(function(link, index, all) {
			link.addEvent('click', function(e) {
				e.stop();
				
				// toggle highlight
				all.getParent().removeClass('active');
				this.getParent().addClass('active');
				
				// get the text size from REL property and apply it to the body
				$$('*').setStyle('font-size', this.get('rel'));
			});
		});
	}

});
