// FUNCTIONS
var initTripSearch;
var shortText;
var by;
var formatPrice;
var buildNavi;
var buildSliders;
var initSelectedTripList;
var initFlashBanner;
var initMindAndCompareList;
var checkAgency;
var initFlashSoundPlayer;
var showAvailableThemes;
var loadCountryTabsByCookie;

//global settings and variables BEGIN
var cookieName = 'drtigges-reiseMerken';
var cookieAgency = 'agenturMerken';
var cookieTrips = 'drtigges-reiseliste';
var cookieTabs = 'drtigges-tab';
var rows = {}; // for all trip data
var find = {};
var cur = {};
var meta = {}; //	for meta-data, e.g. country-isocodes, style-shorts
var excludeGuides = ['1390259','1392462','1395785','1505377','10']; // excluded guides, tmp solution

google.load("jquery","1.3.2");
google.load("jqueryui","1.7.2");
google.load("swfobject", "2.2");

google.setOnLoadCallback(function(){
	//lazy loader
	;(function($){$.xLazyLoader=function(method,options){if(typeof method=='object'){options=method;method='init';};new xLazyLoader()[method](options);};$.xLazyLoader.defaults={js:[],css:[],img:[],name:null,timeout:20000,success:function(){},error:function(){},complete:function(){},each:function(){}};var head=document.getElementsByTagName("head")[0];function xLazyLoader()
	{var self=this,s,loaded=[],errors=[],tTimeout,cssTimeout,toLoad,files=[];this.init=function(options)
	{if(!options)return;s=$.extend({},$.xLazyLoader.defaults,options);toLoad={js:s.js,css:s.css,img:s.img};$.each(toLoad,function(type,f){if(typeof f=='string')
	f=f.split(',');files=files.concat(f);});if(!files.length){dispatchCallbacks('error');return;};if(s.timeout){tTimeout=setTimeout(function(){var handled=loaded.concat(errors);$.each(files,function(i,file){$.inArray(file,handled)==-1&&errors.push(file);});dispatchCallbacks('error');},s.timeout);};$.each(toLoad,function(type,urls){if($.isArray(urls))
	$.each(urls,function(i,url){load(type,url);});else if(typeof urls=='string')
	load(type,urls);});};this.js=function(src,callback,name)
	{var $script=$('script[src*="'+src+'"]');if($script.length){$script.attr('pending')?$script.bind('scriptload',callback):callback();return;};var s=document.createElement('script');s.setAttribute("type","text/javascript");s.setAttribute("src",src);s.setAttribute('id',name);s.setAttribute('pending',1);s.onerror=addError;$(s).bind('scriptload',function(){$(this).removeAttr('pending');callback();setTimeout(function(){$(s).unbind('scriptload');},10);});var done=false;s.onload=s.onreadystatechange=function(){if(!done&&(!this.readyState||/loaded|complete/.test(this.readyState))){done=true;s.onload=s.onreadystatechange=null;$(s).trigger('scriptload');};};head.appendChild(s);};this.css=function(href,callback,name)
	{if($('link[href*="'+href+'"]').length){callback();return;};var link=$('<link rel="stylesheet" type="text/css" media="all" href="'+href+'" id="'+name+'"></link>')[0];if($.browser.msie){link.onreadystatechange=function(){/loaded|complete/.test(link.readyState)&&callback();};}else if($.browser.opera){link.onload=callback;}else{var hostname=location.hostname.replace('www.',''),hrefHostname=/http:/.test(href)?/^(\w+:)?\/\/([^\/?#]+)/.exec(href)[2]:hostname;hostname!=hrefHostname&&$.browser.mozilla?callback():(function(){try{link.sheet.cssRules;}catch(e){cssTimeout=setTimeout(arguments.callee,20);return;};callback();})();};head.appendChild(link);};this.img=function(src,callback)
	{var img=new Image();img.onload=callback;img.onerror=addError;img.src=src;};this.disable=function(name)
	{$('#lazy-loaded-'+name,head).attr('disabled','disabled');};this.enable=function(name)
	{$('#lazy-loaded-'+name,head).removeAttr('disabled');};this.destroy=function(name)
	{$('#lazy-loaded-'+name,head).remove();};function load(type,url){self[type](url,function(status){status=='error'?errors.push(url):loaded.push(url)&&s.each(url);checkProgress();},'lazy-loaded-'+(s.name?s.name:new Date().getTime()));};function dispatchCallbacks(status){s.complete(status,loaded,errors);s[status](status=='error'?errors:loaded);clearTimeout(tTimeout);clearTimeout(cssTimeout);};function checkProgress(){if(loaded.length==files.length)dispatchCallbacks('success')
	else if(loaded.length+errors.length==files.length)dispatchCallbacks('error');};function addError(){errors.push(this.src);checkProgress();};};})(jQuery);
	
// additional jQuery-functions BEGIN

	// get url-params
	jQuery.urlParam = function(name){
		var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href);
		if (results != null) return results[1];
		return 0;
	}
	// checks, if an element exists, before starting to work on it
	jQuery.fn.doOnce = function(func){
		this.length && func.apply(this);
		return this;
	}
	// shorts an string by length-param and appends "..."
	shortText = function(str,l){
		if (str.length <= l) return str;
		return str.substring(0,(l-3)) + '...';
	};
	// sorting
	by = function (name, minor){
		return function (o, p){
			var a, b;
			if (o && p && typeof o === 'object' && typeof p === 'object'){
				a = o[name]; b = p[name];
				if (a === b){return typeof minor === 'function' ? minor(o, p) : 0;}
				if (typeof a === typeof b){return a < b ? -1 : 1;}
				return typeof a < typeof b ? -1 : 1;
			} else {throw {name: 'Error',message: 'Expected an object when sorting by ' + name};}
		};
	};
	// formats prices
	formatPrice = function(bp){
		if (bp === null) return '---&nbsp;&nbsp;';
		bp = bp.toString();
		l = bp.length;
		if (l > 3 )  {bp = bp.substring(0,l-3) + '.' + bp.substring(l-3,l);}
		return bp;
	};

	// additional jQuery-functions END	
	jQuery(document).ready(function(){
		jQuery.xLazyLoader({
			js: ['/javascripts/smsCommon/libs.js','/javascripts/smsCommon/jqprint.js'],
			success: function(){
				checkAgency();	// transport agency-number through page
				jQuery(".guideDetail").doOnce(function(){	// detailPages Guides
					jQuery(this).find('tr:even').addClass('even');
					jQuery(this).find('tr:odd').addClass('odd');
				});	// page countryInfos
				jQuery('#countryInfoTabs').doOnce(function(){loadCountryTabsByCookie();});	// country infos
				jQuery.getJSON(	// get meta-Data and build Navi
					'/trips/meta.json',
					function(data){
						jQuery('.accordion').accordion({	// sidebar accordion
							autoheight: false,
							event: 'mouseover',
							icons: {'header':'ui-icon-more','headerSelected':'ui-icon-cur'}
						});
						jQuery('#listLea').doOnce(function(){ 	// trip-guides overview (page "Reiseleiter")
							jQuery.getJSON('/trips/guides.json',
								function(data){
									//rows.guides = data;
									
									rows.guides=[];
									jQuery.each(data,function(k){										
										rows.guides[k]=[];
										var g;var lg=data[k].length;
										for(g=0;g<lg;g+=1){
											if (jQuery.inArray(data[k][g].id,excludeGuides) === -1) {rows.guides[k].push(data[k][g]);}
										}
									});
									
									jQuery.xLazyLoader({js: ['/javascripts/smsT/guides.js'],success:function(){initGuides();}});
								}
							);
						});
						// load page-controller (sidebar etc.)
						jQuery.xLazyLoader({js: ['/javascripts/smsT/generalContents.js']});
						meta = data;
						meta.styles = sortMetaStyles();						
						buildNavi();  		// build main-navi
						// load expressFinder
						jQuery('#exFi').doOnce(function(){jQuery.xLazyLoader({js: ['/javascripts/smsT/expressFinder.js']});});
						// page trip-styles, specials
						jQuery(".themeContainer").doOnce(function(){showAvailableThemes(this)});
						initTripSearch();	// trip search
						initSelectedTripList();	// special selected trips, e.g. "Auslese", "Reisen der Woche" etc.
						initMindAndCompareList();
						initFlashSoundPlayer();
				});
				// detailPage
				jQuery("#dpTabs").doOnce(function(){
					jQuery.xLazyLoader({
						js: ['/javascripts/smsT/detailPage.js'],
						success: function(){
							loadTabFromCookie();
						}
					});
				});
				buildSliders();		// slider (push)
				initFullSearch();	// fullSearch
				
				// Flash-Banner
				jQuery('.flashOpener').doOnce(function(){initFlashBanner(this);});
			}
		});
		
	});
});

// sort styles
var sortMetaStyles = function(){
	var tmp1 = [];
	var tmp2 = [];
	var tmp3 = [];
	var tmpAll = [];
	for (var i=0;i < meta.styles.length; i+=1){
		var pos = parseInt(meta.styles[i].p);
		switch (meta.styles[i].s){
			case 1:tmp1[pos] = meta.styles[i];break;	
			case 2:tmp2[pos] = meta.styles[i];break;	
			case 3:tmp3[pos] = meta.styles[i];break;	
		}
	}
	jQuery.each([tmp1,tmp2,tmp3],function(){
		for (i=0;i<this.length;i+=1){
			if (typeof(this[i]) != 'undefined') tmpAll.push(this[i]);
		}
	});
	return tmpAll;
}; 	
var printTrip = function(part){
	if (part === 'trip') {
		if (!mapRendered) renderMap();
		if (!tablesRendered) {renderAllTables();}
		if (!galleryRendered) {renderGallery();}
		if (!countryInfoRendered) {renderCountryInfo();}
		
		jQuery('.pr:not(.pr2),.jpr:not(.pr2),#prHeader').jqprint();
		return false;
	}	
	jQuery(
		'#' + part + ' .pr,' +
		'#' + part + ' .jpr,' + 
		'#prHeader')
	.jqprint();
	return false;	
};

//show flash-banner
initFlashBanner = function(dom){
	jQuery(dom).each(function(){
		var id = jQuery(this).attr('id').replace('flash_','');
		var tmp = eval('flashObj_' + id);
		jQuery(dom).html(
			jQuery('<a/>').attr({href:'#',onClick:"openFlash('" + id + "');return false;",className:"hoverTdn clearfix",title:tmp.bannerTitle}).append(
				jQuery('<img/>').attr({src:tmp.bannerImage,width:tmp.bannerWidth,height:tmp.bannerHeight}))
		);
		if (tmp.useBannerImage) return;
		swfobject.embedSWF (
			tmp.bannerFlash,
			'flash_' + id,
			tmp.bannerWidth,
			tmp.bannerHeight,
			'9.0.0',
			'expressInstall.swf',
			{flashid: id},
			{wmode:'opaque'},
			{}
		);
	});
};
var openFlash = function(id){
	var obj = eval('flashObj_' + id);
	window.open(
		obj.url,
		obj.flashTitle,
		"toolbar=no,location=no,status=no,menubar=no,scrollbars=0,resizable=1,width=" + obj.flashWidth + ",height=" + obj.flashHeight
	);
};

loadCountryTabsByCookie = function(){
	var tabCookie = jQuery.cookie(cookieTabs);
	var tab = 0;
	if (tabCookie != null && tabCookie.length) {
		var pages = tabCookie.split('@@');
		for (var i=0; i<pages.length; i+=1){
			var tmp = pages[i].split('::');
			if (tmp[0] == 'C' + paramIso.toUpperCase()) {
				tab = tmp[1];
				break;
			} 
		}
	}	
	dpTabs = jQuery("#countryInfoTabs").tabs({
		selected:tab,
		cookie:null,
		select: function(event,ui) {
			updateTabCookie(ui.index,paramIso.toUpperCase(),'C');}	
	});
};

showAvailableThemes = function(that){
	console.debug(that);
	for (var i=0;i<meta.styles.length;i+=1){
		jQuery(that).find('.rTeas.' + meta.styles[i].c).removeClass('dn');
	}
};

buildNavi = function(){	
	// mainNavi
	jQuery('#mainNavi').doOnce(function(){
		var that = jQuery(this);
		jQuery('a.main').mouseenter(function(){that.addClass(jQuery(this).attr('id'));});
		jQuery('a.main').mouseleave(function(){that.attr('className','');});
		jQuery(".sMCt").mouseenter(function(){
			jQuery(this).css({left:'1px'});
			jQuery('#mainNavi').addClass(jQuery(this).attr('id'));
		});
		jQuery(".sMCt").mouseleave(function(){
			jQuery(this).css({left:''});
			jQuery('#mainNavi').attr('className','');
		});
	});
	
	// subNavi Countries
	for (i=0;i<meta.regions.length;i+=1){
		jQuery('#regNav').append(jQuery('<li/>').append(jQuery('<a/>').attr({href:'/reisesuche?reiseziel=' + meta.regions[i].c,rel:meta.regions[i].c,className:'png'}).html(meta.regions[i].n)));
		var c = meta.regions[i].ctrs;
		var tmp = jQuery('<div/>').attr({rel:meta.regions[i].c,rel:meta.regions[i].c,className:'g invis clearfix grid'}).append(jQuery('<div/>').addClass('ctrBG clearfix'));
		for (j=0;j<c.length;j+=1){tmp.find('.ctrBG').append(jQuery('<a/>').attr({rel:c[j].i,href:'/reisesuche?land=' + c[j].g,className:'grid'}).html(c[j].n));}
		jQuery('#navCtrList').append(tmp);
	}
	
	// specials
	jQuery('#specialsAfterMe').doOnce(
		function(){
			var that = this;
			for (i=0;i<meta.styles.length;i+=1){
				if (meta.styles[i].s == '2') {
					var li = jQuery('<li/>').append(jQuery('<a/>').attr('href', '/reisesuche?special=' + meta.styles[i].c).html(meta.styles[i].n));
					that.after(li);
				}
			}			
		}
	);


	jQuery('#regNav a').mouseenter(function(){
		jQuery(this).parent().addClass('cur');
		jQuery('#navCtrList [rel=' + jQuery(this).attr('rel') + ']').addClass('vis');
	});
	jQuery('#regNav a').mouseleave(function(){
		jQuery(this).parent().removeClass('cur');
		jQuery('#navCtrList .g').removeClass('vis');
	});
	
	jQuery('#navCtrList .g').mouseenter(function(){
		jQuery(this).addClass('visH');
		jQuery('#regNav a[rel=' + jQuery(this).attr('rel') + ']').parent('li').addClass('curH');
	});
	jQuery('#navCtrList .g').mouseleave(function(){
		jQuery(this).removeClass('visH');
		jQuery('#regNav a[rel=' + jQuery(this).attr('rel') + ']').parent('li').removeClass('curH');
	});
	
	if (jQuery.browser.msie && parseInt(jQuery.browser.version.substr(0, 1)) <= 6) {
		// close IE6-Warning
		jQuery('.dontUseThisBrowser .icRem').click(function(){
			jQuery('.dontUseThisBrowser').remove();
		});
	}
};

initTripSearch = function(){
	// load all trip-data and libs to search and render
	jQuery('#seaAdv').doOnce(function(){
		jQuery.get(
			'/trips/search.json',
			function(data){
				var search_callback = function(data){
					var i;var l=data.length;
					var j;var ml = meta.regions.length;
					var z;
					for (i=0;i<l;i+=1){												
						data[i].lInt = parseInt(data[i].l);
						for (var j=0;j<ml;j+=1){
							if (data[i].region == meta.regions[j].c){
								for (z=0;z<meta.regions[j].ctrs.length;z+=1){
									if (data[i].ctrs[0] == meta.regions[j].ctrs[z].g){
										data[i].fc = meta.regions[j].ctrs[z].n;										
										data[i].fc = data[i].fc.replace(String.fromCharCode(196),'Ae');
										data[i].fc = data[i].fc.replace(String.fromCharCode(214),'Oe');
										//data[i].fc = data[i].fc.replace(/Ü/,'Ue');
										//console.log(meta.regions[j].ctrs[z].n,meta.regions[j].ctrs[z].n.charCodeAt(0));
										break;
									}
								}
								break;
							}
						}
					}
					rows.travels = cur.travels = data;
				};
				eval(data);
				jQuery.xLazyLoader({
					js: ['/javascripts/smsT/renderLists.js',
					    '/javascripts/smsT/tripSearch.js'],
					success: function(){
						prepareAdvancedSearch();
						initSearch();
						updateJSON(find);
					}
				});
			}
		);
	});
};

initFullSearch = function(){
	// Full-Text-Search
	jQuery('form[name=fullSearch]').submit(function(){
		window.location = '/suche?term=' + escape(jQuery('#searchInp').val());
	});	
	jQuery('#fullSearchRes').doOnce(function(){
 		jQuery.xLazyLoader({
			js: ['/javascripts/smsT/renderLists.js',
			     '/javascripts/smsT/fullSearch.js'],
			success: function(){
 			    var term = jQuery.urlParam('term');  
	 			if (term !== 0) {
	 				jQuery('#fullSearchFormInp').val(unescape(term));
	 				searchByTerm(unescape(term));
	 			}
 			}			
		});
	});
};

buildSliders = function(){
	// Slider Sidebar
	jQuery('#sliTripsOfWeek').doOnce(function(){
		this.slidebar({stepWidth:278});
	});
};

initSelectedTripList = function(){
	jQuery('#selectedTrips').doOnce(function(){
		var type = jQuery(this).attr('rel');
		jQuery.get(
			'/trips/search.json',
			function(data){
				cur.travels = [];
				var search_callback = function(data){
					var i;var l=data.length;
					switch (type) {
						// "TS" is DEPRECATED
					   	case 'Auslese':
						   	for(i=0;i<l;i+=1){if (data[i].ts === 'ALS') {cur.travels.push(data[i]);}}
						   	break;
					   	case 'ThemenreisenMusik':
						   	for(i=0;i<l;i+=1){if (data[i].ts === 'THR') {cur.travels.push(data[i]);}}
						   	break;
					   	case 'ReisenDerWoche':
						   	for(i=0;i<l;i+=1){
								if (data[i].push === true) {cur.travels.push(data[i]);}
							}
						   	break;
						case 'EigeneReiseliste':
							var nr = ownTrips.replace(' ','').split(',');
							for(i=0;i<l;i+=1){if (jQuery.inArray(data[i].nr, nr) !== -1) {cur.travels.push(data[i]);}}
							break;
					   default: break;
					}
				};
				eval(data);
				jQuery.xLazyLoader({
					js: ['/javascripts/smsT/renderLists.js'],
					success: function(){renderJSON(1);}
				});
			}
		);
	});
};

initMindAndCompareList = function(){
	jQuery('#merkenVergleichen').doOnce(function(){
		cur.travels = [];
		var cookie = jQuery.cookie(cookieName);
		if (cookie != null && cookie.length) {
			var el = cookie.split('@@');
			var trips = [];
			for (var i=0;i<el.length;i+=1){
				trips.push(el[i].split('||')[0]);
			}
			trips = trips.join(',');
		}
		jQuery.xLazyLoader({
			js: ['/javascripts/smsT/renderLists.js'],
			success: function(){
				if (typeof(trips) == 'undefined') {
					jQuery('#smallList').html("");
					return;	
				}
				if (trips.length) {
					jQuery.get('/trips/compare.json?trip_nrs=' + trips, 
						function(data){				
							var search_callback = function(data){
								cur.travels = data; 
							};
							eval(data);
							renderSmallTeaser();					
					});
				} else {renderSmallTeaser();}
			}
		});
	});
};

checkAgency = function(){
	var anr = jQuery.urlParam('anr');
	if (anr !== null && anr !== 0) {jQuery.cookie(cookieAgency,anr,{path:'/'});}	// store anr at cookie		 
	jQuery('.anr').doOnce(function(){		// extend booking-href with stored agency-nr
		var cookie = jQuery.cookie(cookieAgency);
		if (cookie !== null && cookie.length){
			jQuery(this).attr('href',function(){return jQuery(this).attr('href') + '&anr=' + cookie;});
		}
	});	
};

//show flash-banner
initFlashSoundPlayer = function(){
	jQuery('#tiggesSound').doOnce(function(){
		swfobject.embedSWF (
			'/flash/tigges/sound_drtigges/sound_tigges.swf',
			'tiggesSound',
			'300',
			'60',
			'9.0.0',
			'expressInstall.swf',
			{},
			{wmode:'opaque'},
			{}
		);
	});
};