Shadowbox.init({
	players: ['img','flv'],
	showMovieControls: false,
	//BEN: One of the next 2options need to be set for the IEs. Otherwise they'll only play ONE video per session... :-?
	//autoplayMovies:     false
	flashVars:{stretching:'exactfit'}
});

$.ajaxSetup({
	cache: false
});

$(function() {

	//Automatisch Google Maps laden
	if(typeof initializeGoogleMaps != 'undefined' && jQuery.isFunction(initializeGoogleMaps))
		initializeGoogleMaps();

	//Der Modellfinder mit Initialem Segment Jugend Filter
	if(typeof mfData != 'undefined') {
		$('div#productFinder').modellFinder( mfData, [['segment','jugend']] );
	}

	//Konfigurator ohne initialen Filter
	if(typeof konfiguratorData != 'undefined') {
		$('div#productFinder').modellFinder( konfiguratorData);
	}

	//Colorbox mit Flash auf Produktübersicht
	//$('a.video').shadowbox();


	$('div#productFinder li.farbe a').hover(function() {
		$(this).parent().find('.hover').fadeIn(150);
	},function() {
		$(this).parent().find('.hover').fadeOut(150);
	});
	
	//Tracking für Oberflächenansicht.
	$('div#finishes li a').click(function(e) {
		e.preventDefault();
		var params = {},
			tracking = $(this).attr('rel').split('-'),
			href = $(this).attr('href');
		
		params = {
			type: 'oberflaechen',
			segment: tracking[1],
			surface: tracking[0]
		};
		
		jQuery.ajax({
			url: '/index.php?eID=welle_tracking',
			data: params,
			success: function() {
				window.location.href = href;
			}
		});
	}); 

	//Tracking für Videos
	$('a.btn.video').click(function(e) {
		
		jQuery.ajax({
			url: '/index.php?eID=welle_tracking',
			data: {
				type: 'videos',
				url: $(this).attr('href')
			}
		});
	});
	
	$('a.track-video').click(function(e) {
		jQuery.ajax({
			url: '/index.php?eID=welle_tracking',
			data: {
				type: 'videos',
				url: $(this).attr('href')
			}
		});
	});
	
	
	
	//Für den groovigen Merkzettel
	/*$('#addMerkzettel').click(function(e) {
		e.preventDefault();
		$.ajax({
			url: e.target.href,
			success: function() {
				alert('Added to leaflet!');
			}
		});
	});*/

	//Automatische übergabe des Themas an das Kontaktformular
	if($(document).getUrlParam('thema') != null && $('select#reason ').length > 0) {
		$('select#reason ').val($(document).getUrlParam('thema'));
	}

	if($(document).getUrlParam('cd_jugend') == 1) {
		$('input#cd1').val('1');
	}

	if($(document).getUrlParam('cd_buero') == 1) {
		$('input#cd2').val('1');
	}

	if($(document).getUrlParam('cd_schlafen') == 1) {
		$('input#cd3').val('1');
	}

});

///COLORBOX Temp
/*jQuery.fn.colorbox = function() {

};*/

jQuery.fn.flvPlayer = function (file, options) {

	this.defaults = jQuery.extend({
		width: 315,
		height: 315,
		controlbar: 'none',
		player: '/fileadmin/templates/swf/player.swf',
		autostart: true,
		colorbox: false,
		callback: $.noop
	}, options);



	var o = this;

	function createSWF(file,$alternative) {
		$(this).append($alternative);

		var flashvarsObj = {
			file: '/' + file,
			controlbar: o.defaults.controlbar,
			autostart: o.defaults.autostart,
			stretching: 'fill'
		};

		var parObj = {
				allowfullscreen: true,
				allowscriptaccess: 'always',
				wmode: 'transparent'
		};
		var attObj = {};
		swfobject.embedSWF(o.defaults.player, $alternative.attr('id'), '' + o.defaults.width, '' + o.defaults.height, '9', undefined, flashvarsObj, parObj, attObj, o.defaults.callback);
	}

	this.each(function() {
		var id='flashContent'+Math.ceil(Math.random()*123);
		var $alternative = $('<div>').attr('id', id).html('Sorry - flash is not supported on your browser');

		//Wenn colorbox, dann file aus dem href
		if(typeof file == 'undefined' || typeof file == 'object' || o.defaults.colorbox) {
			var realFile = $(this).attr('href');
		} else {
			var realFile = file;
		}

		if(o.defaults.colorbox) {
			$alternative.wrap( $('<div></div>').hide() );
		}


		if(o.defaults.colorbox) {
			$(this).bind('click',function(e) {
				e.preventDefault();
				createSWF.call(this,realFile,$alternative);
				$.fn.colorbox({
					inline:true,
					href:"#" + id,
					//html: '<h1>boo!</h1>',
					onComplete: function() {
						$.fn.colorbox.resize();
					},
					onCleanup: function() {
						//c.remove();
						$('#' + id).remove();
					}
				});
			});
		} else {
			createSWF.call(this,realFile,$alternative);
		}


	});

	return this;
}

