(function($){
 $.fn.sjLimit = function() {
    return this.each(function() {
    	var singleVars;
    	var maxLength;
    	var outputId;
    	var currentLength;
    	var charsLeft;
    	var classes = $(this).attr("class");
    	var eachClass = classes.split(" ");
    	for (var i = 0; i < eachClass.length; i++) {
    		if(eachClass[i].match(/^sjLimit_/) == "sjLimit_") {
    			var rightClass = eachClass[i];
    			break;
    		}
    	}
    	var singleVars = rightClass.split("_");
    	
    	var maxLength 	= singleVars[1];
    	var outputId 	= singleVars[2];
    	var maxId 		= singleVars[3];
    	if(typeof(outputId) == "string") {
    		currentLength = $(this).val().length;
    		charsLeft = maxLength - currentLength;
    		$("#"+outputId).html(charsLeft);
    	}
    	if(typeof(maxId) == "string") {
    		$("#"+maxId).html(maxLength);
    	}
    	currentLength = $(this).val().length;
    	$(this).bind('click focus focusout keydown keypress mouseleave mouseenter', function() {
			currentLength = $(this).val().length;
			if(typeof(outputId) == "string") {
				$("#"+outputId).html(charsLeft);
			}
			charsLeft = maxLength - currentLength;
			if(currentLength >= maxLength) {
				$(this).val($(this).val().substring(0, maxLength));
			}
    	})   	
    });
 };
})(jQuery);
var user = {
		getAlias: function() {
			this.alias = jQuery.parseJSON($(".jsonAlias").html());
		}
}
var string = {
		split: function(string,split) {
			return(string.split(split));	
		}
	}
