var tx_recipes_pi1 = {};

/**
* Provide a dynamic ingridients form
* Add and remove rows with three inputs and a remove button
*/

tx_recipes_pi1.form = {
	
	index: 0,
	rows: [],
	dimCache: null,
	baseName: 'tx_recipes_pi1[ingridient]',
	
	init: function(rowNumbers) {
		var rows = rowNumbers.split(',');
		
		for(var i=0; i<rows.length; i++)
			this.rows.push(rows[i]);
	},
	
	getNextIndex: function(rise) {
		if( rise == false ) {
			return this.index + 1;
		} else {
			return ++this.index;
		}
	},
	
	getNumRows: function() {
		return this.rows.length;
	},
	
	getIngridientFieldset: function() {
		return document.getElementById('ingridients');
	},
	
	addIngridient: function() {
		var index		= this.getNextIndex();
		var fieldset 	= document.createElement('fieldset');
		var fieldsetForLabels	= document.createElement('fieldset');
		
		fieldset.setAttribute('id', 'ingridient_row_' + index);
		fieldset.className = 'noneFloatingInput elemente';
		fieldsetForLabels.className = 'floatingElement noneFloatingInput texte';
		fieldsetForLabels.id = 'fieldset_node_'+index;
		
		fieldsetForLabels.appendChild(this.setLabel('amount', index));
		fieldsetForLabels.appendChild(this.setLabel('dimension', index));
		fieldsetForLabels.appendChild(this.setLabel('ingridient', index));
		
		fieldset.appendChild( this.composeElement('formElement textElement amount', this.makeAmountField(index)) );
		fieldset.appendChild( this.composeElement('formElement selectElement dimension', this.makeDimensionField(index)) );
		fieldset.appendChild( this.composeElement('formElement textElement name', this.makeTextField(index)) );
		fieldset.appendChild( this.composeElement('commentElement remove', this.makeRemoveButton(index)) );
		
		
		this.getIngridientFieldset().appendChild(fieldsetForLabels);
		this.getIngridientFieldset().appendChild(fieldset);
		
		this.addRowIndex( index );
	},
	
	composeElement: function(cssClass, field) {
		var boxDiv = document.createElement('div');
		boxDiv.className = cssClass;
		
		var elemDiv = document.createElement('div');
		elemDiv.className = 'formField';
		
		elemDiv.appendChild( field );
		
		var clearDiv = document.createElement('div');
		clearDiv.className = 'formClear';
		
		boxDiv.appendChild(elemDiv);
		boxDiv.appendChild(clearDiv);
		
		return boxDiv;
	},
	
	removeIngridient: function(index) {
		$('ingridient_row_' + index).remove();
		$('fieldset_node_' + index).remove();
		this.removeRowIndex(index);
	},
	
	
	makeAmountField: function(index) {
		var field = document.createElement('input');
		field.setAttribute('id', 	this.baseName + '[' + index + '][amount]');
		field.setAttribute('name', 	field.getAttribute('id'));
		field.setAttribute('type',	'text');
		field.setAttribute('size',	'8');
		field.onblur = tx_recipes_pi1.form.evalAmount;
		
		return field;
	},
	
	evalAmount: function(e) {
		var elem = e.type == 'blur' ? e.target : e;
		elem.value = isNaN(elem.value) ? 0 : elem.value;
	},
	
	makeDimensionField: function(index) {
		var dimensions	= this.readDimensionsFromFirst();
		var select		= document.createElement('select');
		
		select.setAttribute('id', 	'tx_recipes_pi1[ingridient][' + index + '][dimension]');
		select.setAttribute('name', select.getAttribute('id'));
		
		for(var i=0; i<dimensions.length; i++) {
			select.options[select.options.length] = new Option(dimensions[i].text, dimensions[i].value, false, false);
		}
		
		return select;
	},
	
	makeTextField: function(index) {
		var field = document.createElement('input');
		field.setAttribute('id', 	this.baseName + '[' + index + '][name]');
		field.setAttribute('name', 	field.getAttribute('id'));
		field.setAttribute('type',	'text');
		
		return field;
	},
	
	makeRemoveButton: function(index) {
		var text = document.createTextNode('x');
		
		var link = document.createElement('a');
		link.setAttribute('href', 'javascript:tx_recipes_pi1.form.removeIngridient(' + index + ')');
		
		link.appendChild(text);
		
		return link;
	},
	
	readDimensionsFromFirst: function() {
		
		if (this.dimCache == null) {
			var select = document.getElementById(this.baseName + '[' + this.rows[0] + '][dimension]');
			var dimensions = [];
			
			for (var i=0; i < select.options.length; i++) {
				dimensions.push({	'value': select.options[i].value,
							'text': select.options[i].text
				});
			}
			
			this.dimCache = dimensions;
		}

		return this.dimCache;
	},
	
	addRowIndex: function(index) {
		this.rows.push(index);
	},
	
	removeRowIndex: function(index) {
		var r = [];
		
		for(var i=0; i<this.rows.length; i++) {
			if( this.rows[i] != index )
				r.push(this.rows[i]);
		}
		
		this.rows = r;
	},
	
	setLabel: function(idPart)	{
		var id = 'label_'+idPart;
		var element = document.getElementById(id);
		var newElement = element.cloneNode(true);
		newElement.id = '';
	
		
		return newElement;
	}
	
	
};

