/**
 * @author Joachim Fraatz
 */
function ContentView(title) {
	var titlePrefix = title;
	var slideshows = [];
	var contactForm;
	initialize();
	
	function initialize() {
		if($(".accordion").length) {
			createAccordion();
		}
		if($("#contactForm").length) {
			contactForm = new ContactForm();
		}
		if($(".contentView iframe").length) {
			var offset = $(".contentView").offset();
			var docH = $(document).height();
			var footerH = $(".footer").innerHeight() +2;
			var top = docH - offset.top - footerH;
			$(".contentView").height(top);
		}
	};
	
	this.destroy = function() {
		for(var i = 0; i < slideshows.length; i++) {
			slideshows[i].destroy();
		}
		slideshows = [];
		
		if(contactForm) {
			contactForm.destroy();
			contactForm = "";
		}
		$(".accordion").accordion("destroy");
	};
	
	this.navigateToContentForHash = function(hash) {
		var index = -1;
		var element;
		$(".accordion h3 a").each(function(i) {
			var href = decodeURI($(this).attr("href"));
			if(href === hash) {
				index = i;
				element = this;
			}
		});
		if(index !== -1) {
			$(".accordion").accordion("option", "active", index);
			document.title = titlePrefix + $(element).parent().text();
		}
	};
	
	function createAccordion() {
		$(".accordion").accordion({
			autoHeight: false,
			change: accordion_change,
			changestart: accordion_changestart,
			animated: {
				duration: 1500,
				easing: "easeOutSine"
			},
			header: 'h3',	
			icons: {
				header: "ui-icon-plusthick",
				headerSelected: "ui-icon-minusthick"
			}
		});
		$(".accordion h3 a").click(accordionHeader_click);
		
		$(".slideshowContent").each(function() {
			var slideshow = new Slideshow();
			slideshow.initialize(this);
			slideshows.push(slideshow);
		});
	};
	
	function accordion_changestart(event, ui) {
		$("html, body").animate({scrollTop: -$(ui.newHeader).offset().top}, 750, "easeOutSine");
	}
	
	function accordion_change(event, ui) {
		var index = $(".accordion").accordion("option", "active");
		var slideshow = slideshows[index];
		slideshow.reset();
		addImageToBackground(slideshow.getFirstImage());
	}
	
	function accordionHeader_click(event) {
		window.location.hash = this.hash;
	}
}

function ContactForm() {
	var container;
	var fullNameInput;
	var emailInput;
	var messageInput;
	var submitBtn;
	var resultLabel;
	var formAction;
	initialize();
	
	function initialize() {
		container = $("#contactForm");
        fullNameInput = $("#contactForm .fullName");
        emailInput = $("#contactForm .email");
        messageInput = $("#contactForm .message");
        submitBtn = $("#contactForm .submit");
        resultLabel = $("#contactForm .resultLabel");
        formAction = container.attr("action");
        submitBtn.click(submit);
	};
	
	this.destroy = function() {
	};
	
	function submit(event) {
		event.preventDefault();
		var action = formAction + "?t=" + new Date().getTime();//ie
		var data = container.serialize();
		$.post(action, data)
		.success(submit_success)
		.error(submit_error);
	}
	
	function submit_error() {		
		console.log("ContactForm.submit_error", data);
	}

	function submit_success(data) {
    	var resultArr = data.split("&");
    	var resultObj = {};
    	for (var i = 0; i < resultArr.length; i++) {
   			var tempArr = resultArr[i].split("=");
    		var key = tempArr[0];
    		var value = tempArr[1];
   			resultObj[key] = value;
		}
    	validateInput(resultObj);
	}
	
	function validateInput(result) {
		if(result.error === "" || result.error === "4001") {
    		fullNameInput.attr("value", "");
	   		emailInput.attr("value", "");
    		messageInput.attr("value", "");
	   		fullNameInput.removeClass("error");
    		emailInput.removeClass("error");
    		resultLabel.removeClass("error");
    	} else {
    		if(result.error === "4011") {	        					
   				fullNameInput.addClass("error");
    			emailInput.removeClass("error");
   			}
   			else if(result.error === "4012") {	        					
   				emailInput.addClass("error");
   				fullNameInput.removeClass("error");
   			}
   			else if(result.error === "4013") {	        					
   				fullNameInput.addClass("error");
   				emailInput.addClass("error");
   			}
    		resultLabel.addClass("error");
   		}
		resultLabel.text(result.info);
	}
}

function Slideshow() {
	var container;
	var list;
	var lastListElement;
	var containerWidth;
	var pageX = 0;
	var left = 0;
	var friction = 10;
	var scrollInterval;
	var stopScrollTimeout;
	
	this.initialize = function(element) {
		container = element;
		list = $(container).find("ul");
		lastListElement = $(list).find("li:last-child");
		containerWidth = $(container).width();
		
		$(list).find("li img").each(function(){
			$(this).hide();
			$(this).load(image_load);
		});
		$(container).mousemove(mouseMove);
		$(container).mouseenter(startScroll);
		$(container).mouseleave(stopScroll);
		$(container).css({overflow: "hidden"});
	};
	
	this.getFirstImage = function() {
		return $(list).find("li:first-child img").attr("src");
	};
	
	this.destroy = function() {
		$(container).mousemove();
		$(container).mouseenter();
		$(container).mouseleave();
		stopScroll();
	};
	
	this.reset = function() {
		stopScroll();
		pageX = 0;
		left = 0;		
	};
	
	function image_load() {
		$(this).fadeIn(700, "easeInOutSine");
	}
	
	function mouseMove(event) {
		pageX = event.pageX;
	}
	
	function startScroll() {
		clearTimeout(stopScrollTimeout);
		clearInterval(scrollInterval);
		scrollInterval = setInterval(doScroll, 33);
	}
	
	function stopScroll() {
		clearTimeout(stopScrollTimeout);
		stopScrollTimeout = setTimeout(function(){clearInterval(scrollInterval);}, 1500);
	};

	function doScroll() {
		containerWidth = $(container).width();
		var listWidth = lastListElement[0].offsetLeft + lastListElement.outerWidth();
		var targetLeft = (pageX - $(container).offset().left) * (listWidth - containerWidth) / containerWidth;
		left += (targetLeft - left) / friction;
		$(container).scrollLeft(left);
	};
}
