Page= {};
Util= {};
Configurator= {};
FlippingBook= {};
Showroom= {};
Kitchen= {};
Jobs= {};
Event= {};

/* window events */
$(document).ready(function () {	
	Jobs.init();
	Page.init();
	
	/* init lightbox */
	if($(".lightbox")) {
		$(".lightbox").lightbox();
	}
	if(showad) {
		var dimension= Util.getWindowSize();
		$("#shadow").css("width", dimension[0]).css("height", dimension[1]).show();
		$("#intro_teaser").css("top", (dimension[1]-400)/2).css("left", (dimension[0]-755)/2).show();
	}
});
$(window).bind('resize', function() {	
	//location.reload(); TODO geht no net
});

Page= {
	minWidth: 990,
	minHeight: 620,
	maxWidth: 1200,
	maxHeight: 850,
	
	init: function() {
		//StateManager.initialize();
		Page.set();
	},
	set: function() {
		/* get dimensions */
		$("#page").hide(); /* cause to calculate without content */
		var dimensions= Util.getWindowSize();
		$("#page").show();/* cause to calculate without content */
		/*set page */
		var top= 0;
		var left= 0;
		var width= Page.minWidth;
		var height= Page.minHeight;
		var spacerWidth= 0;

		/* calculate height and top */
		if(dimensions[1]<Page.maxHeight) {
			if(dimensions[1]>Page.minHeight) {
				height= dimensions[1];
			} else {
				height= Page.minHeight;
				dimensions[0]-=15; /* cause scrollbar occurs */
			}
		} else {
			height= Page.maxHeight;
			top= (dimensions[1]-height)/2;
		}
		/* calculate width and left and spacerWidth */
		if(dimensions[0]<Page.maxWidth) {
			if(dimensions[0]>Page.minWidth) {
				spacerWidth= dimensions[0]-1012; /* 1000 cause of padding */
				width= dimensions[0]-22; /* cause of margin */
			} else {
				width= Page.minWidth;
			}
		} else {
			width= Page.maxWidth;
			spacerWidth= Page.maxWidth-990; /* 990 cause padding is not relevant */
			left= (dimensions[0]-width)/2;
		}
		/* browserfix */
		if(spacerWidth<0) {
			spacerWidth= 0;
		}
		if(width<Page.minWidth) {
			width= Page.minWidth;
		}

		$("#page").css("top", top).css("left", left).css("height", height).css("width", width);
		$("#page .header .bar_spacer").css("width", spacerWidth);
		$("#page .content").css("margin-top", ((height-620)/2)-2).css("margin-bottom", ((height-620)/2)-2);
		
		$("#page .footer .spacer").css("width", spacerWidth);
		
		/* set elements inner content */
		var elementCount= $("#page .content .element").length;
		var elementCumulateWidth= 0;
		$("#page .content .element").each(function() {
			elementCumulateWidth+= $(this).width();
		});
		
		/* works only with one scaleable element */
		if($("#page .content .scaleable").length>0) {
			/* because we have standard margin we set it relatively */
			var standardMargin= (Page.minWidth-elementCumulateWidth)/(elementCount-1);
			var counter= 1;
			$("#page .content .element").each(function() {
				if(counter<elementCount) {
					$(this).css("margin-right", standardMargin);
				}
				counter++;
			});
			var totalWidth= elementCumulateWidth+(standardMargin*(elementCount-1));
			$("#page .content .scaleable:first").css("width", parseInt($("#page .content .scaleable:first").css("width"))+(width-20-totalWidth));
		} else {
			var marginRight= parseInt(($("#page .content").width()-elementCumulateWidth)/(elementCount-1));
			var counter= 1;
			$("#page .content .element").each(function() {
				if(counter<elementCount) {
					$(this).css("margin-right", marginRight);
				}
				counter++;
			});
		}
		$("#page .content .element").each(function() {
			$(this).css("height", $("#page .content").height());
		});
		
		/* set background */
		var bgHeight= height-45;
		var bgWidth= width+20;
		var bgLeft= (dimensions[0]-bgWidth)/2;
		$("#background").css("width", bgWidth).css("height", bgHeight).css("left", bgLeft);
		
		/* hover effects */
		$("#page .header .bar_language ul li").hover(function() {
			if($(this).attr("class").match("active")) {
				$(this).addClass("activehover");
				/* show and hide menu for language selection */
				$("#page .header .bar_language ul li").show();
				$("#page .header .bar_language ul").addClass("active").hover(
					function() {},
					function() {
						$(this).removeClass("active");
						$("#page .header .bar_language ul li").hide();
						$("#page .header .bar_language ul li.active").show();
					}
				);
				
			} else {
				$(this).addClass("hover");
			}
		}, function() {
			if($(this).attr("class").match("active")) {
				$(this).removeClass("activehover");
			} else {
				$(this).removeClass("hover");
			}
		});
		$("#page .header .subnavigation li").hover(function() {
			$(this).addClass("hover");
		}, function() {
			$(this).removeClass("hover");
		});
		$("#page .header .bar_navigation li a").hover(function() {
			if(!$(this).attr("class").match("active")) {
				$(".standard", this).hide();
				$(".hover", this).show();
			}
		}, function() {
			if(!$(this).attr("class").match("active")) {
				$(".standard", this).show();
				$(".hover", this).hide();
			}
		});
		$("#page .footer li a").hover(function() {
			if(!$(this).attr("class").match("active")) {
				$(".standard", this).hide();
				$(".hover", this).show();
			}
		}, function() {
			if(!$(this).attr("class").match("active")) {
				$(".standard", this).show();
				$(".hover", this).hide();
			}
		});
		
		Kitchen.init();
		Util.initSlideables();
		
		$("#shadow").click(function() {
			Page.closeAll();
		});
		
		$("#globalclose").click(function() {
			Page.closeAll();
		});
	},
	closeAll: function() {
		$("#fullscreen").hide();
		$("#showroom").hide();
		$("#shadow").hide();
		$("#configurator").hide();
		$("#flippingbook").hide();
		$("#globalclose").hide();
		$("#captcha").hide();
		$("#intro_teaser").hide();
	}
}

