/*
	rindle+partner
	--------------
	Code made by Florian Pichler - einserver.de
*/

//Texte
var t = {
	kunden: {
		erklaerung: '<br /><p>Bitte fahren Sie mit Ihrer Maus<br />über ein Firmenlogo um Details zu&nbsp;erfahren.</p>',
	}
}

Element.implement({
	wrapContent: function(el) { this.adopt(document.id(el, true).childNodes).inject(document.id(el, true)); return this; },
	setAct: function() { return this.addClass('interact'); }
});

Form.Validator.Inline = new Class({
	Extends: Form.Validator,
	options: {
		scrollToErrorsOnSubmit: true,
		scrollFxOptions: {
			transition: 'quad:out',
			offset: {
				y: -20
			}
		}
	},
	initialize: function(form, options){
		this.parent(form, options);
		this.addEvent('onElementValidate', function(isValid, field, className, warn){
			var validator = this.getValidator(className);
			if (!isValid && validator.getError(field)){
				if (warn) field.addClass('warning');
				var advice = this.makeAdvice(className, field, validator.getError(field), warn);
				this.insertAdvice(advice, field);
				this.showAdvice(className, field);
			} else {
				this.hideAdvice(className, field);
			}
		});
	},
	makeAdvice: function(className, field, error, warn){
		var errorMsg = (warn)?this.warningPrefix:this.errorPrefix;
			errorMsg += (this.options.useTitles) ? field.title || error:error;
		var cssClass = (warn) ? 'warning-advice' : 'validation-advice';
		var advice = this.getAdvice(className, field);
		if(advice) {
			advice = advice.set('html', errorMsg);
		} else {
			advice = new Element('div', {
				html: errorMsg,
				'class': cssClass,
				id: 'advice-' + className + '-' + this.getFieldId(field)
			}).fade('hide');
		}
		field.store('advice-' + className, advice);
		return advice;
	},
	getFieldId : function(field){
		return field.id ? field.id : field.id = 'input_' + field.name;
	},
	showAdvice: function(className, field){
		var advice = this.getAdvice(className, field);
		if (advice && !field.retrieve(this.getPropName(className))
				&& (advice.getStyle('display') == 'none'
				|| advice.getStyle('visiblity') == 'hidden'
				|| advice.getStyle('opacity') == 0)){
			field.store(this.getPropName(className), true);
			advice.fade('in');
		}
	},
	hideAdvice: function(className, field){
		var advice = this.getAdvice(className, field);
		if (advice && field.retrieve(this.getPropName(className))){
			field.store(this.getPropName(className), false);
			advice.fade('out');
		}
	},
	getPropName: function(className){
		return 'advice' + className;
	},
	resetField: function(field){
		field = document.id(field);
		if (!field) return this;
		this.parent(field);
		field.className.split(' ').each(function(className){
			this.hideAdvice(className, field);
		}, this);
		return this;
	},
	getAllAdviceMessages: function(field, force){
		var advice = [];
		if (field.hasClass('ignoreValidation') && !force) return advice;
		var validators = field.className.split(' ').some(function(cn){
			var warner = cn.test('^warn-') || field.hasClass('warnOnly');
			if (warner) cn = cn.replace(/^warn-/, '');
			var validator = this.getValidator(cn);
			if (!validator) return;
			advice.push({
				message: validator.getError(field),
				warnOnly: warner,
				passed: validator.test(),
				validator: validator
			});
		}, this);
		return advice;
	},
	getAdvice: function(className, field){
		return field.retrieve('advice-' + className);
	},
	insertAdvice: function(advice, field){
		//Check for error position prop
		var props = field.get('validatorProps');
		//Build advice
		if (!props.msgPos || !document.id(props.msgPos)){
			if(field.type.toLowerCase() == 'radio') field.getParent().adopt(advice);
			else advice.inject(document.id(field), 'after');
		} else {
			document.id(props.msgPos).grab(advice);
		}
	},
	validateField: function(field, force){
		var result = this.parent(field, force);
		if (this.options.scrollToErrorsOnSubmit && !result){
			var failed = document.id(this).getElement('.validation-failed');
			var par = document.id(this).getParent();
			while (par != document.body && par.getScrollSize().y == par.getSize().y){
				par = par.getParent();
			}
			var fx = par.retrieve('fvScroller');
			if (!fx && window.Fx && Fx.Scroll){
				fx = new Fx.Scroll(par, this.options.scrollFxOptions);
				par.store('fvScroller', fx);
			}
			if (failed){
				if (fx) fx.toElement(failed);
				else par.scrollTo(par.getScroll().x, failed.getPosition(par).y - 20);
			}
		}
		return result;
	}
});

