jQuery(document).ready(function()
{
	try {
		console.log( 'firefighting console...' );
	}
	catch ( e ) {
		console = { log: function() {}, dir: function() {} };
	}

	jQuery.extend({
		getUrlParams: function(){
			var params = [], hash;
			var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
			for(var i = 0; i < hashes.length; i++)
			{
				hash = hashes[i].split('=');
				params.push(hash[0]);
				params[hash[0]] = decodeURIComponent(hash[1]);
			}
			return params;
		},
		getUrlParam: function(name){
			return jQuery.getUrlParams()[name];
		}
	});
	
	tuv.solutionfinder.init();
	tuv.solutionfinder.aToZInit();
	tuv.locations.initMap();

	tuv.contact.initButtons();
	tuv.contact.initDatepickerOptions();
	tuv.contact.autoShowForm();
	
	tuv.etracker.initHomepageTracking();
	tuv.etracker.initLocationSearchTracking();
	tuv.etracker.initLocationDetailTracking();
	tuv.etracker.initTosTracking();
	
	//this is needed for conditional formblocks :-/
	//jQuery("label.radio, label.checkbox").live('click', tuv.conditionFormHandler );
	jQuery(".conditionalFormSelector .radio, .conditionalFormSelector .checkbox").live('click', tuv.conditionFormHandler );
	
		// after a failed form-validation we show all conditional areas for already checked 
	jQuery(".conditionalArea:checked").each(function() {				
		var classAttribute = jQuery(this).attr('class') + '';	
		var areaClassValue = classAttribute.replace( 'conditionalArea ', "" );	
		jQuery( "" + areaClassValue ).show();
		//console.log("areaClassValue:" + areaClassValue ); 
		var i = 1;
	});
	
	// moving payflow error to the correct position and hiding the post-fix version
	jQuery("#payFlowErrorMessage").each(function() {
		var errorId = jQuery(this).attr('class') + '';
		var errorMessage = jQuery(this).children('.form-error');
		
		var appendElement = jQuery('#_paydata_cnumber_div');
		if( errorId == '24' ) {
			var appendElement = jQuery('#_paydata_cdate_div');
		}
		
		appendElement.after( errorMessage );
	});
	
	
	/*

	// disabling the other half of the form
	var $tabs = jQuery('#search-form .tabs').tabs();
	var selected = $tabs.tabs('option', 'selected'); // => 0		
	var disableTab = '#advance-tab input';
	if( selected == 1 ) {
		disableTab = '#basic-tab input';
	}
	jQuery( disableTab ).attr( 'disabled', 'disabled' );		
		
	
	var $tabs = jQuery('#search-form .tabs').tabs();
	
	// set active tab
	var activeTab = '#basic-tab';
	if( false ) {
	
	}
	
	
	var selected = $tabs.tabs('option', 'selected'); // => 0		
	console.log( 'active tab:' + selected );
	
	
	// disable fields of other tab
	
	jQuery('#search-form .tabs .ui-tabs-nav a').click(function() {
			
		var disableTab = '#basic-tab';	
	
		var href = jQuery( this ).attr('href');		
		if( href == '#basic-tab' ) {
			disableTab = '#advance-tab';
		}
		
		jQuery( '#search-form .tabs input, #search-form .tabs select, #search-form .tabs checkbox' ).removeAttr( 'disabled' );
		jQuery( disableTab + ' input, ' + disableTab + ' select, ' + disableTab + ' checkbox' ).attr( 'disabled', 'disabled' );
		
		console.log( 'disable tab' );
		
		var $tabs = jQuery('#search-form .tabs').tabs();	
		var selected = $tabs.tabs('option', 'selected'); // => 0		
		console.log( 'active tab:' + selected );	
	
	});
	*/
	
	/* Trigger submit buttons on click */
	jQuery("#search-form .action").unbind().click(function() {
		jQuery('#search-form .example').val('');
		jQuery(this).next('input').click();
	});
	
	/* Jump to advance tab if an advanced query was submited*/
	jQuery(document).ready( function() {
		if (jQuery.getUrlParam('advance-submit') !== undefined)
		{
			jQuery('.tabs').tabs().tabs('select', 1);
		}
	});
	
	// search-form pagination links
	jQuery(".pager a.submitLink").click(function() {
	
		console.log( "submitLink" );	
	
		var pageNo = jQuery( this ).attr('rel');
		jQuery("#search-form #page").val( pageNo ); 
		
		var resultsPerPage = jQuery( "#dummy_results_per_page" ).val();
		jQuery("#search-form #results_per_page").val( resultsPerPage ); 
		
		console.log( "pageNo:" + pageNo ); 
		console.log( "resultsPerPage:" + resultsPerPage ); 
		
		jQuery('#search-form').submit();		
		return false;
	});
	
	// search-form number of results
	jQuery("#dummy_results_per_page").change(function() {
	
		console.log( "submitLink" );
		
		var resultsPerPage = jQuery( "#dummy_results_per_page" ).val();
		jQuery("#search-form #results_per_page").val( resultsPerPage );		
		
		console.log( "resultsPerPage:" + resultsPerPage ); 
		
		jQuery('#search-form').submit();		
		return false;
	});
	
	//jQuery( '#search-form .tabs input, #search-form .tabs select, #search-form .tabs checkbox' ).change(function() {	
	jQuery( '#search-form .tabs input, #search-form .tabs select, #search-form .tabs checkbox' ).change(function() {		
		jQuery( '#search-form #page').val( 1 );
	});
	
	// iframe lightbox link for newsletter subscription
	jQuery("form#newsletter-signup").submit( function() {		
		var url = jQuery("form#newsletter-signup #newsletterUrl").val();
		var emailField = jQuery("form#newsletter-signup #newsletterEmail");
		var emailValue = emailField.val();
		
		var paramSeparator = "?";
		if (url.indexOf(paramSeparator) > -1) {
			 paramSeparator = "&";
		}
		var combinedUrl = url + paramSeparator + "email=" + emailValue;
		
		var iFrameHeight = 610;
		if( jQuery.browser.msie ) {
			iFrameHeight = 640;
		}
		
		if( url.indexOf("de.jsp") != -1 ) {
			iFrameHeight = 840;
			if( jQuery.browser.msie ) {
				iFrameHeight = 860;
			}
		}	
		
		var iFrame = "<iframe frameborder='0' style='border: none; width:578px; height:" + iFrameHeight + "px;' src='" + combinedUrl + "' ></iframe>";
		
		tuv.solutionfinder.modalForm( iFrame );
		emailField.val("");
		return false;
	});
	
	// Quick Check Initialize
	jQuery('#allResults').html('');
	var multipart = jQuery('#multipart-quick-check');
	if (multipart.length > 0) {
		var topicButtons = multipart.find('a.finish-topic').click(tuv.quickcheck.addRadiobuttonValidation);
		tuv.quickcheck.swapFirstAnLastEvent(topicButtons, 'click');
		multipart.find('a.multipart-last').click(tuv.quickcheck.submit);
	}
	jQuery('#multipart-quick-check .actions .action-quickcheck-restart').unbind('click').click(tuv.quickcheck.restart);
	
	//jump to selected Tab from external link
	var $selectedTabs = Number(jQuery.getUrlParam('selected_tabs'));
	if ($selectedTabs != null && typeof($selectedTabs) != 'undefined')
	{
		var $tabs = jQuery('.tabs').tabs();
		if ($tabs != null && typeof($tabs) != 'undefined')
		{
			console.log($selectedTabs);
			$tabs.tabs('select', $selectedTabs);
		}
	}
	
	/**
	/* hotfix for IE6
	/* In IE6 the OnFocus Event isn`t triggered Properly so we trigger it by an click event
	**/
	jQuery('#search-terms-basic').mousedown(function() {jQuery(this).trigger('focus')});
	jQuery('#search .field-text').mousedown(function() {jQuery(this).trigger('focus')});
	
	
}); //END Document Ready