Util= {
	getWindowSize: function(){
		var xScroll, yScroll;

		if (window.innerHeight && window.scrollMaxY) {
			xScroll = window.innerWidth + window.scrollMaxX;
			yScroll = window.innerHeight + window.scrollMaxY;
		} else if (document.body.scrollHeight > document.body.offsetHeight) {
			xScroll = document.body.scrollWidth;
			yScroll = document.body.scrollHeight;
		} else if(document.body) { 
			xScroll = document.body.offsetWidth;
			yScroll = document.body.offsetHeight;
		}

		var windowWidth, windowHeight;
		if (self.innerHeight) {
			if(document.documentElement.clientWidth){
				windowWidth = document.documentElement.clientWidth;
			} else {
				windowWidth = self.innerWidth;
			}
			windowHeight = self.innerHeight;
		} else if (document.documentElement && document.documentElement.clientHeight) {
			windowWidth = document.documentElement.clientWidth;
			windowHeight = document.documentElement.clientHeight;
		} else if (document.body) {
			windowWidth = document.body.clientWidth;
			windowHeight = document.body.clientHeight;
		}

		if(yScroll < windowHeight) {
			pageHeight = windowHeight;
		} else {
			pageHeight = yScroll;
		}

		if(xScroll < windowWidth) {
			pageWidth = xScroll;
		} else {
			pageWidth = windowWidth;
		}

		var arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight);
		return arrayPageSize;
	},
	initSlideables: function() {
		$("#page .slideable").each(function() {
			var slideable= $(this);
			var classes= slideable.attr("class").split(" ");
			var height= slideable.height();
			for(var index=0; index<classes.length; index++) {
				if(classes[index].match("height")) {
					height= classes[index].replace(/height/g, '');
				}
			}
			if(height<slideable.height()) {
				/* set slideable */
			    slideable.html('<div class="slideable_content" style="width: '+(slideable.width()-10)+'px;">'+slideable.html()+'</div><div class="slideable_slider" style="height: '+height+'px;"></div>');	
				var overflow= $('.slideable_content', slideable).height()-height; 
				$(".slideable_slider", slideable).slider({ 
					slide: function (event, ui) {
					 	var top= parseFloat(overflow*ui.value/100);
						$(".slideable_content", slideable).css('margin-top', '-' + top + 'px');
					}, 
					stop: function (event, ui) {
						var top= overflow*ui.value/100;
						$(".slideable_content", slideable).animate({ 'margin-top' : '-' + top + 'px' }, 500, 'linear');
					}
				});
				
				/* set frame */
				slideable.css("width", slideable.width()).css("height", height);
			}
		});
	},
	validateForm: function(id, captcha) {
		var result= true;
		$("#"+id + " input, #"+id + " textarea").each(function() {
			if($(this).attr("class") && $(this).attr("class").match("required")) {
			  // trim input field
			  $(this).val($(this).val().replace(/^\s+|\s+$/g, ''));
				var itemresult= Util.validate($(this).attr("id"));
				result= result && itemresult;
			}
		});
		
		if(result) {
			$("#form_error").removeClass("error");	
			if(captcha)	{
				Captcha.show(id);
			} else {
				Captcha.formIsValid= true;
			}
		} else {
			$("#form_error").addClass("error");
			if(id=='form_job') {
				Jobs.back();
				Jobs.back();
			}
		}
		result= result && Captcha.formIsValid;
		
		return result;
	},
	validate: function(id) {
		var result= true;
		var obj= $("#"+id);
		var commands= $("#"+id).attr("class").split(" ");
		for(var i=0; i<commands.length; i++) {
			var command= commands[i].replace(/[0-9]/g, "");
			switch(command) {
				case("minlength"):
					var length= parseInt(commands[i].replace(/minlength/g, ""));
					result= result && (obj.val().length>=length);
					break;
				case("maxlength"):
					var length= parseInt(commands[i]);
					result= result && (obj.val().length<=length);
					break;
				default:
					result= result && (obj.val().length!=0);
					break;
			}
		}
		if(!result) {
			obj.addClass("error");
		} else {
			obj.removeClass("error");
		}
		return result;
	}
}