/**
 * jQuery Extension des Modellfinders
 * @param {Object} data
 * @param {Array} initialFilter
 */
jQuery.fn.modellFinder = function (data,initialFilter) {
	var colorBoxOptions = {
		transition: 'elastic',
		opacity: 0.5,
		rel: 'results',
		next: 'next',
		current: "Bild {current} von {total}"
	};

	///Den Filter initialisieren
	var filter = new MichisFilter({
		data: data,
		subjects: $('.filterablePrograms'),
		filter: function (visibleElements,invisibleElements) {
			var filter = this;
			//In FadeOut Callback Packen
			$('#productFinderTargetBox').fadeOut(300,function() {
				invisibleElements.hide().find('a.colorbox').unbind().removeClass('cboxElement');
				visibleElements.show().find('a.colorbox').colorbox(colorBoxOptions);

				if(visibleElements.length > 0) {
					$('#no-results').addClass('hidden');
				} else {
					$('#no-results').removeClass('hidden');
				}

				if(!filter.hasFilter('farben')) {
					cFilter.addFilter('programme','contains',filter.settings.visibleIds);
					cFilter.filter();
				}


				$(this).fadeIn(300,function() {
					$('#primaryContent .inner').jScrollPane({scrollbarWidth:8, scrollbarMargin:10, showArrows:true});
				});
			});
		}
	});

	//Jetzt den Farbfilter
	var cFilter = new MichisFilter({
		data: farbenProgramme,
		subjects: $('.filterable.farbe'),
		filter: function (visibleElements,invisibleElements) {
			this.settings.subjects.hide();
			visibleElements.fadeIn(300);
		}
	});

	/**
	 * Setzt die Oberflaechenauswahl wieder
	 * zurueck auf "Alle"
	 */
	var resetFarben = function(root) {
		filter.removeFilter('farben');
		//cFilter.removeFilter('programme')
		root.find('.filter.farbe').parent().removeClass('checked');
		root.find('.filter.farbe.all').attr('checked','checked');
	}

	/**
	 * Setzt initiale Filter sofern existent
	 */
	var initBaseFilter = function() {
		if(typeof initialFilter != 'undefined') {
			for(var i in initialFilter) {
				filter.registerFilter(initialFilter[i][0],initialFilter[i][1]);
			}
		} else {
			filter.filter();
		}
	}

	this.each(function() {

		var root = $(this);

		//Initial Filtern
		initBaseFilter();

		//Registriere Filter auf Segment
		root.find('.filter.segment').click(function(e) {
			//CSS fuer aktives element - unschoen... vielleicht noch im CSS aufraeumen
			$(this).parent().siblings().removeClass('checked');
			$(this).parent().addClass('checked');

			//Filter
			resetFarben(root);
			filter.registerFilter('segment',$(this).attr('rel'));
			return false;
		});

		//Registriere Filter auf Oberflaechen
		root.find('.filter.farbe').click(function() {
			var v = $(this).val() || $(this).attr('rel');

			if(v == -1) {
				resetFarben(root);
			} else {
				root.find('.filter.farbe.all').removeAttr('checked');
				$(this).parent().siblings().removeClass('checked');
				$(this).parent().addClass('checked');
				filter.addFilter('farben','eq',v);
			}
			filter.filter();
			//return false;
		});

		//Registrieren Filter auf Slider
		root.find('#productFinderSlider').slider({
			value: 1,
			min: 1,
			max: 4,
			step: 1,
			animate: true,
			stop: function(event, ui) {
				resetFarben(root);
				if(ui.value == 1) {
					filter.removeFilter('price');
				} else {
					filter.addFilter('price','eq',"" + ui.value);
				}
				filter.filter();
			}
		})
	});
}
/**
 * Michis Versuch eines Besseren Filter
 * @author Michael Feinbier
 **/

