var string = {
	split: function(string,split) {
		return(string.split(split));	
	}
}
var showTop = {
	target: "#showTop",
	set: function(content) {
		$(showTop.target).find(".contentData").html(content);
	},
	show: function() {
		showTop.setPos();
		fader.set();
		$(showTop.target).fadeIn();
	},
	hide: function() {
		fader.hide();
		$(showTop.target).fadeOut();
	},
	setPos: function() {
		$(showTop.target).css({'top' : ($(window).height() / 2), 'left' : ($(window).width() / 2 - ($(showTop.target).outerWidth() / 2))});
	}
}
var fader = {
	set: function() {
		$("body").prepend("<div id='fader'></div>");
	},
	hide: function() {
		$("#fader").remove();
	}
}
var callApi = {
	vars: false,
	//get, vars, callback		
	call: function(method,vars,callback,addCallback) {
		if(vars == null) vars = "";
		$.get("/api/api.php?method="+method+vars,
		function(data){
			return(callApi.callback(callback,data,addCallback));
		});
	},
	callback: function(callback,data,addCallback) {
		if(callback.indexOf(".") == -1) {
			if(callback == "alert") alert(data);
			if(callback == "showTop") {
				showTop.set(data);
				showTop.show();
			}
		} 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);
	}
}
var api = {
		pics: function(data) {
			if(data.length < 2) return false;
			preparedData = "";
			object = jQuery.parseJSON(data);
			$.each(object, function(key, value) { 
				preparedData = preparedData+" <a class='choosePic' href='"+value['url']+"'><img alt='"+value['url']+"' src='/pics/user/"+value['thumb']+"'></a>";
			});
			showTop.set(preparedData);
			showTop.show();
		}, 
		comments: function(data) {
			if(data.length < 2) return false;
			preparedData = "";
			object = jQuery.parseJSON(data);

			$.each(object, function(key, value) { 
				if(value.user.id == null) {
					value.user.id		= 0;
					value.user.synonym	= "User gelöscht";
				}
				var date	= value['date'].split(" ");
				var date2	= string.split(date[0], "-");
				var	date	= date2[2]+"."+date2[1]+"."+date2[0]+" "+date[1];		
				if(value.user.avatar == "http://static.amobo.org/pics/user/") {
					var avatar = "http://static.amobo.org/pics/user/k_pmini_std.jpg";
				} else {
					var avatar = value.user.avatar;
				}
				if(value['text'] == undefined) {
					preparedData = preparedData+"<div class='singleRating'><a class='user user_u"+value.user.id+"' href='/profile/"+value.user.id+"'>"+value.user.synonym+"</a> hat dieses Buch mit "+value['stars']+" Stern(en) bewertet.</div>";	
				} else {
					preparedData = preparedData+"<div class='singleComment'>"
					+"<div class='right'>"
					+"<img alt='"+value.user.synonym+"' src='"+avatar+"'>"
					+"</div>"
					+"<div class='left'>"
					+"<div><a class='user user_u"+value.user.id+"' href='/profile/"+value.user.id+"'>"+value.user.synonym+"</a> <span class='date'>"+date+" Uhr</span></div>"
					+"<div>"+value['text']+"</div>"
					+"</div>"
					+"<div class='clear'></div>"
					+"</div>";	
				}
			});
			$("#comments .content").show();
			$("#comments .insert").before(preparedData);	
		},
		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 = null;
					}
					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()));
		}
}
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();
			$(".text").addClass("readerText");
			$(".text").removeClass("text");
			this.setHeight(".readerText");
			this.setPos(".readerText");
		},
		hide: function() {
			fader.hide();
			$(".readerText").removeAttr("style");
			$(".readerText").addClass("text");
			$(".text").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() {
			$(".text").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");
			})			
			$("#readerMenuEvent").live("mouseover mouseout", 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 liveSearch = {
		intTime: "750",
		intObj: "",
		search: function(search) {
			callApi.call("searchBooks","&search="+encodeURI(search)+"&limit=3","api.liveSearch","{\"target\":\"#searchBookResults\",\"type\":\"book\"}");	
		},
		resetTimeout: function(searchObj) {
			clearTimeout(this.intObj);
			this.intObj = window.setTimeout("window['liveSearch']['search']('"+searchObj.val()+"')", 500);
		},
		init: function(searchObj) {
			this.resetTimeout(searchObj);
			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() {
			$("#liveSearch").remove();	
		},
		pos: function() {
			
		}
}
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 indiWrite = {
		form: "#write",
		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");
		},
		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");
		},
		coverText: function() {
			var length = $(this.form).find(".coverText").val().length;
			if(length == 0) indi.change(0,"#indiCovertext");
			if(length >= 150) indi.change(1,"#indiCovertext");
		},
		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");	
		},
		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");	
		}, 
		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");	
		},
		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");	
		},
		checkAll: function() {
			this.text();
			this.title();
			this.coverText();
			this.cover();
			this.cat();
			this.tags();
			this.agb();
		}
}
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();
			
		}
}