/**
 * Create tuv object
 */
var tuv = tuv || {};

tuv.contact = tuv.contact || {};

tuv.contact.initButtons = function()
{
	jQuery(".date-picker").datepicker(jQuery.extend({
				showOn: 'button',
				buttonImage: '/media/system/img/ico/datepicker.gif', 
				buttonImageOnly: true
		}, jQuery.datepicker.regional[current_lang]));
	//it is ok, if the div is wrapped a few times...
	jQuery('#ui-datepicker-div').wrap('<div class="jquery-ui-wrapper" />');
	
	jQuery('#header-buttons a, #footer-buttons a, .global_contactform, .contactform, #share #email a, a.modalFormLink').click(function(e){
		e.preventDefault();
		var href = jQuery(this).attr('href');
		jQuery.ajax({
		  url: href,
		  type: 'get',
		  dataType: 'html',
			success: function(html)
			{
				tuv.solutionfinder.modalForm(html);
			}
		});
		return false;
	});
}

tuv.contact.initDatepickerOptions = function() {
	if(tuv.contact.datepicker != undefined && tuv.contact.datepicker.options != undefined)
	{
		jQuery.each(tuv.contact.datepicker.options, function(index, option) {
			var inputfield = jQuery('#' + option.id);
			var DatePickerFormat = option.dateFormat.replace('yyyy', 'yy').replace('MM', 'mm');
			inputfield.datepicker( "option", "dateFormat", DatePickerFormat );
			inputfield.datepicker( "setDate" , option.initDate );
		});
	}
}

tuv.contact.autoShowForm = function()
{
	var show = jQuery.getUrlParam('open');
	if (show == "quote")
	{
		var e = jQuery("#header-buttons .quote");
		if (e.length == 1)
		{
			e.click();
			return;
		}
	}
	if (show == "quote" || show == "contact")
	{
		e = jQuery("#header-buttons .contact");
		e.click();
	}
}

tuv.locations = {
	_map : {},
	_geocoder : {},
	_currentCountry: "CW",
	marker : {
		_markerData : [],
		_markerArray : []
	}
};

tuv.locations.clearOverlays = function()
{
	if (tuv.locations.marker._markerArray) {
		for (i in tuv.locations.marker._markerArray) {
			tuv.locations.marker._markerArray[i].setMap(null);
		}
		tuv.locations.marker._markerArray.length = 0;
	}
};