Captcha= {
	form: '',
	formIsValid: false,
	
	show: function(form) {
		Captcha.form= form;
		Captcha.set();
		$("#shadow").show();
		$("#captcha").css("display", "block");
	},
	set: function() {
		var dimension= Util.getWindowSize();
		
		var width= dimension[0];
		var height= dimension[1];
		
		if(dimension[0]<dimension[2]) {
			width= dimension[2];
		}
		if(dimension[1]<dimension[3]) {
			height= dimension[3];
		}
		
		$("#shadow").css("height", height).css("width", width);
		
		var top= (height-240)/2;
		var left= (width-320)/2;
		
		$("#captcha").css("top", top).css("left", left);
	},
	isValid: function() {
		$("#shadow").hide();
		$("#captcha").hide();
		Captcha.formIsValid= true;
		
		document.forms[Captcha.form].submit();
	}
}

Configurator= {
	show: function(url) {
		Configurator.set();
		$("#shadow").show();
		$("#configurator").attr("src", url).show();
		$("#globalclose").show();
	},
	close: function() {
		$("#shadow").hide();
		$("#configurator").hide();
	},
	set: function() {
		var dimension= Util.getWindowSize();
		
		var width= dimension[0];
		var height= dimension[1];
		
		if(dimension[0]<dimension[2]) {
			width= dimension[2];
		}
		if(dimension[1]<dimension[3]) {
			height= dimension[3];
		}
		
		$("#shadow").css("height", height).css("width", width);
		
		var top= (height-560)/2;
		var left= (width-1000)/2;
		
		$("#configurator").css("top", top).css("left", left);
	}
}

