var Agent = {
	init: function() {
		if (!$("ag_login")) return;
		$("ag_menu").getElement(".login").addEvent("click", Agent.toggleLogin);		
		$("ag_login").getElements("input").addEvents({
			"focus": Agent.hideLabel, "blur": Agent.showLabel});
		$("ag_login").getElements("label").addEvent("click", Agent.clickLabel);
	},
	toggleLogin: function(ev) {
		if (ev) ev.stop();
		if ($("ag_login").getStyle("display")=="none") {
			$("ag_login").setStyle("display", "inline");
			$("ag_login")["ag_name"].focus();
		} else
			$("ag_login").setStyle("display", "none");
	},
	clickLabel: function(ev) {
		var field = $("ag_login")[$(ev.target).get("for")];
		$(ev.target).addClass("hide");
		field.focus();
	},
	hideLabel: function(ev) {
		var lb = $("ag_login").getElement("label[for="+$(ev.target).name+"]");
		if (lb) lb.addClass("hide");
	},
	showLabel: function(ev) {
		if ($(ev.target).value != "") return;
		var lb = $("ag_login").getElement("label[for="+$(ev.target).name+"]");
		if (lb) lb.removeClass("hide");
	}
}

var _ = function(txt) {
	try {
		return translations[txt];
	} catch(e) {
		return txt;
	}
}

ERROR_0 = _("Extra not available for this quantity");
ERROR_1 = _("This boat has been book by another person and it is not available");

var Tabs = TabSet

var InfoBase = new Class({
	Implements: [Options, Events],
	options: {
		className: "_info", info_id: "_info",
		offset_x: 5, offset_y: 5,
		max_opacity: 0.9,
		content: ""
	},
	initialize: function(element, options) {
		if (!$(element)) return;
		this.element = $(element);
		this.setOptions(options);
	},
	show: function() {
		this.build();
		this.get_info().set("opacity", 0);
		if (this.options.content!="") this.get_info().set("html", this.options.content);
		this.get_info().setStyles({
			'top': this.element.getPosition().y + this.element.getHeight() + this.options.offset_y,
			'left': this.element.getPosition().x + this.options.offset_x
		}).fade(this.options.max_opacity);
		this.is_open = true;
		this.fireEvent("show");
	},
	hide: function() {
		this.get_info().fade(0);
		this.is_open = false;
		this.fireEvent("hide");
	},
	open: function(ev) { ev.stop(); this.show(); },
	close: function(ev) { ev.stop(); this.hide(); },
	toggle: function(ev) {
		ev.stop();
		this.is_open? this.hide():this.show();
	},
	build: function() {
		if (this.get_info()) return;
		document.body.adopt(new Element("div", {
			'id':this.options.info_id, 'class':this.options.className}).set("opacity", 0));
	},
	get_info: function() { return this.info? this.info : $(this.options.info_id); },
	set_info: function(element) {
		this.info = $(element);
		this.info.set("opacity", 0).addClass(this.options.className);
		this.info.getElement(".close").addEvent('click', this.close.bindWithEvent(this));
	}
});

var ValidationTip = new Class({
	Extends: InfoBase,
	options: {
		className: "validationTip",
		info_id: "_info",
		offset_x: 220, offset_y: -40,
		max_opacity: 1,
		content: ""
	},
	initialize: function(element, options) {
		if (!$(element)) return;
		this.element = $(element);
		this.setOptions(options);
		this.show();
	},	
	build: function() {
		if (this.get_info()) return;
		var classes = (this.options.content.length > 31) ?
			this.options.className:this.options.className + " oneLine";
		this.info = new Element("div", {'class':classes}).set("opacity", 0);
		document.body.adopt(this.info);
	}
})