tuv.locations.initMap = function()
{
	// Register click handler for submit button
	jQuery("#location button").click(function(e) {
		e.stopPropagation();
		e.preventDefault();
		jQuery("#location").submit();
	});

	// Register click handler for submit button
	jQuery("#location input").keypress(function(e) {
		if (e.keyCode == '13') {
			e.preventDefault();
			e.stopPropagation();
			jQuery("#location").submit();
		}
	});	
	
	// Get jQuery object for google map
	var mapCanvas = jQuery('div.map-locations');
	
	// Stop here if map canvas not found
	if (0 == mapCanvas.length) {
		return;
	}

	tuv_map_markers = new Array();
	for (var i = 0; i < 41; i++)
	{
		tuv_map_markers.push(new google.maps.MarkerImage(tuv_locations_pins[i],
		// This marker is 20 pixels wide by 32 pixels tall.
		new google.maps.Size(39, 48),
		// The origin for this image is 0,0.
		new google.maps.Point(0,0),
		// The anchor for this image is the base of the flagpole at 0,32.
		new google.maps.Point(12, 47)));

	}

	jQuery("#global").find('label.radio, input.radio, label[rel="category"]').click(function(e){
		if ("school" == jQuery(this).attr("for"))
		{
			jQuery('#select-school').show(); jQuery('#select-academy').hide();
			jQuery('#select-school').attr('name', 'subcategory'); jQuery('#select-academy').attr('name', '');
		}
		else
		{
			jQuery('#select-academy').show(); jQuery('#select-school').hide();
			jQuery('#select-academy').attr('name', 'subcategory'); jQuery('#select-school').attr('name', '');			
		}
	});
	
	var latlng = new google.maps.LatLng(50.9412025, 6.9399343);
	var options = {
		zoom: 10,
		center: latlng,
		mapTypeControl: true,
		mapTypeId: google.maps.MapTypeId.ROADMAP,
		scrollwheel: false
	}
	tuv.locations._map = new google.maps.Map(mapCanvas.get(0), options);
	tuv.locations._geocoder = new google.maps.Geocoder();
	var location = jQuery.getUrlParam('location');
	//console.log("location: "+location);
	
	
	if ('' == location || null == location) {
		location = current_country_name;		
	}	
	
	var locationsQueryData = {
		"location": "",
		"lat": "",
		"lon": "",
		"radius": "",
		"minLat": "",
		"minLon": "",
		"maxLat": "",
		"maxLon": "",
		"subcategory": jQuery.getUrlParam('subcategory', -1),
		"category": locations_category,
		"country": current_country_key // Global variable defined in HTML <head>
	};
	
	var suggestionsQueryData = {
		"suggestions": new Array(),
		"count": 0,
		"radius": "",
		"topic": "",
		"detailUrl": "",
		"category": "",
		"subcategory": ""
	};

	tuv.locations._geocoder.geocode( {'address': location}, function(results, status) {
		//console.log("status: " + status);
		//console.dir(results);
		if (status == google.maps.GeocoderStatus.OK) {
			// Handle multiple results
			if (results.length > 1)
			{
				jQuery.each(results, function(index, singleResult)
				{
					var country = "CW";
					jQuery.each(singleResult.address_components, function(index, singleComponent) {
						if (-1 != jQuery.inArray("country", singleComponent.types))
						{
							country = singleComponent.short_name;
							return;
						}
					});
					
					var location = {
						"sName": singleResult.address_components[0].short_name,
						"formated": singleResult.formatted_address,
						"lon": singleResult.geometry.location.lng(),
						"lat": singleResult.geometry.location.lat(),
						"country": country
					}
					suggestionsQueryData.suggestions.push(location);
				});
				suggestionsQueryData.count = suggestionsQueryData.suggestions.length;
				suggestionsQueryData.radius = jQuery.getUrlParam('radius');
				suggestionsQueryData.topic = jQuery.getUrlParam('topic');
				suggestionsQueryData.category = locations_category;
				suggestionsQueryData.subcategory = jQuery.getUrlParam('subcategory', -1);
				suggestionsQueryData.detailUrl = tuv_locations_currentPage;
				tuv.locations.fetchResults(suggestionsQueryData, true);
			} else {
				var c = results[0].address_components;
				
				var country = null;
				for (var i = 0; i < c.length; i++)
				{
					if (jQuery.inArray('country', c[i].types) > -1)
					{
						country = c[i].short_name; break;
					}
				}
				var bounds = null;
				if (results[0].geometry.hasOwnProperty('bounds'))
				{ bounds = results[0].geometry.bounds; }
				else if (results[0].geometry.hasOwnProperty('viewport'))
				{ bounds = results[0].geometry.viewport; }
				
				locationsQueryData.radius = jQuery.getUrlParam('radius');
				locationsQueryData.topic = jQuery.getUrlParam('topic');
				locationsQueryData.subcategory = jQuery.getUrlParam('subcategory', -1);
				locationsQueryData.category = locations_category;
				locationsQueryData.location = location;
				locationsQueryData.lat = results[0].geometry.location.lat();
				locationsQueryData.lon = results[0].geometry.location.lng();
				//locationsQueryData.zoom = results[0].geometry.location.b;
				locationsQueryData.country = country;
				if (bounds != null)
				{
					locationsQueryData.maxLat = bounds.getNorthEast().lat();
					locationsQueryData.maxLon = bounds.getNorthEast().lng();
					locationsQueryData.minLat = bounds.getSouthWest().lat();
					locationsQueryData.minLon = bounds.getSouthWest().lng();
					tuv.locations._map.fitBounds(new google.maps.LatLngBounds(bounds.getSouthWest(), bounds.getNorthEast()));
				}
				else
				{
					tuv.locations._map.setCenter(results[0].geometry.location);
					tuv.locations._map.setZoom(8);
					alert("i");
				}
				tuv.locations.fetchResults(locationsQueryData, false);
			}
		}
		else
		{
			//
			//jQuery('#location_msg').text("Keine Ergebnisse gefunden");--$
			//
			jQuery('#location_msg').text( tuv_location_no_results_msg );			
		}
	});

};


tuv.locations.fetchResults = function (queryData, showSuggestions)
{
	//tuv.locations._map.setCenter(results[0].geometry.location);
	tuv.locations.showResults(queryData, jQuery('div.locations-content div.locations'), showSuggestions);
};


/**
 * Retrieves the result list for the given query data
 * and puts it into the given target object.
 * 
 * @param Object
 * @param jQuery
 */
tuv.locations.showResults = function(queryData, target, showSuggestions)
{
	if (showSuggestions)
	{
		var requestUrl = tuv_locations_suggestions_ajax_url; // Variable is set within inline script on the page
	} else {
		var requestUrl = tuv_locations_ajax_url; // Variable is set within inline script on the page
	}
	
	jQuery.ajax({
    	"type": "POST",
    	//"url": "",
		"url": requestUrl, 
    	"dataType": "html",
    	"data":  queryData,
    	"cache": false,
    	"success": function(html) {
			target.html(html);
			// custom scroll bar for locations on map pages
			jQuery('.locations .scroll-pane').jScrollPane({
				scrollbarWidth: 22,
				showArrows: true,
				scrollbarMargin: 0,
				scrollbarOnLeft: false
			});
		}
    });
};