tx_recipes_pi1.formImages = {
	index: 0,
	rows: [],
	dimCache: null,
	baseName: 'tx_recipes_pi1[images]',
	
	init: function(rowNumbers) {
		var rows = rowNumbers.split(',');
		
		for(var i=0; i<rows.length; i++)
			this.rows.push(rows[i]);
	},
	
	getNextIndex: function(rise) {
		if( rise == false ) {
			return this.index + 1;
		} else {
			return ++this.index;
		}
	},
	
	getNumRows: function() {
		return this.rows.length;
	},
	
	getImageFieldset: function() {
		return document.getElementById('images');
	},
	
	addImage: function() {
		var index		= this.getNextIndex();
		var fieldset 	= document.createElement('fieldset');
		
		fieldset.setAttribute('id', 'images_row_' + index);
		//fieldset.className = 'floatingElement noneFloatingInput';
		fieldset.className = 'noneFloatingInput imagesadd';

		fieldset.appendChild( this.composeElement('formElement textElement amount', this.makeFileInputField(index)) );
		fieldset.appendChild( this.composeElement('commentElement remove', this.makeRemoveButton(index)) );
		
		this.getImageFieldset().appendChild(fieldset);
		
		this.addRowIndex( index );
	},
	
	composeElement: function(cssClass, field) {
		var boxDiv = document.createElement('div');
		boxDiv.className = cssClass;
		
		var elemDiv = document.createElement('div');
		elemDiv.className = 'formField';
		
		elemDiv.appendChild( field );
		
		var clearDiv = document.createElement('div');
		clearDiv.className = 'formClear';
		
		boxDiv.appendChild(elemDiv);
		boxDiv.appendChild(clearDiv);
		
		return boxDiv;
	},
	
	removeImages: function(index) {
		$('images_row_' + index).remove();
		this.removeRowIndex(index);
	},
	
	
	makeFileInputField: function(index) {
		var field = document.createElement('input');
		field.setAttribute('id', 	this.baseName + '[' + index + '][image]');
		field.setAttribute('name', 	field.getAttribute('id'));
		field.setAttribute('type',	'file');

		field.onblur = tx_recipes_pi1.formImages.evalAmount;
		
		return field;
	},
	
	evalAmount: function(e) {
		var elem = e.type == 'blur' ? e.target : e;
		
		elem.value = isNaN(elem.value) ? 0 : elem.value;
	},
	
	makeRemoveButton: function(index) {
		var text = document.createTextNode('x');
		
		var link = document.createElement('a');
		link.setAttribute('href', 'javascript:tx_recipes_pi1.formImages.removeImages(' + index + ')');
		
		link.appendChild(text);
		
		return link;
	},
	
	addRowIndex: function(index) {
		if(this.rows.length == 0)	{
			document.getElementById('addImageLink').style.display = 'none';
		}
		this.rows.push(index);
	},
	
	removeRowIndex: function(index) {
		var r = [];
		
		for(var i=0; i<this.rows.length; i++) {
			if( this.rows[i] != index )
				r.push(this.rows[i]);
		}
		
		if(r.length <= 1)	{
			document.getElementById('addImageLink').style.display = 'block';
		}
		
		this.rows = r;
	}	
	
};

