/**
*
*  AJAX IFRAME METHOD (AIM)
*  http://www.webtoolkit.info/
*
**/
 
AIM = {
 
	frame : function(c) {
 
		var n = 'f' + Math.floor(Math.random() * 99999);
		var d = document.createElement('DIV');
		d.innerHTML = '<iframe style="display:none" src="about:blank" id="'+n+'" name="'+n+'" onload="AIM.loaded(\''+n+'\')"></iframe>';
		document.body.appendChild(d);
 
		var i = document.getElementById(n);
		if (c && typeof(c.onComplete) == 'function') {
			i.onComplete = c.onComplete;
		}
 
		return n;
	},
 
	form : function(f, name) {
		f.setAttribute('target', name);
	},
 
	submit : function(f, c) {
		AIM.form(f, AIM.frame(c));
		if (c && typeof(c.onStart) == 'function') {
			return c.onStart();
		} else {
			return true;
		}
	},
 
	loaded : function(id) {
		var i = document.getElementById(id);
		if (i.contentDocument) {
			var d = i.contentDocument;
		} else if (i.contentWindow) {
			var d = i.contentWindow.document;
		} else {
			var d = window.frames[id].document;
		}
		if (d.location.href == "about:blank") {
			return;
		}
 
		if (typeof(i.onComplete) == 'function') {
			i.onComplete(d.body.innerHTML);
		}
	}
 
}


/**
 * bbhm
 * 
 */

bbhm = {};

bbhm.gaPageTracker = null;