tuv.locations.setCenter = function (lat, lon, zoom)
{
	/*if (!zoom || !(((zoom - 0) == zoom && zoom.length > 0) && (zoom >= 0) && (zoom <= 20))) 
	{
		zoom = 13;
	}*/
		tuv.locations._map.setCenter(new google.maps.LatLng(lat, lon));
		tuv.locations._map.setZoom(4);
		
}

/**
 * Adds a marker to the map with the given coordinates.
 */
tuv.locations.marker.add = function(markerData, index)
{
	var j = jQuery("<div><div style='height:120px; width:230px;'>" + markerData.infoWindowTitle + markerData.address + "</div></div>");
	var height = j.height();
	//alert(markerData.infoWindowTitle + markerData.address);
	//alert(j.html());
	//alert(j.height());
	var infowindow = new google.maps.InfoWindow();
	infowindow.setContent(j.html());
/*{
        content: ,
		size: new google.maps.Size(300, 500)
		//content: markerData.infoWindowTitle + markerData.address,
		//maxWidth: 1000
    });    
*/
	var marker = new google.maps.Marker({
		"map": tuv.locations._map,
		"position": new google.maps.LatLng(markerData.lat, markerData.lon),
		"icon": markerData.marker,
		"title": markerData.company,
		"zIndex": markerData.zIndex
	});
	
	
	google.maps.event.addListener(marker, 'click', function() {
		infowindow.open(tuv.locations._map, marker);
    });
	
	/*
	google.maps.event.addListener(infowindow, 'domready', function() {
		var infoWindowParent = jQuery('div.map-locations div.info-window').parent();
		var infoWindowParentParent = infoWindowParent.parent();
		infoWindowParent.css('overflow', 'hidden');
		infoWindowParentParent.css('overflow', 'hidden');
		//infoWindowParentParent.height('100px');
		/*
		infoWindowParentParent.css('min-height', '60px');
		infoWindowParentParent.css('max-height', '60px');
		*/
		//infoWindowParentParent.css('height', 'auto !important');
    //});
	//marker.bindInfoWindowHtml("<div class='info-window' style=' height: auto;'>" + markerData.infoWindowTitle + markerData.address + "</div>");
	tuv.locations.marker._markerArray.push(marker);
};

/**
 * Adds markers for all objects in _markerData to the map and fits the bounds to it.
 */
tuv.locations.marker.displayAll = function()
{
	// Remove all existing markers before
	tuv.locations.clearOverlays();
	// Init bounds object
	var bounds = new google.maps.LatLngBounds();
	// Last LatLng object
	var point = {};
	jQuery.each(tuv.locations.marker._markerData, function(index) {
		//alert("lat: "+this.lat);
		// Extend bounds object with the current point
		point = new google.maps.LatLng(this.lat, this.lon);
		bounds.extend(point);
		// Add a marker to the map for the current point
		tuv.locations.marker.add(this, index);
	});
	// Adjust zoom level
	if (1 < tuv.locations.marker._markerData.length) {
		// Fit the map viewport to display all markers
		tuv.locations._map.fitBounds(bounds);
		if (tuv.locations._map.getZoom() > 16)
		{
			tuv.locations._map.setZoom(16);
		}
	} else {
		// Set center and zoom if only one location is displayed
		tuv.locations._map.setCenter(point);
		tuv.locations._map.setZoom(16);
	}
};

tuv.conditionFormHandler = function(e)
{
	e.preventDefault();
	var input = jQuery(this).next();
	if (input.attr('nodeName') == 'INPUT')
	{
		var backup = input.attr('checked');
		input.click();
		input.attr('checked', backup);
	}
};

tuv.solutionfinder = {
	"form" : {
		"_data": {
			"customer": 1, // 1 == business customer, 0 == private customer
			"industry": -1,
			"inspectionobject": -1,
			"inspectiontype": -1
		}
	},
	"select" : {},
	"response" : {}
};


tuv.solutionfinder.modalForm = function(html)
{
	jQuery.modal.close();
	jQuery.modal(html, 
	{
		position: [110],
		minWidth: 600,
		containerCss:{
			width:630
		},
		onShow: function()
		{
			jQuery(window).scrollTop(0);
			// empulse: added calendar markup
			jQuery(".date-picker").datepicker(jQuery.extend({
						showOn: 'button',
						buttonImage: '/media/system/img/ico/datepicker.gif', 
						buttonImageOnly: true
				}, jQuery.datepicker.regional[current_lang]));
			//it is ok, if the div is wrapped a few times...
			jQuery('#ui-datepicker-div').wrap('<div class="jquery-ui-wrapper" />');
			
			jQuery('#simplemodal-overlay').addClass('active');
			jQuery('#simplemodal-container a.simplemodal-close').hover(function(e){
				jQuery(this).addClass('simplemodal-close-hover');
			}, function(e){
				jQuery(this).removeClass('simplemodal-close-hover');
			}).attr('href', '#close');

			jQuery('#simplemodal-container .action').actionButton();
			jQuery('#simplemodal-overlay').height(jQuery(document).height());


			var form = jQuery('#simplemodal-data').find("form").attr('target', 'formResult');
			jQuery('#simplemodal-container .action-submit').click(function (e){
				jQuery(this).next().click();
				jQuery(window).scrollTop(0);
			});
			jQuery('#formResult').load(function(e){
				var content = jQuery(this).contents().find("body").html()
				if (content.length > 0)
					tuv.solutionfinder.modalForm(content);
			});
			
			/* 10.05.2011, I.Cousin, Form-Print-Button */
			jQuery('.formPrintButton').bind('click',function() {

				pf_printform = jQuery('#simplemodal-data');
				pf_formparent = jQuery('.simplemodal-wrap');
				var breadcrumbcopy = jQuery('#breadcrumb').clone(true);

				// show Copy of form
				pf_printform.detach();
				pf_formcopy = pf_printform.clone(true).appendTo(pf_formparent);

				// replace content with origin form and start printing
				pf_origincontent = jQuery('#container').detach();
				pf_printcontainer = jQuery('<div id="formprintcontainer" class="print-content"><div>');
				pf_printcontainer.appendTo('body');
				breadcrumbcopy.appendTo(pf_printcontainer);
				pf_printform.appendTo(pf_printcontainer);

				window.print();
				 
				// get everything into origin position
				// Need delay here for FF 3.6, printing is too slow ...
				setTimeout(function() {
				pf_printform.detach();
				pf_printcontainer.remove();
				pf_formcopy.detach();
				pf_origincontent.appendTo('body');
				pf_printform.appendTo(pf_formparent);
				},500);
			});   
			/*
			form.bind("submit", function(e)
			{
				/*
				e.preventDefault();
				console.log(jQuery(this));
				jQuery.ajax(
				{
					url: jQuery(this).attr("action") ? jQuery(this).attr("action") : './',
					type: 'post',
					data: jQuery(this).serialize(),
					success: function(html)
					{
						tuv.solutionfinder.modalForm(html);
					}
				}); 
				return false; 
				*//*
				alert("submit?");
				return true;
				
			});
			*/
		}
	});
}