//Init
init = function(){
	var body = $(document.body).addClass('js');
	MooTools.lang.set('de-DE', 'Form.Validator', {
		required: 'Dieses Feld muss ausgef&uuml;llt werden.',
		email: 'Geben Sie bitte eine g&uuml;ltige E-Mail-Adresse ein.',
		oneRequired: 'Bitte f&uuml;llen Sie mindestens ein Feld aus.',
		errorPrefix: 'Fehler: ',
		warningPrefix: 'Warnung: ',
		requiredChk: 'Dieses Feld muss ausgef&uuml;llt werden.',
	});
	MooTools.lang.setLanguage('de-DE');
	
	//Sidebar
	var sideTogglers = [];
	var sideElements = $('side').getElements('.content');
	sideElements.each(function(e,i){
		sideTogglers[i] = e.getPrevious('h2').setAct();
		sideElements[i] = new Element('div').grab(e.clone()).replaces(e);
	});
	new Fx.Accordion(sideTogglers, sideElements, { display: -1,alwaysHide: true });
	
	//Leistung
	var a = $('content');
	if( a.hasClass('leistung-orga') ){
		a.getElements('ul.span-5').each(function(b){
			b.fade('hide');
			b.getParent().addEvents({
				'mouseenter': function(){
					b.fade('in');
				},
				'mouseleave': function(){
					b.fade('out');
				}
			});
		})
	}
	
	//Kunden
	var k = $('kunden');
	if( $defined(k) ){
		var l = new Element('div',{ 'id': 'kunden', 'class': 'enhanced span-17 last' }).inject(k,'after');
		var m = new Element('div',{ 'id': 'logos',  'class': 'span-10', 'events': { 
			'mouseleave': function(){ if(!nC.contains(true) && !o.hasClass('act')){ o.fade('in').addClass('act'); } }
		}}).inject(l);
		var n = new Element('div',{ 'id': 'info', 'class': 'span-7 last' }).inject(l);
		var o = new Element('div', {
			'id': 'howto',
			'class': 'kunde act',
			'html': t.kunden.erklaerung
		}).inject(n);
		var mA = [];
		var nA = [];
		var nmH = [];
		var nC = [];
		var p = k.getChildren('li');
		if(p.length > 0){
			p.each(function(e,i,a){
				nC[i] = false;
				mA[i] = e.getElement('img').inject(m).addEvents({
					'mouseenter': function(){
						nA[i].addClass('act').fade('in'); o.fade('out').removeClass('act');
						if(nC.contains(true)){
							if(nC.indexOf(true) != i){
								nA[nC.indexOf(true)].removeClass('act').fade('out');
								nC[nC.indexOf(true)] = false;
							}
						}
					},
					'mouseleave': function(){ if(!nC[i]){ nA[i].removeClass('act').fade('out'); } },
					'click': function(){
						if(!nC[i]){
							nC[i] = true;
							nA[i].addClass('act').fade('in'); o.fade('out').removeClass('act');
						}else{
							nA[i].removeClass('act').fade('out');
							nC[i] = false;
							if(!o.hasClass('act')){ o.fade('in').addClass('act'); }
						}
					}
				});

				nA[i] = e.getElement('div').removeClass('right').addClass('kunde').inject(o,'before');
				nmH[i] = nA[i].getSize().y;
				nA[i].fade('hide');
			});
			k.destroy();
			nmH.push(m.getSize().y);
			n.setStyle('height',nmH.max().toInt());
		}
	}
	
	//Kontakt
	var q = $('sendmail');
	if( $defined(q) ){
		q.getElements('label').each(function(r){
			if(!r.hasClass('no')){
				new Element('div', {
					'id': r.get('text').clean().trim().replace(/\*/,'') + 'Advice',
					'class': 'advice'
				}).inject(r,'after');
			}
		});
		
		var sendmailValidator = new Form.Validator.Inline(q, {
			stopOnFailure: true,
			useTitles: true,
			errorPrefix: "",
			scrollToErrorsOnSubmit: false,
			onFormValidate: function(passed, form, event) {
				if (passed) {
					form.submit();
				}
			}
		});
	}
};
window.addEvent('domready', function(){ init(); });