bbhm.DynamicPageContainer = new Class({
	request: null,
	uri: null,

	initialize: function(elemWindow, elemContent) {
		this.elemWindow = elemWindow;
		this.elemContent = elemContent;
		
		this.request = new Request({
			'encoding': 'utf-8',
			'method': "post", 
			'url': "siteloader.php",
			'onSuccess': this.requestHandler.bind(this),
			'onFailure': this.requestErrorHandler.bind(this)
		});
		
		this.uri = new URI();
	},
	
	loadPage: function(pageId, languageId) {
		this.elemContent.innerHTML = "";
		this.elemContent.addClass("loading");

		if($chk(this.elemScrollbar)) this.elemScrollbar.dispose();
		
		this.request.cancel();
		this.request.send({
			'data': "pid=" + pageId + "&lid=" + languageId
		});		
	},
	
	requestErrorHandler: function() {
		this.elemContent.removeClass("loading");
		this.elemContent.addClass("error");
	},
	
	requestHandler: function(responseText, responseXML) {
		this.elemContent.removeClass("loading");
		var response = JSON.decode(responseText);
		this.elemContent.innerHTML = response.content;
		this.elemContent.set("class", response.layout);
		// this.uri.set("fragment", response.url);
		// window.location = this.uri.toString();
		this.initFridge();
		this.initAdvForm();
		this.initAdvList();
		this.initScollbar();
		initLytebox();
		FB.XFBML.Host.parseDomTree();
		this.initFbProfile();
		/* google analytics auskommentiert, da nicht nötig? */
		if($chk(bbhm.gaPageTracker) && $chk(response.url)) {
			bbhm.gaPageTracker._trackPageview("/" + response.short + "/" + response.url + ".html");
		}
	},
	
	show: function() {
		this.elemWindow.setStyle("display", "block");
		this.initScollbar();
	},
	
	hide: function() {
		this.elemWindow.setStyle("display", "none");
	},
	
	initFridge: function() {
		$$("div.fridge-area").each(function(elemFridge) {
			for(var i = 1; i <= 10; i++) {
				var elemDescription = elemFridge.getElement("div.image-description-" + i);
				if(!$chk(elemDescription)) continue;
				
				var elemLink = elemFridge.getElement("div.product-" + i);
				if($chk(elemLink)) {
					elemLink.addEvents({
						'mouseenter': (function(elemDescription) {
							elemDescription.setStyle("display", "block");
						}).bind(this, elemDescription),
						'mouseleave': (function(elemDescription) {
							elemDescription.setStyle("display", "none");
						}).bind(this, elemDescription)
					});
				}
			}
		});
	},
	
	initAdvForm: function() {
		var form = $("advform");
		
		if($chk(form)) { 			
			form.addEvent('submit', (function(e, elemForm) {
				AIM.submit(elemForm, {
					'onStart' : function() { }, 
					'onComplete' : (function(response) { 
						var jsonResponse = JSON.decode(response);
						
						if(jsonResponse.status == "success") {
							form.setStyle("display", "none");
						}
						
						var elemStatus = $("advstatus");
						if($chk(elemStatus)) {
							elemStatus.set("class", jsonResponse.status);
							elemStatus.empty();

							jsonResponse.msgs.each(function(msg) {
								elemStatus.appendChild(new Element("li", {
									'text': msg
								}));
							}, this);
							
							this.initScollbar();
						}
					}).bind(this),
					'onFailure' : function() {}
				});
				/*
				//Prevents the default submit event from loading a new page.
				
				//Empty the log and show the spinning indicator.
				//var log = $('log_res').empty().addClass('ajax-loading');
				//Set the options of the form's Request handler. 
				//("this" refers to the $('myForm') element).
				this.set('send', {onComplete: function(response) { 
					alert(response);
				}});
				//Send the form.
				this.send();*/
			}).bindWithEvent(this, form));
			
			var elemSubmitContainer = form.getElement("div.submit");
			var elemSubmit = elemSubmitContainer.getElement("input[type=submit]");
			
			elemSubmitContainer.setStyles({
				'position': "absolute",
				'overflow': "hidden" 
			});
			
			elemSubmit.setStyles({
				'position': "absolute",
				'top': "400px"
			});
			
			
			elemSubmitContainer.appendChild(new Element("span", {
				'class': "submit",
				'text': elemSubmit.get("value"),
				'styles': {
					'cursor': "pointer"
				},
				'events': {
					'click': (function(elemSubmit) {
						elemSubmit.click();
					}).bind(this, elemSubmit)
				}
			}));			
		}
	},
	
	initAdvList: function() {
		var elemTypeSelect = $("adv_type_select");
		if($chk(elemTypeSelect)) {
			new bbhm.AdvList(elemTypeSelect);
		}	
	},
	
	elemScrollbar: null,
	
	initScollbar: function() {
		if($chk(this.elemScrollbar)) this.elemScrollbar.dispose();
		
		var elemContent = $("main");
		elemContent.scrollTo(0, 0);
		
		var steps = (elemContent.getScrollSize().y - elemContent.getSize().y);
		if(steps < 1) return;
		elemContent.setStyle("overflow", "hidden");
		
		var elemScrollbar = new Element("div", { 'class': "scrollbar-vert" } );
		this.elemScrollbar = elemScrollbar;
		
		elemContent.getParent().appendChild(elemScrollbar);
		
		var elemScrollbarHandle = new Element("div", { 'class': "scrollbar-vert-handle" });
		elemScrollbar.appendChild(elemScrollbarHandle);
		
		var slider = new Slider(elemScrollbar, elemScrollbarHandle, {
			steps: steps,
			mode: 'vertical',
			onChange: function(step){
				// Scrolls the content element in x or y direction.
				var x = 0;
				var y = step;
				elemContent.scrollTo(x, y);
			}
		}).set(0);
		
		elemContent.removeEvents('mousewheel');
		// Scroll the content element when the mousewheel is used within the
		// content or the scrollbar element.
		$$(elemContent, elemScrollbar).addEvent('mousewheel', function(e) {
			e = new Event(e).stop();
			var step = slider.step - e.wheel * 30;
			slider.set(step);
		});
		
		// Stops the handle dragging process when the mouse leaves the document body.
		$(document.body).addEvent('mouseleave',function(){slider.drag.stop()});
	},
	
	initFbProfile: function() {
		if(!$chk($('profile-fb-friends')) || !$chk($('profile-fb-friends-pages'))) return;
	
		new bbhm.FbProfile($('profile-fb-friends'), $('profile-fb-friends-pages'));
	}
});

bbhm.fbp = null;