/**
 * Initializes the solution finder form if found.
 */
tuv.solutionfinder.init = function() {
	// Get jQuery object for solution finder form
	var form = jQuery('#solution-finder');
	
	// Stop here if form not found
	if (0 == form.length) {
		return;
	}
	
	// Register click handler for "radio" buttons (currently labels)
	form.find('ul.radios label').click(function() {
		// Reset form data and select boxes to default values
		tuv.solutionfinder.form.resetSelectBoxes(form);
		
		var industry = form.find('#industry');
		if ('business' == jQuery(this).attr('for')) {
			industry.parent().show();
			tuv.solutionfinder.form._data.customer = 1;
		} else {
			// On private customer selected, hide industry
			industry.parent().hide();
			tuv.solutionfinder.form._data.customer = 0;
		}
		tuv.solutionfinder.onChange(tuv.solutionfinder.response.customer);
	});
	
	// Register change handler for select boxes
	form.find('select').change(function() {
		var id = jQuery(this).attr('id');
		// Store value of current selected option into data object
		tuv.solutionfinder.form._data[id] = jQuery(this).find('option:selected').val();
		// Run ajax call
		tuv.solutionfinder.onChange(tuv.solutionfinder.response[id]);
	});
	
	
	// Register click handler for reset button
	form.find("a.action-reset").click(function(e) {
		e.stopPropagation();
		tuv.solutionfinder.form.reset(form);
		tuv.solutionfinder.onChange(tuv.solutionfinder.response.customer);
		return false;
	});
	
	// Register click handler for submit link
	form.find("a.action-submit").click(function(e) {
		e.stopPropagation();
		form.submit();
		return false;
	});
	
	// Register click handler for submit button
	form.find("#solution-finder-submit button").click(function(e) {
		// changed 17.03.2011 to make the eTracker-tracking work properly, bsr
		e.stopPropagation();
		//e.preventDefault();
		form.submit();
	});
};

/**
 * Resets the complete form.
 *
 * @param jQuery form element
 */
tuv.solutionfinder.form.reset = function(form) {
	// Clear selection
	form.find("ul.radios label.radio").removeClass("radio-checked");
	form.find("input:checked").removeAttr("checked");
	// Set default selection
	var business = form.find("#business");
	business.attr("checked", "checked");
	business.prev().addClass("radio-checked");
	// Set default value to business customer
	tuv.solutionfinder.form._data.customer = 1;
	// Reset select boxes
	tuv.solutionfinder.form.resetSelectBoxes(form);
	// Show industry select box
	form.find("#industry").show();
};

/**
 * Resets only select boxes.
 *
 * @param jQuery form element
 */
tuv.solutionfinder.form.resetSelectBoxes = function(form) {
	// Reset select boxes to default entries
	form.find("option:selected").removeAttr("selected");
	form.find("option.option-default").attr("selected", "selected");
	// Reset form data to default values
	tuv.solutionfinder.form._data.industry = -1;
	tuv.solutionfinder.form._data.inspectionobject = -1;
	tuv.solutionfinder.form._data.inspectiontype = -1;
};

/**
 * AJAX callback handler for customer.
 *
 * @param jQuery response data
 */
tuv.solutionfinder.response.customer = function(response) {
	tuv.solutionfinder.select.update(jQuery('#industry'), response.industries);
	tuv.solutionfinder.select.update(jQuery('#inspectionobject'), response.inspectionobjects);
	tuv.solutionfinder.select.update(jQuery('#inspectiontype'), response.inspectiontypes);
};

/**
 * AJAX callback handler for industries.
 *
 * @param jQuery response data
 */
tuv.solutionfinder.response.industry = function(response) {
	tuv.solutionfinder.select.update(jQuery('#inspectionobject'), response.inspectionobjects);
	tuv.solutionfinder.select.update(jQuery('#inspectiontype'), response.inspectiontypes);
};

/**
 * AJAX callback handler for inspection objects.
 *
 * @param jQuery response data
 */
tuv.solutionfinder.response.inspectionobject = function(response) {
	tuv.solutionfinder.select.update(jQuery('#industry'), response.industries);
	tuv.solutionfinder.select.update(jQuery('#inspectiontype'), response.inspectiontypes);
};

/**
 * AJAX callback handler for inspection types.
 *
 * @param jQuery response data
 */
tuv.solutionfinder.response.inspectiontype = function(response) {
	tuv.solutionfinder.select.update(jQuery('#industry'), response.industries);
	tuv.solutionfinder.select.update(jQuery('#inspectionobject'), response.inspectionobjects);
};


/**
 * Sends an ajax call to get all data for updating the select boxes.
 * 
 * @param Function cbFunc The callback function
 */