var alertMessage = {
	set: function(message) {
		$("body").append("<div class='alertError alert'>"+message+"</div>");
	},
	show: function() {
		$(".alertError").css({'top' : $(window).scrollTop() + ($(window).height() / 2), 'left' : ($("body").width() / 2 - ($(".alertError").outerWidth() / 2))});
		$(".alertError").fadeIn();
	},
	create: function(message,target,pos,classes,scroll) {
		var html = "<div class='createAlert alert'></a>";
		if(typeof(target) == "object") {
			if(pos == "append") $(target).append(html);
			if(pos == "prepend") $(target).prepend(html);
		} else alert("error");
		var target = $(".createAlert").html(message).removeClass(".createAlert").addClass(classes).fadeIn();
		if(scroll == true) {
			var offset = target.offset();
			$(window).scrollTop(offset.top);
		}
	},
	hide: function() {
		$("#ajaxStatus").hide();
	}
	
}
var fader = {
	set: function() {
		$("body").prepend("<div id='fader'></div>");
	},
	hide: function() {
		$("#fader").remove();
	}
}
var callApi = {
	type: "GET",
	vars: false,
	//get, vars, callback		
	call: function(data,callback,addCallback) {
		this.show();
		var jqxhr = $.ajax({
			url: "http://www.amobo.de/api/",
			type: this.type,
			data: data,
			dataType: "json",
			success: function(data,text,jqhr) {
				return(callApi.callback(callback,data,addCallback));
			}
			})
	    .done(function() { callApi.hide() })
	    .fail(function(data,type) { callApi.error(data,type) })
	    .always(function() { callApi.hide() });
	},
	callback: function(callback,data,addCallback) {
		if(callback.indexOf(".") == -1) {
			if(callback == "alert") alert(data);
			if(callback == "showTop") {
				showTop.set(data);
				showTop.show();
			}
			if(callback == "return") {
				return(data);
			}
		} else {
			var split = string.split(callback, ".");
			window[split[0]][split[1]](data,addCallback);
		}
	},
	params: function(get,varName,varData) {
		var vars = "get: "+get;
		for (var i in varName) {
			var vars = vars+" , "+varName[i]+":"+varData[i];
		}
		callApi.vars = new String(vars);
	}, 
	error: function(data,type) {
		console.log(data);
		console.log("type: "+type);
		alert("request error");
	},
	show: function() {
		$("#ajaxStatus").css({'top' : $(window).scrollTop() + ($(window).height() / 2), 'left' : ($("body").width() / 2 - ($("#ajaxStatus").outerWidth() / 2))});
		$("#ajaxStatus").show();
	},
	hide: function() {
		$("#ajaxStatus").hide();
	}
}
var api = {
		pics: function(data) {
			if(data.length < 2) return false;
			pdata = "";
			object = jQuery.parseJSON(data);
			$.each(object, function(key, value) { 
				pdata += "<div id='choosePic'>";
				pdata += "<div class='album'>";
				pdata += " <a class='chooseAlbum' href=''>"+value['name']+"</a>";
				$.each(value['pics'], function(key, value) { 
					var profile = value.match(/^128x128_/i);
					if(typeof(profile) !== "undefined" && profile !== null) {
						if(profile.length == 1) var profileClass = " profile";
					} else {
						var profileClass = "";
					}
					var cover = value.match(/^600x800_/i);
					if(typeof(cover) !== "undefined" && cover !== null) {
						if(cover.length == 1) var coverClass = " cover";
					} else {
						var coverClass = "";
					}
					pdata += "<a class='choosePic"+profileClass+coverClass+"' href='"+value+"'><img src='/pics/user/96x96_"+value+"' alt='"+value+"' /></a>";
				})
				pdata += "</div>";
				pdata += "</div>";
				
			});
			showTop.set(pdata);
			showTop.show();
		}, 
		comments: function(data) {
			preparedData = "";
			$.each(data.data, function(key, value) { 
				if(value.user.id == null) {
					value.user.id		= 0;
					value.user.alias	= "User gelöscht";
				}
				preparedData = preparedData+"<div class='singleComment'>"
				+"<p>"+value.text+"</p>"
				+"<span class='desc'><a class='author' href='/profile/"+value.user.id+"'>"+value.user.alias+"</a> ,"+value.date+"</span>"
			+"</div>";
				
			});
			$("#comments .loadButton").before(preparedData);
			$("#comments .settings .count").html($("#comments .singleComment").length);
			if($("#comments .settings .all").html() <=  $("#comments .singleComment").length) {
				$("#comments .loadButton").remove();
			}
		},
		ratings: function(data) {
			preparedData = "";
			$.each(data.data, function(key, value) { 
				if(value.user.id == null) {
					value.user.id		= 0;
					value.user.alias	= "User gelöscht";
				}
				preparedData = preparedData+"<li>"
				+"<a class='author' href='/profile/"+value.user.id+"'>"+value.user.alias+"</a> hat dieses eBook mit "+value.rating+" Sternen bewertet"
				+"<span class='desc'>"+value.date+"</span>"
			+"</li>";
				
			});
			$("#ratings .list").append(preparedData);
			$("#ratings .settings .count").html($("#ratings li").length);
			if($("#ratings .settings .all").html() <=  $("#ratings li").length) {
				$("#ratings .loadButton").remove();
			}	
		},
		search: function(data,addCallback) {
			if(data.length < 2) return false;
			preparedData = "";
			var object = jQuery.parseJSON(data);
			var addObject = jQuery.parseJSON(addCallback);
			$.each(object, function(key, value) { 
				if(key == "count") return true;
				if(addObject.type == "user") {
					if(value.allBooks > 0) {
						value.allBooks = "<span title='"+value.allBooks+" veröffentlichte Texte' class='allBooks'>"+value.allBooks+"</span>";
					} else {
						value.allBooks = "";
					}
					preparedData = preparedData+"<a class='singleUser' href='/profile/"+value.userId+"'>"
					+"<img alt='"+value.profilePic+"' src='/pics/user/"+value.profilePic+"'>"
					+value.synonym
					+value.allBooks
					+"</a>";
				} else {
					preparedData = preparedData+"<a class='book book_"+value.bookId+" singleBook' href='/read/"+value.bookId+"'>"
					+"<img alt='"+value.cover+"' src='/pics/user/"+value.cover+"'>"
					+value.title
					+"</a>";
				}
			})
			$(addObject.target).find(".searchMore").before(preparedData);
			if($(addObject.target).find(".searchUserCount").html() == $(addObject.target+" .singleUser").length) {
				$(addObject.target).find(".searchMore").remove();
			}
		},
		liveSearch: function(data) {
			if(data.length < 2) return false;
			var preparedData = "";
			var object = jQuery.parseJSON(data);
			$.each(object, function(key, value) { 
				if(key == "count") {
					infoData = value;
					return true;
				}
				preparedData = preparedData+"<a class='liveSingleResult' href='/read/"+value.bookId+"'>"+value.title+" <span class='liveResultInfo'>von "+value.author+"</span></a>";
			})
			$("#liveSearch #liveResults").empty();
			$("#liveSearch #liveResults").html(preparedData);
			$("#liveSearch #countResults").html(infoData);
			$("#liveSearch .liveSearchLink").attr("href","/search/?search="+encodeURI($("#searchForm .searchField").val()));
		},
		createPic: function(data) {
			if(data.length < 2) return false;
			var object = jQuery.parseJSON(data);
		}, 
		book: function(data, type) {
				bookArray = new Array();
				var count = $(".settings .count").html();
				if(data.length > 0) {
					bookHtml.init();
					$.each(data, function(key, value) { 
						count++;
						var zevra = count % 2; 
						if(type['list'] == "list")	bookArray[key] = bookHtml.list(value, type, zevra);
						if(type['list'] == "cover") bookArray[key] = bookHtml.cover(value, type, zevra);
					});	
					api.setSettings(bookArray.length, ((bookArray.length + 1) % 2));
					$(".loadMore").before(bookArray.join(""));
				} else alert("out");
		
		},
		setSettings: function(count, zevra) {
			$(".settings .count").html(parseInt($(".settings .count").html()) + count);
			$(".settings .zevra").html(zevra);
		},
}
var bookHtml = {
		categories: "",
		init: function() {
			catArray = new Array();
			var categories = jQuery.parseJSON($(".settings .categories").html());
			user.getAlias();
			$.each(categories, function(key, value) { 
				catArray[value.value] = value.name;
			})
			this.categories = catArray;
		},
		list: function(data, type, zevra) {
			var html = "<div class='singleBookList singleBookListZevra"+zevra+" singleBookListZevra'>"
			+"<div class='singleBookListLeft'>"
				+"<span class='singleBookListAuthor'><a href='/profile/"+data.user.id+"' class='user user_u"+data.user.id+"'>"+data.user.alias+"</span></a>"
				+"<h2><a class='title' href='/read/"+data.id+"'>"+data.title+"</a></h2>"
				+"<a href='/info' class='info'>Infos</a>"
				+"<ul id='tooltip"+data.id+"' class='stdTooltip hidden'>"
					+"<li>Seiten: "+data.sites+"</li>"
					+"<li>Aufrufe (30 Tage): "+data.klicks+" ("+data.klicks30+") </li>"
					+"<li class='head'>Kategorien:</li>"
					+"<li>"+this.cat(data.mainCat,false)+" "+this.cat(data.subCat1,false)+" "+this.cat(data.subCat2,false)+"</li>"
					+"<li>Bewertungen / Kommentare: "+data.starsCount+" / "+data.comments+" </a></li>"
					+"<li>Einstelldatum: "+this.date(data.created_at)+"</li>"
					+"<li>&Oslash;-Bewertung: "+data.stars+"</li>"
					+"<li>"+this.changed(data.changed_at)+"</li>"
					+"<li>"+data.statusIcon+"</li>"
				+"</ul>"
			+"</div>"
			+"<div class='singleBookListInfos'>"
				+"<div class='info'>"
					+this.buy(data)
				+"</div>"
			+"</div>"
			+"<div class='clear'></div>"
		+"</div>";
		return(html);
		},
		cover: function(data, type, zevra) {
			if(data.id == 24) alert(data);
			var html = "<div class='singleBookCover singleBookCoverZevra"+zevra+" singleBookCoverZevra'>"
			+"<a href='/read/"+data.id+"' class='singleBookCoverLeft'>"
					+"<img src='http://www.amobo.de/pics/user/"+data.cover+"' alt='cover' />"
				+"</a>"
			+"<div class='singleBookCoverMiddle'>"
				+"<span class='singleBookCoverAuthor'><a href='/profile/"+data.user.id+"' class='user user_u"+data.user.id+"'>"+data.user.alias+"</span></a>"
				+"<h2><a class='title' href='/read/"+data.id+"'>"+data.title+"</a></h2>"
				+"<p>"+data.cover_text+"</p>"
			+"</div>"
			+"<div class='singleBookCoverRight stdTooltip'>"
				+"<ul>"
					+"<li>"+this.cat(data.mainCat, false)+"</li>"
					+this.cat(data.subCat1, true)
					+this.cat(data.subCat2, true)
					+"<li>Veröffentlicht am "+this.date(data.created_at)+"</li>"
					+"<li>"+data.sites+" Seite(n) </li>"
					+"<li>"+data.klicks+" <abbr title='Aufrufe der letzten 30 Tage'>("+data.klicks30+")</abbr> mal aufgerufen</li>"
					+"<li>"+data.starsCount+" Bewertung(en) und "+data.comments+" Kommentar(e) </li>"
					+"<li>&Oslash;-Bewertung: "+data.stars+"</li>"
					+"<li>"+this.changed(data.changed_at)+"</li>"
					+"<li>"+data.statusIcon+"</li>"
				+"</ul>"
			+"</div>"
			+"<div class='clear'></div>"
			+"<div class='info'><a href='/info' class='infoLink'>?</a> "+this.buy(data)+"</div>"
		+"</div>";
			return(html);
		}, 
		buy: function(data) {
			var buy = $(".settings .price").html();
//			account::checkBookOwnage($value['id']) === TRUE ? $class = "ownBook" : $class = "buyBook";
			if(data.status == 6) return("<a href='/buy/"+data.id+"' class='price buyBook'>"+this.calcPrice(data.price, "&euro;", "Gratis")+"</a>"); 
			return("<span class='price'>Gratis</span>");
			
//			if($edit === TRUE && key_exists($value['user_id'], $this->userAlias) && ($value['status'] == 6 or $value['status'] == 5)) {
//				if($value['status'] == 5 OR $value['status'] == 6) {
//					return("<a href='/myAmobo/sell/".$value['id']."' class='price ".$class."'>".book::calcPrice($value['price'], "&euro;", "Gratis")."</a>");	
//				} elseif($value['status'] == 4) {
//					return("<a href='/myAmobo/sell/".$value['id']."' class='price ".$class."'>Verkaufen</a>");	
//				} else {
//					return("<span class='price ".$class."'>".book::calcPrice($value['price'], "&euro;", "Gratis")."</span>");		
//				}	
//			} else {
//				return("<span class='price ".$class."'>".book::calcPrice($value['price'], "&euro;", "Gratis")."</span>");		
//			}
//			return(FALSE);
		}, 
		calcPrice: function(price, currency, std) {
			var price = price;
			if(price == 0) return(std);
			var price = price / 100;
			var price = price.toFixed(2);
			var price = price.toString();
			var price = price.replace(",",".");
			
			var checkPrice = price.split(".");
			if(checkPrice[1].length == 1) price = checkPrice[0]+","+$checkPrice[1]+"0";
			var price = price.replace(".",",");
			return(price+" "+currency);	
		},
		cat: function(cat, li) {
			if(typeof(cat) == "undefined") return;
			if(this.categories[cat] != "undefined") {
				if(li == true) {
					return("<li>"+this.categories[cat]+"</li>");
				} else	return(this.categories[cat]);
			}
		},
		date: function(date) {
			if(typeof(date) != "string") return;
			var split = date.split(" ");
			var day = split[0].split("-");
			var newDate = day[2]+"."+day[1]+"."+day[0];
			return(newDate);
		},
		changed: function(date) {
			if(typeof(date) != "string") return;
			var split = date.split(" ");
			var day = split[0].split("-");
			var newDate = day[2]+"."+day[1]+"."+day[0];
			return("Aktualisiert am "+newDate);	
		}
}
var choosePic = {
	picTarget: false,
	valueTarget: false,
	type: "pic",
	insert: function(url,type) {
		if(choosePic.type == "text") {
			var url = string.split(url,".");
			$("#"+choosePic.valueTarget).val($("#"+choosePic.valueTarget).val()+"[BILD]"+url[0]+":links[/BILD]");
			$("#"+choosePic.valueTarget).focus();
		}
		if(choosePic.type == "pic") {
			$("."+choosePic.picTarget).attr({src: "/pics/user/"+url});
			$('[name="'+choosePic.valueTarget+'"]').val(url);
			$('[name="'+choosePic.valueTarget+'"]').focus();
		}
	},
	setTarget: function(picTarget, valueTarget, type) {
		choosePic.picTarget		= picTarget;
		choosePic.valueTarget	= valueTarget;
		choosePic.type			= type;
	}
}
var loaderPic = {
		show: function() {
			$("#loaderPic").show();
		},
		hide: function() {
			$("#loaderPic").hide();
		}
}
var reader = {
		init: function() {
			fader.set();
			readerMenu.init();
			$("#readStart").addClass("readerText");
			$("#readStart").removeClass("text");
			this.setHeight(".readerText");
			this.setPos(".readerText");
		},
		hide: function() {
			fader.hide();
			$(".readerText").removeAttr("style");
			$(".readerText").addClass("text");
			$("#readStart").removeClass("readerText");
		},
		setHeight: function(sel) {
			winH	= window.innerHeight;
			h 		= ((winH / 100 ) * 90) - 50;
			topP 	= (winH / 100) * 2;
			$(sel).css({"height": h, "top": topP});
		},
		setPos: function(sel) {
			left = $(window).width() / 2 - $(sel).outerWidth() / 2;
			$(sel).css("left",left);
		}
}
var readerMenu = {
		selector: ".readerText",
		showTimeout: "",
		hideTimeout: "",
		font: function(type) {
			fSize = $(this.selector).css("font-size");
			fLine = $(this.selector).css("line-height");
			fLine = parseInt(fLine);
			fSize = parseInt(fSize);
			if(type == "smaller") {
				fSize = fSize - 2; 
				fLine = fLine - 2;
			}
			if(type == "normal") {
				fSize = 16;
				fLine = 22;
			}
			if(type == "bigger") {
				fSize = fSize + 2;
				fLine = fLine + 2;
			}
			$(this.selector).css({"font-size":fSize,"line-height":fLine+"px"});
		},		
		init: function() {
			$("#readStart").append("<div class='readerMenu'> <a href='' class='fontSmaller' title='Schrift verkleinern'>font smaller</a> <a href='' class='fontNormal' title='Standard'>font normal</a> <a href='' class='fontBigger' title='Schrift vergrößern'>font bigger</a> <a href='' class='resize' title='Positionieren'>resize</a> <a href='' class='closeReadingMenu' title='Lesemodus beenden'>close</a>  </div> <div id='readerMenuEvent'></div>");
			this.hide();
			this.initBindings();
		},
		show: function() {
			$(".readerMenu").fadeIn();
		},
		hide: function() {
			$(".readerMenu").fadeOut();
		},
		clear: function() {
			$(".readerMenu").remove();
			$(".readerMenuEvent").remove();
		},
		initBindings: function() {
			$(".fontNormal").live("click",function(event) {
				event.preventDefault();
				readerMenu.font("normal");
			})
			$(".fontSmaller").live("click",function(event) {
				event.preventDefault();
				readerMenu.font("smaller");
			})
			$(".fontBigger").live("click",function(event) {
				event.preventDefault();
				readerMenu.font("bigger");
			})
			$(".closeReadingMenu").live("click",function(event) {
				event.preventDefault();
				readerMenu.clear();
				reader.hide();
			})
			$(".resize").live("click",function(event) {
				event.preventDefault();
				reader.setHeight();
				reader.setPos(".readerText");
			})			
			$("#read").on("mouseover mouseout","#readerMenuEvent", function(event) {
			  if(event.type == "mouseover") {
				clearTimeout(this.hideTimeout);
				this.showTimeout = setTimeout("readerMenu.show()",500);
			  } else {
				  clearTimeout(this.showTimeout);
			  }
			});
			$(".readerMenu").live("mouseover mouseout", function(event) {
			  if(event.type == "mouseover") {
				  clearTimeout(this.hideTimeout);
			  } else {
				  this.hideTimeout = setTimeout("readerMenu.hide()",1000);	
			  }
			});
		}
}
var comments = {
		clear: function() {
			$("#comments .singleComment").remove();
			$("#comments .singleRating").remove();
		},
		refresh: function() {
			this.clear();
			this.get();
		}, 
		get: function() {
			var multi = 10;
			var start = $("#comments .singleComment,#comments .singleRating").length;
			if(start.length == 0) {
				var start = 0;
			}
			var singleVars = string.split($(".toggleComments").attr("href"),"/");
			
			callApi.call("comments","&id="+singleVars[2]+"&start="+start,"api.comments");
		}
}
var categories = {
		setTarget: function(target){
			this.target = target;
		},
		show: function() {
			$("#selectList").hide();
			var targetPos = $("#"+this.target).position();
			targetPos.top = parseInt(targetPos.top) + parseInt($("#"+this.target).outerHeight());
			$("#selectList").css({"top":targetPos.top,"left":targetPos.left,"width": $("#"+this.target).outerWidth()});
			$("#selectList").slideDown();
		},
		hide: function() {
			$("#selectList").slideUp();
		},
		set: function(clickedClass, doubleCheck) {
			if(doubleCheck == true) {
				if(this.check(clickedClass) == false) return false;
			}
			$("#"+this.target).find(".std").html($("."+clickedClass).html());
			$("#"+this.target).find(".deleteCat").show();
			$("#"+this.target).removeClass("notSelected").addClass("selected");
			$("select[name="+this.target+"] option[value="+$("."+clickedClass).attr("href")+"]").attr('selected',true);
			categories.hide();
			indiWrite.cat();
		},
		unset: function(target) {
			this.target = target;
			if(target != "mainCat") {
				var stdText = "Unterkategorie auswählen";
			} else {
				var stdText = "Hauptkategorie auswählen";
			}
			$("select[name="+this.target+"] option:first").attr('selected',true);
			$("#"+target).addClass("notSelected").removeClass("selected");	
			$("#"+target).find(".std").html(stdText);
			$("#"+target).find(".deleteCat").hide();
			indiWrite.cat();
		},
		check: function(clickedClass) {
			var clickedVal = $("."+clickedClass).attr("href");
			if($("select[name='mainCat']").val() == clickedVal) return false;
			if($("select[name='subCat1']").val() == clickedVal) return false;
			if($("select[name='subCat2']").val() == clickedVal) return false;
			return true;
		},
		checkAll: function() {
			if($("select[name='mainCat']").val() > 0) {
				this.target = "mainCat";
				this.set("cat"+$("select[name='mainCat']").val(), false);
			}
			if($("select[name='subCat1']").val() > 0) {
				this.target = "subCat1";
				this.set("cat"+$("select[name='subCat1']").val(), false);
			}
			if($("select[name='subCat2']").val() > 0) {
				this.target = "subCat2";
				this.set("cat"+$("select[name='subCat2']").val(), false);
			}
		}
}
var indi = {
		change: function(indi,target) {
			$(target).removeClass("iBad iNeutral iGood");
			if(indi == -1) $(target).addClass("iBad");
			if(indi == 0) $(target).addClass("iNeutral");
			if(indi == 1) $(target).addClass("iGood");
		}
}
var indiTip = {
		timer: "",
		init: function(target) {
			this.resetTimer();
			this.timer = window.setTimeout("window['indiTip']['show']('"+target+"')", 750);
		},
		resetTimer: function() {
			clearTimeout(this.timer);
		},
		show: function(target) {
			if($("#"+target).hasClass("iBad")) {
				var fadeTarget = $("#"+target).find(".iBadTip");
			}
			if($("#"+target).hasClass("iNeutral")) {
				var fadeTarget = $("#"+target).find(".iNeutralTip");
			}
			if($("#"+target).hasClass("iGood")) {
				var fadeTarget = $("#"+target).find(".iGoodTip");
			}
			var targetPos	= $("#"+target).position();
			var top			= (targetPos.top - fadeTarget.outerHeight()) -5;
			var left		= targetPos.left - ((fadeTarget.outerWidth() / 2) - ($("#"+target).outerWidth() / 2));
			fadeTarget.css({"top":top,"left":left});
			fadeTarget.fadeIn();
		},
		hide: function(target) {
			this.resetTimer();
			$("#"+target).find(".indiTip").fadeOut();
			$("#"+target).find(".iGoodTip").hide();
			$("#"+target).find(".iNeutralTip").hide();
			$("#"+target).find(".iBadTip").hide();
			
		}
}
var tooltip = {
		timer: "",
		target: "",
		init: function(target) {
			this.target = target;
			this.resetTimer();
			this.timer = window.setTimeout("window['tooltip']['show']()", 750);	
			
		},
		resetTimer: function() {
			clearTimeout(this.timer);
		},
		show: function() {
			fadeTarget = this.target.find(".stdTooltip");
			var targetPos	= this.target.position();
			var top			= (targetPos.top - fadeTarget.outerHeight()) -5;
			var left		= targetPos.left - ((fadeTarget.outerWidth() / 2) - (this.target.outerWidth() / 2));
			fadeTarget.css({"top":top,"left":left});
			fadeTarget.fadeIn();	
		},
		hide: function(target) {
			this.resetTimer();
			target.find(".stdTooltip").fadeOut();
		}
}
var earnings = {
		calc: function(price) {
			var price = price.replace(/,/g, ".");
			var price = parseFloat(price);
			if(price <= 1.99) {
				var price = (price -(price * 0.19)) * 0.5;
			}
			if(price > 1.99 && price <= 3.49) {
				var price = (price -(price * 0.19)) * 0.75;
			}
			if(price > 3.49) {
				var price = (price -(price * 0.19)) * 0.5;
			}
			var price = (Math.round(price * 100) / 100);
			var price = price.toString();
			var price = string.split(price, ".");
			if(price[1].length == 1) price[1] = price[1]+"0";
			return(price[0]+","+price[1]);
		}
}
var sliceImage = {
		img: "",
		imgRealHeight: "",
		imgRealWidth: "",
		resizeDiv: "",
		containerDiv: "",
		ratio: "",
		init: function() {
			if($(this.containerDiv).length != 0 && $(this.resizeDiv).length != 0) {
				this.getRealSize();
				this.setMaxResize();
				this.setDragResize();
				this.setResizeContainer();	
			}
		},
		getRealSize: function() {
			this.img.clone().removeClass().addClass("imgRealSize").appendTo(this.containerDiv);
			this.imgRealHeight = $(".imgRealSize").height();
			this.imgRealWidth = $(".imgRealSize").width();
		},
		setMaxResize: function() {
			if(this.img.width() == this.img.height() || this.img.width() > this.img.height()) {
				if(this.ratio >= 1) {
					this.max = this.img.width();
				} else {
					this.max = this.img.height();
				}
				
			}
			if(this.img.width() < this.img.height()) {
				if(this.ratio >= 1) {
					this.max = this.img.width();
				} else {
					this.max = this.img.height();
				}
			}
		},
		setDragResize: function() {
			$(this.resizeDiv)
		    .draggable({ 
		    	containment: this.containerDiv
		    	})
		    .resizable({
		    	aspectRatio: this.ratio,
		    	maxWidth: this.max,
		    	maxHeight: this.max
		    });
			$(this.resizeDiv).bind("resizestop dragstop", function(event, ui) {
				sliceImage.resetPosition();
			});
		},
		setResizeContainer: function() {
			$(this.containerDiv).css({"height": this.img.height(), "width": this.img.width()});
		},
		resetPosition: function() {
			var pos = $(this.resizeDiv).position();
			var width = $(this.resizeDiv).width();
			var height = $(this.resizeDiv).height();
			var productWidth	= pos.left + width - this.img.width();
			var productHeight	= pos.top + height - this.img.height();
			this.calcNewImage();
			if(productWidth > 0 || productHeight > 0) {
				$(this.resizeDiv).css({"top":0,"left":0});
			}
		},
		calcNewImage: function() {
			if($(this.containerDiv).length != 0 && $(this.resizeDiv).length != 0) {
				var pos = $(this.resizeDiv).position();
				var pWidth = this.img.width() / (this.imgRealWidth / 100);
				var pHeight = this.img.height() / (this.imgRealHeight / 100);
				this.newRealTop = pos.top / pHeight * 100;
				this.newRealLeft = pos.left / pWidth * 100;
				this.newRealHeight = $(this.resizeDiv).height() / pHeight * 100;
				this.newRealWidth = $(this.resizeDiv).width() / pWidth * 100;	
			}
		},
		apiCall: function(data) {
			alert(data);
		}
}
var menu = {
	init: function() {
		this.hideMenu();
		this.fixAnchor();
		$("#headFlyMenu .openMenu, #headFlyMenu1 .getMenu").on("click", function(e) {
			if($("#addDivMenu:hidden").length == 0) return false;
			e.preventDefault();
			menu.showMenu();
		})
		$("#headFlyMenu1 .openMenu").on("click", function(e){
			e.preventDefault();
			$("#headFlyMenu1 .extendMenu").toggle();
		})
		$(window).on("scroll", function() {
			menu.posMenu();
		})
	},
	showMenu: function() {
		$("#headContent").show();
		if($("#headMenu").outerHeight() < $("body").outerHeight()) {
			$("#headMenu").addClass("overlayMenu");
			$("#headMenu").css({'top' : $(window).scrollTop()});
		} else {
			$(window).scrollTop(0);
		}
		liveSearch.clear();
		$(".headFlyMenu").hide();
		$("#alldiv, #addDiv").removeAttr("style");
		
	},
	hideMenu: function() {
		$("#headContent").hide();
		$(".headFlyMenu").show();	
		$("#content").css({"margin": "40px auto 0 auto", "padding": "2% 0 0 0"});
		$("#addDiv").css({"margin": "40px auto 0 10px", "padding": "2% 0 0 0"});
	},
	posMenu: function() {
		$(".headFlyMenu, .overlayMenu").css({'top' : $(window).scrollTop()});
	},
	fixAnchor: function() {
		$(".extendMenu a").on("click", function(e) {
			var href = $(this).attr("href");
			if(href.indexOf('#') >= 0) {
				var hash = href.substring(href.indexOf('#')); 
				e.preventDefault();
				if($(hash).length > 0) {
					var offset = $(hash).offset().top - $(".headFlyMenu").outerHeight();
					$('html, body').animate({scrollTop:offset}, 500);
				}
			}
		})
	}	
}
var resizeWindow = {
	timeout: "",
	grid: "",
	init: function() {
		this.grid = $(".grid").outerWidth();
		this.calcNew();
		$(window).on("resize", function(){
			clearTimeout(resizeWindow.timeout);
			resizeWindow.timeout = setTimeout(function() {
				swSlider.calc();
				swSlider.setSlideWidth();
				resizeWindow.calcNew();
			}, 500);
		});
	},
	calcNew: function() {
		var windowWidth = $(window).outerWidth() * 0.96;
		//add the 4% margin of the site
		var percent = Math.round(this.grid * 2 / (windowWidth / 100) - 100);
		if(percent <= 15 && percent > 0) {
			var newGridWidth = Math.round(this.grid - (this.grid / 100 * percent)) - 10;
			$(".grid").css({"width":newGridWidth, "height": newGridWidth}); 
			
			
		} else {
			$(".grid, .box1, box2, box3").removeAttr("style");
		}
	}
}
var hidePart = {
		init: function() {
			this.hide();
			$(".hidePart .toggle").on("click", function(e) {
				e.preventDefault();
				var selectedPart = $(this).parent().find(".hide:first");
				hidePart.toggleOperator($(this).find(".toggleButton"));
				if($(selectedPart).is(':visible')) {
					selectedPart.fadeOut();
				}
				if($(selectedPart).is(':hidden')) {
					selectedPart.fadeIn();
				}
			})
		}, 
		toggleOperator: function(selector) {
			if($(selector).html() == "+") {
				$(selector).html("-");
			} else {
				$(selector).html("+");
			}
		},
		hide: function() {
			var all = $(".hidePart .hide");
			var l = all.length;
			for (var i=0;i<l; i++) {  
				if($(all[i]).find(".alert:not(.notLoggedIn)").length == 0 && $(all[i]).hasClass("open") == false) {
					$(all[i]).hide();
				}
			}  
		}
}
var swSlider = {
	target: "",
	interval: "",
	intTime: 8000,
	animateTime: 1000,
	menu: "",
	init: function() {
		this.calc();
		//
		this.viewport = this.target.find(".sliderViewport");
		this.openButton = this.target.find(".openButton");
		//viewport width / height
		this.slideWidth = this.target.find(".singleSlide").width();
		this.slideHeight= this.target.find(".singleSlide").height();
		//count elements
		this.slideCount = this.target.find(".singleSlide").length;
		//
		this.sliderBox = this.target.find(".sliderBox");
		//set height
		this.sliderBox.height(this.oldSize);
		//set slide width
		this.setSlideWidth();
		//scroll to start, set first img
		this.target.scrollLeft(0);
		
		
		//start interval
//		this.initInterval();
		//create menu
		this.createMenu();
		//bind menu
		this.bind();
		//calc
		this.calc();
	},
	setSlideWidth: function() {
		this.target.find(".singleSlide").width(this.target.width());
		this.slideWidth = this.target.find(".singleSlide").width();
		this.viewport.width(this.slideWidth * this.slideCount);
	},
	initInterval: function() {
		this.interval = window.setInterval("swSlider.next()", this.intTime);
	},
	createMenu: function() {
		this.target.append("<div class='sliderMenu'></div>");
		this.menu = this.target.find(".sliderMenu");
		this.target.find(".singleSlide").each(function(){
		if(typeof(a) == "undefined") a = 0;
		a++;
		swSlider.menu.append("<span class='singleMenu button32'>"+a+"</span>");
		})
		this.menu.find("span:first").addClass("activeSlide");
	},
	bind: function() {
		this.target.find(".sliderMenu span").on("click", function(){
			swSlider.next($(this).index());
		})
//		this.target.hover(
//			function () {
//			clearInterval(swSlider.interval);
//			},
//			function () {
//			swSlider.initInterval();
//			}
//		);
		//bind click openButton
		this.target.find(".slideImg").on("click", function() {
			swSlider.imgSize = $(this).height();
			swSlider.clickedImg = $(this);
			if($(this).hasClass("opend")) {
				swSlider.destH = swSlider.oldSize;
			} else {
				swSlider.destH = swSlider.imgSize;
			}
			swSlider.sliderBox.animate({
				"height": (swSlider.destH)
			}, 500, function(){
				swSlider.clickedImg.toggleClass("opend");	
			});
		})
		this.target.find(".next").on("click", function() {
			swSlider.next();
		})
	},
	next: function(index) {
		var allSlides = this.target.find(".singleSlide").length;
		if(typeof(index) == "undefined") {
		var index = this.menu.find(".activeSlide").index() + 1;
		}
		if(index == allSlides) var index = 0;
		this.menu.find(".activeSlide").removeClass("activeSlide");
		this.menu.find("span:eq("+index+")").addClass("activeSlide");
		this.target.find(".sliderBox").animate({
		scrollLeft: index * this.slideWidth
		}, this.animateTime);
	},
//	next: function() {
//		this.sliderButtons.hide();
//		this.target.animate({
//			scrollLeft: this.target.find(".singleSlide").width()
//		}, 500, function() {
//			swSlider.sliderButtons.fadeIn();
//		});
//	},
	calc: function() {
		this.oldSize = $(window).outerHeight() / 3;
		this.imgSize = $(".singleSlide img").height();
	}
}
var fav = {
	set: function(clicked) {
		var dataLink = $(clicked).attr("data-link");
		if($(clicked).hasClass("faved")) {
			callApi.call("class=favorite&method=remove"+$(clicked).attr("data-link"), "return", null);
			$(".fav[data-link='"+dataLink+"']").toggleClass("faved setFav");
		} else {
			callApi.call("class=favorite&method=set"+$(clicked).attr("data-link"), "return", null);
			$(".fav[data-link='"+dataLink+"']").toggleClass("faved setFav");
		}
	}	
}
var indi = {
		change: function(indi,target) {
			$(target).removeClass("iBad iNeutral iGood");
			if(indi == -1) $(target).addClass("iBad");
			if(indi == 0) $(target).addClass("iNeutral");
			if(indi == 1) $(target).addClass("iGood");
		}
}
var indiWrite = {
		form: "#write",
		init: function() {
			if($("#write").length == 1) {
				this.checkAll();
				this.bind();	
				this.initDescription();
			}
		},
		text: function() {
			var length = $(this.form).find(".text").val().length;
			if(length < 50) indi.change(-1,".indiText");
			if(length >= 50 && length < 4000) indi.change(0,".indiText");
			if(length > 4000) indi.change(1,".indiText");
			indiWrite.indiTip($(".indiText"), ".indiText", false);
			indiWrite.indiDesc($(".indiText"), "#statusDescription .descText");
			indiWrite.checkReading(".text");
		},
		title: function() {
			var length = $(this.form).find("input[name='title']").val().length;
			if(length == 0) indi.change(-1,".indiTitle");
			if(length >= 1) indi.change(1,".indiTitle");
			indiWrite.indiTip($(".indiTitle"), ".indiTitle", false);
			indiWrite.indiDesc($(".indiTitle"), "#statusDescription .descTitle");
		},
		coverText: function() {
			var length = $(this.form).find(".coverText").val().length;
			if(length == 0) indi.change(0,".indiCovertext");
			if(length >= 150) indi.change(1,".indiCovertext");
			indiWrite.indiTip($(".indiCovertext"), ".indiCovertext", false);
			indiWrite.indiDesc($(".indiCovertext"), "#statusDescription .descBlurb");
		},
		cover: function() {
			var length = $(this.form).find("input[name='cover']").val().length;
			var val = $(this.form).find("input[name='cover']").val();
			if(length == 0 || val == "cover_stdCover.jpg") {
				indi.change(0,".indiCover");
				return;
			}
			if(length > 0) indi.change(1,".indiCover");	
			indiWrite.indiTip($(".indiCover"), ".indiCover", false);
		},
		cat: function() {
			var length = $(this.form).find("select[name='mainCat']").val().length;
			if(length == 0) indi.change(-1,".indiCat");
			if(length > 0) indi.change(1,".indiCat");	
			indiWrite.indiTip($(".indiCat"), ".indiCat", false);
			indiWrite.indiDesc($(".indiCat"), "#statusDescription .descCat");
		}, 
		tags: function() {
			var length = $(this.form).find("input[name='tags']").val().length;
			if(length == 0) indi.change(0,".indiTags");
			if(length > 3) indi.change(1,".indiTags");	
			indiWrite.indiTip($(".indiTags"), ".indiTags", false);
		},
		agb: function() {
			var length = $(this.form).find("input[name='accAgb']:checked").val();
			if(length != 1) indi.change(-1,".indiAgb");
			if(length == 1) indi.change(1,".indiAgb");
			indiWrite.indiTip($(".indiAgb"), ".indiAgb", false);
			indiWrite.indiDesc($(".indiAgb"), "#statusDescription .descAgb");
		},
		checkAll: function() {
			this.text();
			this.title();
			this.coverText();
			this.cover();
			this.cat();
			this.tags();
			this.agb();
		},
		bind: function() {
			$(document).on("click", ".indi", function() {
				var link = $(this).attr("href");
				indiWrite.indiTip($(this),link, true);
			})
			$("#write").on("click", ".indicator", function() {
				$(this).toggle();
			})
		},
		indiTip: function(clicked,target,show) {
			if(show == true) $(target).find(".indicator").show();
			$(target+" .indiTip").hide();
			if($(clicked).hasClass("iBad")) $(target+" .iBadTip").show();
			if($(clicked).hasClass("iNeutral")) $(target+" .iNeutralTip").show();
			if($(clicked).hasClass("iGood")) $(target+" .iGoodTip").show();				
		},
		indiDesc: function(clicked,toggle) {
			if($(clicked).hasClass("iBad")) {
				$(toggle+" .notRdy").show();
				$(toggle+" .rdy").hide();
				$(toggle).addClass("errorButton").removeClass("successButton");
			}
			if($(clicked).hasClass("iNeutral") || $(clicked).hasClass("iGood")) {
				$(toggle+" .notRdy").hide();
				$(toggle+" .rdy").show();
				$(toggle).addClass("successButton").removeClass("errorButton");
			}
		},
		checkReading: function() {
			var matches = "";
			var text = $("#write .text").val();
			if(text.length > 50) {
				var matches = text.match( /\[reading\][\s\S]*?\[\/reading\]/gm );
				if(typeof(matches) !== 'undefined' && matches != null) {
					if(matches[0].length < 2000) {
						$("#statusDescription .descReading .notRdy").show();
						$("#statusDescription .descReading .rdy").hide();
						$("#statusDescription .descReading").addClass("errorButton").removeClass("successButton");
					} else {
						if(matches[0].length < 30000) {
							$("#statusDescription .descReading .notRdy").hide();
							$("#statusDescription .descReading .rdy").show();	
							$("#statusDescription .descReading").addClass("successButton").removeClass("errorButton");
						} else {
							$("#statusDescription .descReading .notRdy").show();
							$("#statusDescription .descReading .rdy").hide();
							$("#statusDescription .descReading").addClass("errorButton").removeClass("successButton");
						}
					}
				}
			} else {
				$("#statusDescription .descReading .notRdy").show();
				$("#statusDescription .descReading .rdy").hide();	
				$("#statusDescription .descReading").addClass("errorButton").removeClass("successButton");
			}
		},
		initDescription: function() {
			this.changeStatus();
		},
		changeStatus: function(clicked) {
			if($(clicked).length == 0) {
				var selectedStatus = $('#write .selectStatus option:selected').attr("data-desc");
			} else {
				var selectedStatus = $(clicked).attr("data-desc");
			}
			$("#write #statusDescription .singleStatus:not(#"+selectedStatus+")").hide();
			$("#write #statusDescription .selectDesc li:not(."+selectedStatus+")").addClass("waitButton").removeClass("successButton whiteText");
			$("#write #statusDescription #"+selectedStatus+"").show();
			$("#write #statusDescription .selectDesc ."+selectedStatus+"").addClass("successButton whiteText").removeClass("waitButton");
		}
}
var form = {
		init: function() {
			this.checkbox();
		},
		checkbox: function() {
			$(".replaceCheckbox").each(function(){
				var className = "";
				$(this).find("input, label").hide();
				if($(this).find("input").is(':checked')) {
					var span = "<span class='off switchState waitButton left'></span><span switchState class='on successButton left'></span>";
					var text = $(this).find(".onText").html();
				} else {
					var span = "<span class='off switchState actionButton left'></span><span switchState class='on waitButton left'></span>";
					var text = $(this).find(".offText").html();
				}
				$(this).append("<div class='jsCheckbox'>"+span+"<span class='text'>"+text+"</span></div>");
			})
			$(".jsCheckbox").click(function() {
				var input = $(this).parent().find("input");
				if($(input).is(':checked')) {
					$(this).find(".text").html($(this).parent().find(".offText").html());
					$(this).find(".on").toggleClass("successButton waitButton");
					$(this).find(".off").toggleClass("actionButton waitButton");
					input.attr("checked", false);
					indiWrite.agb();
				} else {
					$(this).find(".text").html($(this).parent().find(".onText").html());
					$(this).find(".on").toggleClass("successButton waitButton");
					$(this).find(".off").toggleClass("actionButton waitButton");
					input.attr("checked", true);
					indiWrite.agb();
				}
		
				
			})
		},
		resetCheckbox: function(checkbox, std) {
			var checkbox = $(checkbox);
			var input = checkbox.parent().find("input");
			if(std == 1) {
				checkbox.find(".text").html(checkbox.parent().find(".onText").html());
				checkbox.find(".on").addClass("successButton").removeClass("waitButton");
				checkbox.find(".off").removeClass("actionButton").addClass("waitButton");
				input.attr("checked", true);	
			} else {
				checkbox.find(".text").html(checkbox.parent().find(".offText").html());
				checkbox.find(".on").removeClass("successButton").addClass("waitButton");
				checkbox.find(".off").addClass("actionButton").removeClass("waitButton");
				input.attr("checked", false);
			}
		}
}
var pics = {
	query: "",
	init: function() {
		this.bind();
	},
	bind: function() {
		$("#pics .editMenu").on("click", ".move, .delete", function(e) {
			e.preventDefault();
			pics.endAll();
			pics.toggleBinds("add");
			pics.toggleClasses("add");
			if($(this).hasClass("move")) pics.showInfo("move");
			if($(this).hasClass("delete")) pics.showInfo("delete");
		})
		$("#pics").on("click", ".endOperation", function() {
			pics.endAll();
		})
		$("#pics").on("click", ".deletePics", function() {
			if($("#pics .picGrid .selected").length == 0) return(false);
			$.each($("#pics .picGrid .selected"), function() {
				var id = $(this).attr("data-editId");
				if(typeof(id) != "undefined") {
					pics.query += "&pics[]="+id;
				}
			})
			var albumId = $(".settings .albumId").html();
			callApi.type = "POST";
			callApi.call($(this).attr("data-link")+pics.query+"&albumId="+albumId, "pics.remove", "delete");
			callApi.type = "GET";
		})
		$("#pics").on("click", ".movePics", function() {
			if($("#pics .picGrid .selected").length == 0) return(false);
			$.each($("#pics .picGrid .selected"), function() {
				var id = $(this).attr("data-editId");
				if(typeof(id) != "undefined") {
					pics.query += "&pics[]="+id;
				}
			})
			var albumId = $(".settings .albumId").html();
			var destAlbumId = $("#newAlbum option:selected").val();
			if(destAlbumId.length == 0) return(false)
			callApi.type = "POST";
			callApi.call($(this).attr("data-link")+pics.query+"&albumId="+albumId+"&destAlbumId="+destAlbumId, "pics.remove", "moved");
			callApi.type = "GET";
		})
	},
	toggleBinds: function(type) {
		if(type == "add") {
			$(".picGrid").on("click", "a:not('.protected')", function(e) {
				e.preventDefault();
				$(this).toggleClass("chooseTrans selected");
			})
			$(".picGrid").on("click", ".protected", function(e) {
				e.preventDefault();
			})
		} else {
			$(".picGrid").off("click", "a:not('.protected')");
			$(".picGrid").off("click", ".protected");
		}
	},
	toggleClasses: function(type) {
		if(type == "add") {
			$(".picGrid a").addClass("chooseTrans");
		} else {
			$(".picGrid a").removeClass("chooseTrans");	
		}
		
	},
	showInfo: function(type) {
		if(type == "move") {
			var select = $(".settings form").html();
			$("#pics .hidePart").append("<div class='alertSuccess endOperation whiteText'>Bilder verschieben. Hier klicken um zu beenden.</div><div class='operationMenu'>"+select+"<h4 class='movePics loadButton whiteText' data-link='&amp;class=pic&amp;method=move'>verschieben</h4></div>");
		}
		if(type == "delete") {
			$("#pics .hidePart").append("<div class='alertSuccess endOperation whiteText'>Bilder löschen. Hier klicken um zu beenden.</div><div class='operationMenu'><h4 class='deletePics loadButton whiteText' data-link='&amp;class=pic&amp;method=delete'>löschen</h4></div>");
		}
	},
	endAll: function() {
		this.toggleBinds("remove");
		$("#pics .picGrid a").removeClass("chooseTrans selected");
		$("#pics .endOperation, #pics .operationMenu").remove();
	},
	remove: function(data,type) {
		$("#pics .selected").remove();
		this.endAll();
	}
}
var choosePic = {
	pics: new Array(),
	html: "",
	album: false,
	func: "",
	target: "",
	init: function() {
		this.bind();
	},
	bind: function() {
		$(document).on("click",".getPics", function(e){
			e.preventDefault();
			choosePic.func = $(this).attr("data-func");
			choosePic.target = $(this).attr("data-target");
			choosePic.getAlbum($(this),true);
		})
	},
	getAlbum: function(clicked,toggle) {
		var array = new Array();
		array['clicked'] = clicked;
		array['toggle']	= toggle;
		if(choosePic.album == false) {
			callApi.call("&class=album&method=list", "choosePic.insertAlbum", array);
		} else {
			if(toggle == true) this.toggleAlbum(clicked);
		}
		
	},
	insertAlbum: function(data,array) {		
		choosePic.album = true;
		$.each(data['data'], function(key, value) {
	    	var pics = "";
	    	if(value.pics != "undefined" && value.pics != null) {
				for (var i = 0; i < value.pics.length; i++) {
					var addClass = "";
					if(typeof(value.pics[i]) == "object") {
						value.pics[i] = value.pics[i]['url'];
						addClass = "protectedPic";
					}
		    		pics += "<img class='singlePic "+addClass+"' data-url='"+value.pics[i].substr(5)+"' data-safe='"+value.pics[i].substr(5)+","+key+","+i+"' src='/pics/user/qmini_"+value.pics[i].substr(5)+"' alt='"+value.pics[i]+"' />";
		    	}	
	    	} else {
	    		value['pics'] = new Array;
	    	}
			choosePic.html += "<div class='singleAlbum'>"
				+"<div class='toggle'>"+value.name+" <span class='allPics right'>"+value.pics.length+"</span></div>"
				+"<div class='pics hidden'>"+pics+"</div>"
				+"</div>";
		})
		$("body").append("<div id='loadedAlbum'><h4><span class='toggleButton'>-</span>Fotoalben</h4>"+choosePic.html+"</div>");
		if(array['toggle'] == true) choosePic.toggleAlbum(array['clicked']);
		$("#loadedAlbum").on("click", ".singleAlbum .toggle", function() {
			$(this).parent().find(".hidden").toggle();
		})
		$("#loadedAlbum").on("click", "h4", function() {
			$("#loadedAlbum").hide();
		})
		$("#loadedAlbum").on("click", ".singlePic", function() {
			choosePicCustom.init($(this).attr("data-url"),choosePic.func,$(this).attr("data-safe"));
		})
	},
	toggleAlbum: function(clicked) {
		var dest = $(choosePic.target);
		$("#loadedAlbum").show().appendTo($(dest));
	}	
}
var choosePicCustom = {
		init: function(url, func, data) {
			window['choosePicCustom'][func](url, data);
		},
		bookCover: function(url,data) {
			$("#write #cover .coverPicCont").attr("src", "/pics/user/cover_"+url);
			$('#write #cover .choosenCover').val(data);
		},
		aliasPic: function(url,data) {
			$("#editAlias .profilePicCont, #newAlias .profilePicCont").attr("src", "/pics/user/qthumb_"+url);
			$('#editAlias .choosenPic, #newAlias .choosenPic').val(data);	
		},
		writePic: function(url,data) {
			$("#write .text").val($("#write .text").val()+"[IMG]base_"+url+"[/IMG]");
		}
}
var liveSearch = {
		intTime: "750",
		intObj: "",
		searchObj: "",
		method: "books",
		search: function(search, type, limit, skip, callback) {
			callApi.call("class=search&method="+this.method+"&limit="+limit+"&skip="+skip+"&search="+encodeURI(search)+"&user="+type, callback, null);
		},
		resetTimeout: function(search, type, limit, skip, callback) {
			clearTimeout(this.intObj);
			this.intObj = window.setTimeout("window['liveSearch']['search']('"+search+"','"+type+"', '"+limit+"', '"+skip+"', '"+callback+"')", 500);
		},
		init: function(search, type, limit, skip, callback) {
			this.resetTimeout(search, type, limit, skip, callback);
			if($("#liveSearch").length == 0) {
				$("#menu").append("<div id='liveSearch'><div id='liveResults'></div><div id='liveInfo'><a class='liveSearchLink' href='/search/?search='>Alle <span id='countResults'>0</span> Treffer anzeigen</a></div></div>");
			}
		},
		clear: function() {
			$("#liveResults").remove();	
			$('body').off("click");
		},
		show: function(data,add) {
			if(data == null || data == undefined) {
				var userCount = 0;
			} else {
				if(data.user != null && data.user != undefined) {
					var userCount = data.user;
				} else {
					var userCount = 0;
				}
				
			}
			var data = this.htmlData(data, "list");
			var target = "liveResults";
			if($("#"+target).length == 0) $(".headFlyMenu").prepend("<div id='"+target+"'></div>");
			
			$("#"+target).html(data+"<div class='liveMenu'><a href='/search' class='textLeft marginLr2 text50 searchUser'>"+userCount+" Benutzer gefunden</a> <a href='/search' class='line32'>erweiterte Suche</a></div>");
			this.bind();
		},
		htmlData: function(data, type) {
			if(data == null || data == "undefined") return("<div class='textLeft marginLr2 text50'>Leider keine Treffer</div>");
			if(data.data == null || data.data == "undefined") return("<div class='textLeft marginLr2 text50'>Leider keine Treffer</div>");
			var data = data.data;
			var htmlData = "";
			var zevra = "";
			if(data == null) return false;
	    	for (var i = 0; i < data.length; i++) {
	    		var zevra = i % 2;
	    		htmlData += window['bookHtml'][type](data[i], "list", zevra);
	    	}	
//	    	htmlData += "<a href='/search' class='liveMenu loadButton marginTb10'>weitere anzeigen</a>";
	    	return(htmlData);
		},
		bind: function() {
			$('body').click(function(e){
			      if($(e.target).parents("#liveResults").length == 0) {
			    	  liveSearch.clear();
			      }
			});
			$("#liveResults").on("click", ".liveMenu a", function() {
				if($(this).hasClass("searchUser")) {
					var addSearch = "&user=1"
				} else {
					var addSearch = "&user=0";
				}
				$(this).attr("href","/search/?search="+encodeURI($("#search .searchField").val())+addSearch);
			})
		},
		extendSearch: function() {
			var search = $("#searchExtend [name=search]").val();
			var price = $("#searchExtend [name=price]").val();
			var sites = $("#searchExtend [name=sites]").val();
			var cat = $("#searchExtend [name=cat]").val();
			this.init(search,price,sites,cat, 15, 0, "liveSearch.extendSearchShow");
		},
		extendSearchShow: function(data,add) {
			var data = this.htmlData(data, "list");
			$("#searchExtend .searchExtendShow").html(data);
		}
}
var list = {
		init: function() {
			this.types = new Array();
			this.types['own'] = "Gekaufte eBooks";
			this.types['published'] = "Veröffentlichte eBooks";
			this.types['draft'] = "Unveröffentlichte eBooks";
			this.types['read'] = "Habe ich gelesen";
			this.types['will'] = "Werde ich lesen";
			this.types['current'] = "Lese ich momentan";
			this.types['favorite'] = "Favoriten";
		},
		stdLists: function() {
			lists = new Object();
			lists['data'] = new Object();
			lists['data']['will'] = new Object();	
			lists['data']['will']['title'] = "Werde ich lesen";
			lists['data']['will']['type'] = "will";
			lists['data']['current'] = new Object();
			lists['data']['current']['title'] = "Lese ich momentan";
			lists['data']['current']['type'] = "current";
			lists['data']['read'] = new Object();
			lists['data']['read']['title'] = "Habe ich gelesen";
			lists['data']['read']['type'] = "read";
			lists['data']['favorite'] = new Object();
			lists['data']['favorite']['title'] = "Favoriten";
			lists['data']['favorite']['type'] = "favorite";
			return(lists);
		},
		toggle: function(clicked) {
			if($(".userInfos .currentAlias").length == 0) {
				$(clicked).text("Diese Funktion steht nur eingeloggten Benutzern zur Verfügung");
				$(clicked).addClass("red").removeClass("blue");
				return(false);
			}
			if($(clicked).hasClass("green")) {
				var set = "remove";
			} else {
				var set = "add";
			}
			var checkData = new Array();
			checkData['clicked'] = clicked;
			checkData['list'] = $(clicked).closest(".contentList");
			callApi.call("class=list&method="+set+"&dataId="+$(clicked).attr("data-id")+"&id="+$(clicked).attr("data-type"), "list.switchClass", checkData);
		},
		switchClass: function(data,clicked) {
			if(data == true) {
				if($(clicked.list).length > 0) {
					var result = $(clicked.list).attr("data-type").indexOf(clicked.clicked.attr("data-type"));
					if(result != -1) {
						if($(clicked.clicked).hasClass("green")) {
							$(clicked.clicked).closest(".singleBook").remove();
						}
					} 	
				}
				
				$(clicked.clicked).toggleClass("blue green");
				$(clicked.clicked).closest(".singleBook").find(".communityRead a[data-type='"+$(clicked.clicked).attr("data-type")+"']").toggleClass("blue green");
			}
		},
		loadJson: function(container) {
			this.template = $("#listsTemplate").children().first();
			var varArray = new Array();
			var settings = container.children(".settings");
			varArray['target'] = container.children(".content");
			varArray['settings'] = settings;
			callApi.call("&class=list&method=get&userData=true&type="+settings.find(".type").text()+"&skip="+settings.find(".skip").text()+"&limit="+settings.find(".limit").text()+"&order="+settings.find(".order").text()+"&empty="+settings.find(".empty").text()+settings.find(".add").text(), "list.load", varArray);
		},
		loadJsonSmall: function(target, type, id, skip, limit, order, add) {
			var array = new Array();
			array.id = id;
			array.target = target;
			array.add = add;
			array.type = type;
			callApi.call("&class=list&method=get&userData=true&type="+type+"&skip="+skip+"&limit="+limit+"&order="+order+"&searchId="+id+"&data=false", "list.loadSmall", array);
		},
		reset: function(container,load) {
			$(container).find(".content").empty();
			$(container).find(".settings .skip").text(0);
			if(load == true) {
				this.loadJson(container);
			}
		},
		loadSmall: function(data, array) {
			var more = data.more;
			var data = data.data;
			var target = array.target;
			var add = array.add;
			var count = 0;
			
			if(array.type != undefined && array.type == "std") {
				var stdLists = this.stdLists();
				jQuery.extend(data, stdLists.data);				
			}
			var already = "";
			for(var i in data) {
				var type = "";
				count++;
				if(data[i].type != undefined) {
					type = data[i].type;
				} else {
					type = i;
				}
				if(already.indexOf(type) != -1)  continue;
				already += " "+type;
				target.append(" <a href='' class='inlineBlock line32 blue whiteText paddingLr2 marginB5 listButton' data-selfId='"+i+"' data-id='"+array.id+"' data-type='"+type+"'>"+this.title(data[i].title,data[i].type)+"</a>");
				if(data[i].found != undefined) {
					target.find(".listButton").last().toggleClass("blue green");
				}
				
			}
			if(target.find(".loadListsCommunity").length > 0) {
				if(more != undefined) {
					target.append(" ");
					target.append(target.find(".loadListsCommunity"));
				} else {
					target.find(".loadListsCommunity").remove();
				}	
			} else {
				if(more != undefined) {
					target.append(" <a class='inlineBlock line32 paddingLr2 marginB5 amoElement loadListsCommunity' href=''>mehr</a>");	
				}
			}

			
			if(add == "list") {
				$(".singleBook .infoLink").trigger("click");
				$(".singleBook .infoLink").trigger("click");
			}
			
			if(add != "readStd") {
				var skip = parseInt(target.attr("data-skip")) + count;
				target.attr("data-skip", skip);	
			}
		},
		load: function(data,array) {
			var more = data.more;
			var data = data.data;
			var target = $(array.target);
			var template = this.template;
			var menu = $("#menuTemplate").children().first();
			var count = 0;
			if(array.clean == true) target.empty();
			
			for(var i in data) {
				count++;
				var current = $(template).clone(true).removeClass("hidden").removeAttr("id").appendTo($(target));
				current.attr("id", "parentlist"+i).attr("data-target", "#list"+i);
				if(data[i].type != undefined) {
					current.attr("data-type", "&type=list&value[type]="+data[i].type+"&value[alias]="+data[i].alias.id);
				} else {
					current.attr("data-type", "&type=list&value[id]="+i+"&value[alias]="+data[i].alias.id);
				}
				current.find("h2").text(this.title(data[i].title,data[i].type));
				if(data[i].desc != undefined) {
					current.find("h2").after("<p>"+data[i].desc+"</p>");
				}
				current.find(".countData").text(data[i].dataCount);
				current.find(".user").text(data[i].alias.alias);
				current.find(".user").attr("href", "/profile/"+data[i].alias.id);
				if(array.settings.find(".edit").text() != 0) {
					if(data[i].userEdit == true) {
						current.find(".countData").before("<a data-id='createForm' class='line32 editAlias blue inlineBlock whiteText iconSet button32 toggleContent editList' href=''>bearbeiten</a> ");
					}	
				}
				current.find(".listContent").attr("id","list"+i);
				current.find(".listContent .destMenu").append(menu.clone(true));
				
				
			};
			array.settings.find(".skip").text(parseInt(array.settings.find(".skip").text()) + count);
			if(more != undefined) {
				target.append("<a href='' class='loadLists block blue whiteText marginTb10 textCenter paddingLr2 line32'>weitere</a>");
			}
		},
		title: function(title,type) {
			if(type != undefined) {
				return(this.types[type]);
			} else {
				return(title);
			}
		}
	}
