/* Paths and URL */

if (typeof(op) == 'undefined') op = {};
if (typeof(op.paths) == 'undefined') op.paths = {};
if (typeof(op.labels.country) == 'undefined') op.labels.country = '';
op.paths.scripts = 'fileadmin/templates/js/';	// Script-Path

// ====================================================================== FORM HANDLING
  
// SUGGESTS
// HELPER: get value from suggest-list
op.selectSuggest = function(a){
	var p = a.parents('.autocompletebox').addClass('dn');
	jQuery('#sendForm',op.context).css('zIndex','');
		
	// set input field text
	jQuery('[name=' + p.attr('rel') + ']').val(a.text()); 

	if (a.parents('form').attr('id') == 'hotel-content'){
		// set hidden field value 
		jQuery('[rel=locationId]').val( a.attr('rel') ); 
		
		// add geo location data from HotelV2 web service
		jQuery.ajax({
			url: op.paths.locationObjURL,
			success: function(data){
				a.parents('form').prepend(data);
			},
			data: ({locationId : a.attr('rel')}),
			dataType: 'html',
			type: "POST",
			contentType: 'application/x-www-form-urlencoded; charset=UTF-8'
		});			
		
		/* MAP UPDATE OFF
		if(op.initMapWithCode) {
			op.initMapWithCode(a.parents('.formsection').attr('rel'),a.attr('rel'));
		}
		*/
	} else if(a.parents('form').attr('id') == 'car-content'){
		// Car
		// set hidden field value
		var val = a.text();
		var inp = jQuery('[name=carloc]');
		
		jQuery('[name=idcarlocation]').val(a.attr('rel')); 
		
		val =encodeURI(val );
		valString=val.split(',%20');

		url = ( op.paths.carLocationURL + '?type=location&age=32&locationType=Z&query=' + valString[1]+',%20'+ valString[0]);
		jQuery.get(
			url,
			function(data){
				data = eval(data);
				data = op.sortCarLocation(data);
				op.updateSuggestCarLocation(data, inp);
			},
			'html'
		);
	} else {
		// Flight / DP
		// set hidden field value 
		jQuery('[name=' + p.attr('rel') + 'Code]').val( a.attr('rel') ).change();
	}
	
	if(a.parents('form').attr('id') != 'car-content'){

		if(op.rail && op.rail.update){ op.rail.update(); }
	}
};