bbhm.FbProfile = new Class({
	numFirendsOnPage: 10,
	elemFriends: null,
	elemFriendPages: null,
	fbFriends: null, 
	numFbFriends: null,
	numFbFirendPages: null, 
	aCurrentPage: null,
	aPages: new Array(),
	
	initialize: function(elemFriends, elemFriendPages) {
		this.elemFriends = elemFriends;
		this.elemFriendPages = elemFriendPages;
		
		bbhm.fbp = this;
	
		FB.ensureInit(function () {
			  FB.Facebook.get_sessionState().waitUntilReady(function() {
				  FB.Facebook.apiClient.friends_get(null, function(result, ex) {
					var markup = "";
					this.fbFriends = result;
				    this.numFbFriends = result ? result.length : 0;
				    this.numFbFirendPages = Math.ceil(result.length / this.numFirendsOnPage);
				
				    /*FB.Facebook.apiClient.users_getInfo(result, 'name',
		                function(friendNames, exec) {
		                  window.alert("first name in friends list: " + friendsNames[0]);
		                }
		              );*/
	
				    
				    if(this.numFbFirendPages > 1) {	
				    	this.numFbFirendPages.times(function(i) {
							var aPage = new Element('a', {
					    		'href': '#',
					    		'text': (i+1),
					    		'events': {
					    			'click': (function(e, page){
				    					this.changeInvitePage(page);
				    					e.stop();
				    				}).bindWithEvent(this, i)
				    			} 
				    		});
	
							this.aPages[i] = aPage;
	
							if(!$chk(this.aCurrentPage)) {
								this.aCurrentPage = aPage; 
		    					this.aCurrentPage.addClass("active");
							}
					    	
							this.elemFriendPages.appendChild(aPage);
					    }, this);
	
				    	this.elemFriendPages.appendChild(new Element('a', {
				    		'href': '#',
				    		'text': '>>',
				    		'class': "next-page",
				    		'events': {
				    			'click': function(e){
				    				if(this.aCurrentPage.text < numFbFirendPages) {
			    						this.changeInvitePage(aCurrentPage.text.toInt());
				    				}
			    					e.stop();
			    				}
			    			} 
			    		}));
	
				    	this.elemFriendPages.appendChild(new Element('div', { 'class': "fb-end" } ));
				  	}
	
					  this.displayInvitePage(0); 			    
				  }.bind(this));
			}.bind(this));
		}.bind(this));
	},
	
	changeInvitePage: function(page) {
		this.aCurrentPage.removeClass("active")
		this.aCurrentPage = this.aPages[page];
		this.aCurrentPage.addClass("active");
		this.displayInvitePage(page);
	},

	displayInvitePage: function(page) {
		var start = this.numFirendsOnPage * page;
		var limit = Math.min(this.numFirendsOnPage * (page + 1), this.numFbFriends);

		var markup = "";
		for (var i=start; i<limit; i++) {
			markup +=
	          '<div class="fb-friend">' +
		          '<fb:profile-pic size="square" uid="' + this.fbFriends[i] + '" facebook-logo="true"></fb:profile-pic>' +
		          '<span class="name"><fb:name uid="' + this.fbFriends[i] + '" useyou="false" linked="false"></fb:name></span>' +
		          '<a href="#" onclick="bbhm.fbp.bbhmInvite(' + this.fbFriends[i] + ', this); return false" class="more_link invite">' +
	        	  	bbhm.fblang.invite +
	        	  '</a>' + 
		      '</div>';
	   }

		this.elemFriends.innerHTML = markup + '<div class="fb-end"></div>';

		FB.XFBML.Host.parseDomElement(this.elemFriends);

		bbhm.dbc.initScollbar();
	},

	bbhmInvite: function(uid, aInvite) {
		//alert(bbhm.fblang.msg_invite);
		/*FB.ensureInit(function() {
			FB.Facebook.apiClient.notifications_send([uid], bbhm.fblang.msg_invite, function(result, ex) {
				alert("Couldn't send the invite, please try later again.");
				 // on error
			});
		});
		
		var api = FB.Facebook.apiClient;
	    var sequencer = new FB.BatchSequencer();
	    var pendingNotificationsResult = api.notifications_send([uid],"Your notification message will goes here",sequencer);
	    sequencer.execute(function() {
	        FB.FBDebug.dump(pendingNotificationsResult.result, 'notificationsResult from batch execution');
	    });*/
		
		/*var attachment = { 'media': [{'type':'image',
            'src':'http://bit.ly/AJTnf',
            'href':'http://bit.ly/hifZk'}] };*/
		
		var attachment = {'name':'ByeByeHotelMama','href':'http://www.byebyehotelmama.ch','caption': bbhm.fblang.msg_invite}; 
		var actionlinks = [{'text':'byebyehotelmama.ch', 'href':'http://www.byebyehotelmama.ch'}];
		FB.Connect.streamPublish("", attachment, actionlinks, uid);

		
		aInvite.style.display = "none";
	}
});