tuv.solutionfinder.onChange = function(cbFunc) {	
    // Load select options via AJAX
	// Variable "tuv_solfin_ajax_url" is initialized on solution finder page
    jQuery.ajax({
    	"type": "GET",
    	"url": tuv_solfin_ajax_url,
    	"dataType": "json",
    	"data": {
    		"customer_type": tuv.solutionfinder.form._data.customer,
    		"industry": tuv.solutionfinder.form._data.industry,
			"inspectionobject": tuv.solutionfinder.form._data.inspectionobject,
			"inspectiontype": tuv.solutionfinder.form._data.inspectiontype
    	},
    	"cache": true,
    	"success": cbFunc
    });
};

/**
 * Updates the content of the given select box with the given data.
 * 
 * @param jQuery element
 * @param Array data
 */
tuv.solutionfinder.select.update = function(element, data) {
	if (0 == data.length) {
		return;
	}
	var selectedBeforeValue = element.find('option:selected').val();
	var defaultOption = element.find("option.option-default");
	var html = '<option class="option-default" value="-1">' + defaultOption.text(); + '</option>';
	jQuery.each(data, function() {
		if (this.value != "undefined")
			html += '<option value="' + this.value + '">' + this.text + '</option>';
	});
	element.html(html);
	// Set to old selection	
	var toBeSelected = element.find("option[value="+selectedBeforeValue+"]");
	if (toBeSelected) {
		toBeSelected.attr('selected', 'selected');
	}
};

/**
 * Initializes the A-Z tab list.
 */
tuv.solutionfinder.aToZInit = function() {
	// Get jQuery object for A-Z tabs
	var tabObject = jQuery('#a_to_z_tabs');
	
	// Stop here if tabs not found
	if (0 == tabObject.length) {
		return;
	}
	
	//create tabs for a to z list
	tabObject.tabs({
		show: function(event, ui){
			var thisLi = jQuery(ui.tab).parents('li');
			var otherLi = jQuery('.ui-tabs-nav li', event.target).not(thisLi);

			jQuery('a', thisLi).addClass('active');

			// unwrap inactive tabs
			jQuery('a', otherLi).each(function(i){
				jQuery(this).removeClass('active')
			});

		},
		selected: tuv_solfin_atoz_categoryNo,
		disabled: tuv_solfin_atoz_disabled_tabs
	});
	jQuery('#a_to_z_tab_box').show();
};

/****** Quick Check JS********/

tuv.quickcheck = tuv.quickcheck || {};

tuv.quickcheck.showResolutionText = function(result)
{
	jQuery('#quickcheck-resolutions div').each(function(){
		try{
			var resolution = jQuery(this);
			var treshold = resolution.attr('class').split('_')[1];
			if (result <= treshold)
			{
				resolution.show();
				return false;
			}
		} catch (e) {}
	});
};

tuv.quickcheck.restart = function() {
	jQuery('.status-bar-fill').html('0%').css('width', '0%');
	jQuery('#multipart-quick-check .radio').removeClass("radio-checked");
	jQuery('#allResults').html('');
	jQuery('#quickcheck-resolutions div').hide();
	jQuery('#multipart-quick-check .fieldset').each(function(index) {
		if (index == 0)
		{
			jQuery(this).addClass('fieldset-active');
		} else {
			jQuery(this).removeClass('fieldset-active');
		}
	});
};

tuv.quickcheck.store = function(id, result, url) {
	jQuery.ajax({
	  type: 'get',
	  url: url,
	  cache: false,
	  data: {"topic_id":id, "result":result}
  });
};

tuv.quickcheck.submit = function(event) {
	var multipart = jQuery('#multipart-quick-check');
	if (multipart.length > 0 && jQuery('#allResults').html() == '') {
		jQuery.ajax({
			  type: 'post',
			  url: multipart.attr('action'),
			  data: multipart.serialize(),
			  dataType: 'html',
			  cache: false,
				success: function(html)
				{
					jQuery('#allResults').html(html);
				}
			});
	}
};

tuv.quickcheck.addRadiobuttonValidation = function(event)
{
	var fieldset = jQuery(this).parents('div.fieldset');
	var choiceIsValid = true;
	jQuery('table tbody tr th', fieldset).removeClass("invalid");
	jQuery('table tbody tr', fieldset).each(function()
	{
		if (jQuery('td label.radio-checked',this).size() != 1 && jQuery('td label.radio',this).size() != 0)
		{
			jQuery('th', this).addClass("invalid");
			choiceIsValid = false;
		}
	});
	
	if (!choiceIsValid)
	{
		jQuery('.invalid-choice-error', fieldset).show();
		event.stopImmediatePropagation();
		event.preventDefault();
	}
	else
	{
		jQuery('.invalid-choice-error', fieldset).hide();
	}
};

tuv.quickcheck.swapFirstAnLastEvent = function (elements, eventType)
{
	elements.each( function(index, element)
	{
		eval("var events = jQuery(element).data('events')." + eventType + ";");
		if (typeof(events) != 'undefined') {
			var tmpHandler = events[0].handler;
			events[0].handler = events[events.length - 1].handler;
			events[events.length - 1].handler = tmpHandler;
		}
	});
};

/****** E-Tracker JS********/

tuv.etracker = tuv.etracker || {};

tuv.etracker.sendTarget = function(et_secureKey, et_target)
{
	if (typeof(et_secureKey) != 'undefined' && et_secureKey != '')
	{
		if (typeof(et_target) != 'undefined' && et_target != '')
		{
			var param = {};
			param.et_target = et_target;
			param.et_et = et_secureKey;
			et_eC_Wrapper(param);
		}
		else
		{
			console.warn('Target is missing for tuv.etracker.sendTarget');
		}
	}
	else
	{
		console.warn('eTracker key is missing for tuv.etracker.sendTarget');
	}
	return false;
};