tx_recipes_pi1.additionalFormImages = {
	index: 0,
	rows: [],
	dimCache: null,
	baseName: 'tx_recipes_pi1[additional_images]',
	
	init: function(rowNumbers) {
		var rows = rowNumbers.split(',');
		
		for(var i=0; i<rows.length; i++)
			this.rows.push(rows[i]);
	},
	
	getNextIndex: function(rise) {
		if( rise == false ) {
			return this.index + 1;
		} else {
			return ++this.index;
		}
	},
	
	getNumRows: function() {
		return this.rows.length;
	},
	
	getImageFieldset: function() {
		return document.getElementById('addimages');
	},
	
	addImage: function() {
		var index		= this.getNextIndex();
		var fieldset 	= document.createElement('fieldset');
		
		fieldset.setAttribute('id', 'addimage_row_' + index);
		fieldset.className = 'floatingElement noneFloatingInput';

		fieldset.appendChild( this.composeElement('formElement textElement amount', this.makeFileInputField(index)) );
		fieldset.appendChild( this.composeElement('commentElement remove', this.makeRemoveButton(index)) );
		
		this.getImageFieldset().appendChild(fieldset);
		
		this.addRowIndex( index );
	},
	
	composeElement: function(cssClass, field) {
		var boxDiv = document.createElement('div');
		boxDiv.className = cssClass;
		
		var elemDiv = document.createElement('div');
		elemDiv.className = 'formField';
		
		elemDiv.appendChild( field );
		
		var clearDiv = document.createElement('div');
		clearDiv.className = 'formClear';
		
		boxDiv.appendChild(elemDiv);
		boxDiv.appendChild(clearDiv);
		
		return boxDiv;
	},
	
	removeImages: function(index) {
		$('addimage_row_' + index).remove();
		this.removeRowIndex(index);
	},
	
	
	makeFileInputField: function(index) {
		var field = document.createElement('input');
		field.setAttribute('id', 	this.baseName + '[' + index + '][image]');
		field.setAttribute('name', 	field.getAttribute('id'));
		field.setAttribute('type',	'file');

		field.onblur = tx_recipes_pi1.formImages.evalAmount;
		
		return field;
	},
	
	evalAmount: function(e) {
		var elem = e.type == 'blur' ? e.target : e;
		elem.value = isNaN(elem.value) ? 0 : elem.value;
	},
	
	makeRemoveButton: function(index) {
		var text = document.createTextNode('x');
		
		var link = document.createElement('a');
		link.setAttribute('href', 'javascript:tx_recipes_pi1.additionalFormImages.removeImages(' + index + ')');
		
		link.appendChild(text);
		
		return link;
	},
	
	addRowIndex: function(index) {
		if(this.rows.length == 2)	{
			document.getElementById('addAdditionalImageLink').style.display = 'none';
		}
		this.rows.push(index);
	},
	
	removeRowIndex: function(index) {
		var r = [];
		
		for(var i=0; i<this.rows.length; i++) {
			if( this.rows[i] != index )
				r.push(this.rows[i]);
		}
		
		if(r.length <= 3)	{
			document.getElementById('addAdditionalImageLink').style.display = 'block';
		}
		
		this.rows = r;
	}	
	
};

tx_recipes_pi1.tellafriend =
{
	slide: null,
	moveto: null,
	fields: ['sender_name', 'sender_email', 'receiver_email'],
	mailPattern: /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/,
	
	install: function() {
		if(this.isIE6()) {
			$('tellafriend_link').addEvent('click', function(e){
												e = new Event(e);
												tx_recipes_pi1.tellafriend.toggleDisplayForIE();										
												e.stop();
											});
			
		} else {
			this.slide = new Fx.Slide('tellafriend', {mode: 'vertical'}).hide();
			
			$('tellafriend_link').addEvent('click', function(e){
												e = new Event(e);
												tx_recipes_pi1.tellafriend.toggleDisplayForIE();
												tx_recipes_pi1.tellafriend.slide.toggle();
												e.stop();
											});
			
			this.moveto = new Fx.Scroll(window, {
				wait: false,
				duration: 2000,
				offset: {'x': 0, 'y': -100},
				transition: Fx.Transitions.Quad.easeInOut
			});
		}
	},
	
	isIE6: function() {
		var n = navigator.userAgent;
		return n.indexOf("MSIE 6") != -1;
	},
	
	toggleDisplayForIE: function() {
		if( $('tellafriend').getStyle('display') == 'none' ) {
			$('tellafriend').setStyle('display', 'block');
			$('tellafriend').getParent().setStyle('marginBottom', '40px');
		} else {
			$('tellafriend').setStyle('display', 'none');
			$('tellafriend').getParent().setStyle('marginBottom', '0px');
		}
		
		// Intelligent browsers slide to the box
		if( $('tellafriend').getStyle('display') == 'block' && !this.isIE6() ) {
			tx_recipes_pi1.tellafriend.moveto.toElement('tellafriend');
		}
	},
	
	send: function() {
		$('tellafriend').getParent().setStyle('height', 'auto');
		this.hideAllErrors();
		
		// Check if fields are empty
		this.fields.each( function(field) {
							if( $('tx_recipes_pi1[' + field + ']').value.trim() == '' )
								tx_recipes_pi1.tellafriend.showError(field);
							}
						);
		
		// Check email addresses		
		if( !this.checkMail('sender_email') ) {
			this.showError('sender_email');
			return;
		}
		
		if( !this.checkMail('receiver_email') ) {
			this.showError('receiver_email');
			return;
		}
		
		document.getElementById('f_tellafriend').submit();
	},
	
	checkMail: function(field) {
		return this.mailPattern.test( $('tx_recipes_pi1[' + field + ']').value.trim() );
	},
	
	showError: function(field, show) {
		var mode = show == false ? 'none' : 'block';
		$('taf_error_' + field).setStyle('display', mode);
	},
	
	hideAllErrors: function() {
		this.fields.each(function(err) {tx_recipes_pi1.tellafriend.showError(err, false);});
	}
};

tx_recipes_pi1.newsletter = {
	toggleHTML: function() {
		if( !$('tx-srfeuserregister-pi1-tx_recipes_newsletter').checked )
			$('tx-srfeuserregister-pi1-module_sys_dmail_html').checked = false;
	}	
};