FlippingBook= {
	show: function(url) {
		FlippingBook.set();
		$("#shadow").show();
		$("#flippingbook").attr("src", url).show();
	},
	close: function() {
		$("#shadow").hide();
		$("#flippingbook").hide();
	},
	set: function() {
		var dimension= Util.getWindowSize();
		
		var width= dimension[0];
		var height= dimension[1];
		
		if(dimension[0]<dimension[2]) {
			width= dimension[2];
		}
		if(dimension[1]<dimension[3]) {
			height= dimension[3];
		}
		
		$("#shadow").css("height", height).css("width", width);
		
		var top= (height-820)/2;
		var left= (width-1025)/2;
		
		$("#flippingbook").css("top", top).css("left", left);
	}
}

Showroom= {
	show: function(name, swf) {
		Showroom.set();
		$("#shadow").show();
		$('#showroomflash').html("").flash({
		    src: swf,
		    width: 800,
		    height: 520,
			allowFullScreen: 'true'
		});
		$("#showroom .name").html(name);
		$("#showroom").show();
		$("#showroom .close").show().unbind("click").click(function () {
			Showroom.close();
		});
	},
	close: function() {
		$("#shadow").hide();
		$("#showroom").hide();
		$("#showroom .close").hide();
	},
	set: function() {
		var dimension= Util.getWindowSize();
		
		var width= dimension[0];
		var height= dimension[1];
		
		if(dimension[0]<dimension[2]) {
			width= dimension[2];
		}
		if(dimension[1]<dimension[3]) {
			height= dimension[3];
		}
		
		$("#shadow").css("height", height).css("width", width);
		
		var top= (height-550)/2;
		var left= (width-800)/2;
		
		$("#showroom").css("top", top).css("left", left);
	}
}