tuv.etracker.initHomepageTracking = function() {

	// it's not the homepage
	if( jQuery("body#home").length == 0 ) {	
		return;
	}
	
	// no translations found
	if( typeof et_link_clicked == 'undefined'
		|| typeof et_box_clicked == 'undefined'
		|| typeof et_form_submit == 'undefined'
		|| typeof et_stage == 'undefined'
		|| typeof et_hottopic == 'undefined'
		|| typeof et_quickstart == 'undefined'
		|| typeof et_news == 'undefined'
		|| typeof et_events == 'undefined'
	) {	
		return;
	}

	// (center) stage banners
	jQuery('#banner-flyout').live('click', function(e){
		var objectName = jQuery(this).children('h2').html();
		//console.log('object:' + objectName );
		tuv.etracker.trackEvent( objectName, et_link_clicked, et_stage );
	});
	
	// hot-topics - below stage
	// also gets the clicks on the a-tag links....
	jQuery('#hot-topics .carousel li').live('click', function(e){
		var objectName = jQuery('.info > h2 a', this).html();
		//console.log('(.carousel li) objectName: ' + objectName );
		tuv.etracker.trackEvent( objectName, et_link_clicked, et_hottopic );
	});

	// quickstart box links - right hand side
	jQuery('#ctas .cta-info').live('click', function(e){
		var objectName = jQuery('h2', this).html();
		//console.log('(#ctas .cta-info) objectName: ' + objectName );	
		tuv.etracker.trackEvent( objectName, et_box_clicked, et_quickstart );
		
		var campaignId = 0;
		var channelId = 0;
		
		if( jQuery(this).children('.et_campaignId').length > 0 ) {			
			campaignId = jQuery(this).children('.et_campaignId').html();			
			channelId = jQuery(this).children('.et_channelId').html();			
		}
		
		if( campaignId != 0 
				&& channelId != 0 ) {
			tuv.etracker.startCampaign( campaignId, channelId );
		}		
	});

	// quickstart box form - right hand side	
	jQuery('#ctas .cta-content form').submit( function(e){	
		var objectName = jQuery('h2', jQuery(this).parents('.cta') ).html();
		//console.log('(#ctas .cta-content form) objectName: ' + objectName );
		tuv.etracker.trackEvent( objectName, et_form_submit, et_quickstart );		
	});
	
	// news - right hand side, bottom	
	jQuery('#news a').live('click', function(e){
		var objectName = et_news;
		//console.log('(#news a) objectName: ' + objectName );
		tuv.etracker.trackEvent( objectName, et_link_clicked, et_news );
	});
	
	// news - right hand side, bottom	
	jQuery('#events a').live('click', function(e){
		var objectName = et_events;
		//console.log('(#events a) objectName: ' + objectName );
		tuv.etracker.trackEvent( objectName, et_link_clicked, et_events );		
	});
	
};

tuv.etracker.initLocationSearchTracking = function() {
	// it's not the location search result page
	if( jQuery("body#carinspection").length == 0 ) {	
		return;
	}
	
	// no translations found
	if( typeof et_link_clicked == 'undefined' || typeof et_vic_search == 'undefined') {	
		return;
	}
	
	$eventDispatcher.bind( 'webserviceInvocationSuccess', function( e, xhr, status, data, resource ) {		
		if( resource == 'getLocationsByGeo' ) {			
			var hasResults = false;			
			if( typeof data.vics != 'undefined' ) {
				//console.log( "hasResults => true" );
				hasResults = true;
			}			
			
			var searchTerm = jQuery('#inspection input[name="postal-code"]').val();
			tuv.etracker.trackVicSearch( searchTerm, hasResults );
		}
	});
	
	$eventDispatcher.bind( 'noValidGeoLocation', function( e ) {		
		var hasResults = false;					
		var searchTerm = jQuery('#inspection input[name="postal-code"]').val();
		tuv.etracker.trackVicSearch( searchTerm, hasResults );
	});	
		
	//jQuery('#location-result-pane a.online-scheduling-link').live('click', function(e){
	// tracking both links: 'Details' and 'Online-Terminierung'
	jQuery('#location-result-pane .content a').live('click', function(e){
		var objectName = jQuery(this).html();		
		tuv.etracker.trackEvent( objectName, et_link_clicked, et_vic_search );
	});
};

tuv.etracker.initLocationDetailTracking = function() {
	
	if( jQuery("body#t42-detailpage").length == 0 ) {	
		//console.log('no tos-page active');
		return;		
	}
	
	// no translations found
	if( typeof et_link_clicked == 'undefined' || typeof et_tab_clicked == 'undefined' || typeof et_vic_details == 'undefined') {	
		return;
	}
	
	jQuery('.tabs').bind('tabsselect', function(event, ui) {						
		var link = jQuery( "a[href=#"+ ui.panel.id +"]", event.target );		
		var objectName = link.html();
		console.log( 'location-detail-page: ' + objectName );
		tuv.etracker.trackEvent( objectName, et_tab_clicked, et_vic_details );	
		var locationId = vicid;
		var locationName = jQuery( '#content .content-sub-first h2').html();
		console.log( 'location-id: ' + locationId );
		console.log( 'location-name: ' + locationName );
		tuv.etracker.trackEvent( objectName, et_tab_clicked, et_vic_details + ' "' + locationName + '"' );
	});
	
	
	jQuery('#overview .actions .action-rpt').live('click', function(e){
		var objectName = jQuery(this).html();			
		var locationName = jQuery( '#content .content-sub-first h2').html();
		tuv.etracker.trackEvent( objectName, et_link_clicked, et_vic_details );
		tuv.etracker.trackEvent( objectName, et_link_clicked, et_vic_details + ' "' + locationName + '"' );		
	});
};

