/*
	Class: Formular
	
		
	Parameters:
			
	Exemple:
	
	About:
	
*/
var Formular = new Class({
	/*

		Initialize
	*/
	
	Implements: Options,
	
	options: {
		server: 'main',
		promoId 	: { 'all' : '281' },
		cgId 		: { 'all' : '256' },
		insuranceId : { 'all' : '772' }
	},
	
	initialize : function(options) {
		this.setOptions(options);
		this.designInput();
		
		this.designLabel();
		
		this.reorderCountries();
		
		this.fixInscription();
		
		if ($('form')) {
			this.openPromoAndCG(); 
			if ($('form').getElement('div.branch')) { this.addBranchToSubject(); }
		
			//make other accomodation required in demande d'offre
			this.fixAccomodation();
		}
		
		this.fixTransport();
		this.fixFreePriceQuote();
		
		// Add the referer
		if ($('url_http_referer')) { $('url_http_referer').set('value', document.referrer); }
		if ($('url_http_origin')) { $('url_http_origin').set('value', Cookie.read('referrer')); }
	},
	
	designInput : function() {
		if ($('formular')) var inputs = $('formular').getElements('input');
		else if ($('form')) var inputs = $('form').getElements('input');
		else var inputs = [];
		
		inputs.each(function(input,i){
				//inpput image for button
				if (input.getProperty('type')=='image'){
					var lang = input.getProperty('class');
					var btn;
					var btn_over;
					
					switch (input.value){
						case 'calculate':
							btn = 'btn_calculate.gif';
							btn_over = 'btn_calculate_over.gif';
							break;
						
						case 'contact':
							btn = 'btn_contact.gif';
							btn_over = 'btn_contact_over.gif';
							break;
							
						case 'inscription':
							btn = 'btn_inscription.gif';
							btn_over = 'btn_inscription_over.gif';
							break;
							
						case 'print':
							btn = 'btn_print.gif';
							btn_over = 'btn_print_over.gif';
							break;
							
						case 'newoffer':
							btn = 'btn_newoffer.gif';
							btn_over = 'btn_newoffer_over.gif';
							break;
							
						case 'next':
							btn = 'btn_next.gif';
							btn_over = 'btn_next_over.gif';
							break;
							
						case 'previous':
							btn = 'btn_previous.gif';
							btn_over = 'btn_previous_over.gif';
							break;
							
						default:
							btn = 'btn_send.gif';
							btn_over = 'btn_send_over.gif';
							break;
					}
					
					input.addEvent('mouseenter', function(){
						input.src='/img/form/'+lang+'/'+btn_over;
					});
					input.addEvent('mouseleave', function(){
						input.src='/img/form/'+lang+'/'+btn;
					});					
				}
		})
	},
	
	designLabel : function(){
		//get all strong elements used as "label"
		$$('form#form div.sep > strong').each(function(strong){
			if (strong.get('text').trim().match(/^\*.+/)) {
				strong.addClass('required');
				strong.set('html', strong.get('html').replace('*', '<span>*</span>'));
			}
		});
		
		//remove empty legend
		if(this.options.server=='main')
		$$('form#form fieldset > legend').each(function(legend){
			if (legend.get('text') == "") {
				legend.setStyle('display', 'none');
			}
		});
	},
	
	reorderCountries : function(){
		var elements = [
			$$('select[name=nationality]')[0] || false,
			$$('select[name=country]')[0] || false
		];
		
		elements.each(function(select){
			if (!select || select.getFirst() == null) return;
			var out = [ [], [], [], [], [], [] ];
			select.getFirst().setProperty('rel', '1');
			select.getChildren().each(function(option){
				if (option.getProperty('id')) option.value = option.getProperty('id');
				out[(option.getProperty('rel')) ? option.getProperty('rel') - 1 : 5].push(option);
			});
			
			out.flatten().each(function(option){
				option.inject(select);
			});
		});
	},
	
	fixInscription : function(){
		var formID = 1; 
		if (document.forms.length == 1) { formID = 0; }
		
		if (document.forms[formID].other_acc && document.forms[formID].other_acc.length == 2) {
			document.forms[formID].other_acc[1].setProperties({
				id : "other_acc_2",
				name : "other_acc_2"
			});
		}
			
		if (document.forms[formID].invoicing_type && document.forms[formID].invoicing_type.length == 2) {
			var invoicing_flds = ['invoicing_company', 'invoicing_name', 'invoicing_address', 'invoicing_postcode_city'];
			var initialID = 20;
						
			document.forms[formID].invoicing_type[0].addEvent('change', function(){
				if (this.checked) {
					invoicing_flds.each(function(item){
						formcheck.dispose(document.forms[formID][item]);
						document.forms[formID][item].removeClass("validate['required']");
						
						var strong_lbl = document.forms[formID][item].getPrevious();
						
						strong_lbl.removeClass('required');
						strong_lbl.set('html', strong_lbl.get('html').replace('<span>*</span> ', ''));
					});
				}
			});
			
			document.forms[formID].invoicing_type[1].addEvent('change', function(){
				if (this.checked) {
					invoicing_flds.each(function(item){
						document.forms[formID][item].addClass("validate['required']");
						formcheck.register(document.forms[formID][item], initialID);
						
						var strong_lbl = document.forms[formID][item].getPrevious();
						
						strong_lbl.addClass('required');
						strong_lbl.set('html', '<span>*</span> ' + strong_lbl.get('html'));				
						
						initialID++;
					});
					initialID = 20;
				}
			});
		}		
	},
	
	openPromoAndCG : function(){
		if (!$('form_type')) { return; }
	
		var self = this; // Set the this to a var
		
		$('form').getElements('a.promo, a.CG, a.reiseversicherung').addEvent('click', function(e){
			e.preventDefault();
			
			var formtype = $('form_type').get('value');
			var id = '';
			
			// Get the good ID 
			if (this.getProperty('class') == 'promo') { id = self.options.promoId[formtype]; } 
			else if (this.getProperty('class') == 'CG') { id = self.options.cgId[formtype]; } 
			else if (this.getProperty('class') == 'reiseversicherung') { id = self.options.insuranceId[formtype]; }			
		
			// Open the window
			openWindow(id,defaultLanguage);
		});
	},
	
	addBranchToSubject : function() {
		$('form').getElement('div.branch').getElements('input').each(function(el){
			this.subject = $('subject').get('value');
				el.addEvent('change', function(e){
					$('subject').set('value', this.subject + " - " + el.get('value'));
				}.bind(this));				
		},this);	
	},
	
	fixAccomodation : function(){
		if ($('form').other == undefined) return;
		
		$('form').other.addEvent('change', function(){
			if (this.checked) {
				//make element required
				$('other_acc').addClass("validate['required']")
				formcheck.register($('other_acc'), 23);
			} else {
				//remove element from formcheck
				$('other_acc').removeClass("validate['required']");
				formcheck.dispose($('other_acc'));
			}
		});
	},
	
	fixTransport : function(){
		if($('transport_type') && $('transport_type').length == 5 && $('transport_company') && $('transport_number')) {
			var restore = false;
			var transport = $('transport_company').getParent();
			var transpotHeight = transport.getHeight();
			var fx = new Fx.Tween(transport, {wait: false});
			transport.setStyle('overflow', 'hidden');
			
			
			$('transport_type').addEvent('change', function(){
				if ($('transport_type').selectedIndex == 4) {
					//register txt
					restore = $('transport_number').getPrevious().get('html');
					
					//remove field and change txt
					fx.start('height', 0);
					$('transport_number')
					.setProperty('name', 'transport_other')
					.getPrevious().set('html', '<span>*</span> ' + otherLanguage.specifyTransport);
					
				} else if (restore) {
					//restore field and txt
					$('transport_number')
					.setProperty('name', 'transport_number')
					.getPrevious().set('html', restore);
					
					fx.start('height', transpotHeight);
					restore = false;
				}
			});
		}
	},
	
	fixFreePriceQuote : function(){
		var formular = $('form') || $('formular');
		if (
			typeof formular.host_family == "undefined" || 
			typeof formular.residence == "undefined" || 
			typeof formular.other == "undefined" || 
			typeof formular.no_accomodation == "undefined" ||
			typeof formcheck == "undefined"
		) return;
		
		$('form').host_family.addClass("validate['%boxesCheck']");
		formcheck.register($('form').host_family, 23);
		
		boxesCheck = function(el){
			return true;
		}
		
	}
});

function openWindow(id,lang){
	var dblang = '';
	if(lang=='fr'){
		dblang='fr';
	}else if(lang=='de'){
		dblang='de';
	}else if(lang=='it'){
		dblang='it';
	}
	var url=document.URL;
	window.open('/floor/cs?server=ldt'+dblang+'&amp;lang='+lang+'&item_categoryID='+id+'','','status=yes,scrollbars=yes,resizable=yes,width=1030,height=700');
}
