var Design = {
	roundCorners : function(pics) {
		pics.addClass('ui-corner-all');
	},

	buttonSets : function(buttonsets, links) {
		buttonsets.buttonset(links);
	},

	buttons : function(links) {
		links.button();
	}
};
var Ajax = {
	call : function(urlString, type, successfulFunction, errorFuction) {
		$.ajax({
			url : urlString,
			dataType : type,
			success : successfulFunction,
			error : errorFuction
		});
	}
};
var Animation = {
	animation : function(button, toAnimate, etc, speed) {
		if (button.prop('checked') == true) {
			etc.hide(speed, function() {
				toAnimate.show(speed);
			});
		} else {
			toAnimate.hide(speed, function() {
				etc.show(speed);
			});
		}
	},

	initAnimation : function(button, toAnimate, etc) {
		button.unbind().click(function() {
			Animation.animation(button, toAnimate, etc, 'slow');
		});
		Animation.animation(button, toAnimate, etc);
	}
};
var Csv = {
	loadCsv : function(urlString, callback, callbackError) {
		Ajax.call(urlString, 'text', function(data) {
			var lines = new String(data).split('\n');
			var result = new Array();
			var foundLines = 0;
			for ( var i = 0; i < lines.length; i++) {
				if (jQuery.trim(lines[i]) != '') {
					var parts = new String(lines[i]).split(';');
					result[foundLines] = new Array(parts.length);
					for ( var j = 0; j < parts.length; j++) {
						result[foundLines][j] = parts[j];
					}
					foundLines++;
				}
			}
			if (callback != null && callback != undefined) {
				callback(result);
			}
		}, callbackError);
	},

	loadCsv2Table : function(urlString, callback, callbackError) {
		Csv.loadCsv(urlString, function(array) {
			var result = '<table>';
			for ( var i = 0; i < array.length; i++) {
				var x = i == 0 ? 'th' : 'td';
				result += '<tr>';
				for ( var j = 0; j < array[i].length; j++) {
					result += ('<' + x + '>');
					result += $('<div/>').text(array[i][j]).html();
					result += ('</' + x + '>');
				}
				result += '</tr>';
			}
			result += '</table>'
			if (callback != null && callback != undefined) {
				callback(result);
			}
		}, callbackError);
	}
};
var Index = {
	normalize : function(value) {
		if (value.substring(0, 1) == '/') {
			value = value.substr(1);
		}
		if (value.substring(0, 11) == 'prettyPhoto') {
			value = 'bilder';
			$.address.value(value);
		}else if (value.substring(0, 8) == 'gallerie') {
			value = 'bilder';
		}else if (value == 'start') {
			value = '';
		}
		return value;
	},
	
	currentSelector : function(value) {
		var normalize = Index.normalize(value);
		if (normalize == '') {
			return 'nichts-zu-finden-selector';
		}
		return 'a[href=#' + normalize + ']';
	},

	createTabs : function(tabs, linkSelector) {
		$.address.init(
				function(event) {
					tabs.tabs({
						selected : function(event, ui) {
							var index = $(linkSelector).index(
									$(Index.currentSelector(event.value)));
							if (index < 0) { // nicht gefunden - nehme 1. Tab
								index = 0;
							}
							return index;
						},
						fx : {
							opacity : 'toggle'
						},
						spinner : 'Lade...',
						cache : true
					});

					$(linkSelector).address();
				}).change(
				function(event) {
					var prefix = $.address.title().split(' | ')[0];
					var postfix = $(Index.currentSelector(event.value)).text();
					if (postfix == '') {
						$.address.title(prefix);
					} else {
						$.address.title(prefix + ' | ' + postfix);
					}
				}).externalChange(
				function(event) {
					tabs.tabs('select', $(Index.currentSelector(event.value))
							.attr('href'));
				}).history(true);
	}
};
var Arbeitsplan = {
	initTable : function(button, link, place, etc) {
		button.button();
		Csv.loadCsv2Table(link.attr('href'), function(result) {
			place.html(result);
			Design.roundCorners(place.children());
		}, function() {
			place.html('Fehler beim Laden!');
		});

		Animation.initAnimation(button, place, etc);
	}
};
var Bilder = {
	sizePic : 64,
	sizeView : 60,
	thumbnail : 'thumbnail.jpg',
	transparent : 'transparent.png',
	csv	: 'bilder.csv',
	folder : 'images',
	
	// ls -1 | sed 's/\(.*\)/\1;;/g' > bilder.csv
	// mkdir tmp
	// for bild in *.jpg; do convert "$bild" -quality 100 -resize 64x64^ \
	// -gravity Center -crop 64x64+0+0 +repage "tmp/$bild"; done
	// montage -mode concatenate -tile 10x -quality 70 tmp/*.jpg thumbnail.jpg
	// rm -rf tmp/
	createHtml : function(folderName, result) {
		var folder = Bilder.folder + '/' + folderName;
		var html = '<img src="' + folder + '/' + Bilder.thumbnail + '" alt="thumbnail" class="hidden" />';
		for ( var i = 0; i < result.length; i++) {
			var line = result[i];
			html += "<li><a href='" + folder + "/" + line[0] + "'"
			+ " title='" + line[2]
			+ "' class='ui-corner-all' rel='gallerie[" + folderName + "]' style='"
			+ "background-image:url(" + folder + "/" + Bilder.thumbnail + ");"
			+ "background-position:"
			+ (-1 * ((i % 10) * Bilder.sizePic))
			+ "px "
			+ (-1 * ((Math.floor(i / 10) * Bilder.sizePic) - 0))
			+ "px;'>"
			+ "<img width='" + Bilder.sizeView + "' height='" + Bilder.sizeView 
			+ "' src='" + Bilder.folder + "/" + Bilder.transparent + "' alt='" + line[1] + "' /></a></li>";
		}
		return html;
	},

	loadGallery : function(folderName, target, button, etc) {
		var url = Bilder.folder + '/' + folderName + '/' + Bilder.csv;
		
		Csv.loadCsv(url, function(result) {
			target.html(Bilder.createHtml(folderName, result));
			button.button();
			Animation.initAnimation(button, target, etc);
			Bilder.init(target.find("a[rel^='gallerie']"));
		}, function() {
			target.html('Fehler beim Laden.');
		});
	},

	init : function(links) {
		links.unbind().draggable().prettyPhoto({
			animation_speed : 'medium',
			slideshow : 10000,
			social_tools : false,
			counter_separator_label : ' von ',
			theme : 'light_rounded'
		});
	}
};
var Video = {
	initVideo : function(id, file, preview, width, height) {
		jwplayer(id).setup({
			flashplayer : 'js/player.swf',
			file : file,
			height : height,
			width : width,
			screencolor : 'dddddd',
			image : preview
		});
	}
};
var Dialog = {
	init : function(button, content, height, width) {
		var headline = content.find('h1,h2,h3,h4,h5,h6 :first').addClass('hidden').html();
		button.unbind().click(function() {
			content.dialog({
				height: height,
				width: width,
				modal: true,
				show: 'toggle',
				resizable: false,
				hide: 'toggle',
				title: headline,
				open: function() {
					content.scrollTop(0);
				}
			});
			$('.ui-widget-overlay').unbind().click(function() {
				content.dialog( "close" );
				$('.ui-widget-overlay').unbind();
				return false;
			});
			return false;
		});
	}	
};
$(document).ready(
		function() {
			// Tabs
			Index.createTabs($('#tabs'), $('#tabs ul:first a'));

			// Arbeitsplan
			$('#arbeitsplan .csv').each(
					function(index, e) {
						var element = $(e);
						Arbeitsplan.initTable(element
								.children('.arbeitsplan-button'), element
								.children('.arbeitsplan-link'), element
								.children('.arbeitsplan-text'), element
								.children('.arbeitsplan-etc'));
					});

			// Video
			Video.initVideo('presse-video', 'presse/konsum.mp4',
					'presse/konsumeroeffnung-preview.jpg', 640, 352);

			// Gallerien
			$('#bilder .gallerie').each(
					function(index, e) {
						var element = $(e);
						Bilder.loadGallery( 
								element.attr('title'),
								element.children('.bilder-list'),
								element.children('.bilder-button'), 
								element.children('.bilder-etc'));
					});
			
			// Grimmsches Blatt
			Design.buttonSets($('#grimmsches-blatt #blatt-list p'),
					$('#grimmsches-blatt #blatt-list a'));
			// Links
			Design.buttons($('#links a'));
			// Kontakt
			Dialog.init($( "#kontakt-button" ), $( "#kontakt" ), 150, 200);
			// Impressum
			Dialog.init($( "#impressum-button" ), $( "#impressum" ), 270, 550);
			
			// Überall
			Design.roundCorners($('#content img'));
			// wenn fertig einblenden
			$('#laden').fadeToggle(1000, function() {
				$('#tabs').fadeToggle(2000);
			});		
		});