var MichisFilter = function ( options ) {

	// Define the settings
	this.settings = jQuery.extend({
		activeFilter: {},
		subjects: [],
		data: [],
		//Funktionen
		filter: function () {}
	}, options);

	/**
	 * registriert oder unregistriert den Filter je nach Wert
	 * @param attribute Das Attribut das gefiltert wird
	 * @param value Der Wert nachdem Gefiltert wird.
	 */
	this.registerFilter = function(attribute,value) {
		// -1 bedeutet Alle, also filter entfernen.
		if(value == -1) {
			this.removeFilter( attribute );
		} else {
			this.addFilter( attribute, 'eq', value);
		}

		this.filter();
	}

	/**
	 * Fuegt einen Filter Hinzu
	 * @param attribute Das Attribut das gefiltert wird
	 * @param comparison meistens 'eq'
	 * @param value Der Wert nachdem Gefiltert wird.
	 */
	this.addFilter = function(attribute,comparison,value) {
		this.settings.activeFilter[attribute] = {compare: comparison,value: value};
	};

	/**
	 * Gibt wahr zurueck, wenn dieser Filter existiert
	 * @param attribute
	 * @return boolean
	 */
	this.hasFilter = function(attribute) {
		if(typeof this.settings.activeFilter[attribute] != 'undefined') {
			return true;
		} else {
			return false;
		}
	}

	/**
	 * Entfernt einen Filter
	 * @param attribute der Filter der Entfernt wird.
	 */
	this.removeFilter = function(attribute) {
		delete this.settings.activeFilter[attribute];
	}

	/** 
	 * Die Eigentliche Filterfunktion
	 */
	this.filter = function() {
		jQuery.log('Start Filtering');
		this.settings.visibleIds = this.getVisibleIds();
		var id = this.settings.visibleIds;

		var invisible	= this.settings.subjects.filter(function() { return filterNotVisibleDOM.call(this,id) });
		var visible		= this.settings.subjects.filter(function() {
				return filterVisibleDOM.call(this,id)
		});
		
		trackFiltering(this.settings.activeFilter, id);
		this.settings.filter.call(this, visible, invisible);
	};


	/***
	 * AB HIER PRIVATE FUNCTIONS!
	 *
	 *
	 */

	var filterVisibleDOM = function(visibleIds) {
		//Wenn die ID in visibleIds ist, dann anzeigen
		return (jQuery.inArray($(this).attr('id'),visibleIds) >= 0);
	};

	var trackFiltering = function(filter,results) {
		if(typeof filter.segment == 'undefined')
			return;
		
		var params = {},i;
		for(x in filter) {
			params[x] = filter[x].value;
		}
		params.results = results.length;
		jQuery.ajax({
			url: '/index.php?eID=welle_tracking',
			data: params
		});
		//console.log( jQuery.param(params)  );
	};
	
	var filterNotVisibleDOM = function(visibleIds) {
		//Wenn die ID in visibleIds ist, dann anzeigen
		return !filterVisibleDOM.call(this,visibleIds);
	};

	this.getVisibleIds = function (index) {
		var visible = [];
		for(var i in this.settings.data) {
			if(this.checkObject(this.settings.data[i])) {
				visible.push(this.settings.data[i].id);
			}

		}

		return visible;
	};

	this.checkObject = function (object) {
		var show = true;
		jQuery.each(this.settings.activeFilter,function(attribute,o) {
			if(o.compare == 'eq') {
				if( compareEq(object[attribute], o.value)) show=false;
			} else if(o.compare == 'contains') {
				if( compareContains(object[attribute], o.value)) show=false;
			}
		});

		return show;
	};

	var compareEq = function(objectValue,compareValue) {
		//Wenn Array, dann gucken ob wert enthalten ist
		if(jQuery.isArray(objectValue)) {
			return (jQuery.inArray(compareValue,objectValue) == -1);
		} else {
			return compareValue !== objectValue;
		}
	};

	var compareContains = function(programmsInColor,visiblePrograms) {
		for(var i in programmsInColor) {
			if( jQuery.inArray(programmsInColor[i],visiblePrograms) >= 0) {
				return false;
			}
		}
		return true;
	}
};