var template = {
		target: "",
		loadJson: function(currentList, target, clean) {
			this.template = $("#"+currentList.find(".template").attr("data-type")+"Template").children().first();
			var varArray = new Array();
			if(clean == true)  {
				this.reset(currentList)
				varArray['clean'] = true;
			}
			varArray['target'] = target;
			callApi.call(this.link(currentList)+this.settings(currentList), "template.load", varArray);
			
		},
		link: function(clicked) {
			var menu = $(clicked).find(".changeList");
			var link = "class=book&method=list&userData=true"+$(clicked).attr("data-type");
			link += "&orderKey="+menu.find(".listOrder").attr("data-key");
			link += "&sort="+menu.find(".listOrder").attr("data-order");
			link += "&price="+menu.find(".listPrice").attr("data-type");
			link += "&category="+menu.find(".listCat").attr("data-type");
			return(link)
		},
		settings: function(list) {
			var settings = $(list).find(".settings").children();
			var link = "";
			if(settings.length > 0) {
				for (var i = 0; i < settings.length; i++) {
					var current = $(settings[i]);
					link += "&"+current.attr("data-id")+"="+current.text();
				}
			}
			return(link);
		},
		reset: function(list) {
			list.find(".settings div[data-id='skip']").text(0);
		},
		load: function(data,array) {
			var html = "";
			var z = 0;
			var all = data.all;
			if(data.lists != undefined) {
				var lists = data.lists;
			} else {
				var lists = new Array();
			}
			if(data.more != undefined ) {
				var more = data.more;
			} else {
				var more = false;
			}
			
			var data = data.data;
			
			var target = $(array.target);
			if(array.clean == true) {
				target.empty();
			}
			if(data != null && data != "undefined") {
				var status = new Array();
				status[1] = "Veröffentlicht";
				status[2] = "Entwurf";
				status[3] = "Unveröffentlicht";
				status[4] = "Finalisiert";
				status[5] = "In Prüfung";
				status[6] = "Im Verkauf";
				
				//find last zevra
				z = $(target).children().length;
				for (var i = 0; i < data.length; i++) {
					if(data[i].user.alias == null || data[i].user.alias == undefined) data[i].user.alias = "Unbekannter Autor";
					
					z++;
					zevra = z % 2;
					//main data 	
					var current = $(this.template).clone(true).removeClass("hidden").removeAttr("id").appendTo($(array.target));
					current.addClass("singleBookListZevra"+zevra);
					current.attr("data-id", data[i].id);
					current.find("h2 a").text(data[i].title);
					current.find("h2 a").attr("href", "/read/"+data[i].id);
					current.find(".info").append(this.marks(data[i]));
					current.find(".stdTooltip li[data-ttype='sites'] span").text(data[i].sites);
					current.find(".stdTooltip li[data-ttype='views'] span").text(data[i].klicks);
					current.find(".stdTooltip li[data-ttype='views30'] span").text(data[i].klicks30);
					current.find(".stdTooltip li[data-ttype='rating'] span").text(data[i].starsCount);
					current.find(".stdTooltip li[data-ttype='avgRating'] span").text(data[i].stars);
					current.find(".stdTooltip li[data-ttype='comments'] span").text(data[i].comments);
					current.find(".stdTooltip li[data-ttype='status']").append("Status <span>"+status[data[i].status]+"</span>");
					current.find(".stdTooltip li[data-ttype='cats'] .catBox").append("<span>"+data[i].mainCat.name+"</span>");
					if(data[i].subCat1 != false) {
						current.find(".stdTooltip li[data-ttype='cats'] .catBox").append("<span>"+data[i].subCat1.name+"</span>");	
					}
					
					var date = data[i].created_at.split(" ");
					var date = date[0].split("-");
					current.find(".stdTooltip li[data-ttype='date'] span").text(date[2]+"."+date[1]+"."+date[0]);
					
					if(data[i].changed_at == null) {
						current.find(".stdTooltip li[data-ttype='changed']").remove();
					} else {
						var changed = data[i].changed_at.split(" ");
						var changed = changed[0].split("-");
						current.find(".stdTooltip li[data-ttype='changed']").empty().append("Aktualisiert <span>"+changed[2]+"."+changed[1]+"."+changed[0]+"</span>");	
					}					
					data[i].communityHtml = this.community(data[i],lists);
					
					if(current.hasClass("singleBookCover")) {
						template.cover(data[i], current);
					} 
					if(current.hasClass("singleBookList")) {
						template.list(data[i], current);
					} 
					if(data[i].list != undefined) {
						$.each(data[i].list, function(index, value) { 
							current.find("a[data-type="+index+"]").removeClass("blue").addClass("green");
						});	
					}
				}	
				if(more == true) $(target).append("<a class='block whiteText textCenter marginTb10 blue line32 loadMore' href=''>mehr</a>");		
				
				/**
				 * if list has toggle button append a close button
				 */
				if(target.closest(".contentList").find(".toggle:first").length == 1) {
					var closeList = $(target).find(".closeList");
					if(closeList.length == 1) {
						$(target).append(closeList);
					} else {
						$(target).append("<a class='closeList block textCenter line32 amoElement marginTb10 whiteText'>schließen</a>");
					}
					
				}
				
				var skip = $(target).closest(".contentList").find(".settings div[data-id='skip']");
				skip.text(data.length + parseInt(skip.text()));
				
				
			}
		},
		list: function(data,current) {
			current.find(".singleBookListLeft .singleBookListAuthor a").text(data.user.alias).attr("href", "/profile/"+data.user.id);
			current.find(".singleBookListLeft").append("<div class='communityRead line32 hidden' data-std='1' data-skip='0'>"+data.communityHtml+"</div>");
		},
		cover: function(data,current) {
			current.find(".singleBookCoverMiddle .singleBookCoverAuthor a").text(data.user.alias).attr("href", "/profile/"+data.user.id);
			current.find(".singleBookCoverMiddle").append("<div class='communityRead line32 hidden' data-std='1' data-skip='0'>"+data.communityHtml+"</div>");
			
			current.find("p[data-ttype='coverText']").text(data.cover_text);
			if(data.cover != false) current.find(".singleBookCoverLeft img").attr("src", "http://www.amobo.de/pics/user/"+data.cover);
		},
		community: function(data,lists) {
			if(lists.data == undefined || lists.data.length == 0) {
				lists = new Object();
				lists['data'] = new Object();
			}
			lists['data']['will'] = new Object();	
			lists['data']['will']['title'] = "Werde ich lesen";
			lists['data']['will']['type'] = "will";
			lists['data']['current'] = new Object();
			lists['data']['current']['title'] = "Lese ich momentan";
			lists['data']['current']['type'] = "current";
			lists['data']['read'] = new Object();
			lists['data']['read']['title'] = "Habe ich gelesen";
			lists['data']['read']['type'] = "read";
			lists['data']['favorite'] = new Object();
			lists['data']['favorite']['title'] = "Favoriten";
			lists['data']['favorite']['type'] = "favorite";
			var typeHtml = "";
			var stdHtml = "";
			var already = "";
			$.each(lists['data'], function(index, value) { 
				if(value.type != undefined) {
					if(already.indexOf(value.type) != -1)  return;
					already += " "+value.type;
					typeHtml += " <a href='' data-type='"+value.type+"' data-id='"+data.id+"' class='inlineBlock line32 blue whiteText paddingLr2 marginB5 listButton'>"+list.title(value.title,value.type)+"</a>";
				} else {
					stdHtml += " <a href='' data-type='"+index+"' data-id='"+data.id+"' class='inlineBlock line32 blue whiteText paddingLr2 marginB5 listButton'>"+value.title+"</a>";
				}
			});
			
			var listsHtml = typeHtml+stdHtml+" <a href='' class='inlineBlock line32 paddingLr2 marginB5 amoElement loadListsCommunity'>mehr</a>";
			return(listsHtml);
		},
		marks: function(data) {
			var html = "";
			//edit
			if(typeof(data.list) != "undefined") {
				if(data.list.draft == true || data.list.published) {
					html += "<a class='edit singleMark editButton' href='/myAmobo/editBook/"+data.id+"'>Edit</a>";
				}
			}
			
			//price
			if(data.status == 6) {
				var buyClass = ""
				var price = (data.price / 100).toFixed(2).replace('.',',');
				if(typeof(data.list) != "undefined") {
					if(data.list.published == true) {
						html += "<a class='gift singleMark giftButton' href='/myAmobo/account/gift/"+data.id+"'>G</a>";
						buyClass = "ownBook";
					} else {
						if(data.list.own == true) {
							buyClass = "ownBook";
						} else {
							buyClass = "buyBook";
						}	
					}

					html += "<a href='/buy/"+data.id+"' class='price "+buyClass+"'>"+price+" &euro;</a>";
				} else {
					html += "<a href='/buy/"+data.id+"' class='price buyBook'>"+price+" &euro;</a>";
				}
				
			} else {
				if(data.status == 4) {
					if(typeof(data.list) != "undefined") {
						if(data.list.published == true || data.list.draft == true) {
							buyClass = "ownBook";
							html += "<a href='/buy/"+data.id+"' class='price "+buyClass+"'>Verkaufen</a>";
						} else {
							buyClass = "buyBook";
						}
					}
				} else {
					if(typeof(data.list) != "undefined") {
						if((data.status == 1 || data.status == 2 || data.status == 3) && data.list.author == true) {
							html += "<a class='edit singleMark editButton' href='/myAmobo/editBook/"+data.id+"' title='eBook bearbeiten'>Edit</a>";	
						}	
					}
				}
				html += "<span class='price buyBook'>Gratis</span>";	
			}
			
			return(html);
		}
}
var changeList = {
		init: function() {
			//bind click events
			$(document).on("click", ".changeList .toggleList", function(e){
				e.preventDefault();
				var parent = $(this).parent();
				changeList.toggle(parent);
			});  
			$(document).on("click", ".menuContent .changeVal", function(e) {
				e.preventDefault();
				var parent = $(this).parent().parent().parent();
				var activ = $(this).closest(".menuContent").attr("data-activ");
				var changeParent = $(this).closest(".listContent").find(".changeList .singleChangeList[data-activ='"+activ+"']");

				
				if($(this).closest("ul").hasClass("changeListOrder")) {
					if(changeParent.attr("data-order") !=  $(this).attr("href") || changeParent.attr("data-key") != $(this).parent().attr("data-type")) {
						changeParent.attr("data-order", $(this).attr("href")).attr("data-key", $(this).parent().attr("data-type"));
						changeParent.find(".toggleList").text($(this).parent().clone().children().remove().end().text());
						
						if($(this).attr("href") == "asc") {
							changeParent.find(".sort").removeClass("sortDesc").addClass("sortAsc").attr("href", "desc").text("asc");
						} else {
							changeParent.find(".sort").removeClass("sortAsc").addClass("sortDesc").attr("href", "asc").text("desc");
						}
						template.loadJson(parent.closest(".contentList"),parent.closest(".contentList").find(".content"), true);
					}
					
					
				} else {
					changeParent.attr("data-type", $(this).attr("href"));
					if(changeParent.find(".toggleList").text() != $(this).text()) {
						changeParent.find(".toggleList").text($(this).text());
						if(changeParent.find(".removeType").length == 0 && changeParent.hasClass("noRemove") == false) {
							
							changeParent.find(".toggleList").after("<a class='removeType blue whiteText'>X</a>");
						} 
						template.loadJson(parent.closest(".contentList"),parent.closest(".contentList").find(".content"), true);
					}	
				}
				changeList.toggle(parent);
			})
			$(document).on("click", ".changeList .listOrder .sort", function(e) {
				e.preventDefault();
				$(this).parent().attr("data-order", $(this).attr("href"));
				if($(this).attr("href") == "asc") {
					$(this).removeClass("sortDesc").addClass("sortAsc").attr("href", "desc").text("asc");
				} else {
					$(this).removeClass("sortAsc").addClass("sortDesc").attr("href", "asc").text("desc");
				}
				template.loadJson($(this).closest(".contentList"),$(this).closest(".contentList").find(".content"), true);
				
			})
			$(document).on("click", ".changeList .removeType", function(e){
				e.preventDefault();
				$(this).parent().attr("data-type", "");
				$(this).parent().find("a:first").text($(this).parent().attr("data-std"));
				template.loadJson($(this).closest(".contentList"),$(this).closest(".contentList").find(".content"), true);
				$(this).remove();
			})
		},
		toggle: function(parent) {
			var menuContent = parent.closest(".listContent").find(".menuContent");
			var list = parent.find(".changeListUl");
			var newData = true;
			
			if(menuContent.attr("data-activ").length == 0 || menuContent.attr("data-activ").length == 0) newData = false;
			
			if(newData = true) {
				if(menuContent.attr("data-activ") != parent.attr("data-activ")) newData = false;
			}
			if(newData == false) {
				menuContent.empty();
				menuContent.attr("data-activ", parent.attr("data-activ"));
				menuContent.append(list.clone().removeClass("hidden"));
			} else {
				menuContent.attr("data-activ", "0");
				menuContent.empty();
			}
		},
		set: function(list) {
			this.empty();
			var obj = list.substring(1);
			
			$(this.target).append($("."+obj+"HiddenList").clone());
		},
		empty: function() {
			$(this.target).empty();
		},
		classes: function(clicked) {
			$(clicked).parent().find(".activList").removeClass("activList");
			$(clicked).addClass("activList");
		},
		clean: function(clicked) {
			$(clicked).removeClass("activList");
			$(this.target).empty();
		}
	}
