var CdSlider, recommend;

var CDSLIDER = Class.create({
	initialize: function() {
		this.attachEvents();
		this.animateColor();
		this.container = 'slider';
		this.minHeight = 10;
	},
	attachEvents: function() {
		var self = this;
		new PeriodicalExecuter(function() { self.autoScroll() }, 1);
	},
	autoScroll: function() {
		var self = this;
		var targetY = ((document.viewport.getScrollOffsets().last() + 10) < this.minHeight) ? this.minHeight : (document.viewport.getScrollOffsets().last() + 10);
		new Effect.Move(self.container, { x: 0, y: targetY, mode: 'absolute', duration: .8, transition: Effect.Transitions.sinoidal } );
	},
	animateColor: function() {
		//new PeriodicalExecuter(function() {
			//new Effect.Morph('telefon_support', { style: 'color: #F00', duration: 1.4 });
			//new Effect.Morph('telefon_support', { style: 'color: #00F', duration: 1.4, delay: 1.5 });
		//}, 3);
	}
});






var RECOMMEND = Class.create({
	initialize: function() {
		this.wrapper = 'recommend_wrapper';
		this.content = 'recommend'
		this.form = 'recommend_form';
		this.emailField = 're_email';
		this.fromField = 're_from'
		this.messageField = 're_message';
		this.errorContainer = 'rec_errors';
		this.slider = 'recommend_slider';
		this.errorMessages = {
			'email': 'Bitte geben Sie eine g&uuml;ltige Empf&auml;nger-Emailadresse an.',
			'from': 'Bitte geben Sie eine g&uuml;ltige Absender-Emailadresse an.',
			'message': 'Bitte geben Sie eine Nachricht ein.'
		}
		this.honeyPotField = 're_name';
		this.cancelButton = 'rec_cancel';
		this.url = 'recommend.php';
		this.attachEvents();
	},
	attachEvents: function() {
		var self = this;
		Event.observe(this.form, 'submit', function(e) { self.recommend() });
		Event.observe(this.cancelButton, 'click', function(e) {
			self.clearErrors();
			$(self.form).reset();
			self.disappear();
		});
		new PeriodicalExecuter(function() { self.autoScroll() }, 1);
	},
	recommend: function() {
		var self = this;
		self.clearErrors();
		if (self.validateEmail() && self.validateMessage() && self.honeyPot()) {
			self.submitRecommendation();
		}
	},
	validateEmail: function() {
		var self = this;
		var email = $F(self.emailField);
		var from = $F(self.fromField);
		if (!email.match(/^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}$/)) {
			self.error(self.emailField, self.errorMessages['email']);
			return false;
		}
		else if (!from.match(/^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,5}$/)) {
			self.error(self.fromField, self.errorMessages['from']);
			return false;
		}
		else { return true; }
	},
	validateMessage: function() {
		var self = this;
		var message = $F(self.messageField);
		if (message.length == 0) {
			self.error(self.messageField, self.errorMessages['message']);
			return false;
		}
		else { return true;	}
	},
	honeyPot: function() {
		var self = this;
		if ($F(self.honeyPotField).length > 0) {
			return false;
		}
		else { return true; }
	},
	error: function(field, message) {
		var self = this;
		$(self.errorContainer).down('ul').innerHTML += "<li>" + message + "</li>";
		if (!$(self.errorContainer).visible()) {
			$(self.errorContainer).show();
			if ($(field)) {
				$(field).setStyle({ 'border': '1px solid #F00' });
			}
		}
	},
	clearErrors: function() {
		var self = this;
 		$$("#" + self.fromField).concat($$("#" + self.emailField)).concat($$("#" + self.messageField)).each(function(element) { element.setStyle({ 'border': '1px solid #FFF' }) });
		$(self.errorContainer).hide();
		$(self.errorContainer).down('ul').innerHTML = "";
	},
	submitRecommendation: function() {
		var self = this;
		Form.disable(self.form);
		var email = $F(self.emailField);
		var message = $F(self.messageField);
		var referrer = window.location.href;
		var from = $F(self.fromField);
		new Ajax.Request(self.url, { postBody: $H({ 'email': email, 'message': message, 'referrer': referrer, 'from': from }).toQueryString(), onComplete: function(transport) { self.handleResponse(transport); } });
	},
	handleResponse: function(transport) {
		var self = this;
		var response = transport.responseText.evalJSON();
		if (response['status'] === 'ok') {
			self.tellSuccess();
		}
		else {
			Form.enable(self.form);
		}
	},
	autoScroll: function() {
		var self = this;
		if ($(self.wrapper).visible()) {
			var targetX = parseInt($(self.wrapper).style.left);
     var top = ((document.viewport.getScrollOffsets().last() + 60) < this.minHeight) ? this.minHeight : (document.viewport.getScrollOffsets().last() + 60);
			//var top = (document.viewport.getScrollOffsets().last() - 70);

			var targetY = (top < 0) ? 0 : top;
			new Effect.Move(self.wrapper, { x: targetX, y: targetY, mode: 'absolute', duration: .8, transition: Effect.Transitions.sinoidal } );
		}
	},
	appear: function() {
		var top = document.viewport.getScrollOffsets().last() - 70;
		var topY = (top < 0) ? 0 : top;
		$(this.wrapper).style.top = topY + "px";
		new Effect.Appear(this.wrapper, { duration: 0.3, to: 0.9 });
	},
	disappear: function() {
		new Effect.Fade(this.wrapper, { duration: 0.3 });
	},
	tellSuccess: function() {
		var self = this;
		$(self.slider).hide();
		$(self.slider).down('a').onclick = function() { return false };
		$(this.content).innerHTML = "<div id='rec_success'>Ihre Empfehlung wurde erfolgreich abgeschickt.<br/><br/> Danke f&uuml;r Ihr Interesse.</div>";
		setTimeout(function() { self.disappear() }, 2500);
	}
});

function initCDSLIDER() {
	CdSlider = new CDSLIDER();
}

function initRecommend() {
	recommend = new RECOMMEND();
}

function extend() {
	Object.extend(Array.prototype, {
	  shuffle: function(deep) {
	    var i = this.length;
	    var clone = this.toArray();
	    while (i) {
	      j = Math.floor((i--) * Math.random());
	      t = deep && clone[i].shuffle === undefined ? clone[i].shuffle() : clone[i];
	      clone[i] = clone[j];
	      clone[j] = t;
	    }
	    return clone;
	  }
	});
}

