var ChangeService = new Class({

	initialize: function() {
		this.services = changeServices;
		this.initElements();
		this.initCheckErrors();
		this.fillSelectBox();
		this.setEvents();
	},

	initElements: function() {
		this.elements = {
			errors: {
				formErrorElm: $('formErrorElm'),
				errorAnbieter: $('errorAnbieter'),
				errorProdukt: $('errorProdukt'),
				errorVertragsnummer: $('errorVertragsnummer'),
				errorKundennummer: $('errorKundennummer'),
				errorVorname: $('errorVorname'),
				errorName: $('errorName'),
				errorStrasse: $('errorStrasse'),
				errorHausnr: $('errorHausnr'),
				errorPLZ: $('errorPLZ'),
				errorOrt: $('errorOrt')
			},
			inputs: {
				anbieter: $('anbieter'),
				produkt: $('produkt'),
				vertragsnummer: $('vertragsnummer'),
				kundennummer: $('kundennummer'),
				vorname: $('vorname'),
				name: $('name'),
				strasse: $('strasse'),
				nr: $('nr'),
				plz: $('plz'),
				ort: $('ort')
			},
			selectInputs: {
				internetanbieter: $('internetanbieter'),
				anbieterpostfach: $('anbieterpostfach'),
				anbieterstrasse: $('anbieterstrasse'),
				anbieternr: $('anbieternr'),
				anbieterplz: $('anbieterplz'),
				anbieterort: $('anbieterort'),
				anbieterfax: $('anbieterfax'),
				anbieterfaxnummer: $('anbieterfaxnummer')
			},
			containers: {
				internetanbieterContainer: $('internetanbieterContainer'),
				anbieterpostfachContainer: $('anbieterpostfachContainer'),
				anbieterstrasseContainer: $('anbieterstrasseContainer'),
				anbieterplzContainer: $('anbieterplzContainer'),
				anbieterfaxContainer: $('anbieterfaxContainer')
			},
			buttons: {
				'btn_generieren': $('btn_generieren')
			},
			forms: {
				changeService: $('changeService')
			}
		}
	},

	initCheckErrors: function() {
		this.checkErrors = {
			anbieter: 'errorAnbieter',
			produkt: 'errorProdukt',
			vertragsnummer: 'errorVertragsnummer',
			kundennummer: 'errorKundennummer',
			vorname: 'errorVorname',
			name: 'errorName',
			strasse: 'errorStrasse',
			nr: 'errorHausnr',
			plz: 'errorPLZ',
			ort: 'errorOrt'
		};
	},

	fillSelectBox: function() {
		var option = null;
		for(var cs in this.services) {
			option = new Element('option', {value:cs});
			option.set('text', this.services[cs].kurz);
			this.elements.inputs.anbieter.grab(option);
		}
	},

	setEvents: function() {
		this.elements.inputs.anbieter.addEvent('change', this.showAnbieter.bind(this));
		var cForm = this.elements.forms.changeService;
		cForm.addEvent('submit', this.checkForm.bind(this));
	},

	showAnbieter: function() {
		var fields = ['internetanbieter', 'anbieterstrasse', 'anbieternr', 'anbieterplz', 'anbieterort',
					  'anbieterfax', 'anbieterfaxnummer', 'anbieterpostfach'];
		var selected = this.services[this.elements.inputs.anbieter.value];
		var elm = null;
		var cont = null;
		for(var i=0; i<fields.length; i++) {
			elm = this.elements.selectInputs[fields[i]];
			cont = this.elements.containers[fields[i] + 'Container'] || null;

			if(selected[fields[i]]) {
				elm.value = selected[fields[i]];
				elm.set('readonly', 'readonly')
				elm.addClass('readonly');
			} else {
				elm.value = '';
				elm.erase('readonly');
				elm.removeClass('readonly');
			}

			if(cont!=null) {
				if(selected.showAll || selected[fields[i]]) {
					cont.setStyle('display', 'block');
				} else {
					cont.setStyle('display', 'none');
				}
			}
		}
	},

	checkForm: function() {
		var inputs = this.elements.inputs;
		var errors = 0;
		var errorElm = this.elements.errors;
		var value = null;
		for(var input in inputs) {
			value = inputs[input].value;

			if((inputs[input].type!='text' && value=='a0')) {
				errorElm[this.checkErrors[inputs[input].id]].setStyle('display', 'block');
				errors++;
			} else if(value.trim()=='') {
				errorElm[this.checkErrors[inputs[input].id]].setStyle('display', 'block');
				inputs[input].addClass('error');
				errors++;
			} else {
				errorElm[this.checkErrors[inputs[input].id]].setStyle('display', 'none');
				inputs[input].removeClass('error');
			}
		}
		if(errors>0) {
			errorElm.formErrorElm.setStyle('display', 'block');
		} else {
			errorElm.formErrorElm.setStyle('display', 'none');
			this.elements.forms.changeService.removeEvents('submit');
			this.elements.forms.changeService.set('onsubmit', 'return true;');
			this.elements.forms.changeService.submit();
		}
	}
	
});

window.addEvent('domready', function() {
    new ChangeService();
});