bbhm.AdvList = new Class({
	elemsLi: null,
	elemsAdv: null,
	elemNavigation: null,
	currentPage: 0,
	
	initialize: function(elemTypeSelect) {
		this.elemsLi = elemTypeSelect.getElements("li");
		this.numPages = new Hash();
		
		var defaultType = null;
		this.elemsLi.each(function(elemLi) {
			if(!$chk(defaultType)) defaultType = elemLi.get("class");
			
			elemLi.setStyle("cursor", "pointer");
			elemLi.addEvent("click", (function(type) {
				this.display(type, 0);
			}).bind(this, elemLi.get("class")));
		}, this);
		
		this.elemsAdv = $$("div.adv-area div");
		this.elemsAdv.each(function(elemAdv) {
			var type = elemAdv.get("class");
		}, this);

		
		this.elemNavigation = new Element("ul", {
			'class': "navigation"
		});
		
		$$("div.adv-area").each(function(elemAdvArea) {
			this.elemNavigation.inject(elemAdvArea, 'after');
		}, this);
		
		this.display(defaultType, 0);
	},
	
	display: function(type, page) {
		this.elemsLi.each(function(elemLi) {
			if(elemLi.hasClass(type)) {
				elemLi.addClass("selected");
			} else {
				elemLi.removeClass("selected");
			}
		}, this);

		var numAdv = 0;
		var firstAdv = page * 5;
		var lastAdv = (page + 1) * 5;
		
				
		this.elemsAdv.each(function(elemAdv) {
			if(elemAdv.hasClass(type)) {
				if(numAdv >= firstAdv && numAdv < lastAdv) elemAdv.setStyle("display", "block");
				else elemAdv.setStyle("display", "none");
				numAdv++;
			} else {
				elemAdv.setStyle("display", "none");
			}			
		}, this);
		
		var numPages = Math.ceil(numAdv / 5);
		
		this.elemNavigation.empty();
		
		if(numPages > 1) {
			numPages.times(function(i) {
				var elemLi = new Element("li", {
					'text': i + 1,
					'styles': {
						'cursor': "pointer"  
					},
					'events': {
						'click': (function(type, i) {
							this.display(type, i);
						}).bind(this, [type, i])
					}
				});
				
				if(i == page) elemLi.addClass("selected");
				
				this.elemNavigation.appendChild(elemLi);
			}, this);
		}
		
		bbhm.dbc.initScollbar();
	}
});

bbhm.dbc = new bbhm.DynamicPageContainer($('content_offer'), $('main'));

function loadPage(pageId, languageId) {
	bbhm.dbc.loadPage(pageId, languageId);
}

function hide() {
	bbhm.dbc.hide();
}

function show() {
	bbhm.dbc.show();
}

function displayNavi() {
	$('fbnavi').setStyle("display", "block");
	$('intro').setStyle("display", "block");
	$('langnavi').setStyle("display", "block");
	$('legal_info').setStyle("display", "block");
	$('sound').setStyle("display", "block");
}

function thisMovie(movieName) {
    if (navigator.appName.indexOf("Microsoft") != -1) {
        return window[movieName];
    } else {
        return document[movieName];
    }
}

function switchLang(lang, id) {
    bbhm.elemsLang.each(function(elemLi) {
    	elemLi.removeClass("selected");
    });
    
    bbhm.elemsLang.get(lang).addClass("selected");
    
    thisMovie("website").changeLang(lang);
    
	Cookie.write("byebyehotelmama[lid]", id, {
		path : "/",
		duration: 365
	});
}	

function fbLogin() {
	FB.Connect.requireSession(function() {
		window.location.reload(true)
	});
	return false;
}

function fbLogout() {
	FB.Connect.logout(function() {
		window.location.reload(true)
	});
	return false;
}


$$(".nojs").each(function(elemNojs) {
	elemNojs.dispose();
});

if($chk($("content"))) {
	if($chk($("redirect"))) {
		window.location = $("redirect").href;
	}
	
	if($chk($("background"))) {
		$("background").addClass("preview");
	}
		
	bbhm.dbc.initFridge();
	bbhm.dbc.initAdvForm();
	bbhm.dbc.initAdvList();
	bbhm.dbc.initScollbar();	

	window.addEvent("domready", function() {
		bbhm.dbc.initFbProfile();
	});
} else {
	// so.write("background");
	
	swfobject.embedSWF(
			swfMovie, "background", "995", "767", "9.0.0",
			swfExpressInstall, 
			flashvars, params, attributes);
	
	bbhm.elemsLang = new Hash();
	
	$$("#langnavi li").each(function(elemLi) {
		bbhm.elemsLang.set(elemLi.get("title"), elemLi);
	});
	
	$$(".noflash").each(function(elemNoflash) {
		elemNoflash.setStyle("display", "block");
	});

	window.addEvent("domready", function() {
		$$("#fbnavi div.fbaccount").each(function(elemFBAccount) {
			elemFBAccount.setStyle("cursor", "pointer");
			elemFBAccount.addEvent("click", function() {
				thisMovie("website").showFbProfile();
			});
		});
		
		$$("#legal_info a").each(function(elemLink) {
			elemLink.addEvent("click", function(e) {
				e.stop();
				thisMovie("website").showLegalInfo();
			});
		});
		
		$$("#sound a").each(function(elemLink) {
			elemLink.addEvent("click", function(e) {
				e.stop();
				winFm = window.open("http://www.leshop.fm", "leshopfm", "width=484,height=883,status=yes,scrollbars=no,resizable=no");
				winFm.focus();
			});
		});
		
	});
}