tuv.etracker.initTosTracking = function() {
	
	if( jQuery("body#online-scheduling").length == 0 ) {	
		//console.log('no tos-page active');
		return;
	}
	//console.log('tos-page active');
	
	var step1 = false;
	var step2 = false;
	var step3 = false;
	var step4 = false;
	
	if( typeof et_tos_target_step1 == 'undefined'
		|| jQuery.trim(et_tos_target_step1).length == 0
		|| typeof et_tos_target_step2 == 'undefined' 
		|| jQuery.trim(et_tos_target_step2).length == 0
		|| typeof et_tos_target_step3 == 'undefined' 
		|| jQuery.trim(et_tos_target_step3).length == 0
		|| typeof et_tos_target_step4 == 'undefined'
		|| jQuery.trim(et_tos_target_step4).length == 0
		) {
		return;		
	}
	
	var trackerUrl = "";		
	trackerUrl += "https://www.etracker.de/cnt.php";
	trackerUrl += "?et=" + current_etracker_key;
	trackerUrl += "&et_target=__DISJUNKT__";
	
	$eventDispatcher.bind( 'enableStep2', function( e ) {
		if( step1 == false ) {
			var target = et_tos_target_step1;
			//tuv.etracker.sendTarget( current_etracker_key, "__DISJUNKT__" +target );
			tuv.etracker.appendTrackerImage( trackerUrl + encodeURIComponent(target) );
			step1 = true;
		}		
	});
	
	$eventDispatcher.bind( 'enableStep3', function( e ) {
		if( step2 == false ) {
			var target = et_tos_target_step1 + "/" + et_tos_target_step2;
			//tuv.etracker.sendTarget( current_etracker_key, "__DISJUNKT__" +target );
			tuv.etracker.appendTrackerImage( trackerUrl + encodeURIComponent(target) );
			step2 = true;
		}		
	});
	
	$eventDispatcher.bind( 'enableStep4', function( e ) {
		if( step3 == false ) {
			var target = et_tos_target_step1 + "/" + et_tos_target_step2 + "/" 
							+ et_tos_target_step3;
			//tuv.etracker.sendTarget( current_etracker_key, "__DISJUNKT__" +target );
			tuv.etracker.appendTrackerImage( trackerUrl + encodeURIComponent(target) );
			step3 = true;
			
			/* Zwischenl�sung f�r googel adwords conversion tracking bis zum  16.09*/
			/*
			var google_adwords_tag_template = jQuery('#tos-scheduling-google-adwords-conversion-tag');
			if (google_adwords_tag_template.val() != undefined)
			{
				var google_adwords_tag = google_adwords_tag_template.val().replace(/^<\!--([\s\S]*)-->$/im, '$1');
				jQuery('body').append(google_adwords_tag);
			}
			*/
			/* Zwischenl�sung f�r googel adwords conversion tracking bis zum  16.09*/
		}		
	});
	
	jQuery('#step-4 .stepTarget').live('click', function( e ) {	
		if( step4 == false ) {
			var target = et_tos_target_step1 + "/" + et_tos_target_step2 + "/" 
							+ et_tos_target_step3 + "/" + et_tos_target_step4;
			//tuv.etracker.sendTarget( current_etracker_key, "__DISJUNKT__" +target );
			tuv.etracker.appendTrackerImage( trackerUrl + encodeURIComponent(target) );
			step4 = true;
		}		
	});	
};

tuv.etracker.trackEvent = function( objectName, eventName, categoryName ) {
	console.log( "categoryName: " + categoryName + ", objectName: " + objectName + ", eventName: " + eventName );	
	try {
		ET_Event.eventStart( categoryName, objectName, eventName, '');
	}
	catch( e ) {
		console.log("ET_Event.eventStart not avaiable");
	}	
};

tuv.etracker.startCampaign = function( campaignId, channelId ) {	
	
	var trackerUrl = "https://www.etracker.com/cnt.php";
	trackerUrl += "?et=" + current_etracker_key;
		
	trackerUrl += "&et_cid=" + campaignId;
	trackerUrl += "&et_lid=" + channelId;
	
	if( typeof et_areas != "undefined"
		&& et_areas != null
		&& et_areas.length > 0 ) {
		trackerUrl += "&et_areas=" + et_areas;
	}	
	if( typeof et_pagename != "undefined"
		&& et_pagename != null
		&& et_pagename.length > 0 ) {
		trackerUrl += "&et_pagename=" + et_pagename;
	}
	
	tuv.etracker.appendTrackerImage( trackerUrl );
}

tuv.etracker.trackVicSearch = function( searchTerm, hasResults ) {
	
	var campaignId = 0;
	var channelId = 0;
	
	if( hasResults ) {
		if( typeof current_et_vic_search_results_campaign_id != 'undefined' ) {
			campaignId = current_et_vic_search_results_campaign_id
		}
		
		if( typeof current_et_vic_search_results_channel_id != 'undefined' ) {
			channelId = current_et_vic_search_results_channel_id
		}
	}
	else {
		if( typeof current_et_vic_search_no_results_campaign_id != 'undefined' ) {
			campaignId = current_et_vic_search_no_results_campaign_id
		}
		
		if( typeof current_et_vic_search_no_results_channel_id != 'undefined' ) {
			channelId = current_et_vic_search_no_results_channel_id
		}
	}
	
	if( campaignId == 0
			|| channelId == 0 ) {
		return;
	}	
	
	var trackerUrl = "";		
	trackerUrl += "https://www.etracker.com/cnt.php";
	trackerUrl += "?et=" + current_etracker_key;
	
	trackerUrl += "&et_cid=" + campaignId;
	trackerUrl += "&et_lid=" + channelId;	
	trackerUrl += "&randParam=" + Math.random() * 1234567;	
	
	searchTerm = encodeURIComponent(searchTerm.substring(0, 80).replace('[,;]', '_') );
	//console.log( searchTerm );	
		
	trackerUrl += "&et_sub=" + searchTerm;	
	//console.log( trackerUrl );	
	
	tuv.etracker.appendTrackerImage( trackerUrl );
	
	/*
	jQuery.get(
		trackerUrl
	);
	*/

}

tuv.etracker.appendTrackerImage = function( url ) {
	var imageTag = "<img style='border:0px;' alt='' src='";	
	imageTag += url+"&r=" + Math.random();	
	imageTag += "' />";
	
	jQuery('body').append( imageTag );	
}