Kitchen= {
	surfacePos: new Array(0, 0),
	surfaceMax: new Array(0, 0),
	accessoirePos: 0,
	accessoireGroup: 0,
	accessoireMax: 0,
	init: function() {
		/* LIST MODE */
		$("#page .content .kitchen .pages li").click(function() {
			Kitchen.scrollPages($(this).html());
			$("#page .content .kitchen .pages li").removeClass("active");
			$(this).addClass("active");
		}).hover(function() {
			$(this).addClass("hover");
		}, function() {
			$(this).removeClass("hover");
		});
		$("#page .content .kitchen .pages li:first").addClass("active");
		/* OVERVIEW MODE */
		$("#page .content .kitchen .accessoirelink").click(function() {
			Kitchen.scrollAccessoires($(this).attr("id"));
			$("#page .content .kitchen .accessoirelink").removeClass("active");
			$(this).addClass("active");
		}).hover(function() {
			$(this).addClass("hover");
		}, function() {
			$(this).removeClass("hover");
		});
		if($("#page .content .kitchen .accessoirelink").size()>0) {
			$("#page .content .kitchen .accessoirelink:first").addClass("active");
			Kitchen.accessoireGroup= $("#page .content .kitchen .accessoirelink:first").attr("id").replace(/accessoirelink/, '');
		}
		Kitchen.initAccessoireButtons();
		/* DETAIL MODE */
		/* set icons */
		$(".icon").each(function() {
			var left= parseInt($(this).html());
			left+= ($("#page .content").width()-970)/2;
			$(this).css("left", left);
		});
		/* set fullscreen button */
		$(".fullscreen").click(function() {
			Kitchen.fullscreen($(this).html());
		});
		/*$("#fullscreen .close").click(function() {
			$("#fullscreen").hide().css("background-image", "none");
		});*/
		$("#page .content .kitchen .surfaces .headline .close").click(function() {
			Kitchen.closeSurface();
		});
		$("#page .content .kitchen .opensurface").click(function() {
			Kitchen.openSurface();
		});
		$("#page .content .kitchen .opensurface").hide();
		Kitchen.initSurfaceButtons();
	},
	scrollAccessoires: function(id) {
		Kitchen.accessoireGroup= id.replace(/accessoirelink/);
		
		counter= 0;
		positionSet= false;
		$("#page .content .kitchen .accessoireitem").each(function() {
			if($(this).attr("id").replace(/accessoireitem/, 'accessoirelink')==id && !positionSet) {
				Kitchen.accessoirePos= counter;
				positionSet= true;
			}
			counter++;
		});
		$("#page .content .kitchen .accessoireframe .sledge").animate({ 'left' : '-' + (Kitchen.accessoirePos*400) + 'px' }, 200, 'linear');
		/* to set buttons */
		Kitchen.clickAccessoire(0);
	},
	initAccessoireButtons: function() {
		Kitchen.accessoireMax= $("#page .content .kitchen .accessoireframe .accessoireitem").size();
		if($("#page .accessoireframe")) {
			$("#page .content .kitchen .accessoireback").hide().click(function() {
				Kitchen.clickAccessoire(-1);
			});
			$("#page .content .kitchen .accessoirenext").click(function() {
				Kitchen.clickAccessoire(+1);
			});
		}
	},
	clickAccessoire: function(change) {
		Kitchen.accessoirePos= Kitchen.accessoirePos+change;
		if(Kitchen.accessoirePos==0) {
			$("#page .content .kitchen .accessoireback").hide();
		} else {
			$("#page .content .kitchen .accessoireback").show();
		}
		if(Kitchen.accessoirePos==(Kitchen.accessoireMax-1)) { /* -1 because of shown */
			$("#page .content .kitchen .accessoirenext").hide();
		} else {
			$("#page .content .kitchen .accessoirenext").show();
		}
		$("#page .content .kitchen .accessoireframe .sledge").animate({ 'left' : '-' + (Kitchen.accessoirePos*400) + 'px' }, 200, 'linear');
		/* set group */
		if($("#page .content .kitchen .accessoirelink").size()>0) {
			counter= 0;
			$("#page .content .kitchen .accessoireitem").each(function() {
				if(counter==Kitchen.accessoirePos) {
					Kitchen.accessoireGroup= $(this).attr("id").replace(/accessoireitem/, '');
				}
				counter++;
			});
			$("#page .content .kitchen .accessoirelink").removeClass("active");
			$("#accessoirelink"+Kitchen.accessoireGroup).addClass("active");
		}
	},
	scrollPages: function(pos) {
		$("#page .content .kitchen .models .sledge").animate({ 'left' : '-' + ((pos-1)*444) + 'px' }, 200, 'linear');
	},
	openSurface: function() {
		$("#page .content .kitchen .surfaces").fadeIn("fast");
		$("#page .content .kitchen .opensurface").fadeOut("fast");
	},
	closeSurface: function() {
		$("#page .content .kitchen .surfaces").fadeOut("fast");
		$("#page .content .kitchen .opensurface").fadeIn("fast");
	},
	initSurfaceButtons: function() {
		Kitchen.surfaceMax[0]= $("#surface1 .gallery img").size();
		Kitchen.surfaceMax[1]= $("#surface2 .gallery img").size();
		if($("#page .surfaces")) {
			$("#page .surfaces .back").hide().click(function() {
				Kitchen.clickSurface($(this).parent().parent().attr("id"), -1);
			});
			$("#page .surfaces .next").click(function() {
				Kitchen.clickSurface($(this).parent().parent().attr("id"), +1);
			});
			if(Kitchen.surfaceMax[0]<5) {
				$("#surface1 .next").hide();
			}
			if(Kitchen.surfaceMax[1]<5) {
				$("#surface2 .next").hide();
			}
		}
	},
	clickSurface: function(id, change) {
		var index= parseInt(id.replace(/surface/, ''))-1;
		
		Kitchen.surfacePos[index]= Kitchen.surfacePos[index]+change;
		if(Kitchen.surfacePos[index]==0) {
			$("#"+id+" .back").hide();
		} else {
			$("#"+id+" .back").show();
		}
		if(Kitchen.surfacePos==(Kitchen.surfaceMax[index]-4)) { /* -4 because of shown */
			$("#"+id+" .next").hide();
		} else {
			$("#"+id+" .next").show();
		}
		$("#"+id+" .gallery .sledge").animate({ 'left' : '-' + (Kitchen.surfacePos[index]*90) + 'px' }, 200, 'linear');
	},
	showDetails: function(headline, text, image, object) {
		var top= parseInt($(object).css("top"));
		var left= parseInt($(object).css("left"));
		var html= "";
		var hasImage= false;
		
		if(image!="") {
			hasImage= true;
			html+= '<div class="image">';
			html+= '	<img src="'+image+'" />';
			html+= '</div>';
		}
		html+='<div class="text">';
		html+='	<strong>'+headline+'</strong>';
		html+='	<p>'+text+'</p>';
		html+='</div>';
		$('#icondetail').html(html);
		/* calculate position */
		var height= $('#icondetail').height();
		top= top-(height/2)+8;
		if(top<0) {
			top= parseInt($(object).css("top"));
		} else if(top+200>($("#page .content").height())) {
			top= parseInt($(object).css("top"))+16-210;
		}
		/* calculate width */
		var width= 400;
		if(!hasImage) {
			width= 200;
			$("#icondetail").css("width", 200);
		}
		var maxWidth= $("#page .content").width();
		left= left+20;
		if(left+width>maxWidth) {
			left= left-width-33;
		}
		//alert(left + " " + width+ " " + maxWidth);
		$("#icondetail").css("top", top).css("left", left).fadeIn("fast");
	},
	hideDetails: function() {
		$("#icondetail").html("").hide().css("width", 400);
	},
	fullscreen: function(image) {
		var dimension= Util.getWindowSize();
		
		var width= dimension[0];
		var height= dimension[1];
		
		if(dimension[0]<dimension[2]) {
			width= dimension[2];
		}
		if(dimension[1]<dimension[3]) {
			height= dimension[3];
		}
		//$("#fullscreen .close").css("left", ((width-1220)/2)+1220-23);
		$("#fullscreen").css("height", height).css("width", width).css("background-image", 'url('+image+')').fadeIn("fast");
		window.setTimeout(function() {
			$("#fullscreen").fadeOut("fast");
		}, 3000);
	}
},