op.autosuggest = function(){

		// EVENT: show/hide groups within suggest
		jQuery('.suggest .menubox .group',op.context).hover(function(event){jQuery(this).toggleClass('showHover');});

		// EVENT: suggest-input loose focus
		jQuery('.suggest input',op.context).blur(function(event){
			var inp = jQuery(this);
			var suggest = inp.parents('.suggest');
			if (!suggest.hasClass('expand') && inp.val().length <= 0){
				inp.attr('title', '');
				suggest.find('input.code').val('');
				if (suggest.hasClass('places')){
					jQuery('#' + suggest.parents('.formsection').attr('rel'),op.context).addClass('dn');
				}
			}
		});



		// initAutocompleteClick();

		// EVENT: keyEvents at suggest, init AJAX-request
		jQuery('input.suggest',op.context).keyup(function(event){
			var inp = jQuery(this);
			var suggest = inp.parents('.suggest');

			var content = jQuery("#"+op.currentContentid);
			var autocompletebox = content.find('.autocompletebox');			
			
			if (!autocompletebox.hasClass('dn')){		

				var cur = autocompletebox.find('p.cur');
				if (event.keyCode == 40) {	// DOWN
					if (cur.length) {
						if (cur.next('p').length) {
							cur.removeClass('cur').next('p').addClass('cur').find('a').focus();
						}
					}
					else {	
						autocompletebox.find('p:not(.hover):first').addClass('cur').find('a').focus();
					}
					inp.focus();			
					return;
				}
				if (event.keyCode == 38) {	// UP
					if (cur.length && cur.prev('p').length) {
						cur.removeClass('cur').prev('p').addClass('cur').find('a').focus();
						inp.focus();				
					}
					return;
				}
				if (event.keyCode == 13 || event.keyCode == 9) {	// ENTER || TAB
					if (cur.length){
						op.selectSuggest(cur.find('a:first'));
					}
					return;
				}
				if (event.keyCode == 27) {	// ESCAPE			
					autocompletebox.addClass('dn');
					jQuery('#sendForm').css('zIndex','');
					return;//Aussage.match(/Mensch\S{2}/)	
				}
			}
			
			// get data for suggest
			var url;
			var val = jQuery(this).val();
			var trimmedVal = op.helper.trim(val);
			
			if ( (val.length > 2) && inp.hasClass('places') ){	
				op.closeOther();	
				inp.find('input.code').val('');
				if (inp.hasClass('places')) {
					// FIX FOR P1 31.03 
					url = ( op.paths.flightsURL + '?query=hambu' );
					jQuery.get(
						url ,
						function(data){
						},
						'html' 
					);				
				
				
					url = ( op.paths.placesURL );
					$.ajaxSetup({
						contentType: 'application/x-www-form-urlencoded; charset=UTF-8'
					})
					jQuery.post(url, {
						textLocation: trimmedVal
					}, function(data){
						op.updateSuggestPlaces(data, inp);
					}, 'html');
					$.ajaxSetup({
						contentType: 'application/x-www-form-urlencoded;'
					})
				} 

			} else if ( (val.length > 2) && inp.hasClass('car') ){				
				url = ( op.paths.carURL + '?limit=10&locationType=Z&type=city&age=32&query=' + trimmedVal );
				jQuery.get(
					url,
					function(data){
						if(!data.match(/</)){
							data = eval(data);
							op.updateSuggestCar(data, inp);
						}
					},
					'html'
				);				
			} else if ( (val.length >= 4) && (inp.hasClass('airports') || inp.hasClass('dp-airports')) ) {	
				op.closeOther();	
				inp.find('input.code').val('');
				if (inp.hasClass('airports')) {
					url = ( op.paths.flightsURL + '?query=' + trimmedVal );
					jQuery.get(
						url ,
						function(data){
							data = eval(data);
							op.updateSuggestAirports(data, inp);
						},
						'html' 
					);
				}
				else if (inp.hasClass('dp-airports')) {
					url = ( op.paths.dpFlightsURL + '?query=' + trimmedVal + '&isDP=true' );
					jQuery.get(
						url,
						function(data){
							data = eval(data);
							op.updateSuggestAirports(data, inp);
						},
						'html'
					);
				}
			} else {
				autocompletebox.addClass('dn');	
			} 
		});
}

// HELPER: airports => update suggester with response
op.updateSuggestAirports = function(data,suggest){
	var l = data.length;
				
	var content = jQuery("#"+op.currentContentid);
	var autocompletebox = content.find('.autocompletebox'); 
	
	if (l) {
		autocompletebox.removeClass('dn').empty();
//		var menubox = autocompletebox.empty();
		var groups = {};
		for (var i = 0; i<l; i+=1) {
			var t = data[i];
			if (t[4].length === 3){
				autocompletebox.append(	// atomar entries
					jQuery('<p/>').append(
						jQuery('<a/>').attr({href:'#',rel:t[4]}).html(t[2] + ', ' + t[1] + ', ' + t[3] + ' [' + t[4] + ']')
					)
				)
			} else {	// group-entries
				var tmp = t[4].split(',');
				if (typeof(groups[tmp[1]]) == 'undefined') {
					groups[tmp[1]] = [];
				}
				t.push(tmp[0]);
				groups[tmp[1]].push(t);
			}
		}
		jQuery.each(groups,function(gr){	// render groups
			//var p = jQuery('<p/>').addClass('group').append(jQuery('<a/>').attr({href:'#',rel:gr}).html(this[0][1]));
			var out = '<span class="hover">';
			for (var j = 0; j<this.length; j+=1){
				out += '[' + this[j][5] + '] ' + this[j][2] + '&nbsp;';
			}
			out += '</span> <br>';

			var p = jQuery('<p/>').addClass('group').append(jQuery('<a/>').attr({href:'#',rel:gr}).html(this[0][1]  + out )); 
			//p = p.append(jQuery('<p/>').addClass('hover').html(out));
			autocompletebox.append(p);
		});
		autocompletebox.find('p:not(.hover):last').addClass('last');
		jQuery('.expand',op.context).removeClass('expand');
		autocompletebox.attr({rel: suggest.attr('name') });
		jQuery('#sendForm',op.context).css('zIndex','50');

		autocompletebox.find('a').click(function(){
			op.selectSuggest(jQuery(this));
			return false;
		});
	} else {
		autocompletebox.addClass('dn');		
	}
};

