// FUNCTIONS
var initTripSearch;
var short;
var by;
var formatPrice;
var buildNavi;
var buildSliders;
var initSelectedTripList;
var initFlashBanner;
var initMindAndCompareList;
var checkAgency;
var initFlashSoundPlayer;

//global settings and variables BEGIN
var cookieName = 'drtigges-reiseMerken';
var cookieAgency = 'agenturMerken';
var rows = {}; // for all trip data
var find = {};
var cur = {};
var meta = {}; //	for meta-data, e.g. country-isocodes, style-shorts
//var tripsOfWeek = ['2G8T002','219T006','252T000','235T006','257T000','235T022','266T001','270T008','256T000','281T022']; // selected promotion-trips
var excludeGuides = ['1390259','1392462','1395785','1677265','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 "..."
	short = 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'],
			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(){this.tabs({'selected':'0'})});	// page countryInfos
				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('#countryInfoTabs').doOnce(function(){this.tabs();});	// country infos
						jQuery('#listLea').doOnce(function(){ 	// trip-guides overview (page "Reiseleiter")
							jQuery.getJSON('/trips/guides.json',
								function(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']});
						metaS = data;
						meta.regions = [];
						for (var i=0;i<metaS.regions.length;i+=1){if (metaS.regions[i].c !== 'AST') {meta.regions.push(metaS.regions[i]);}}
						buildNavi();  		// build main-navi
						// load expressFinder
						jQuery('#exFi').doOnce(function(){jQuery.xLazyLoader({js: ['/javascripts/smsT/expressFinder.js']});});
						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']});});
				buildSliders();		// slider (push)
				initFullSearch();	// fullSearch
				
				// Flash-Banner
				jQuery('#eBookBanner').doOnce(function(){initFlashBanner(this);});
				jQuery('#loadItaly').doOnce(function(){this.click(function(){window.open("/flash/sms/eBookItalien/gbc-emag-italien.html", "DR. TIGGES", "toolbar=no,location=no,status=no,menubar=no,scrollbars=0,resizable=1,width=900,height=640");});});
				
				// only temp
				jQuery('.liPGPRI').live('click',function(){alert('Diese Funktion steht Ihnen in Kürze zur Verfügung.');});
				jQuery('.liTRPRI').live('click',function(){
					//jQuery('#printCSS').html('<link rel="stylesheet" type="text/css" href="/stylesheets/sms/print.css" media="print" />');
					//jQuery('#printCSS style').append('h1 {color:red;}');
					window.print();
				});
			}
		});
		
	});
});

openEbook = function(){window.open("/flash/sms/eBookItalien/gbc-emag-italien.html", "DR. TIGGES", "toolbar=no,location=no,status=no,menubar=no,scrollbars=0,resizable=1,width=980,height=640");};

//show flash-banner
initFlashBanner = function(dom){
	jQuery(dom).html(
		jQuery('<a/>').attr({href:'#',onClick:"openEbook();return false;",className:"hoverTdn clearfix",title:"Zum Online-Magazin Italien"}).append(
			jQuery('<img/>').attr({src:'/flash/sms/eBookItalienBanner/banner_italien.jpg',width:'640',height:'170'}))
	);
	swfobject.embedSWF (
		'/flash/sms/eBookItalienBanner/banner_italien.swf',
		'eBookBanner',
		'640',
		'170',
		'9.0.0',
		'expressInstall.swf',
		{},
		{wmode:'opaque'},
		{}
	);
};

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].i,className:'grid'}).html(c[j].n));}
		jQuery('#navCtrList').append(tmp);
	}

	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');
	});
};

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=0;var l=data.length;
					for (i;i<l;i+=1){
						if (data[i].ctrs[0].indexOf(/Ä/)>=0) alert('Umlaut gefunden');
						data[i].fc = data[i].ctrs[0];
						data[i].lInt = parseInt(data[i].l);
					}
					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) {
					   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;
					   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 (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'},
			{}
		);
	});
};