Jobs= {
	openPage: 1,
	
	init: function() {
		if($("#form_job")) {
			/* set fieldsets */
			$("#form_job fieldset").hide();
			$("#form_job fieldset:first").show();
			/* set buttons */
			$("#jobbutton_back1").hide().click(function() {
				Jobs.back();
			});
			$("#jobbutton_next1").click(function() {
				Jobs.next();
			});
		}
	},
	back: function() {
		Jobs.openPage--;
		counter= 1;
		$("#form_job fieldset").hide();
		$("#form_job fieldset").each(function() {
			if(counter==Jobs.openPage) {
				$(this).show();
			}
			counter++;
		});
		/* buttons */
		$("#jobbutton_next1").show();
		if(Jobs.openPage==1) {
			$("#jobbutton_back1").hide();
		}
	},
	next: function() {
		Jobs.openPage++;
		counter= 1;
		$("#form_job fieldset").hide();
		$("#form_job fieldset").each(function() {
			if(counter==Jobs.openPage) {
				$(this).show();
			}
			counter++;
		});
		/* buttons */
		$("#jobbutton_back1").show();
		if((counter-1)==Jobs.openPage) {
			$("#jobbutton_next1").hide();
		}
	}
}

Event= {
	keyHandler: function(event) {
		var kC= (window.event) ? event.keyCode : event.keyCode;
		var Esc = (window.event) ? 27 : event.DOM_VK_ESCAPE;
		if(kC==Esc) { 
			Page.closeAll();
		}
	}
}