op.updateSuggestCar = function(data,suggest){
	var l = data.length;
	
	var content = jQuery("#"+op.currentContentid);
	var autocompletebox = content.find('.autocompletebox'); 
	
	if (l) {
		autocompletebox.removeClass('dn').empty();
	
		for (var i = 0; i<l; i+=1) {
			var t = data[i];
			autocompletebox.append(	// atomar entries
				jQuery('<p/>').append(
					jQuery('<a/>').attr({href:'#',rel:t['locationId']}).html(t['locationCity'] + ', ' + t['locationCountry'])			
				)
			)
		}
		autocompletebox.find('p:not(.hover):last').addClass('last');
		jQuery('.expand',op.context).removeClass('expand');
		autocompletebox.attr({rel: suggest.attr('name') });
		jQuery('#sendForm',op.context).css('zIndex','50');

		autocompletebox.find('a').click(function(){
			op.selectSuggest(jQuery(this));
			return false;
		});
	} else {
		autocompletebox.addClass('dn');		
	}
};

op.updateSuggestCarLocation = function(data,suggest){	
	var l = data.length;

	var content = jQuery("#"+op.currentContentid);
	var autocompletebox = content.find('.autocompletebox'); 
	if (l) {
		autocompletebox.removeClass('dn').empty();
		for (var i = 0; i<l; i+=1) {
			var t = data[i];
			(t['locationAddress1']&&t['locationPostCode']) ? address=t['locationAddress1']+', '+t['locationPostCode']+ ' ' +t['locationCity'] :address=t['locationCity'];
				switch (t['locationType']){
				case 'A': icons = 'carsearch-plane.png';break;
				case 'D': icons = 'carsearch-car.png';break;
				case 'R': icons = 'carsearch-train.png';break;
				default : icons = 'carsearch-car.png'; break;

			}
			autocompletebox.append(	// atomar entries
				jQuery('<p/>').append(
				jQuery('<a/>').attr({href:'#',rel:t['locationId']}).html('<table><tr><td><img style="padding:3px 5px 0 0;" src="'+op.paths.carIcons + icons +'" /></td><td>'+t['locationName']+ ', ' + address+'</td></tr></table>')
				)
			)

		}       
		autocompletebox.find('p').addClass('locationitem');
		autocompletebox.find('p:not(.hover):last').addClass('last');
		jQuery('.expand',op.context).removeClass('expand');
	//	autocompletebox.attr({rel: suggest.attr('name') });
		jQuery('#sendForm',op.context).css('zIndex','50');

			autocompletebox.find('a').click(function(){
			if(op.labels.country=='uk'){
				jQuery('.autocompletecar',op.context).addClass('dn');
				//jQuery('#selectedCarLocation').removeAttr('disabled');
			}
			op.selectSuggestcarLocation(jQuery(this));	
			return false;
			});	
		if(op.labels.country=='uk'){	
		jQuery('.selectedCarLocation',op.context).removeClass('dn');
			$('#carLocationTrigger').click(function() {
					 jQuery('.autocompletecar',op.context).removeClass('dn');		
			});		

		}
		else{	
		// select first result automatic
		autocompletebox.find('p:first').addClass('cur').find('a').click();	

		}
	} else {
	
		autocompletebox.addClass('dn');		
	}
};