var InfoBox = {
	container: null, content: null, bg: null,
	request: null, gallery: null, videofile: null,
	init: function() {
		if (!$("ship_info")) return;
		this.bg = $("info_bg");
		this.container = $("ship_info");
		this.content = $("ship_info_content");
		this.active = true;
		this.bg.set("opacity", 0).addEvent("click", this.close.bindWithEvent(this)); 
		this.container.set("opacity", 0).removeClass("hide")
			.getElement("a.close").addEvent("click", this.close.bindWithEvent(this));
	},
	load: function(url, id, vpos) {
		if (!this.active) return;
		if (vpos) $("ship_info").setStyle("top", vpos);
		this.content.empty().addClass("lbLoading");
		this.show();
		if (this.request) this.request.cancel();
		var options = {
			'url': url,
			'method': "POST",
			'evalScripts': true,
			'onSuccess': InfoBox.updateInfo.bind(this)
		}
		if ($("json_"+id)) options['data'] = JSON.decode($("json_" + id).innerHTML);
		this.request = new Request(options).post();
	},
	updateInfo: function(res) {
		this.content.removeClass("lbLoading").innerHTML = res;
		var tabs2 = new Tabs("group3");
		this.content.getElements("p.readmore a").slimbox({frameWidth: 400, frameHeight: 400});
		new GalleryNavigator(this.gallery);
		Slimbox.scanPage();
		InfoBox.showVideo();
	},
	show: function() {
		if (!this.active) return;
		if (ie6) this.hideSelects();
		this.bg.removeClass("hide").fade(0.5);
		this.container.fade(1); },
	hide: function() {
		if (!this.active) return;
		this.bg.fade(0);
		this.container.fade(0);
		this.bg.addClass("hide");
		$$("div.group3")[0].empty();
		if (ie6) this.showSelects();		
	},
	close: function(ev) {
		ev.stop();
		this.hide();
	},
	showVideo: function() {
		if (!$("mediaspace") || InfoBox.videofile == null) return;
		showVideo(InfoBox.videofile);
	},
	hideSelects: function() {
		$$("select").setStyle("visibility","hidden");
	},
	showSelects: function() {
		$$("select").setStyle("visibility","");
	}
}

var EquipmentTip = new Class({
	Extends: InfoBase,
	options: {
		className: "equipmentTip",
		info_id: "_info",
		offset_x: 5, offset_y: -35,
		max_opacity: 1,
		content: "This is an info example"
	},
	initialize: function(element, options) {
		if (!$(element)) return;
		this.element = $(element);
		this.setOptions(options);
		this.show();
	},	
	show: function() {
		this.build();
		this.get_info().set("opacity", 0);
		if (this.options.content!="") this.get_info().set("html", this.options.content);
		this.get_info().grab( new Element("a", {'class': 'closeTip'}).addEvent("click",this.hide.bind(this)).set('text','X'));
		this.get_info().grab( new Element("div", {'class': 'endTip'}) );
		this.setPosition();
		this.get_info().fade(this.options.max_opacity);
		this.is_open = true;
		this.fireEvent("show");
	},
	setPosition: function(){
		var left = this.element.getPosition().x + this.element.getWidth() + this.options.offset_x,
		top = this.element.getPosition().y + this.element.getHeight() + this.options.offset_y,
		width = this.get_info().getSize().x;
		
		if (left+width > $(window).getSize().x)
			left -= left + width - $(window).getSize().x;
		this.get_info().setStyles({'top': top, 'left': left});
	}
})

function initSlideShow() {
	if ($("ss_form")) {
		var interval = ($("ss_form")["interval"].value || 15) * 1000;
		var ss = new viewer($$("#ss_main div.slide"), {interval: interval});
		ss.play(true);
		$("ss_mask").getElement(".prev").addEvent("click", function(ev) { ev.stop(); ss.previous(); });
		$("ss_mask").getElement(".next").addEvent("click", function(ev) { ev.stop(); ss.next(); });
		ss.addEvents({
			"walk": function() { preload(ss.__current); },
			"next": function() { preload(ss.__current+1); }
		});
	}
	
	var preload = function(n) {
		if (n>=ss.items.length || !ss.items[n].getElement("img.loading")) return;
		var img = ss.items[n].getElement("img.loading");
		img.set("src", img.get("rel")).set("rel", "").removeClass("loading");
	};	
}

function addFbLike() {
	if (!$("fbLikeButton")) return;
	$("fbLikeButton").set('html', '<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.facebook.com/NauticHolidays&amp;layout=standard&amp;show_faces=false&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=35" scrolling="no" frameborder="0" allowTransparency="true"></iframe>');
}

var socialSide = {
	init: function() {
		if (!$("social_side")) return;
		socialSide.el = $("social_side");
		socialSide.scroll = $(window).getScroll().y;
		$(window).addEvent("scroll", socialSide.onscroll);
	},
	onscroll: function(override) {
		if (!socialSide.timer) socialSide.monitor();
	},
	monitor: function() {
		if ($(window).getScroll().y!=socialSide.scroll) {
			socialSide.scroll = $(window).getScroll().y;
			socialSide.timer = setTimeout(socialSide.monitor, 300);
		} else socialSide.moveBar();
	},
	moveBar: function() {
		var fx = new Fx.Tween(socialSide.el, {transition: "quart:out"});
		fx.start("marginTop", $(window).getScroll().y);
		socialSide.timer = false;
	}
}

window.addEvent("domready", socialSide.init);