Welle = {}

Welle.Merkzettel = {
	elements: {},
	duration: 450,
	/**
	 * Baut die Noetigen HTML-Container
	 */
	init: function() {
		var e = Welle.Merkzettel.elements;
		e.merkzettel = $('<div class="ext merkzettel"></div>').prependTo($('#contentArea'));
		e.mzOverlay = $('<div class="merkzettelOverlay" />').appendTo(e.merkzettel);
		e.content = $('<div class="content" />').appendTo(e.merkzettel);
		$('div.merkzettel .scrollPane').jScrollPane({scrollbarWidth:8,scrollbarMargin:60,showArrows:true});

		this.registerEvents();
	},

	/**
	 * Registriere alle Event Haendler
	 */
	registerEvents: function() {
		var mz = this;
		//Merkzettel im Menue
		$('a#merkzettel').click(function(e) {
			e.preventDefault();
			if(mz.isOpen()) {
				mz.close();
			} else {
				mz.load( e.target.href );
				mz.open();
			}
		});

		//Close Button im Ajax
		$('.content a.close').live('click', function(e) {
			e.preventDefault();
			mz.close();
		});
		
		//Print Button im Ajax
		/*$('.content a.print').live('click', function(e) {
			e.preventDefault();
			// BEN: Depends on plugin "jquery.printelement.js"
			$('.merkzettel .content>div').printElement({
				//printMode:'popup',
				pageTitle:'Wellemöbel - Merkzettel',
           	 	printBodyOptions:{styleToAdd:'padding:0;margin:0;',classNameToAdd : 'print'},				
				overrideElementCSS:['../css/main.css',{href:'../css/print.css',media:'print'}]
			}); 
		});*/

		//Ein Produkt zum Merkzettel adden
		$('#addMerkzettel').click(function(e) {
			e.preventDefault();
			mz.open();

			mz.load(e.target.href,function() {
				window.setTimeout(function() {mz.close() },1500);
			});
		});

		//Ein produkt vom Merkzettel entfernen
		$('.content a.del').live('click', function(e) {
			e.preventDefault();
			mz.load(e.target.href);
		});
	},

	/**
	 * Oeffnet den Merkzettel
	 */
	open: function() {
		var e = Welle.Merkzettel.elements;
		e.merkzettel.css('visibility','visible')
			.hide()
			.addClass('on')
			.show();
			
		// BEN: IE-Workaround
		if($.browser.msie) $('#navMain').hide();

		e.mzOverlay.css('opacity','0.6')
			.height($('div#contentArea').height())
			.css('visibility','visible').hide()
			.fadeIn( this.duration );

		e.content.css('visibility','visible').hide();
		e.content.slideToggle(this.duration);
		//content;
	},

	/**
	 * Schliesst den Merkzettel
	 */
	close: function() {
		this.elements.content.slideToggle(this.duration);
		this.elements.mzOverlay.fadeOut(this.duration,function(){
			Welle.Merkzettel.elements.merkzettel.removeClass('on')
				.hide();
				
				// BEN: IE-Workaround
				if($.browser.msie) $('#navMain').show();
		});
	},

	/**
	 * @return boolean
	 */
	isOpen: function() {
		return this.elements.merkzettel.hasClass('on');
	},

	/**
	 * Laed den Merkzettel anhand der URL
	 * @param url string
	 * @param callback function
	 */
	load: function( url, callback ) {
		this.elements.content.addClass('loading');
		var m = this;
		this.elements.content.load( url + ' .content>div', {random: 123456}, function(){
			$(this).removeClass('loading');
			Cufon.replace('div.merkzettel h1');
			//Wurde ein Callback übergeben?
			if(typeof callback == 'function' ) {
				callback.call(m);
			}
		});
	}
}