op.selectSuggestcarLocation = function(a){
		jQuery('#sendForm',op.context).css('zIndex','');
			
		jQuery('.autocompletecar',op.context).find('.cur').removeClass('cur');	
		a.parent('p').addClass('cur');

		if(op.labels.country!='uk'){	
		jQuery('#selectedCarLocation',op.context).val( a.text() );
		} else {
		jQuery('#selectedCarLocation',op.context).empty();
		jQuery('#selectedCarLocation',op.context).html( a.text()+'&nbsp;&nbsp;<nobr><a href="javascript:;" id="carLocationTrigger">Change location ></a></nobr>		' );
			$('#carLocationTrigger').click(function() {
					 jQuery('.autocompletecar',op.context).removeClass('dn');		
			});			
		//jQuery('#carLocationTrigger',op.context).removeClass('dn');	
		}
		jQuery('.selectedCarLocation',op.context).removeClass('dn');
		


		jQuery('[name=destination1]').val( a.attr('rel') ).change();
		jQuery('[name=destination2]').val( a.attr('rel') ).change();

};



op.sortCarLocation = function(data){
	var l = data.length;
	var airport = new Array();
	var rail  = new Array();
	var cars = new Array();
	var other = new Array();
	var resultArray = new Array();

	if (l) {
		for (var i = 0; i<l; i+=1) {
			var t = data[i];
			(t['locationAddress1'] && t['locationPostCode']) ? address=t['locationAddress1']+', '+t['locationPostCode']+ ' ' +t['locationCity'] : address=t['locationCity'];
				switch (t['locationType']){
				case 'A': airport.push(data[i]);	break;
				case 'D': cars.push(data[i]);	break;
				case 'R': rail.push(data[i]); break;
				default: other.push(data[i]);    break;
			}
		}		
		resultArray = airport.concat(rail,cars,other);		
	} else {
		return resultArray = false;		
	}	
	return resultArray;
};




// HELPER: googlePlaces => update suggester with response
op.updateSuggestPlaces = function(data,suggest){
		var l = data.length;				
		
		var entries = jQuery(data).find('li');
		var tmp = jQuery('<div/>');
	
		var content = jQuery("#"+op.currentContentid);
		var autocompletebox = content.find('.autocompletebox'); 
	
	if ( data.search("</li>")!=-1 ) {	
	
			for (var i = 0; i<entries.length; i+=1){
				var entry = jQuery(entries[i]);
				tmp.append(	// atomar entries
					jQuery('<p/>').append(
						jQuery('<a/>').attr({href:'#',rel:entry.attr('id')}).html(entry.text())
					)
				);
			}
			
			autocompletebox
				.empty()
				.append(tmp.html())
				.find('p:not(.hover):last').addClass('last');
		
			jQuery('.expand',op.context).removeClass('expand');
			autocompletebox.attr({rel: suggest.attr('name') });
			jQuery('#sendForm',op.context).css('zIndex','50');
		
			autocompletebox.find('a').click(function(){
				op.selectSuggest(jQuery(this));
				return false;
			});	
				
			autocompletebox.removeClass('dn');
	
	} else {
			autocompletebox.addClass('dn');
		}
	
};



// ============================================================================ LOAD HANDLING
// SUGGEST
// HELPER: fill input with (shorten) value, set title-tag
op.preFillSuggest = function(form,k,p){
	form.find('.suggest[rel=' + k + '] input:not(.code)').attr('title',p).val(op.shortText(p,32));
};