var liveUser = {
		target: "",
		show: function(data) {
			var html = "";
		    for (key in data.data) {
		    	if(data.data[key].gender == undefined) data.data[key].gender = "k";
		    	if(data.data[key].picture == undefined) {
		    		data.data[key].picture = data.data[key].gender+"_pmini_std.jpg";
		    	} else {
		    		if(data.data[key].picture.url.length == 0) {
		    			data.data[key].picture = data.data[key].gender+"_pmini_std.jpg";
		    		} else {
		    			data.data[key].picture = "qmini_"+data.data[key].picture.url;	
		    		}
		    	}
		    	html += "<a class='liveProfile selectList block' data-id='"+key+"'><img src='http://www.amobo.de/pics/user/"+data.data[key].picture+"' alt='' class='floatLeft' /><h1>"+data.data[key].alias+"</h1><span class='clear'></span></a>";
		    }
		    $("#listForm .liveUserResult").empty();
			$("#listForm .liveUserResult").append(html);
			
		}
}
var userControl = {
		init: function() {
			$(document).on("click", "#listForm .liveUserResult .liveProfile", function(e) {
				e.preventDefault();
				$(this).toggleClass("selected blue whiteText");
				userControl.checkSelected($(this).closest(".liveUserResult"));
			})
			$(document).on("click", ".addToList", function(e) {
				e.preventDefault();
				userControl.add($(this));
				userControl.checkSelected($("#listForm .liveUserResult"));
			})
			$(document).on("click", ".resultDiv .liveProfile h1", function(e) {
				userControl.remove($(this).parent());
			})	
			$(document).on("click", ".resultDiv .rightRead, .resultDiv .rightEdit", function(e) {
				var rightRead = $(this).parent().find(".rightRead");
				var rightEdit = $(this).parent().find(".rightEdit");
				if($(this).hasClass("rightEdit") == true) {
					if($(this).hasClass("blue") == true) {
						rightRead.addClass("green").removeClass("blue");
					}
					$(this).toggleClass("green blue");
				}
				if($(this).hasClass("rightRead") == true) {
					if($(this).hasClass("green") == true && rightEdit.hasClass("green") == true) {
						rightEdit.removeClass("green").addClass("blue");
					} 
					$(this).toggleClass("green blue");
				}
				
			})
			this.check($(".resultDiv"));
			this.checkSelected($("#listForm .liveUserResult"));
			
		},
		add: function(clicked) {
			var selected = $(".liveUserResult .selected");
			var target = $(clicked).parent().find(".resultDiv");
	    	for (var i = 0; i < selected.length; i++) {
	    		if(target.find("a[data-id="+$(selected[i]).attr("data-id")+"]").length == 0) {
	    			target.append($(selected[i]).removeClass("selected blue whiteText").clone().addClass("waiting op6").prepend("<div class='floatRight'><span class='button32 inlineBlock green iconSet rightRead' title='Leserecht'>R</span> <span class='button32 inlineBlock blue iconSet rightEdit' title='Bearbeitungsrecht'>E</span></div>"));
	    		} else {
	    			$(selected[i]).removeClass("selected blue whiteText");	
	    		}
	    	}
	    	this.check(target);
		}, 
		remove: function(clicked) {
			var parent = $(clicked).parent();
			$(clicked).remove();
			this.check(parent);
		},
		check: function(target) {
			if(target.find(".liveProfile").length > 0) {
				target.parent().find(".empty").hide();
				target.parent().find(".notEmpty").show();
			} else {
				target.parent().find(".empty").show();
				target.parent().find(".notEmpty").hide();
			}
			target.closest("fieldset").find(".toggle").find(".count").html("("+target.find(".liveProfile").length+")");
		},
		checkSelected: function(target) {
			if(target.find(".selectList.selected").length > 0) {
				$(".addToList").show();
			} else {
				$(".addToList").hide();
			}
		}
}
var switchContent = {
		stdContent: "",
		init: function() {
			this.stdContent = $(".switchContent.stdContent");
			$(document).on("click",".toggleContent", function(e) {
				e.preventDefault();
				var id = $(this).attr("data-id");
				if(id.indexOf(' ') >= 0) {
					id = id.split(' ');
				}
				switchContent.call(id);
			})
		},
		call: function(id) {
			if(id.length > 0) {
				$(".switchContent.currentContent").removeClass("currentContent");
				if(typeof(id) == "object") {
					for (var i = 0; i < id.length; i++) {
						$(".switchContent[data-id="+id[i]+"]").addClass("currentContent").show();
					}	
				} else {
					$(".switchContent[data-id="+id+"]").addClass("currentContent").show();
				}
				this.hide();
			}
	
		},
		hide: function() {
			$(".switchContent").not(".currentContent").hide();
		}
}
var fillForm = {
		list: function(data,id) {
			var formular = $("#listForm");
			this.clear(formular);
			var data = data.data[id];
			var edit = "";
			var read = "";
			formular.find("input[name='title']").val(data.title);
			formular.find("textarea[name='desc']").val(data.desc);
			if(data.user != null && data.user != undefined) {
				$.each(data.user, function(key, value){
					var element = "<a class='liveProfile selectList block' data-id='"+key+"'><div class='floatRight'><span class='button32 inlineBlock blue iconSet rightRead' title='Leserecht'>R</span> <span class='button32 inlineBlock blue iconSet rightEdit' title='Bearbeitungsrecht'>E</span></div><img class='floatLeft' alt='' src='http://www.amobo.de/pics/user/k_pmini_std.jpg'><h1>"+value.alias+"</h1></a>";
					formular.find(".resultDiv").append(element);
					var last = formular.find(".resultDiv .liveProfile").last();
					for (var i = 0; i < value.rights.length; i++) {
						if(value.rights[i] == "wait") last.addClass("waiting op8");
						if(value.rights[i] == "read") last.find(".rightRead").toggleClass("blue green");
						if(value.rights[i] == "edit") last.find(".rightEdit").toggleClass("blue green");
					}
				})
			}
			var allowDelete = true;
			if(data.type != undefined) {
				if(data.type == "published" || data.type == "draft" || data.type == "own") {
					var allowDelete = false;
					var allowAliasChange = false;
				}
			}
			if(data.owner != true) allowDelete = false;
			
			formular.find("select[name=alias] option[value="+data.alias.id+"]").attr("selected", true);
			
			
			form.resetCheckbox($('#listForm').find("input[name=public]").parent(),data.public);
				
			if(allowDelete == true) {
				formular.find("fieldset").last().before("<fieldset class='changefieldset deleteFieldset'><legend>Löschen</legend><a href='' class='confirm deleteList line32 inlineBlock paddingLr5 blue whiteText' data-confirm='Diese Liste wirklich löschen?'>Diese Liste löschen</a></fieldset>");
			}
				
			userControl.check(formular.find(".resultDiv"));
		},
		clear: function(formular) {
			formular.find("input[type='text']").val("");
			formular.find("textarea").val("");
			formular.find(".resultDiv .liveProfile").remove();
			formular.find(".deleteFieldset").remove();
			formular.find("select[name=alias] option").attr("selected", false);
			form.resetCheckbox(formular.find("input[name=public]").parent(),1);
			userControl.check(formular.find(".resultDiv"));
		}
}
var listOverview = {
		edit: function(data) {
			if(data == true) {
				switchContent.call("lists");
				alertMessage.create("Liste wurde bearbeitet. Diese Übersicht kann nicht mehr aktuell sein. ", $(".contentHead"), "append", "green line32 paddingLr2 marginB5", true);
			}
		}
}
var request = {
		init: function() {
			$(document).on("click", ".request .rqOption", function(e) {
				e.preventDefault();
				
				callApi.call("class=request&method=answer&id="+$(this).parent().attr("data-id")+"&data="+$(this).attr("data-data"), "request.change", $(this).parent());
			})
		},
		change: function(data,clicked) {
			clicked.fadeOut();
		},
		html: function(data,target) {
			if(data.data != null || data.data != undefined) {
				$.each(data.data, function(key, value) { 
					target.append("<div class='request tempInsert paddingLr2 marginTb10' data-id='"+value._id+"'><h3 class='marginB10'>"+value.vars.text+"</h3></div>");
					var singleElement = target.find(".tempInsert").removeClass("tempInsert");
					for (var i = 0; i < value.vars.options.length; i++) {
						singleElement.append("<a href='' class='inlineBlock line32 blue whiteText paddingLr5 rqOption' data-data='"+value.vars.options[i].value+"'>"+value.vars.options[i].text+"</a> ");
					}	
				})	
			}
		}
}
var loadContent = {
		init: function() {
			$(document).on("click", ".loadContent:not(.loaded) .doLoad", function() {
				var loadContent = $(this).closest(".loadContent");
				loadContent.addClass("loaded");
				var settings = loadContent.find(".settings").children();
				var link = "build=1";
				for (var i = 0; i < settings.length; i++) {
					link += "&"+$(settings[i]).attr("class")+"="+$(settings[i]).text();
				}	
				callApi.call(link, loadContent.find(".settings .showClass").text(), loadContent.find(".content"));
			})
		}
}
var linkLists = {
		target: "",
		add: function(clicked) {
			if(linkLists.check(clicked) == true) {
				this.target.append($(clicked).clone().removeClass("blue inlineBlock whiteText paddingLr2 listButton").addClass("paddingTb5 borderTbDashed block singleList"));
				$(this.target).closest("form").append("<input type='hidden' name='lists[]' value='"+clicked.attr("data-selfId")+"' />");
			}
		},
		remove: function(clicked) {
			$(clicked).closest("form").find("input[value="+clicked.attr("data-selfId")+"]").remove();
			$(clicked).remove();
		},
		check: function(clicked) {
			var clickedId = $(clicked).attr('data-type');
			var returnBool = true;
			if(this.target.find(".singleList[data-type="+clickedId+"]").length > 0) returnBool = false;
			if(this.target.find(".singleList").length >= 5) returnBool = false;
			return(returnBool);
		}
}
$(document).ready(function(){	
	changeList.init();
	menu.init();
	resizeWindow.init();
	hidePart.init();
	swSlider.target = $(".swSlider");
	swSlider.init();
	indiWrite.init();
	form.init();
	pics.init();
	choosePic.init();
	userControl.init();
	switchContent.init();
	loadContent.init();
	request.init();
	list.init();
	jQuery("[class*='sjLimit']").sjLimit();
	$("#hitMe").click(function(e){
		e.preventDefault();
		callApi.call("class=comment&method=list&bookId=95","showTop");
	})
	$(".loadMore").click(function(e){
		e.preventDefault();
		var settings = new Array();
		settings["insert"]	= "beforeButton";
		settings["list"]	= $(".settings .list").html();
		settings["price"]	= "buy";
		callApi.call($(this).attr("data-link")+"&skip="+$(".settings .count").html(), "api.book", settings);
	})
	$(".comments .loadButton").click(function(e) {
		e.preventDefault();
		var settings = new Array();
		settings["insert"]	= "beforeButton";
		settings["list"]	= $(".settings .list").html();
		callApi.call($(this).attr("data-link")+"&skip="+$(".settings .count").html(), "api.comments", settings);
	})
	$(".ratings .loadButton").click(function(e) {
		e.preventDefault();
		var settings = new Array();
		settings["insert"]	= "beforeButton";
		settings["list"]	= $(".settings .list").html();
		callApi.call($(this).attr("data-link")+"&skip="+$(".ratings .settings .count").html(), "api.ratings", settings);
	})
	$(".singleBook .infoLink").on("click", function(e) {
		e.preventDefault();
		var info = "";
		var main = $(this).closest(".singleBook");
		if($(main).find(".toggleInfo").length == 0) {
			if($(main).find(".singleBookCoverRight:visible").length == 0) {
				var tooltipHtml = $(main).find(".stdTooltip").html();
				var info = "<a href='' class='inlineBlock line32 expandInfo amoElement desc paddingLr2 marginB5'>Infos anzeigen</a><ul class='line32 infoUl hidden'>"+tooltipHtml+"</ul>";
			}
			var communityRead = $(main).find(".communityRead").html();
			$(main).append("<div class='toggleInfo'><div class='community'>"+communityRead+"</div>"+info+"</div");	
			$(main).addClass("singleBookFocus");
		} else {
			$(main).find(".toggleInfo").remove();
			$(main).removeClass("singleBookFocus");
		}
		$(".singleBook").on("click", ".expandInfo", function(e) {
			e.preventDefault();
			$(main).closest(".singleBook").find(".infoUl").toggle();
		});
	})
//	$(".expandInfo").on("click", function(e) {
//		e.preventDefault();
//		console.log($(this).closest(".singleBook"));
//
//	})
	$(document).on("click", ".loadMore", function(e) {
		e.preventDefault();
		template.loadJson($(this).closest(".contentList"), $(this).closest(".contentList").find(".content"));
		$(this).remove();
	})
	$(".hideMe").on("click", function() {
		$(this).hide();
	})
	$(".hideMenu").on("click", function(e) {
		e.preventDefault();
		menu.hideMenu();
	})
	$(document).on('click','.alertError:not(.stay), .alert:not(.stay)',function(e) {
		$(this).fadeOut();
		$(this).remove();
	});
	$(".toggleAlert").on("click", function(e){
		e.preventDefault();
		alertMessage.set($(this).attr("data-message"));
		alertMessage.show();
	})
	$("#suggestions li").on("click", function() {
		$("#vanityForm .vanity").val($(this).html());
	})
	$("#start .blog").on("click", ".toggle", function(e) {
		$(this).parent().find(".preText").toggle();
		hidePart.toggleOperator($(this).find(".toggleButton"));
	})
	$("#start .blog").on("click", ".switchLink", function(e) {
		e.preventDefault();
		$(this).parent().find(".switchLink").addClass("actionButton").removeClass("alertWait");
		$(this).removeClass("actionButton").addClass("alertWait");
		var show = $(".blog ."+$(this).attr("data-show"));
		$(this).parent().parent().find(".section").hide();
		show.fadeIn();
	})
	$(document).on("click", ".favButton", function(e) {
		e.preventDefault();
		fav.set($(this));
	})
	$(document).on("click", "#editAlias #linkLists .listButton", function(e){
		e.preventDefault();
		e.stopImmediatePropagation();
		linkLists.target = $(".linkedLists");
		linkLists.add($(this));
	})
	$(document).on("click", ".listButton", function(e){
		e.preventDefault();
		list.toggle($(this));
	})
	$("#write").on("focusout focus", ".text", function() {
		indiWrite.text($(this));
	})
	$("#write").on("focusout focus", "input[name='title']", function() {
		indiWrite.title();
	})
	$("#write").on("focusout focus", ".coverText", function() {
		indiWrite.coverText();
	})
	$("#write").on("focusout focus", "input[name='cover']", function() {
		indiWrite.cover();
	})
	$("#write").on("focusout focus", "select[name='mainCat']", function() {
		indiWrite.cat();
	})
	$("#write").on("focusout focus", "input[name='tags']", function() {
		indiWrite.tags();
	})
	$("#write").on("focusout focus", "input[name='accAgb']", function() {
		indiWrite.agb();
	})
	$("#write").on("click", ".submit", function(e) {
		if($(".extendMenu > .iBad").length > 0 && $('[name="status"] :selected').val() == 1) {
			e.preventDefault();
			$(".statusAgbWarning").fadeIn();
			$(this).unbind();
		}
		$("#write").off("click", ".submit");
	})
	$("#write").on("click", "#addChapter", function(e){
		e.preventDefault();
		$("#write .text").val($("#write .text").val()+"[chapter] [/chapter]");
	})
	$("#write").on("click", "#addReading", function(e){
		e.preventDefault();
		$("#write .text").val($("#write .text").val()+"[reading] [/reading]");
	})
	$("#write").on("change", ".selectStatus", function() {
		indiWrite.changeStatus();
	})
	$("#write #statusDescription .selectDesc").on("click", "li", function() {
		indiWrite.changeStatus($(this));
	})
	$("#search").on("keydown keyup click", ".searchField", function() {
		if($(this).val().length > 2) {
			liveSearch.method = "books";
			liveSearch.init($(this).val(), true, 3, 0, "liveSearch.show");
		}
	})
	$(".readerButton").click(function(e) {
		e.preventDefault();
		reader.init();
	})
	$(".prepareMore").each(function() {
		window.location.href=($(this).attr("href"));
	})
	$("#write [name='mainCat']").each(function(){
		var subCat = $(this).find("option:selected").attr("value");
		$("#write [name='subCat1'] option:not([value^='"+subCat+"'])").attr("disabled", true);
	})
	$("#write").on("change", "[name='mainCat']", function() {
		var subCat = $(this).find("option:selected").attr("value");
		$("#write [name='subCat1'] option:not([value^='"+subCat+"'])").attr("disabled", true);
		$("#write [name='subCat1'] option[value^='"+subCat+"']").attr("disabled", false);
		$("#write [name='subCat1'] option:[value^='"+subCat+"']:first").attr("selected", true);
	})
	$(".singleActivity").on("click", ".toggleMore", function(e) {
		e.preventDefault();
		var selectedPart = $(this).parent().parent().parent().find(".more");
		if($(selectedPart).is(':visible')) {
			selectedPart.fadeOut();
		}
		if($(selectedPart).is(':hidden')) {
			selectedPart.fadeIn();
		}	
	})
	$(document).on("click", ".shareButton", function(e) {
		e.preventDefault();
		shareWindow = window.open($(this).attr("href"), "share", "width=600,height=400,status=no,scrollbars=yes,resizable=yes");
		shareWindow.focus();
	})
	$(".headFlyMenu .toggleButton").each(function() {
		$(this).css({ opacity: '0' }).stop().animate({ opacity: '1' }, 350, "swing").animate({ opacity: '0' }, 350, "swing").animate({ opacity: '1' }, 350, "swing").animate({ opacity: '0' }, 350, "swing").animate({ opacity: '1' }, 350, "swing");
	})
	$(document).on("click", ".loadSomeStuff", function(e) {
		e.preventDefault();
		
	})
	$(document).on("click", ".contentList .toggle", function(e) {
		var parent = $(this).parent().parent();
		parent.toggleClass("borderTbDashed borderTbDashed2");
		if(parent.hasClass("loaded")) {
			$(parent.find(".listContent")).toggle();
		} else {
			template.loadJson(parent, parent.find(".content"), false);
			$(parent.find(".listContent")).toggle();
			parent.addClass("loaded");
		}
		
	})
	$(document).on("click", ".listContent .content .closeList", function() {
		$(this).closest(".listContent").toggle();
		$(this).closest(".contentList").toggleClass("borderTbDashed borderTbDashed2");
	})
	$(".contentList.autoload").each(function(i,element) {
		template.loadJson($(element),$(element).find(".content"),true);
		$(element).addClass("loaded");
	})
	$("#listForm").on("keydown keyup click", "[name=userLive]", function() {
		if($(this).val().length > 2 && $(this).attr("data-search") != $(this).val()) {
			liveSearch.method = "user";
			liveSearch.init($(this).val(), true, 5, 0, "liveUser.show");
			$(this).attr("data-search", $(this).val());
		}
	})
	$("#listForm").on("click", "[type=submit]", function(e){
		e.preventDefault();
		var form = $(this).closest("form");
		var user = form.find(".liveProfile");
    	var editUserHtml = "";
    	var readUserHtml = "";
		for (var i = 0; i < user.length; i++) {
    		if($(user[i]).find(".rightEdit").hasClass("green")) {
    			editUserHtml += "&edit%5B%5D="+$(user[i]).attr("data-id");
    		}
    		if($(user[i]).find(".rightRead").hasClass("green")) {
    			readUserHtml += "&read%5B%5D="+$(user[i]).attr("data-id");
    		}
    	}
		var link = form.serialize()+editUserHtml+readUserHtml;
		if(form.attr("data-type") == "create") {
			link += "&class=list&method=create";
		} else {
			link += "&class=list&method=edit"
		}
		callApi.type = "POST";
		callApi.call(link, "listOverview.edit", null);
		callApi.type = "GET";
	})
	$(document).on("click",".loadLists", function(e) {
		e.preventDefault();
		list.loadJson($(this).closest(".listContainer"), false);
		$(this).remove();
	})
	$(document).on("click", ".contentList .editList, .createList", function(e) {
		e.preventDefault();
		if($(this).hasClass("createList")) {
			fillForm.clear($("#listForm"));
			$("#listForm").find("h2").text("Liste erstellen");
			$("#listForm").find("input[type='submit']").val("Liste erstellen");
			$("#listForm").attr("data-type", "create");
		} else {
			$("#listForm").attr("data-type", "update"); 
			$("#listForm").find("h2").text("Liste bearbeiten");	
			$("#listForm").find("input[type='submit']").val("Liste bearbeiten");
			var listId = $(this).closest(".contentList").attr("id");
			listId = listId.substr(10);
			$("#listForm").find("input[name='id']").val(listId);
			callApi.call("class=list&method=get&type=id&userData=1&vars[id]="+listId, "fillForm.list", listId);
		}
	})
	$(".listContainer .settings .autoLoad:contains(1)").each(function() {
		list.loadJson($(this).closest(".listContainer"));
	})
	$(document).on("click", ".confirm:not(.confirmed)", function(e) {
		e.preventDefault();
		$(this).text($(this).attr("data-confirm")).addClass("confirmed");
	})
	$(document).on("click", "#listForm .deleteList.confirmed", function(e) {
		e.preventDefault();
		callApi.call("class=list&method=delete&id="+$("#listForm input[name='id']").val(), "return", null);
		switchContent.call("lists");
		list.reset($("#parentlist"+$("#listForm input[name='id']").val()).closest(".listContainer"), true);
	})
	$("#read #list .toggle").on("click", function(e) {
		e.preventDefault();
		var target = $(this).parent().find(".hide");
		var id = $("#read").attr("data-id");
		
		if($("#list").hasClass("loaded") == false) {
			list.loadJsonSmall(target, "std", id,0,15,"count", "readStd");
			$("#list").addClass("loaded");	
		}
		
	})
	$(document).on("click", "#read #list .loadListsCommunity", function(e) {
		e.preventDefault();
		var target = $(this).parent();
		var id = $("#read").attr("data-id");		
		list.loadJsonSmall(target, "notStd", id,$(this).parent().attr("data-skip"),15,"count", "read");
	})
	$(document).on("click", "#editAlias #linkLists:not(.loaded) .toggle, #editAlias #linkLists .loadListsCommunity", function(e) {
		e.preventDefault();
		var target = $(this).closest("#linkLists").find(".hide");
		list.loadJsonSmall(target, "link", "",target.attr("data-skip"),15,"title", "read");
		$(this).closest("#linkLists").addClass("loaded");
	})
	$(document).on("click", ".linkedLists .singleList", function(e) {
		e.preventDefault();
		linkLists.remove($(this));
	})
	$(document).on("click", ".singleBook .community .loadListsCommunity", function(e) {
		e.preventDefault();
		var community = $(this).closest(".singleBook").find(".communityRead");
		var id = $(this).closest(".singleBook").attr("data-id");
		if(community.attr("data-std") != 1) {
			list.loadJsonSmall(community, "std", id,0,15,"count", "list");
			community.attr("data-std", 1);
		} else {
			list.loadJsonSmall(community, "notStd", id,community.attr("data-skip"),15,"count", "list");
		}
	})

//	$(d"#searchExtend").on("keydown keyup click", "[name=search]", function() {
//		if($(this).val().length > 2) {
//			liveSearch.extendSearch();
//		}
//	})
//	$("#searchExtend").on("click", ".more, .less", function(e) {
//		e.preventDefault();
//		var skip = $(".settings .skip").html();
//		var limit = $(".settings .limit").html();
//		var search = encodeURI($(".settings .search").html());
//		callApi.call("class=search&method=books&skip="+skip+"&limit="+limit+"&search="+search, "return", null);
//	})
//	$("#searchExtendForm").on("change", "select", function() {
//		liveSearch.extendSearch();
//	})
})

