Date.getTime = function() {
	var Now = new Date();
	return Now.getTime();
}
String.prototype.addCachePrevention = function(ParameterName) {
	if (!ParameterName) ParameterName = "cp";
	var Prefix = (this.indexOf("?") == -1) ? "?" : "&";
	return this + Prefix + ParameterName + "=" + Date.getTime();
}
String.prototype.remove = function(Value) {
	return this.replace(Value, "");
}
String.prototype.replaceAll = function(Value, NewValue) {
	var Result = this;
	if (Value.indexOf(NewValue) != -1) return Result;
	while (Result.indexOf(Value) != -1) {
		Result = Result.replace(Value, NewValue);
	}
	return Result;
}
String.prototype.twoDigits = function() {
	return (this.length < 2) ? "0" + this : this;
}
String.prototype.isoAsGermanDate = function() {
	var DateParts = this.split("-");
	if (DateParts.length < 3) return this;
	return DateParts[2] + "." + DateParts[1] + "." + DateParts[0];
}
String.format = function() {
	if (!arguments) return "";
	if (arguments.length == 1) return arguments[0];
	var Result = arguments[0];
	for (var i = 1; i < arguments.length; i++) {
		Result = Result.replace("{" + String(i - 1) + "}", arguments[i])
	}
	return Result;
}
var HJP = {
	"galInit": function() {
		HJP.Templates = {
			"Message": document.getElementById("HJPtemplateMessage").innerHTML,
			"GalleryBoy": document.getElementById("HJPtemplateBoy").innerHTML,
			"GalleryGirl": document.getElementById("HJPtemplateGirl").innerHTML
		}
		HJP.galMonthLinks(true);
		HJP.galDateSelect();
	},
	"galDateSelect": function(Caption) {
		var Result = Caption ? Caption : "";
		var Now = new Date();
		var CurrentYear = Now.getFullYear();
		Result += "<nobr><select id='HJPaskKidDay'><option value=''></option>";
		for (var i = 0; i < 31; i++) {
			Result += String.format("<option value='{0}'>{1}</option>", String(i + 1).twoDigits(), String(i + 1).twoDigits());
		}
		Result += "</select>.";
		Result += "<select id='HJPaskKidMonth'><option value=''></option>";
		for (var i = 0; i < 12; i++) {
			Result += String.format("<option value='{0}'>{1}</option>", String(i + 1).twoDigits(), String(i + 1).twoDigits());
		}
		Result += "</select>.";
		Result += "<select id='HJPaskKidYear'><option value=''></option>";
		for (var i = 0; i < 5; i++) {
			Result += String.format("<option value='{0}'>{1}</option>", CurrentYear - i, CurrentYear - i);
		}
		Result += "</select></nobr>";
		document.getElementById("HJPaskForm").innerHTML = document.getElementById("HJPaskForm").innerHTML.replace("<!--[HJPaskDate]-->", Result);
	},
	"galMonthLinks": function(ExecuteFirst) {
		var Result = "";
		var MonthNames = ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"];
		var Now = new Date();
		var CurrentYear = Now.getFullYear();
		var CurrentMonth = Now.getMonth();
		for (var i = 0; i < 12; i++) {
			if (CurrentMonth - i < 0) {
				CurrentMonth += 12;
				CurrentYear--;
			}
			Result += String.format("<a href='#' class='pinkLink' onclick='HJP.askExecute(0, {0}, {1}, 0, 0, 100); this.blur();'>{2} {3}</a><br>", CurrentYear, CurrentMonth - i + 1, MonthNames[CurrentMonth - i], CurrentYear);
			if (ExecuteFirst) {
				HJP.askExecute(0, CurrentYear, CurrentMonth - i + 1, 0, 0, 100);
				ExecuteFirst = false;
			}
		}
		document.getElementById("HJPgalMonthLinks").innerHTML = Result;
	},
	"askBuild": function() {
		var Name = document.getElementById("HJPaskKidName").value;
		if (Name && (Name.length < 3)) {
			HJP.displayContent(HJP.createMessage("Hinweis", "Bitte geben Sie für die Namenssuche mindestens 3 Buchstaben des Vor- oder Nachnamens ein!"));
			return false;
		}
		var Year = document.getElementById("HJPaskKidYear");
		Year = Year.options[Year.selectedIndex].value;
		var Month = document.getElementById("HJPaskKidMonth");
		Month = Month.options[Month.selectedIndex].value;
		var Day = document.getElementById("HJPaskKidDay");
		Day = Day.options[Day.selectedIndex].value;
		return HJP.askExecute(Name, Year, Month, Day, 0, 100);
	},
	"askExecute": function(Name, Year, Month, Day, Page, PageSize) {
		var askURL = String("ask.php").addCachePrevention();
		if (Name) askURL += "&name=" + Name.toLowerCase();
		if (Year) askURL += "&year=" + Year;
		if (Month) askURL += "&month=" + String(Month).twoDigits();
		if (Day) askURL += "&day=" + String(Day).twoDigits();
		if (Page) askURL += "&page=" + Page;
		if (PageSize) askURL += "&pagesize=" + PageSize;
		document.getElementById("HJPaskLoad").src = askURL;
		return false;
	},
	"askCallback": function(askResult, askPage, askMaxPage) {
		var Kids = new Array();
		for (var r in askResult) {
			var Kid = {};
			Kid.Image = askResult[r].Data;
			var KidData = askResult[r].Data.remove(".jpg").split("~");
			Kid.Name = KidData[0];
			Kid.Gender = KidData[1].remove("g@");
			Kid.Date = KidData[2].remove("y@").remove("m@").remove("d@");
			Kid.Weight = KidData[3].remove("w@");
			Kid.Size = KidData[4].remove("s@");
			Kid.Text = HJP.getFieldFromMetaData(askResult[r].Meta, 0);
			Kids.push(Kid);
		}
		HJP.paintGallery(Kids);
	},
	"getFieldFromMetaData": function(MetaData, Field) {
		if (MetaData.indexOf("[FIELD]") == -1) return MetaData;
		var Fields = MetaData.split("[FIELD]");
		if (Field > Fields.length - 1) return "";
		return Fields[Field];
	},
	"displayContent": function(Content) {
		var Container = document.getElementById("HJPgalOut");
		Container.innerHTML = Content;
	},
	"createMessage": function(Title, Content) {
		return HJP.Templates.Message.replace("{TITLE}", Title).replace("{CONTENT}", Content);
	},
	"createKidBox": function(Kid) {
		var KidBox = (Kid.Gender == "m") ? HJP.Templates.GalleryBoy : HJP.Templates.GalleryGirl;
		KidBox = KidBox.replaceAll("[IMAGE]", Kid.Image).replaceAll("[NAME]", Kid.Name).replace("[TEXT]", Kid.Text);
		return KidBox.replace("[DATE]", Kid.Date.isoAsGermanDate()).replace("[WEIGHT]", Kid.Weight).replace("[SIZE]", Kid.Size);
	},
	"sortByDate": function(a, b) {
		if (a.Date == b.Date) return 0;
		if (a.Date > b.Date) return 1;
		return -1;
	},
	"paintGallery": function(Kids) {
		var GalleryResult = "";
		for (var k in Kids.sort(HJP.sortByDate)) {
			GalleryResult += HJP.createKidBox(Kids[k]);
		}
		if (GalleryResult == "") GalleryResult = HJP.createMessage("Hinweis", "Es wurde kein passender Eintrag gefunden.<br>Bitte ändern Sie die Suchkriterien oder wählen einen anderen Monat aus!");
		HJP.displayContent(GalleryResult);
		SlimboxEngage();
	},
	"loadExternalContent": function(ID) {
		document.getElementById("HJPaskLoad").src = ID + ".html";
	}
};

