var Jpy = new Object();
Jpy.init = function (width) {
if (Jpy.getApp() < 0) {
if (!width) width = 400;
var img;
if (document.getElementById('pr')) {
img = document.getElementById('pr').getElementsByTagName('img');
}
else {
img = document.getElementsByTagName('img');
}
var len = img.length;
for (var i = 0; i < len; i++) {
var imgWidth = img[i].width || img[i].style.width;
if (imgWidth > width && img[i].className == "ext") {
img[i].width = width;
img[i].height = img[i].width * (img[i].height / img[i].width);
}
}
}
return;
}
Jpy.popupProfile = function(username) {
var link = '/popup/'+username;
var popup = window.open(link, username, "width=685,height=500,scrollbars=yes,resizable=yes");
popup.focus();
return false;
}
Jpy.nativeConfirm = function (text) {
if (typeof(window.opera) != 'undefined') {
return true;
}
var toggle = confirm(text);
if (toggle) {
return true;
}
return false;
}
Jpy.openGlobalChat = function (url, windowName) {
var popup = window.open(url, windowName, "width=700,height=650,scrollbars=yes,resizable=yes");
popup.focus();
}
Jpy.disableSubmit = function (trigger, text) {
var buttons = trigger.getElementsByTagName("button");
for (var i = 0, len = buttons.length; i < len; i++) {
buttons[i].setAttribute('disabled', true);
buttons[i].innerHTML = text;
}
}
Jpy.searchSuggest = {
start: function (trigger) {
if (trigger.value == "Hier suchen ..." || (/Hier suchen/).test(trigger.value) == true) trigger.value = "";
this.trigger = trigger;
if (Jpy.getApp() > -1) {
var inputs = trigger.parentNode.getElementsByTagName("input");
inputs[0].className = "enter hover";
inputs[1].className = "find hover";
trigger.onblur = function () {
inputs[0].className = "enter";
inputs[1].className = "find";
Jpy.searchSuggest.leave();
}
}
else {
trigger.style.color = "000000";
trigger.onblur = function () {
Jpy.searchSuggest.leave();
}
}
Jpy.show("lySearchSuggest");
trigger.onkeydown = function (event) {
return Jpy.searchSuggest.blockSubmit(event)
}
trigger.onkeyup = function (event) {
Jpy.searchSuggest.watchKeyCodes(event);
}
},
leave: function () {
window.setTimeout(function(){Jpy.hide("lySearchSuggest")},200)
},
lock: {
buddies: false,
timestamp: null,
difference: 750
},
lastSearch: "",
resultsBuddies: [],
resultsBackendSearch: [],
results: [],
len: 0,
prepare: function () {
this.len = this.trigger.value.length;
if (this.dom == undefined) {
this.injectFrame();
}
if (this.len == 0) {
if (this.dom.frame) {
this.dom.frame.style.display = "none";
this.dom.backendResults.innerHTML = "";
}
return;
}
else if (!Jpy.buddies.list) {
this.loadBuddies();
}
else if (this.len < 3) {
this.searchBuddies();
this.dom.backendResults.innerHTML = "";
}
else if (this.len > 2) {
this.searchNickname();
this.searchBuddies();
}
else {
return;
}
},
searchBuddies: function () {
this.resultsBuddies = [];
var buddies = Jpy.searchSuggest.sortedBuddies
if (this.len > 0 && this.len < 3) {
var keyword = new RegExp("^"+this.trigger.value, "i");
for (var i = 0, len = buddies.length; i < len; i++) {
if (keyword.test(buddies[i].stamp.nickname) == true) {
this.resultsBuddies.push(buddies[i]);
}
}
}
else if (this.len > 2) {
var keyword = new RegExp(this.trigger.value, "gi");
for (var i = 0, len = buddies.length; i < len; i++) {
var buddy = buddies[i];
if (keyword.test(buddy.stamp.nickname) == true) {
this.resultsBuddies.push(buddy);
}
else if (buddy.realName) {
if (keyword.test(buddy.realName.firstname) == true || keyword.test(buddy.realName.surname) == true) {
this.resultsBuddies.push(buddy);
}
}
}
}
else {
this.resultsBuddies = [];
}
this.injectBuddiesResults();
},
loadBuddies: function () {
if (Jpy.searchSuggest.lock.buddies == true) {
return;
}
Jpy.searchSuggest.lock.buddies = true;
var getBuddies = new AjaxHandler();
var callback = {
success: function(data) {
Jpy.buddies.list = eval("("+ data+ ")");
Jpy.searchSuggest.sortedBuddies = Jpy.buddies.sortBuddysByNickname();
Jpy.searchSuggest.prepare();
}
};
var parameters = {
j : 1
};
getBuddies.request('POST', "/backend/getFriends.php?h="+User.hash, callback, parameters);
},
stopQueue: function () {
if (typeof Jpy.searchSuggest.searchRequest == "number") {
window.clearTimeout(Jpy.searchSuggest.searchRequest);
delete Jpy.searchSuggest.searchRequest;
}
},
searchNickname: function () {
var searchString = this.trigger.value;
if (this.cache[searchString]) {
var cacheResults = this.cache[searchString]
this.resultsBackendSearch = [];
for (var i = 0, len = cacheResults.length; i < len; i++) {
this.resultsBackendSearch.push(cacheResults[i]);
}
this.injectSearchResults()
return;
}
var now = new Date();
if (!this.lock.timestamp) {
this.lock.timestamp = now;
this.lastSearch = this.trigger.value;
}
else if ((this.lock.timestamp.getTime() + this.lock.difference) > now.getTime()) {
this.stopQueue();
this.searchRequest = window.setTimeout(function(){Jpy.searchSuggest.prepare()}, 300)
return;
}
else if (this.lastSearch == this.trigger.value) {
return;
}
else {
this.stopQueue();
this.lock.timestamp = now;
this.lastSearch = this.trigger.value;
}
var search = new AjaxHandler();
var callback = {
json: true,
success: function(results) {
if (results == -4) {
return;
}
Jpy.searchSuggest.resultsBackendSearch = [];
if (typeof(results) === "object") {
for (var i = 0, len = results.length; i < len; i++) {
Jpy.searchSuggest.resultsBackendSearch.push(results[i]);
}
if (/^[a-zA-Z]{3,10}/.test(searchString) == true) {
Jpy.searchSuggest.cache[searchString] = results;
}
}
Jpy.searchSuggest.injectSearchResults();
}
};
var parameters = {
search : this.trigger.value
};
search.request('POST', "/backend/search/search.php?h="+User.hash, callback, parameters);
},
cache: {},
resultLayout: function (result) {
this.box = DOM.div({className:"entry cf"});
var picture = DOM.div({className:"picture"});
if (result.friendId) {
picture.className = "picture buddy";
}
var userImage = Jpy.getUserImage(result.stamp.profileImage, 45);
userImage.height = 45;
picture.appendChild(userImage);
this.box.appendChild(picture);
var plain = DOM.div({className:"plain"});
var buddyStamp = Userstamp.read(result.stamp);
plain.innerHTML = buddyStamp;
if (result.realName) {
if (result.realName.firstname || result.realName.surname) {
if (!result.realName.surname) result.realName.surname = "";
plain.innerHTML += "<br><span class='rn'>"+result.realName.firstname+" "+result.realName.surname+"</span>";
}
else {
plain.innerHTML += "<br><span class='rn'>"+result.realName+"</span>";
}
}
this.box.appendChild(plain);
this.box.onmouseover = (function (box) {
return function () {
Jpy.css.hoverClass(box, 'hover');
}
})(this.box);
this.box.onclick = (function (nickname) {
return function () {
if (User.profilePopup == "y") {
Jpy.popupProfile(nickname);
}
else {
location.href = "/user/"+nickname;
}
Jpy.searchSuggest.leave();
}
})(result.stamp.nickname);
},
injectFrame: function () {
this.dom = new this.resultFrame();
},
resultFrame: function () {
this.frame = Jpy.layer.add("lySearchSuggest", Jpy.searchSuggest.trigger, {x:0,y:22});
this.frame.className = "searchSuggest";
this.buddiesResults = DOM.div();
this.frame.appendChild(this.buddiesResults);
this.backendResults = DOM.div();
this.frame.appendChild(this.backendResults);
this.frame.style.display = "none";
},
dom: undefined,
injectBuddiesResults: function () {
this.dom.buddiesResults.innerHTML = "";
var results = Jpy.searchSuggest.resultsBuddies;
this.layout.buddies = [];
var fragment = document.createDocumentFragment();
for (var i = 0, len = results.length; i < len; i++) {
var layout = new this.resultLayout(results[i]);
fragment.appendChild(layout.box);
this.layout.buddies.push({
link: results[i].stamp.nickname,
dom: layout.box
})
}
this.dom.buddiesResults.appendChild(fragment);
if (this.dom.frame.style.display == "none") this.dom.frame.style.display = "block";
this.navigate.active = undefined;
},
injectSearchResults: function () {
this.dom.backendResults.innerHTML = "";
var results = Jpy.searchSuggest.resultsBackendSearch;
this.layout.backend = [];
var fragment = document.createDocumentFragment();
var len = results.length-Jpy.searchSuggest.resultsBuddies.length;
for (var i = 0; i < len; i++) {
var layout = new this.resultLayout(results[i]);
fragment.appendChild(layout.box);
this.layout.backend.push({
link: results[i].stamp.nickname,
dom: layout.box
})
}
if (results.length == 12) {
var info = DOM.div({className:"more cp"});
info.innerHTML = "Mehr Ergebnisse zu <b>"+this.trigger.value+"</b>"
info.onclick = function () {
Jpy.searchSuggest.trigger.form.submit();
}
fragment.appendChild(info);
}
this.dom.backendResults.appendChild(fragment);
if (this.dom.frame.style.display == "none") this.dom.frame.style.display = "block";
},
layout: {
buddies: [],
backend: []
},
blockSubmit: function (e) {
var key = Jpy.getKeycode(e).keyCode;
if (key == 13 || key == 38 || key == 40 || key == 27 || key == 9) {
return false;
}
},
watchKeyCodes: function (e) {
var key = Jpy.getKeycode(e).keyCode;
if (key == 40 || key == 9) {
this.navigate.down();
}
else if (key == 38) {
this.navigate.up();
}
else if (key == 27) {
this.leave();
}
else if (key == 13) {
if (this.navigate.active != undefined) {
this.open();
}
else {
this.trigger.form.submit();
}
}
else {
Jpy.searchSuggest.prepare();
}
},
open: function () {
var nickname = this.layout[this.navigate.active.type][this.navigate.active.id].link;
if (User.profilePopup == "y") {
Jpy.popupProfile(nickname);
}
else {
location.href = "/user/"+this.layout[this.navigate.active.type][this.navigate.active.id].link;
}
this.leave();
},
navigate: {
start: "buddies",
active: undefined,
up: function () {
if (this.active == undefined) {
return;
}
else {
if (this.active.type == "buddies" && this.active.id == 0) {
Jpy.searchSuggest.hoverResult(-1);
}
else if (this.active.type == "backend" && this.active.id == 0 && Jpy.searchSuggest.layout.buddies.length != 0) {
Jpy.searchSuggest.hoverResult(Jpy.searchSuggest.layout.buddies.length-1, "buddies");
}
else {
Jpy.searchSuggest.hoverResult(parseInt(this.active.id)-1, this.active.type);
}
}
},
down: function () {
if (Jpy.searchSuggest.layout.buddies.length == 0) {
this.start = "backend";
}
if (this.active == undefined) {
Jpy.searchSuggest.hoverResult(0, Jpy.searchSuggest.navigate.start);
}
else if (Jpy.searchSuggest.layout[this.active.type].length-1 > this.active.id) {
Jpy.searchSuggest.hoverResult(parseInt(this.active.id)+1, this.active.type);
}
else if (this.active.type == "buddies" && Jpy.searchSuggest.layout.backend.length != 0) {
Jpy.searchSuggest.hoverResult(0, "backend");
}
else {
return;
}
}
},
hoverResult: function (id, type) {
if (this.navigate.active != undefined) {
this.layout[this.navigate.active.type][this.navigate.active.id].dom.className = "entry cf";
}
if (id >= 0) {
this.layout[type][id].dom.className = "entry active cf";
this.navigate.active = {
id: id,
type: type
}
}
else {
this.navigate.active = undefined;
}
}
}
Jpy.id = function(id) {
var identification = document.getElementById(id);
return identification;
}
Jpy.pageNavigation = {
init : function(parentNodeId, contentNodeId, numberOfEntries, entriesPerPage, backendUrl, currentPage, update) {
var numberOfPages = Math.ceil(numberOfEntries/entriesPerPage);
if(numberOfPages > 20) {
var divider = Math.floor(numberOfPages/10);
}
currentPage = parseInt(currentPage);
Jpy.remove("pageNavigation");
var pageCurrent = 1;
if(currentPage) {
pageCurrent = currentPage;
}
if(!update) {
var Ajax = new AjaxHandler();
var callback = {
success: function(content) {
document.getElementById(contentNodeId).innerHTML = content;
}
};
var post = {
numberOfEntries: numberOfEntries,
entriesPerPage: entriesPerPage,
page: pageCurrent
};
Ajax.request("POST", backendUrl, callback, post);
}
var navigation = DOM.div({id:"pageNavigation",className:"nvG2 cf"});
if(Jpy.getApp() < 0) {
navigation.style.width = "625px";
}
else {
navigation.style.width = "605px";
}
if(pageCurrent > 1) {
var back = DOM.link({className:"fuBu cp"})
back.onclick = function () {
Jpy.pageNavigation.init(parentNodeId, contentNodeId, numberOfEntries, entriesPerPage, backendUrl, (pageCurrent-1) , false);
}
back.innerHTML = "Zurück";
var firstPage = document.createElement("a");
firstPage.onclick = function () {
Jpy.pageNavigation.init(parentNodeId, contentNodeId, numberOfEntries, entriesPerPage, backendUrl, 1 , false);
}
firstPage.innerHTML = "Erste Seite";
}
if(pageCurrent < numberOfPages) {
var forward = DOM.link({className:"fuBu cp"})
forward.onclick = function () {
Jpy.pageNavigation.init(parentNodeId, contentNodeId, numberOfEntries, entriesPerPage, backendUrl, (pageCurrent+1) , false);
}
forward.innerHTML = "Weiter";
}
var entriesAll = document.createElement("div");
Jpy.css.addClass(entriesAll, "entries");
entriesAll.innerHTML = "<b>" + numberOfEntries + "</b> Einträge gefunden.";
var selectPage = DOM.div({className:"selectpage"})
navigation.appendChild(selectPage)
var pages = document.createElement("span");
var pageSelector = document.createElement("select");
pageSelector.className = "vaMid";
pageSelector.onchange = function () {
Jpy.pageNavigation.init(parentNodeId, contentNodeId, numberOfEntries, entriesPerPage, backendUrl, this.value , false);
}
pageSelector.setAttribute("id", "pageNavigationSelect");
for(var i = 1; i <= numberOfPages; i++) {
var option = document.createElement("option");
if(pageCurrent == i) {
option.setAttribute("selected", "selected");
}
if(!(divider) || (i == 1) || (i == numberOfPages) || (pageCurrent < (i+3) && pageCurrent > (i-3)) || !(i%divider)) {
option.value = i;
option.appendChild(document.createTextNode("Seite "+i));
pageSelector.appendChild(option);
}
}
pages.appendChild(pageSelector);
navigation.appendChild(entriesAll);
if(pageCurrent > 1) {
selectPage.appendChild(back);
}
selectPage.appendChild(pages);
if(pageCurrent < numberOfPages) {
selectPage.appendChild(forward);
}
if(pageCurrent > 1) {
selectPage.appendChild(firstPage);
}
document.getElementById(parentNodeId).appendChild(navigation);
}
};
Jpy.navigationMore = {
show: function () {
var slideMore = Jpy.id('hi');
slideMore.style.display = "block";
Jpy.id('mnMore').className = "moreActive end cp";
Jpy.id('mnMore').getElementsByTagName('span')[0].className = "icUp";
slideMore.appendChild(document.createElement("div"));
slideMore.childNodes[0].className = "overview";
var content = ""
+ "<ul class='first'>"
+ "<li onmouseover='Jpy.navigationMore.extra(this, \"rank\")' class='extra'><a href='/myjappy/rank'><img src='"+Jpy.picurl+"/i/r/"+User.rank+".gif'>&nbsp;</span>Rang & Co</a></li>"
+ "<li onmouseover='Jpy.navigationMore.extra(this, \"shop\")' class='extra'><a href='/shop'><span class='icCredit'>&nbsp;</span>Shop <i>("+User.credits+" Credits)</i></a></li>"
+ "</ul><h1>Bereiche:</h1><ul id='hiSecound'>"
+ "<li><a href='/myjappy/observer'><span class='icAbos'>&nbsp;</span>Abos</a></li>"
+ "<li><a href='#' target='chat' onclick='Twaddler.enterMultiUserChat("+User.id+");return false;' class='cp'><span class='icChat'>&nbsp;</span>Chat<span class='icNew'>&nbsp;</span></a></li>"
;
if (!User.components) {
User.components = ["1","1","1","1"]
}
if(User.components[1] == 1) {
content += "<li><a href='/com'><span class='icComs'>&nbsp;</span>Coms <i>(Gruppen)</i></a></li>";
}
if(User.components[3] == 1) {
content += "<li><a href='/event'><span class='icEvents'>&nbsp;</span>Events <i>(Partys, Treffen )</i></a></li>";
}
if(User.components[0] == 1) {
content += "<li><a href='/flog'><span class='icFlog'>&nbsp;</span>Flogs <i>(Infos an Freunde)</i></a></li>";
}
content += "<li><a href='/forum'><span class='icForumTopic'>&nbsp;</span>Forum</a></li>";
if(User.components[2] == 1) {
content += "<li><a href='/almanac'><span class='icAlmanac'>&nbsp;</span>Termine</a></li>"
}
content += "<li><a href='/infos/games'><span class='icSt31'>&nbsp;</span>Spiele</a></li>"
content += "<div id='hiExtraFrame' class='invisble'></div>"
+ "</ul>";
slideMore.childNodes[0].innerHTML = content;
},
hide: function () {
Jpy.remove('lyNavigationExtra');
var slideMore = Jpy.id('hi');
slideMore.style.display = "none";
Jpy.id('mnMore').className = "passive end cp";
Jpy.id('mnMore').childNodes[1].className = "icDown";
},
toggle: function () {
if (Jpy.id('hi').style.display == "block") {
this.hide();
}
else {
this.show();
}
},
extra: function (trigger, variation) {
Jpy.remove('lyNavigationExtra');
var frame = Jpy.layer.add("lyNavigationExtra", trigger, {x:250,y:0});
var shop = "";
shop += "<ul id='lyNavigationExtraFrame' class='nvExtra'>"
+ "<li><a href='/shop/features'><span class='icFunction'>&nbsp;</span>Funktionelle Erweiterungen</a></li>"
+ "<li><a href='/shop/gifts'><span class='icGift'>&nbsp;</span>Virtuelle Geschenke</a></li>"
+ "<li><a href='/shop/emotionsAdditional'><span class='icEmotion'>&nbsp;</span>Emotions</a></li>"
+ "<li><a href='/myjappy/transactions'><span class='icCredit'>&nbsp;</span>Transaktionen</a></li>"
+ "</ul>";
var rank = "";
rank += "<ul id='lyNavigationExtraFrame' class='nvExtra'>"
+ "<li><a href='/myjappy/rank'><span class='icRank'>&nbsp;</span>Mein Rang</a></li>"
+ "<li><a href='/myjappy/experience'><span class='icXp'>&nbsp;</span>Erfahrung</a></li>"
+ "</ul>";
switch (variation) {
case "shop":
frame.innerHTML = shop;
break;
case "rank":
frame.innerHTML = rank;
break;
}
var listPoints = Jpy.id('hiSecound').getElementsByTagName('li');
for ( var i = 0; i < listPoints.length; i++) {
listPoints[i].onmouseover = function () {
Jpy.remove('lyNavigationExtra');
};
}
}
}
Jpy.toggleStatus = function () {
var selection = Jpy.id('mcStatusSelect');
var trigger = Jpy.id('mcStatus');
if (selection.style.display == "none") {
selection.style.display = "block";
trigger.className = "fwB";
}
else {
selection.style.display = "none";
trigger.className = "";
}
}
Jpy.initEvents = function () {
document.getElementById('mnMore').onclick = function () {
Jpy.navigationMore.toggle();
return false
};
document.getElementById('mnMore').ondblclick = function () {
Jpy.navigationMore.toggle();
return false
};
document.getElementById('brStatus').onclick = function () {
OnlineStatus.toggleSelection();
Jpy.navigationMore.hide();
return false
};
document.getElementById('udStatus').onclick = function () {
OnlineStatus.toggleSelection();
Jpy.navigationMore.hide();
return false
};
if (top != self) {
top.location = self.location;
}
}
Jpy.getMouseOffset = function (target, e){
e = e || window.event;
var offsetPosition = Jpy.getOffsetPosition(target);
var mousePosition = Jpy.getMousePosition(e);
return {
x:mousePosition.x - offsetPosition.x,
y:mousePosition.y - offsetPosition.y
};
}
Jpy.getMousePosition = function (e){
if ( e.pageX || e.pageY ) {
return {
x:e.pageX,
y:e.pageY
};
}
return {
x:e.clientX + document.body.scrollLeft,
y:e.clientY + document.body.scrollTop
};
}
Jpy.getStyle = function (element, name) {
if (element.style[name]) {
return element.style[name];
}
else if (element.currentStyle) {
return element.currentStyle[name];
}
else if (document.defaultView && document.defaultView.getComputedStyle) {
name = name.replace(/([A-Z])/g, "-$1");
name = name.toLowerCase();
var style = document.defaultView.getComputedStyle(element, "");
return style && style.getPropertyValue(name);
}
else {
return null;
}
}
Jpy.getOffsetPosition = function (element){
var positionLeft = 0;
var positionTop = 0;
while (element.offsetParent){
positionLeft += element.offsetLeft;
positionTop += element.offsetTop;
element = element.offsetParent;
}
positionLeft += element.offsetLeft;
positionTop += element.offsetTop;
return {
x:positionLeft,
y:positionTop
};
}
Jpy.getScrolling = function() {
var scrollingX = 0, scrollingY = 0;
if (document.body && (document.body.scrollLeft || document.body.scrollTop)) {
scrollingY = document.body.scrollTop;
scrollingX = document.body.scrollLeft;
}
else if (document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) {
scrollingY = document.documentElement.scrollTop;
scrollingX = document.documentElement.scrollLeft;
}
else if (typeof(window.pageYOffset) == 'number') {
scrollingY = window.pageYOffset;
scrollingX = window.pageXOffset;
}
return {
 x:scrollingX,
 y:scrollingY
}
}
Jpy.addScript = function (file, folder) {
var file = file.match(/\w{2,}.js$/)
if(!folder) var folder = "";
var absolutePath = Jpy.picurl+"/js/"+Jpy.javascriptVersion+"/"+folder+file[0];
var script = document.createElement('script');
script.setAttribute('src', absolutePath);
script.setAttribute('type','text/javascript');
script.setAttribute('language','javascript');
document.getElementsByTagName('head')[0].appendChild(script);
}
Jpy.toggleDefaultValue = function (textarea, defaultText) {
if (textarea.value == defaultText) {
textarea.value = "";
}
textarea.onfocus = function () {
if (textarea.value == textarea.defaultValue) {
textarea.value = "";
}
}
textarea.onblur = function () {
if (textarea.value == "") {
textarea.value = textarea.defaultValue;
}
}
}
Jpy.truncate = function (maxChars, text) {
if (text.length > maxChars) {
var shortedText = text.slice(0, (maxChars-3));
return shortedText+"...";
}
else {
return text;
}
}
Jpy.addEvent = function (elem, eventType, func, preventDefault){
if (elem.addEventListener) {
elem.addEventListener(eventType, func, false);
}
 else if (elem.attachEvent){
 elem.attachEvent("on" + eventType, func);
 }
if (preventDefault) {
Jpy.addEvent(elem, "click", Jpy.preventDefault)
}
}
Jpy.removeEvent = function (elem, eventType, func){
if (elem.removeEventListener) {
elem.removeEventListener(eventType, func, false);
}
 else if (elem.detachEvent) {
 elem.detachEvent("on" + eventType, func)
 }
}
Jpy.preventDefault = function (e){
 if(!e) var e = window.event;
if (e.preventDefault) {
 e.preventDefault();
 }
else{
 e.returnValue = false;
 }
}
Jpy.stopPropagation = function (e){
 if(!e) var e = window.event;
if (e.stopPropagation) {
 e.stopPropagation();
 }
else {
 e.cancelBubble = true;
 }
}
Jpy.sortMultiByColumn = function (column, data, mode) {
if (arguments.length == 0 || typeof column != "number") {
column = 0;
}
if (!mode) {
mode = 0;
}
if (!data) {
data = "";
}
var seperation = "||#||";
var sortArray = [];
var overflow = data.length - column;
if (column != 0) {
var w = data.slice(0,column);
data = data.slice(column,data.length);
for (var i = 0; i < w.length; i++) {
data.push(w[i]);
}
}
for ( var i = 0; i < data.length; i++ ) {
for ( var j = 0; j < data[0].length; j++ ) {
if (i == 0) {
sortArray[j] = data[i][j];
}
else {
sortArray[j] += seperation+data[i][j];
}
}
}
if (parseFloat(data[0][column]) == data[0][column]) {
if (mode == 1) {
sortArray.sort(function(a,b){return parseFloat(b) - parseFloat(a)});
}
else {
sortArray.sort(function(a,b){return parseFloat(a) - parseFloat(b)});
}
}
else {
if (mode == 1) {
sortArray.sort(function(a,b){return b - a});
}
else {
sortArray.sort();
}
}
var sortedTable = [];
for ( var i = 0; i < sortArray.length; i++ ) {
sortedTable[i] = sortArray[i].split(seperation);
}
for ( var i = 0; i < sortedTable.length; i++ ) {
var w = sortedTable[i].slice(0, overflow);
sortedTable[i].splice(0, overflow);
sortedTable[i] = sortedTable[i].concat(w);
}
return sortedTable;
}
Jpy.handleAjaxError = function (statusCode) {
if (statusCode == 0) {
return;
}
if (statusCode == 404) {
SystemMessage.inline.error('Die angefragte Datei wurde nicht gefunden.');
}
else if (statusCode == 500){
SystemMessage.inline.error('Die Jappyserver haben ein Problem!');
}
else {
SystemMessage.inline.error('Fehler.\n'+statusCode);
}
}
Jpy.getKeycode = function(e) {
var code;
if (!e) {
var e = window.event;
}
if (e.keyCode) {
code = e.keyCode;
}
else if (e.which) {
code = e.which;
}
var character = String.fromCharCode(code);
return {
keyCode: code,
keyChar: character
}
}
Jpy.show = function (elementId) {
if (document.getElementById(elementId)) {
document.getElementById(elementId).style.display = "block";
}
}
Jpy.hide = function (elementId) {
if (document.getElementById(elementId)) {
document.getElementById(elementId).style.display = "none";
}
}
Jpy.toggle = function (elementId) {
if (document.getElementById(elementId)) {
if (document.getElementById(elementId).style.display == "block") {
document.getElementById(elementId).style.display = "none";
}
else {
document.getElementById(elementId).style.display = "block";
}
}
}
Jpy.remove = function (elem) {
var layer = elem;
if (typeof elem == "string") {
layer = document.getElementById(elem);
}
if (layer) {
layer.parentNode.removeChild(layer);
}
}
Jpy.dom = {
add: function (elementTagname, elementId, elementClass) {
var div = document.createElement(elementTagname);
if (elementId != '') {
div.id = elementId;
}
if (elementClass) {
div.className = elementClass;
}
return div;
}
}
Jpy.getLength = function (obj) {
var i = 0;
for (var n in obj) i++;
return i;
}
Jpy.css = {
get: function (elem, name) {
if (elem.style[name]) {
return elem.style[name];
}
if (document.defaultView && document.defaultView.getComputedStyle) {
name = name.replace(/([A-Z])/g, "-$1");
name = name.toLowerCase();
var s = document.defaultView.getComputedStyle(elem, "");
return s && s.getPropertyValue(name);
}
else if (elem.currentStyle) {
return elem.currentStyle[name];
}
else {
return null;
}
},
set: function (elem, styles) {
if (typeof styles == "string") {
styles = this.parseStyles(styles);
}
for (var n in styles) {
if (!styles.hasOwnProperty(n)) continue;
this.setStyle(elem, n, styles[n]);
}
},
parseStyles: function (styleString) {
var len = styleString.length;
var charIndex = 0;
var currentChar;
var type = 0;
var property = "";
var value = "";
var styles = {}
var next = function(walking) {
if (charIndex < len) {
currentChar = styleString.charAt(charIndex);
charIndex += 1;
if (walking) walk();
}
else {
makeObject(true);
}
}
var makeObject = function (end) {
if (/url\(/.test(value) == true) {
if (/no\-repeat/.test(value) == true) {
styles["backgroundRepeat"] = "no-repeat";
}
else if (/repeat\-x/.test(value) == true) {
styles["backgroundRepeat"] = "repeat-x";
}
if ((/\#[0-9a-z]{6}/gi).test(value) == true) {
var hex = value.match(/#[0-9a-z]{6}/gi);
styles["backgroundColor"] = hex[0]
}
if ((/\s+\-?[0-9]+/gi).test(value) == true) {
var position = value.match(/\s+\-?[0-9px]+\s+\-?[0-9px]+/gi)
if (position[0]) {
styles["backgroundPosition"] = position[0].trim();
}
}
value = value.replace(/\)\s.*/, "");
property = "backgroundImage";
var url = value.replace(/^[url\(\"\'htp\:\/\.s0-9jayv]{1,25}/i, "");
value = "url("+Jpy.picurl+"/"+url+")";
}
if (property != "") styles[property] = value;
property = "";
value = "";
if (end) {
return false;
}
else {
next(true);
}
}
var walk = function (upper) {
if (currentChar == "") {
next(true);
}
if (currentChar != ";" && currentChar != ":") {
if (type == 0) {
if (currentChar == "-") {
next();
walk(true);
}
else if (upper) {
property += currentChar.toUpperCase();
next(true);
}
else {
property += currentChar;
next(true);
}
}
else {
value += currentChar;
next(true);
}
}
else if (currentChar == ":") {
type = 1;
next(true);
}
else {
type = 0;
makeObject();
}
}
next(true);
return styles;
},
setStyle: function (elem, prop, val) {
for (var i = 0, len = elem.length; i < len; i++) {
if (typeof elem[i] == "string") {
elem[i] = document.getElementById(elem);
}
elem[i].style[prop] = val;
}
},
searchClass: function (elem, keyword) {
var regex = new RegExp(keyword, "g");
if (regex.test(elem.className) == true) {
return true;
}
else {
return false;
}
},
addClass: function (elem, name) {
var setClass = "";
if (elem.className) {
var searchClass = new RegExp(name, "g");
setClass = elem.className;
if (searchClass.test(elem.className) == false) {
setClass = setClass+" "+name;
}
}
else {
setClass = name;
}
elem.className = setClass;
},
removeClass: function (elem, name) {
var setClass = "";
if (elem.className) {
var searchClass = new RegExp(name, "g");
var classNames = elem.className.split(/\s+/);
for (var i = 0, len = classNames.length; i < len; i++) {
if ((searchClass).test(classNames[i]) == true) {
classNames[i] = "";
}
setClass += classNames[i]+" ";
}
}
elem.className = setClass.trim();
},
toggleClass: function (elem, name) {
if (name.test(elem) == true) {
this.removeClass(elem, name);
}
else {
this.addClass(elem, name);
}
},
hoverClass: function (elem, name) {
this.addClass(elem, name);
Jpy.addEvent(elem, "mouseout", function(){Jpy.css.removeClass(elem, name)})
},
setOpacity: function (elem, factor) {
if (elem.filters) {
elem.style.filters = 'alpha(opacity='+factor+')';
}
else {
elem.style.opacity = factor/100;
}
}
}
Jpy.getCheckedRadioValue = function (area) {
var elem = area.getElementsByTagName("input");
var value = 0;
for (var i = 0, len = elem.length; i < len; i++) {
if (elem[i].checked == true && elem[i].type == "radio") {
value = elem[i].value;
break;
}
}
return value;
}
Jpy.getUserImage = function (imageAdress, picWidth) {
var image = document.createElement('img');
if (imageAdress == null || imageAdress == "" || imageAdress == undefined) {
image.src = Jpy.picurl+"/i/ge/Kb.gif";
}
else {
image.src = Jpy.profilimageUrl+"/ub/xs/"+imageAdress;
}
if (picWidth) {
image.width = picWidth;
}
return image;
}
Jpy.layer = {
getMaxZIndex: function () {
var layers = document.getElementById('ly').getElementsByTagName('div');
if (layers.length > 0) {
var layerIndexList = [];
for (var i = 0, len = layers.length; i < len; i++) {
if (layers[i].style.zIndex) {
layerIndexList.push(layers[i].style.zIndex);
}
}
layerIndexList.sort(function(a,b){return b-a});
var maxZIndex = parseInt(layerIndexList[0])+1;
return maxZIndex;
}
else {
return 100000;
}
},
add: function (layerName, trigger, offSet) {
var layerPosition;
if (trigger) {
if (typeof trigger == "String") {
trigger = document.getElementById(trigger);
}
layerPosition = {
x: Jpy.getOffsetPosition(trigger).x,
y: Jpy.getOffsetPosition(trigger).y
}
}
else {
layerPosition = {
x:0,
y:0
}
}
var layerOffset;
if (offSet) {
layerOffset = offSet
}
else {
layerOffset = {
x:0,
y:0
}
}
var frame = document.getElementById('ly');
var layer;
if (document.getElementById(layerName)) {
layer = document.getElementById(layerName);
layer.innerHTML = "";
}
else {
layer = document.createElement('div');
layer.id = layerName;
}
layer.style.position = "absolute";
layer.style.zIndex = this.getMaxZIndex();
if (typeof position == "Array") {
layer.style.top = (layerPosition+layerOffset)+"px";
layer.style.left = (layerPosition+layerOffset)+"px";
}
else {
layer.style.top = layerPosition.y+layerOffset.y;
layer.style.left = layerPosition.x+layerOffset.x;
}
frame.appendChild(layer);
frame.style.display = "block";
return layer;
},
remove: function (layer) {
Jpy.remove(layer);
}
}
Jpy.layerDragable = {
add: function (trigger, layerId, layerWidth, offSet) {
this.layerId = layerId;
if (layerWidth == null) {
layerWidth = "600px";
}
if (!offSet) {
offSet = {
x:0,
y:0
}
}
var frame = Jpy.layer.add(layerId, trigger, offSet);
frame.className = "bxG1";
frame.style.width = layerWidth;
var header = document.createElement('div');
header.id = layerId+"Header";
header.className = "liG8 taR cm cf";
header.style.width = layerWidth;
header.style.paddingTop = "5px";
header.style.paddingBottom = "5px";
header.innerHTML = "<span class='icClose' onclick='Jpy.remove(\""+layerId+"\")'>&nbsp;</span>";
frame.appendChild(header);
return frame;
},
drag: {
status: false,
init: function (layerId) {
var setZindex = function () {
if (Jpy.layerDragable.drag.status == false) {
document.getElementById(layerId).style.zIndex = Jpy.layer.getMaxZIndex();
}
}
Jpy.addEvent(document.getElementById(layerId), "mousedown", setZindex)
var moveFrame = function (e) {
Jpy.layerDragable.drag.movingFrame = document.getElementById(layerId);
if (Jpy.layerDragable.drag.status == false) {
document.getElementById(layerId).style.zIndex = Jpy.layer.getMaxZIndex();
Jpy.layerDragable.drag.movingFrame.style.background = "#9fbadb";
Jpy.layerDragable.drag.status = true;
}
Jpy.layerDragable.drag.mouseOffset = Jpy.getMouseOffset(Jpy.layerDragable.drag.movingFrame, e);
Jpy.layerDragable.drag.initMouseTracking();
}
Jpy.addEvent(document.getElementById(layerId+"Header"), "mousedown", moveFrame)
},
mouseUp: function(){
if (Jpy.layerDragable.drag.movingFrame != null) {
Jpy.layerDragable.drag.movingFrame.style.background = "#d1d1d1";
}
Jpy.layerDragable.drag.movingFrame = null;
Jpy.layerDragable.drag.status = false;
},
mouseMove: function(e){
e = e || window.event;
var mousePosition = Jpy.getMousePosition(e);
if (Jpy.layerDragable.drag.movingFrame ){
Jpy.layerDragable.drag.movingFrame.style.top = mousePosition.y - Jpy.layerDragable.drag.mouseOffset.y;
Jpy.layerDragable.drag.movingFrame.style.left = mousePosition.x - Jpy.layerDragable.drag.mouseOffset.x;
return false;
}
},
initMouseTracking: function () {
Jpy.addEvent(document, "mousemove", Jpy.layerDragable.drag.mouseMove);
Jpy.addEvent(document, "mouseup", Jpy.layerDragable.drag.mouseUp);
},
mouseOffset: null,
movingFrame: null
}
}
Jpy.ignore = function (userId) {
SystemMessage.loading.start();
var ignoreUser = new AjaxHandler();
var callback = {
success: function(data) {
if (data == "ok") {
SystemMessage.loading.end();
SystemMessage.success("Nutzer wird absofort ignoriert!");
}
else if(data == "-5") {
SystemMessage.error("Dein Profil muss erst aktiviert werden!");
}
Jpy.remove("lyConfirm");
SystemMessage.loading.end();
},
failure: function(statusCode) {
Jpy.handleAjaxError(statusCode);
}
};
ignoreUser.request('GET', "/backend/user/ignore.php?userId="+userId+"&h="+User.hash, callback);
}
Jpy.toggleSwitch = function (trigger, value, id) {
Jpy.id(id).value = value;
if (value == 0) {
trigger.className = "swOff";
value = 1;
trigger.innerHTML = "Aus";
}
else {
trigger.className = "swOn";
value = 0;
trigger.innerHTML = "An";
}
trigger.onclick = function () {
return Jpy.toggleSwitch(trigger, value, id);
}
}
ContactFilter = {
load: function (trigger) {
SystemMessage.loading.start();
var getContactFilter = new AjaxHandler();
var callback = {
success: function(data) {
SystemMessage.loading.end();
ContactFilter.data = eval("("+ data+ ")");
ContactFilter.show(trigger);
},
failure: function(statusCode) {
Jpy.handleAjaxError(statusCode);
}
};
getContactFilter.request('GET', "/backend/user/contactFilter.php?action=get", callback);
},
show: function (trigger) {
Jpy.layerDragable.add(trigger, "lyContactFilterEdit", "450px", {x:164,y:-200});
this.inject.getFrame();
if (ContactFilter.data != null) {
this.inject.insertBasis(true);
this.inject.insertSettings();
}
else if (ContactFilter.data == null) {
this.inject.insertInfoNotSet();
}
Jpy.layerDragable.drag.init("lyContactFilterEdit");
},
inject: {
getFrame: function () {
var frame = document.getElementById('lyContactFilterEdit');
Jpy.remove('lyContactFilterBox');
var box = DOM.div({id:"lyContactFilterBox",className:"bgW fs12",style:"text-indent:15px;width:450px;padding-top:15px"})
var header = DOM.div({className:"fwB",style:{paddingBottom:"7px"}})
header.appendChild(document.createTextNode('Kontaktfilter bearbeiten:'));
box.appendChild(header);
frame.appendChild(box);
},
insertBasis: function (full) {
Jpy.remove('lyContactFilterNotSet');
var content = ""
+ "<div id='lyContactFilterTable'>"
+ "<table class='boG1'>"
+ "<tr>"
+ "<td width='160'>Kontakt zu Nutzer im Alter</td>"
+ "<td>von <input type='input' id='cfAgeStart' class='inA' value='14' style='width:40px'> bis <input type='input' id='cfAgeEnd' class='inA' value='99' style='width:40px'> Jahren</td>"
+ "<tr>"
+ "<tr>"
+ "<td width='160'>und mit dem Geschlecht</td>"
+ "<td><label><input type='radio' id='cfGenderBoth' name='gender' value='0' checked='checked'> männlich und weiblich</label><br> <label><input type='radio' id='cfGenderMale' name='gender' value='1'> männlich </label><br> <label><input type='radio' id='cfGenderFemale' name='gender' value='2'> weiblich</label></td>"
+ "</table>"
+ "<div class='bgG1 pd10 fs12 taR'><span class='inCo rb5 cp' onclick='Jpy.remove(\"lyContactFilterEdit\")'>Abbrechen</span><span class='inCo rb5 cp' onclick='ContactFilter.save().edit()'><span class='icOk'>&nbsp;</span>Speichern</span></div>";
if (full == true) {
content += "<div class='bgY1 pd10 fs12 taC'>Kontaktfilter ausschalten?<br><br><span class='inCo rb5 cp' onclick='ContactFilter.save().remove()'><span class='icDelete'>&nbsp;</span>Kontaktfilter deaktivieren.</span></div>";
}
content += "</div>";
document.getElementById('lyContactFilterBox').innerHTML += content;
},
insertInfoNotSet: function () {
Jpy.remove('lyContactFilterTable');
var content = ""
+ "<div id='lyContactFilterNotSet' class='pd15 fs12 lh20' style='text-indent:0px'>Kontaktfilter ist nicht aktiv! Alle Jappy-Nutzer können Kontakt zu dir aufnehmen.<br><br><a class='inCo rb5 cp' onclick='ContactFilter.inject.insertBasis();'><span class='icAdd'>&nbsp;</span> Kontaktaufnahme beschränken</a></div>";
document.getElementById('lyContactFilterBox').innerHTML += content;
},
insertSettings: function () {
document.getElementById('cfAgeStart').value = ContactFilter.data.ageStart;
document.getElementById('cfAgeEnd').value = ContactFilter.data.ageEnd;
if (ContactFilter.data.gender == "m") {
document.getElementById('cfGenderMale').checked = "checked";
}
else if (ContactFilter.data.gender == "w") {
document.getElementById('cfGenderFemale').checked = "checked";
}
else {
document.getElementById('cfGenderBoth').checked = "checked";
}
}
},
save: function () {
var send = function (data) {
var setContactFilter = new AjaxHandler();
var callback = {
success: function(data) {
if (data) {
SystemMessage.inline.success(ContactFilter.message);
delete ContactFilter.message;
}
},
failure: function(statusCode) {
Jpy.handleAjaxError(statusCode);
}
};
data += "&h=" + User.hash;
setContactFilter.request('GET', "/backend/user/contactFilter.php"+data, callback);
}
return {
edit: function () {
if (!document.getElementById('cfAgeStart')) {
Jpy.remove('lyContactFilterEdit');
}
var data = "?action=set&toggle=on";
data += "&ageStart="+document.getElementById('cfAgeStart').value;
data += "&ageEnd="+document.getElementById('cfAgeEnd').value;
if (document.getElementById('cfGenderMale').checked == true) {
data += "&gender=m";
}
else if (document.getElementById('cfGenderFemale').checked == true) {
data += "&gender=w";
}
else {
data += "&gender=m,w";
}
Jpy.remove('lyContactFilterEdit');
ContactFilter.message = "Die Kontaktfilter-Einstellungen wurden übernommen.";
send(data);
},
remove: function () {
Jpy.remove('lyContactFilterEdit');
ContactFilter.message = "Alle Nutzer können dich kontaktieren.";
send("?action=set&toggle=off");
}
}
}
}
Jpy.buddies = {
show: function (trigger) {
this.triggerElement = trigger;
if (document.getElementById('buBuddyList')) {
document.getElementById('buBuddyList').style.display = "block";
}
else {
this.load()
}
},
load: function () {
SystemMessage.loading.start();
var getBuddies = new AjaxHandler();
var callback = {
success: function(data) {
SystemMessage.loading.end();
Jpy.buddies.list = eval("("+ data+ ")");
var sortedResults = Jpy.buddies.sortBuddysByNickname()
Jpy.buddies.inject(sortedResults);
}
};
var parameters = {
j : 1
};
getBuddies.request('POST', "/backend/getFriends.php?h="+User.hash, callback, parameters);
},
search: function () {
var searchInput = new String(document.getElementById('buBuddyListSearch').value);
var results = [];
if (searchInput.length < 3) {
var searchStringStart = new RegExp("^"+searchInput, "i");
var buddies = Jpy.buddies.list;
for (var n in buddies) {
var nick = buddies[n].stamp.nickname;
if ((searchStringStart).test(nick) == true) {
results.push(buddies[n])
}
}
}
else if (searchInput.length == 0) {
results = Jpy.buddies.list;
}
else {
var searchStringGlobal = new RegExp(searchInput, "i");
var buddies = Jpy.buddies.list;
for (var m in buddies) {
var nick = buddies[m].stamp.nickname;
if ((searchStringGlobal).test(nick) == true) {
results.push(buddies[m])
}
}
}
var sortedResults = this.sortBuddysByNickname(results)
this.inject(sortedResults);
},
sortBuddysByNickname: function (buddyList) {
var buddyIds = [];
var buddyNickame = [];
if (!buddyList) {
buddyList = Jpy.buddies.list;
}
for (var n in buddyList) {
buddyNickame.push(buddyList[n].stamp.nickname)
buddyIds.push(buddyList[n].stamp.userId)
}
var seperation = "||#||";
var sortArray = [];
for (var i = 0, len = buddyNickame.length; i < len; i++) {
buddyNickame[i] = buddyNickame[i].toLowerCase();
}
for (var i = 0, len = buddyNickame.length; i < len; i++ ) {
sortArray[i] = buddyNickame[i]+seperation+buddyIds[i];
}
sortArray.sort();
var buddyNicknameSorted = [];
var buddyIdSorted = [];
for (var i = 0, len = sortArray.length; i < len; i++ ) {
var sortedTable = sortArray[i].split(seperation);
buddyNicknameSorted.push(sortedTable[0]);
buddyIdSorted.push(sortedTable[1]);
}
var sortedBuddyList = [];
for (var i = 0, len = buddyIdSorted.length; i < len; i++) {
for (var n in buddyList) {
if (buddyIdSorted[i] == buddyList[n].stamp.userId) {
sortedBuddyList.push(buddyList[n]);
}
}
}
return sortedBuddyList;
},
inject: function (results) {
if (document.getElementById('buBuddyList')) {
var box = document.getElementById('buBuddyListBox');
box.innerHTML = "";
}
else {
var frame = Jpy.layerDragable.add(this.triggerElement, "buBuddyList", "350px", {x:164,y:-200});
var header = "<div class='bgG1' style='width:350px'><div class='pd10'><input id='buBuddyListSearch' type='text' class='inA' style='padding:3px;width:320px' onkeyup='Jpy.buddies.search()'></div></div>";
frame.innerHTML += header;
var box = DOM.div({id:"buBuddyListBox",className:"pd10 bgW ldN"});
frame.appendChild(box);
Jpy.layerDragable.drag.init("buBuddyList");
}
var buddies = {};
if (!results) {
buddies = Jpy.buddies.list;
}
else {
buddies = results;
}
if (buddies.length == 0) {
if (document.getElementById('buBuddyList')) {
document.getElementById('buBuddyListBox').innerHTML = "<div class='pd5 lh20'>Keine Freunde gefunden mit den Suchkriterien gefunden.</div>";
}
else {
SystemMessage.inline.show("Du hast keine Freunde!");
}
}
else {
for (var n in buddies) {
var friend = buddies[n];
var userImage = Jpy.getUserImage(friend.stamp.profileImage, 33);
userImage.height = 37;
var buddyStamp = Userstamp.read(friend.stamp);
var line = DOM.div({className:"line cf",style:"width:330px;border-bottom:1px solid #ffffff"})
var imageDiv = DOM.div({className:"fl pd5",style:"width:40px"});
var imageLink = document.createElement('a');
imageLink.href = "/user/"+friend.stamp.nickname
imageLink.appendChild(userImage);
imageDiv.appendChild(imageLink);
line.appendChild(imageDiv);
var stamp = DOM.div({className:"fl pd4",style:"width:130px;padding-top:7px"})
stamp.innerHTML = buddyStamp;
if (friend.realName != undefined) {
stamp.innerHTML += "<br>";
var realName = DOM.span({className:"rn"});
realName.innerHTML = friend.realName.firstname+" "+friend.realName.surname;
stamp.appendChild(realName);
}
line.appendChild(stamp);
var options = DOM.div({className:"fr taR pd5",style:{visibility:"hidden",width:"120px"}})
var templateOptions = ""
+ "<span class='icMail cp' onmouseover='Tooltip(this, \""+friend.stamp.nickname+" anschreiben\")' onclick='MessageSystem.message.compose.start(this.parentNode.parentNode, \""+friend.stamp.nickname+"\")' style='padding-left:17px'>&nbsp;</span>&nbsp;"
+ "<span class='icEmotion cp' onmouseover='Tooltip(this, \""+friend.stamp.nickname+" eine Emotions übergeben\")' onclick='Emotions.load("+friend.stamp.userId+",\""+friend.stamp.nickname+"\", this, {x:70,y:-100})'>&nbsp;</span>&nbsp;"
+ "<a href='/user/"+friend.stamp.nickname+"/gifts/donate' onmouseover='Tooltip(this, \""+friend.stamp.nickname+" beschenken\")'><span class='icGift cp'>&nbsp;</span></a>&nbsp;"
+ "<a href='' onmouseover='Tooltip(this, \""+friend.stamp.nickname+" einen Gästebucheintrag schreiben\")' onclick='Jpy.buddies.guestbook.add(this, \""+friend.stamp.nickname+"\", "+friend.stamp.userId+");return false'><span class='icGb cp'>&nbsp;</span></a>&nbsp;";
options.innerHTML = templateOptions;
line.appendChild(options);
box.appendChild(line);
}
this.initListEvents();
}
document.getElementById('buBuddyListSearch').focus();
},
initListEvents: function() {
var frame = document.getElementById('buBuddyListBox');
var lineElements = frame.getElementsByTagName('div');
for (var i = 0, len = lineElements.length; i < len; i++) {
if (lineElements[i].className == "line cf") {
lineElements[i].onmouseover = function() {
return function () {
Jpy.buddies.showOptions(this);
}
}()
}
}
},
showOptions: function (trigger) {
trigger.style.background = "#fffee0";
trigger.style.borderBottom = "1px solid #f0efd8";
trigger.getElementsByTagName('div')[2].style.visibility = "visible";
trigger.onmouseout = function () {
Jpy.buddies.hideOptions(trigger);
}
},
hideOptions: function (trigger) {
trigger.style.background = "#ffffff";
trigger.style.borderBottom = "1px solid #ffffff";
trigger.getElementsByTagName('div')[2].style.visibility = "hidden";
},
guestbook: {
add: function (trigger, userName, userId) {
var frame = Jpy.layerDragable.add (trigger, "lyGuestbookAdd", "630px", {x:-200,y:-90});
var box = DOM.div({className:"bgG1 pd5"});
var header = DOM.div({className:"fwB pd5 fs12"})
header.innerHTML = "Gästebucheintrag an "+userName;
box.appendChild(header);
var textarea = DOM.textarea({className:"teG3",style:{width:"620px",height:"180px"},id:"gbTextareaAdd"})
box.appendChild(textarea);
frame.appendChild(box);
MessageEditor.register(textarea);
Jpy.layerDragable.drag.init("lyGuestbookAdd");
var actionbar = DOM.actionbar("GB-Eintrag senden", "Abbrechen");
actionbar.send.onclick = function () {
Jpy.buddies.guestbook.send(userId, userName);
}
actionbar.abort.onclick = function () {
Jpy.remove("lyGuestbookAdd");
}
frame.appendChild(actionbar.frame);
textarea.focus();
},
send: function (userId, userName) {
Jpy.buddies.guestbook.currentReceiver = userName;
SystemMessage.loading.start();
var sendGuestbookEntry = new AjaxHandler();
var guestbookValue = document.getElementById('gbTextareaAdd').value
var guestbookData = {
userId: userId,
text: guestbookValue
}
var callback = {
success: function(data) {
SystemMessage.loading.end();
if (data < 0) {
Jpy.buddies.guestbook.handleErrorCode(data);
}
else {
SystemMessage.inline.success("Gästebucheintrag bei "+Jpy.buddies.guestbook.currentReceiver+" erfolgreich!");
Jpy.remove("lyGuestbookAdd");
}
Jpy.buddies.guestbook.currentReceiver = undefined;
},
failure: function(statusCode) {
SystemMessage.loading.end();
Jpy.handleAjaxError(statusCode);
}
};
sendGuestbookEntry.request('POST', "/backend/user/addGuestbookEntry.php?h=" + User.hash, callback, guestbookData);
},
handleErrorCode: function(errorCode) {
var injectError = function(errorText) {
Jpy.remove('lyGuestbookErrorInfo');
var box = DOM.div({className:"bgY1 pd10 fs12",id:"lyGuestbookErrorInfo"})
box.innerHTML = errorText;
var frame = document.getElementById("lyGuestbookAdd");
frame.insertBefore(box, document.getElementById('lyGuestbookAdd').getElementsByTagName("div")[1]);
}
switch(errorCode) {
case "-2":
injectError(Jpy.buddies.guestbook.currentReceiver+" ist nicht auf deiner Freundeslist!");
break;
case "-3":
injectError("Ungültiger Texteintrag, bitte Text anpassen.");
break;
case "-4":
injectError(Jpy.buddies.guestbook.currentReceiver+"`s Privatsphäreeinstellungen ermöglichen keine Gästebucheinträge");
break;
case "-8":
injectError("Textinhalt ist leer!");
break;
case "-12":
injectError(Jpy.buddies.guestbook.currentReceiver+" hat heute bereits einen Gästebucheintrag von dir erhalten");
break;
case "-13":
injectError(Jpy.buddies.guestbook.currentReceiver+" hat heute bereits einen Gästebucheintrag von dir erhalten");
break;
case "-17":
injectError("Dein Profil muss erst aktiviert werden!");
break;
default:
injectError("Gästebucheintrag konnte nicht übertragen werden");
break;
}
}
}
}
Jpy.insertAfter = function (elem, tag) {
elem.parentNode.insertBefore(tag, elem.nextSibling);
}
Jpy.getApp = function () {
if (navigator.appName.indexOf("Internet Explorer") != -1) {
if ((/MSIE 6/).test(navigator.userAgent) == true || (/MSIE 5/).test(navigator.userAgent) == true) {
return -2;
}
else {
return -1;
}
}
else {
return 0;
}
}
Jpy.clearUnderTen = function (num) {
if (num < 10) {
num = "0"+num.toString();
}
return num;
}
var Design = function () {};
Design.prototype = {
append: function (mother, daughters) {
for (var i = 0, len = daughters.length; i < len; i++) {
mother.appendChild(daughters[i]);
}
},
setInstructions: function (instruction, elem) {
if(instruction.value) {
elem.value = instruction.value;
}
if(instruction.className) {
elem.className = instruction.className;
}
if(instruction.id) {
elem.id = instruction.id;
}
if(instruction.src) {
elem.src = instruction.src;
}
if(instruction.name) {
elem.name = instruction.name;
}
if(instruction.type) {
elem.setAttribute("type", instruction.type);
}
if(instruction.name) {
elem.name = instruction.name;
}
if(instruction.style) {
Jpy.css.set([elem], instruction.style);
}
if(instruction.text) {
elem.innerHTML = instruction.text;
}
if(instruction.href) {
elem.href = instruction.href;
}
if(instruction.child) {
if (instruction.child.length) {
for (var i = 0, len = instruction.child.length; i < len; i++) {
elem.appendChild(instruction.child[i]);
}
}
else {
elem.appendChild(instruction.child);
}
}
return elem;
},
input: function (instruction) {
var input = document.createElement('input');
return this.setInstructions(instruction, input);
},
txt: function (text) {
return document.createTextNode(text);
},
label: function () {
return document.createElement("label");
},
textarea: function (instruction) {
var textarea = document.createElement('textarea');
return this.setInstructions(instruction, textarea);
},
div: function (instruction) {
if (instruction) {
return this.setInstructions(instruction, document.createElement('div'));
}
else {
return document.createElement('div');
}
},
link: function (instruction) {
if (instruction) {
return this.setInstructions(instruction, document.createElement('a'));
}
else {
return document.createElement('a');
}
},
span: function (instruction) {
if (instruction) {
return this.setInstructions(instruction, document.createElement('span'));
}
else {
return document.createElement('span');
}
},
image: function (instruction) {
if (instruction) {
return this.setInstructions(instruction, document.createElement('img'));
}
else {
return document.createElement('img');
}
},
button: function (text, type, className, icon) {
if (!type) type = "span";
var button = document.createElement(type);
if (type == "a") button.href = "#";
if (!className) {
button.className = "inCo";
}
else {
button.className = className;
}
if (icon) {
var iconSpan = document.createElement("span");
iconSpan.innerHTML = "&nbsp;";
iconSpan.className = icon
button.appendChild(iconSpan);
}
button.appendChild(document.createTextNode(text));
return button;
},
radio: function (text, instructions) {
if (!instructions.className) instructions.className = "inA";
if (!instructions.name) instructions.name = "radioSelect";
var frame = DOM.label();
frame.className = "cp";
var radio;
if (Jpy.getApp() < 0) {
if (instructions.checked) {
radio = "<input type='radio' value='"+instructions.value+"' name='"+instructions.name+"' checked='checked'>";
}
else {
radio = "<input type='radio' value='"+instructions.value+"' name='"+instructions.name+"'>";
}
frame.innerHTML = radio;
}
else {
radio = DOM.input({className:instructions.className,type:"radio",name:instructions.name,value:instructions.value});
if (instructions.checked) radio.setAttribute("checked", "checked");
frame.appendChild(radio);
}
frame.innerHTML += text;
return {
frame: frame,
radio: radio
}
},
form: function (action) {
var form = document.createElement("form");
form.method = "post";
form.setAttribute("accept-charset", "UTF-8");
if (action) form.action = action;
return form;
},
actionbar: function (textSend, textAbort) {
this.frame = DOM.div({className:"fs12 bgG2 btG3 taR pd10"});
this.send = DOM.link({className:"inAc rb5 cp"});
this.send.href = "#";
this.send.innerHTML = textSend;
this.send.style.marginLeft = "7px";
this.abort = DOM.link({className:"inCo rb5 cp"});
this.abort.href = "#";
this.abort.innerHTML = textAbort;
this.frame.appendChild(this.abort);
this.frame.appendChild(this.send);
return this;
},
line: {
columnsTwo: function (width, padding, leftContent, rightContent) {
var lineBox = DOM.div();
lineBox.style.width = width.max;
lineBox.className = "cf";
var left = DOM.div();
if (Jpy.getApp() < 0) {
left.style.width = (parseInt(width.left)-(padding*2))+"px";
left.style.styleFloat = "left";
}
else {
left.style.width = (parseInt(width.left)-(padding*2))+"px";
left.style.cssFloat = "left";
}
left.style.padding = padding+"px"
if (typeof leftContent == "string") {
left.innerHTML = leftContent;
}
else {
left.appendChild(leftContent);
}
var right = DOM.div();
if (Jpy.getApp() < 0) {
right.style.width = (parseInt(width.right)-(padding*2))+"px";
right.style.styleFloat = "left";
}
else {
right.style.width = (parseInt(width.right)-(padding*2))+"px";
right.style.cssFloat = "left";
}
right.style.padding = padding+"px";
if (typeof rightContent == "string") {
right.innerHTML = rightContent;
}
else {
right.appendChild(rightContent);
}
lineBox.appendChild(left);
lineBox.appendChild(right);
return lineBox;
}
}
}
var DOM = new Design();
var Userstamp = {
get: function (mem, mode, lay, type) {
Userstamp.read(mem, mode, lay, type);
},
read: function (mem, mode, lay, type) {
if (!type) type = "string";
var layout = lay || "";
var mode = mode || "";
var member = {};
member = mem;
var onlinestatus = "ni"
if (Userstamp.stamps[0] & member.status) onlinestatus = "no";
if (Userstamp.stamps[1] & member.status) onlinestatus = "na";
if (Userstamp.stamps[2] & member.status) onlinestatus = "nx";
var birthday = false;
if (Userstamp.stamps[3] & member.status) birthday = true;
var moderation = false;
if (Userstamp.stamps[4] & member.status) moderation = true;
var nick = member.nickname;
var age = member.age;
var gender = member.gender;
var stamp = Userstamp.create(nick, age, gender, onlinestatus, birthday, moderation, mode, layout, type);
return stamp;
},
create: function (nick, age, gender, onlinestatus, birthday, moderation, mode, layout, type) {
var birthdayIcon = "";
var moderationIcon = "";
if (birthday == true) {
if (Jpy.getApp() < 0) {
birthdayIcon = "<span class='icBirthday'>&nbsp;</span>";
}
else {
birthdayIcon = "<span class='icBirthday'> </span>";
}
}
if (moderation == true) {
if (Jpy.getApp() < 0) {
moderationIcon = "<span class='icMod'>&nbsp;</span>";
}
else {
moderationIcon = "<span class='icMod'> </span>";
}
}
if (!mode && mode == "") {
var linkText = "<a href='/user/"+nick+"' class="+onlinestatus+">"+gender+" "+age+" "+nick+"</a> "+birthdayIcon+moderationIcon;
if (type == "object") {
return DOM.span({text:linkText});
}
else {
return "<a href='/user/"+nick+"' class="+onlinestatus+">"+gender+" "+age+" "+nick+"</a> "+birthdayIcon+moderationIcon;
}
}
else if (mode == "noLink") {
if (layout == "simple") {
var simpleSpan = "<span class="+onlinestatus+">"+nick+"</span> "+birthdayIcon+moderationIcon;
if (type == "object") {
return DOM.span({text:simpleSpan});
}
else {
return simpleSpan;
}
}
else {
var normalSpan = "<span class="+onlinestatus+">"+gender+" "+age+" "+nick+"</span> "+birthdayIcon+moderationIcon;
if (type == "object") {
return DOM.span({text:normalSpan});
}
else {
return normalSpan;
}
}
}
else {
if (type == "object") {
return DOM.span({text:nick})
}
else {
return nick;
}
}
},
stamps: [256,512,1024,2048,4096,8192,16384]
}
var Timestamp = {
step: [900000, 3600000],
get: function (timestamp, type) {
Timestamp.generate(timestamp, type);
},
generate: function (timestamp, type) {
if (!type) type = "string";
var now = new Date();
now = parseInt(now.getTime());
var creationTimestamp = parseInt(timestamp)*1000;
var stamp = new Date(creationTimestamp);
var difference;
if ( creationTimestamp+Timestamp.step[0] > now ) {
difference = Math.floor( (now-creationTimestamp)/60000 );
if (difference < 0) difference = 0;
if (type == "object") {
return DOM.span({className:"ts2",text:"vor "+difference+" Min."});
}
else {
return "<span class='ts1'>vor "+difference+" Min.</span>";
}
}
else if ( creationTimestamp+Timestamp.step[1] > now ) {
difference = Math.floor( (now-creationTimestamp)/60000 );
if (type == "object") {
return DOM.span({className:"ts2",text:"vor "+difference+" Min."});
}
else {
return "<span class='ts2'>vor "+difference+" Min.</span>";
}
}
else {
var fullDate = Jpy.clearUnderTen(stamp.getDate())+"."+Jpy.clearUnderTen(stamp.getMonth()+1)+"."+stamp.getFullYear()+" - "+Jpy.clearUnderTen(stamp.getHours())+":"+Jpy.clearUnderTen(stamp.getMinutes());
if (type == "object") {
return DOM.span({className:"coG5",text:fullDate});
}
else {
return "<span class='coG5'>"+fullDate+"</span>";
}
}
}
}
var Tooltip = function (trigger, text) {
var frame = Jpy.layer.add("lyTooltip", trigger, {x:-3,y:-35})
frame.style.display = "block";
var pointer = DOM.div({style:{
background:"url("+Jpy.picurl+"/i/ge/poDoG1.gif) no-repeat",
width:"11px",
height:"5px",
position:"absolute",
marginTop: "26px",
marginLeft: "6px",
zIndex: parseInt(frame.style.zIndex)+1
}})
frame.appendChild(pointer);
var box = DOM.div({className:"pd5 rb5 fs12",style:{
background: "#d1d1d1",
color: "#000000",
border: "1px solid #a5a5a5"
}})
box.innerHTML = text;
frame.appendChild(box);
trigger.onmouseout = function () {
Jpy.remove("lyTooltip");
}
}
var Infolayer = function (trigger, text, style, offsetPosition, width) {
var offset = {};
if(!text) text = "kein Text";
if(style == false || !style) style = false;
if(!width) width = null;
if(offsetPosition ) {
offset = {
x:offsetPosition[0],
y:offsetPosition[1]
}
}
else {
offset = {
x:0,
y:-100
}
}
var frame = Jpy.layer.add("lyInfolayer", trigger, offset)
frame.style.display = "block";
var pointer = Jpy.layer.add("lyInfolayerPointer", frame, {x:10,y:-7})
pointer.style.width = "15px";
pointer.style.height = "8px";
if (style != false) {
if (style == "yellow") {
frame.style.border = "1px solid #ebdeb9";
frame.style.borderRight = "1px solid #ffe65d";
frame.style.borderBottom = "1px solid #ffe65d";
frame.style.background = "#fffee0";
pointer.style.backgroundImage = "url('"+Jpy.picurl+"/i/ge/po/tY1.gif')";
}
}
else {
frame.style.border = "1px solid #a0a0a0";
frame.style.borderRight = "1px solid #838383";
frame.style.borderBottom = "1px solid #838383";
frame.style.background = "#ffffff";
pointer.style.backgroundImage = "url('"+Jpy.picurl+"/i/ge/po/tG2.gif')";
}
frame.style.textAlign = "left";
if (width != null) {
frame.style.width = width+"px";
}
frame.className = "pd10 lh17 fs12 rb5";
frame.innerHTML = text;
pointer.style.backgroundRepeat = "no-repeat";
trigger.onmouseout = function () {
Jpy.remove(frame)
Jpy.remove(pointer)
}
}
var AjaxHandler = function () {};
AjaxHandler.prototype = {
request: function(method, url, callback, postVars) {
var xhr = this.createXhrObject();
xhr.onreadystatechange = function () {
if (xhr.readyState !== 4) {
return;
}
if (xhr.status === 200) {
if (callback.json) {
callback.success(ParseJSON(xhr.responseText));
}
else {
callback.success(xhr.responseText, xhr.responseXML);
}
}
else {
if (callback.failure) {
callback.failure(xhr.status);
}
else {
Jpy.handleAjaxError(xhr.status);
}
}
};
xhr.open(method, url);
if (method !== 'POST') {
postVars = null;
}
else {
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
}
xhr.send(this.encode(postVars));
},
encode: function(postVars) {
var pairs = [];
var regex = /%20/g;
for (var name in postVars) {
var value = postVars[name].toString();
var pair = encodeURIComponent(name).replace(regex, "+") + "=" + encodeURIComponent(value).replace(regex, "+");
pairs.push(pair);
}
return pairs.join('&');
},
createXhrObject: function() {
var methods = [
function() {
return new XMLHttpRequest();
},
function() {
return new ActiveXObject('Msxml2.XMLHTTP');
},
function() {
return new ActiveXObject('Microsoft.XMLHTTP');
}
];
for (var i = 0, len = methods.length; i < len; i++ ) {
try {
methods[i]();
}
catch(e) {
continue;
}
AjaxHandler.createXhrObject = methods[i];
return methods[i]();
}
}
}
var ParseJSON = (function () {
 var charIndex;
 var currentChar;
 var escapee = {
 '"': '"',
 '\\': '\\',
 '/': '/',
 b: '\b',
 f: '\f',
 n: '\n',
 r: '\r',
 t: '\t'
 };
 var text;
 var error = function (message) {
throw {
name: 'SyntaxError',
message: message,
at: charIndex,
text: text
};
};
var next = function (textChar) {
if(textChar && textChar !== currentChar) {
error("Expected '" + textChar + "' instead of '" + currentChar + "'");
}
currentChar = text.charAt(charIndex);
charIndex += 1;
return currentChar;
};
 var number = function () {
var number, string = '';
if (currentChar === '-') {
string = '-';
next('-');
}
while (currentChar >= '0' && currentChar <= '9') {
string += currentChar;
next();
}
if (currentChar === '.') {
string += '.';
while (next() && currentChar >= '0' && currentChar <= '9') {
string += currentChar;
}
}
if (currentChar === 'e' || currentChar === 'E') {
string += currentChar;
next();
if (currentChar === '-' || currentChar === '+') {
string += currentChar;
next();
}
while (currentChar >= '0' && currentChar <= '9') {
string += currentChar;
next();
}
}
number = +string;
if (isNaN(number)) {
error("Bad number");
}
else {
return number;
}
};
 var string = function () {
var hex;
var string = '';
var uffff;
if (currentChar === '"') {
while (next()) {
if (currentChar === '"') {
next();
return string;
}
else if (currentChar === '\\') {
next();
if (currentChar === 'u') {
uffff = 0;
for (var i = 0; i < 4; i += 1) {
hex = parseInt(next(), 16);
if (!isFinite(hex)) {
break;
}
uffff = uffff * 16 + hex;
}
string += String.fromCharCode(uffff);
}
else if (typeof escapee[currentChar] === 'string') {
string += escapee[currentChar];
}
else {
break;
}
}
else {
string += currentChar;
}
}
}
error("Bad string");
};
var white = function () {
while (currentChar && currentChar <= ' ') {
next();
}
};
var word = function () {
switch (currentChar) {
case 't':
next('t');
next('r');
next('u');
next('e');
return true;
case 'f':
next('f');
next('a');
next('l');
next('s');
next('e');
return false;
case 'n':
next('n');
next('u');
next('l');
next('l');
return null;
}
error("Unexpected '" + currentChar + "'");
};
var value;
var array = function () {
var array = [];
if (currentChar === '[') {
next('[');
white();
if (currentChar === ']') {
next(']');
return array;
}
while (currentChar) {
array.push(value());
white();
if (currentChar === ']') {
next(']');
return array;
}
next(',');
white();
}
}
error("Bad array");
};
var object = function () {
var key,object = {};
if (currentChar === '{') {
next('{');
white();
if (currentChar === '}') {
next('}');
return object;
}
while (currentChar) {
key = string();
white();
next(':');
if (Object.hasOwnProperty.call(object, key)) {
error('Duplicate key "' + key + '"');
}
object[key] = value();
white();
if (currentChar === '}') {
next('}');
return object;
}
next(',');
white();
}
}
error("Bad object");
};
 value = function () {
white();
switch (currentChar) {
case '{':
return object();
case '[':
return array();
case '"':
return string();
case '-':
return number();
default:
return currentChar >= '0' && currentChar <= '9' ? number() : word();
}
 };
 return function (source, reviver) {
 var result;
 text = source;
 charIndex = 0;
 currentChar = ' ';
 result = value();
 white();
 if (currentChar) {
 error("Syntax error");
 }
var walk = function(holder,key) {
var k, v, value = holder[key];
if (value && typeof value === 'object') {
for (k in value) {
if (Object.hasOwnProperty.call(value, k)) {
v = walk(value, k);
if (v !== undefined) {
value[k] = v;
}
else {
delete value[k];
}
}
}
}
return reviver.call(holder, key, value);
}
if (typeof reviver === 'function') {
return (function(holder, key) {
walk(holder, key);
})({'': result}, '');
}
else {
return result;
}
 };
}());
var SystemMessage = {
variation: 0,
template: function (message) {
var image = "msMError.gif";
if (this.variation != 0) {
image = "msMOk.gif";
}
var frame = "<div id='noSystem' class='msM'>"
+ "<div class='picture'><img src=\'"+Jpy.picurl+"/i/ge/"+image+"\' alt='Hinweis'></div>"
+ "<div class='message'>"
+ "<p>"
+ message
+ "</p>"
+ "</div>"
+ "</div>"
return frame;
},
success: function (message) {
this.variation = 1;
document.getElementById('no').innerHTML = this.template(message);
},
error: function (message) {
document.getElementById('no').innerHTML = this.template(message);
},
loading: {
start: function () {
document.getElementById('ly').style.display = "block";
var layer = DOM.div({id:"lyWait",className:"layer"});
layer.innerHTML = "<span class='wait'><img src=\'"+Jpy.picurl+"/i/fu/bounce.gif\'>Bitte warten ...</span>";
document.getElementById('ly').appendChild(layer);
},
end: function () {
if (document.getElementById('lyWait')) {
document.getElementById('ly').removeChild(document.getElementById('lyWait'));
}
}
},
confirm: {
show: function (message, trigger, confirmFunction, abortFunction, offset) {
Jpy.remove("lyConfirm");
if(!message) {
message = "Bitte Vorgang bestätigen.";
}
if(!trigger) {
trigger = document.getElementById('rs');
}
if(!confirmFunction || confirmFunction == null) {
confirmFunction = (function (trigger) {
return function () {
window.location = trigger.href;
}
})(trigger);
}
if(!abortFunction || abortFunction == null) {
abortFunction = function () {
Jpy.remove("lyConfirm");
};
}
var frame = Jpy.layerDragable.add(trigger, "lyConfirm", "400px", offset);
Jpy.layerDragable.drag.init("lyConfirm");
this.prepareLayout(frame, message, confirmFunction, abortFunction);
},
prepareLayout: function (frame, message, confirmFunction, abortFunction) {
var messageFrame = DOM.div({className:"fs12 taL lh20",style:"background:#e3e3e3;width:400px"});
var paddingFrame = DOM.div({style:{padding:"10px"}});
paddingFrame.innerHTML += message;
messageFrame.appendChild(paddingFrame)
var actionbar = DOM.actionbar("Bestätigen", "Abbrechen");
actionbar.abort.onclick = abortFunction
if(typeof confirmFunction == "string") {
actionbar.send.onclick = function () {
return eval(confirmFunction);
}
}
else {
actionbar.send.onclick = confirmFunction;
}
DOM.append(frame, [messageFrame, actionbar.frame])
}
},
inline: {
error: function (text, delay, position) {
var hideDelay = delay || 2000;
var layer = DOM.div({id:"lyMessage",className:"layer"});
if (position) {
layer.style.top = position.y;
layer.style.left = position.x;
}
else {
layer.style.top = Jpy.getScrolling().y + 200;
}
layer.innerHTML = "<span class='error'><span class='icReadme'>&nbsp;</span>"+text+"</span>";
var frame = Jpy.id("ly");
frame.appendChild(layer);
frame.style.display = "block";
SystemMessage.inline.hide(hideDelay);
},
success: function (text, delay, position) {
var hideDelay = delay || 2000;
var layer = DOM.div({id:"lyMessage",className:"layer"});
if (position) {
layer.style.top = position.y;
layer.style.left = position.x;
}
else {
layer.style.top = Jpy.getScrolling().y + 200;
}
layer.innerHTML = "<span class='success'><span class='icOk'>&nbsp;</span>"+text+"</span></span>";
var frame = Jpy.id("ly");
frame.appendChild(layer);
frame.style.display = "block";
SystemMessage.inline.hide(hideDelay);
},
hide: function (time) {
SystemMessage.inline.hideJob = window.setTimeout(function(){Jpy.remove("lyMessage")}, time);
}
}
}
var ProfilVisitors = {
show: function (trigger) {
if (document.getElementById('lyProfilVisitorsFrame')) {
Jpy.remove('lyProfilVisitorsFrame');
}
else {
this.load(trigger);
}
},
load: function (trigger) {
SystemMessage.loading.start();
var getProfileVisitors = new AjaxHandler();
var callback = {
json: true,
success: function(data) {
SystemMessage.loading.end();
ProfilVisitors.list = data;
ProfilVisitors.inject(trigger);
}
};
getProfileVisitors.request('POST', "/backend/user/profileVisitors.php", callback);
},
inject: function (trigger) {
var frame = Jpy.layerDragable.add (trigger, "lyProfilVisitorsFrame", "630px", {x:-500,y:-290})
var box = DOM.div({className:"bgW fs12 ldN pd10 cf"});
box.innerHTML = "<div class='pd5 fs12 cf' style='width:600px'><b>Meine letzten Profilbesucher</b> (max. 20)</div>"
for (var n in ProfilVisitors.list) {
if (ProfilVisitors.list[n].stamp != undefined) {
var userImage = Jpy.getUserImage(ProfilVisitors.list[n].stamp.profileImage);
var userLink = document.createElement('a');
userLink.href = "/user/"+ProfilVisitors.list[n].stamp.nickname;
if (User.profilePopup != "n") {
userLink.target = "_blank";
}
var userStamp = Userstamp.read(ProfilVisitors.list[n].stamp);
var entry = DOM.div({className:"fl mr5",style:{width:"110px",height:"130px",fontSize:"11px"}})
userLink.appendChild(userImage);
entry.appendChild(userLink);
entry.innerHTML += "<br>"+userStamp;
box.appendChild(entry);
}
}
frame.appendChild(box);
Jpy.layerDragable.drag.init("lyProfilVisitorsFrame");
}
}
var Emotions = {
list: [4],
load: function (receiverId, receiverNickname, trigger, offset) {
if (!offset) {
offset = false;
}
var getEmotions = new AjaxHandler();
var callback = {
json: true,
success: function(data) {
if(data == "-1") {
alert("Dein Profil muss erst aktiviert werden!");
return false;
}
Emotions.prepare(data.emotions, receiverId, receiverNickname, trigger, offset);
}
};
var parameters = {
receiverId : receiverId,
receiverNickname : receiverNickname
}
getEmotions.request('POST', "/backend/user/emotion.php?h="+User.hash, callback, parameters);
},
prepare: function(emotions, receiverId, receiverNickname, trigger, offset) {
var ids = [];
var names = [];
var icons = [];
var charges = [];
for (var n in emotions) {
ids.push(emotions[n].id);
names.push(emotions[n].name);
icons.push(emotions[n].icon);
charges.push(emotions[n].charge);
}
Emotions.list[0] = ids;
Emotions.list[1] = names;
Emotions.list[2] = icons;
Emotions.list[3] = charges;
Emotions.show(receiverId, receiverNickname, 3, 0, trigger, offset);
},
show: function (receiverId, receiverNickname, sort, mode, trigger, offset) {
function appendEmotions (mode) {
var footerStatus = 0;
if (!mode) {
mode = 0;
}
var frame = DOM.div({id:"em"});
var box = DOM.div({className:"emFrame"});
var heading = DOM.div({className:"pd5 bgG1",text:"<div class='user' style='margin-left:5px'>Emotion an "+receiverNickname+"</div>"});
box.appendChild(heading);
var sortByName = DOM.div({className:"name",text:"Bezeichnung"});
if (sort == 1) {
sortByName.innerHTML = "<span class='icDown'>&nbsp;</span> Bezeichnung";
}
sortByName.onclick = function () {
Emotions.show(receiverId, receiverNickname, 1, mode);
}
var sortByCost = DOM.div({className:"cost",text:"Kosten"});
if (sort == 3) {
sortByCost.innerHTML = "<span class='icDown'>&nbsp;</span>Kosten</div>";
}
sortByCost.onclick = function () {
Emotions.show(receiverId, receiverNickname, 3, mode)
}
box.appendChild(DOM.div({className:"heading cf",child:[sortByName,sortByCost]}));
var numberOfEmotions = emotions.length;
if (emotions.length > 15) {
if (mode == 0) {
numberOfEmotions = 15;
footerStatus = 0;
}
else if (mode == 1) {
numberOfEmotions = emotions.length;
footerStatus = 1;
}
}
for (var i = 0; i < numberOfEmotions; i++) {
var rowClassName = "item";
var title = "Hier klicken um "+receiverNickname+" - "+emotions[i][1]+" - zu überreichen!";
if (User.credits < emotions[i][3]) {
rowClassName = "item unvaluable";
title = "Diese Emotion kannst du dir nicht leisten!";
}
var image = "<img src=\'"+Jpy.picurl+"/i/em/"+emotions[i][2]+"\'>";
if (emotions[i][0] < 48) {
image = "<span class='emG em"+emotions[i][0]+"'>&nbsp;</span>";
}
var entry = DOM.div({className:rowClassName+" cf"});
var name = DOM.div({className:"name",text:image+" "+emotions[i][1]})
var cost = DOM.div({className:"cost",text:"<span class='icCredit'>"+emotions[i][3]+"</span>"})
var link = DOM.link({href:"/emotions/"+receiverNickname+"/"+receiverId+"/emotionAdd/"+emotions[i][0]+"?h="+User.hash,child:[name,cost]});
link.onclick = (function (receiverId, emotionId, cost, trigger, image, text, icon) {
return function () {
Jpy.remove("lyEmotionAdd");
var sure = Jpy.layer.add("lyEmotionAdd", trigger, {x:0,y:0});
var vote = DOM.div({className:"taC bgG1 bbG2 fs12 cp",style:{width:"310px"}})
vote.innerHTML = "<div style='height:29px;line-height:23px;padding-top:2px;background:#e1e1e1' class='fwB'>"+Jpy.truncate(18, text)+" für "+cost+" <span class='icCredit'>&nbsp;</span>übergeben! &nbsp;<span class='inCo'><span class='icAdd'>&nbsp;</span></span></div>";
sure.appendChild(vote);
sure.onclick = function () {
Emotions.send(this, receiverId, emotionId, cost, image, text, icon);
}
return false;
}
})(receiverId, emotions[i][0], emotions[i][3], link, image, emotions[i][1], emotions[i][2]);
if (User.credits < emotions[i][3]) {
link.onclick = function () {
return false;
}
}
link.title= title;
entry.appendChild(link);
box.appendChild(entry);
}
if (footerStatus == 0) {
var footer = DOM.div({id:"emFooter",className:"footer ldN",text:"(noch "+(emotions.length-numberOfEmotions)+" weitere) <span class='coB3'><span class='icDown'>&nbsp;</span>Mehr anzeigen</span>"});
footer.onclick = function () {
Emotions.show(receiverId, receiverNickname, 3, 1);
}
box.appendChild(footer);
}
var help = DOM.div({className:"help",text:"<a href='/shop/emotionsAdditional'><span class='icEmotion'>&nbsp;</span> Zusätzliches Emotions</a><a href='http://www.jappy.de/infos/emotions'><span class='icHelp'>&nbsp;</span> Was sind Emotions?</a><div class='taR'><span class='inCo rb5 cp' onclick='Emotions.close()'>Abbrechen</span></span></div></p>"})
box.appendChild(help);
frame.appendChild(box);
document.getElementById("emFrame").appendChild(frame);
}
var emotions = Jpy.sortMultiByColumn(sort, Emotions.list, 0);
if (document.getElementById('emFrame')) {
Jpy.show("emFrame");
Jpy.remove("em");
appendEmotions(mode);
Jpy.layerDragable.drag.init("emFrame");
}
else {
var offsetPosition = {};
if (offset == false) {
offsetPosition = {
x:-250,
y:-250
};
}
else {
offsetPosition = offset;
}
var frame = Jpy.layerDragable.add(trigger, "emFrame", "310px", offsetPosition);
if (offset == false) {
frame.style.top = "300px";
}
appendEmotions(mode);
Jpy.layerDragable.drag.init("emFrame");
}
},
send: function (trigger, receiverId, emotionId, cost, image, text, icon) {
var getEmotions = new AjaxHandler();
var callback = {
json: true,
success: function(data) {
Emotions.confirm(data, trigger, cost, image, text, icon, emotionId);
}
};
var parameters = {
receiverId : receiverId,
emotionId : emotionId,
action: "emotionAdd"
}
getEmotions.request('POST', "/backend/user/emotion.php?h="+User.hash, callback, parameters);
},
confirm: function (data, trigger, cost, image, text, icon, emotionId) {
if (data.ok) {
Jpy.remove("emFrame");
Jpy.remove("lyEmotionConfirm")
var stamp = data.ok;
var frame = Jpy.layer.add("lyEmotionConfirm", trigger, {x:-100,y:0});
frame.style.top = Jpy.getScrolling().y + 300;
frame.className = "bd3G1";
var box = DOM.div({className:"bgW pd10 bdG6 fs12 cf",style:{width:"300px"}});
var picture = DOM.div({className:"pd5 taC fl",style:{width:"80px"}});
Jpy.remove("lyEmotionAdd");
var userImage = Jpy.getUserImage(stamp.profileImage);
var userLink = document.createElement('a');
userLink.href = "/user/"+stamp.nickname;
if (User.profilePopup != "n") {
userLink.target = "_blank";
}
userLink.appendChild(userImage);
picture.appendChild(userLink);
var plain = DOM.div({className:"fl taL pd5 ldN lh17",style:{width:"200px"}});
plain.innerHTML = Userstamp.read(stamp)+"<br><br>"+image+" <b>"+text+"</b> erfolgreich präsentiert.<br><br><span class=='coG3'> <b>"+cost+"</b> <span class='icCredit'>&nbsp;</span> vom Konto abgezogen.</span>";
var actionbar = DOM.actionbar("OK", "Details")
actionbar.frame.style.width = "300px";
actionbar.send.onclick = function () {
Jpy.remove("lyEmotionConfirm");
return false;
}
actionbar.abort.onclick = function () {
if (User.profilePopup == "n") {
location.href = "/user/"+stamp.nickname+"/emotions/"
}
else {
Jpy.remove("lyEmotionConfirm");
Jpy.popupProfile(stamp.nickname);
}
return false;
}
plain.appendChild(actionbar.frame);
box.appendChild(picture);
box.appendChild(plain);
frame.appendChild(box);
frame.appendChild(actionbar.frame);
if (document.getElementById("prEmotions")) {
var emotion = DOM.div({className:"emG em"+emotionId,style:{border:"1px solid #666666"},text:"<img src=\'"+Jpy.picurl+"/i/em/"+icon+"\'>"});
if (emotionId < 48) {
emotion.innerHTML = "<span class='emG em"+emotionId+"'>&nbsp;</span>";
emotion.className = "emN";
}
var entries = document.getElementById("prEmotions").getElementsByTagName("div");
document.getElementById("prEmotions").insertBefore(emotion, entries[0]);
}
}
else {
Jpy.remove("emFrame");
Jpy.remove("lyEmotionAdd");
if (data == -6) {
SystemMessage.inline.error("Du hast diese Nutzer heute bereits eine Emotions überreicht!");
}
else if (data == -8) {
SystemMessage.inline.error("Kontaktfilter, Ignorefunktion oder Kontaktbann verhindern die Übergabe");
}
else if (data == -5) {
SystemMessage.inline.error("Diese Emotion kannst du dir nicht leisten!");
}
else {
SystemMessage.inline.error("Fehler: Emotion wurde nicht übergeben!");
}
}
},
close: function () {
Jpy.remove("emFrame");
Jpy.remove("lyEmotionAdd");
}
}
var OnlineStatus = {
DATABASE: [
[0,"Offline",0],
[1,"Online",1],
[2,"Abwesend",0],
[3,"Kurz weg",1],
[4,"Nicht stören!",5],
[5,"Profilarbeiten",5],
[6,"Gute Laune",2],
[7,"Bin down",2],
[8,"Bin traurig",2],
[9,"Love",2],
[10,"Herzschmerz",2],
[11,"groovin",2],
[12,"Party!",2],
[13,"Langweilig!",2],
[14,"Krank",2],
[15,"Regenbogen",2],
[16,"Stress",2],
[17,"Gleich weg",5],
[18,"Bin daheim",4],
[19,"Arbeiten",3],
[20,"Studieren",3],
[21,"Schreiben",3],
[22,"Lesen",3],
[23,"Neues Bild!",5],
[24,"Kaffee trinken",3],
[25,"Sauer",2],
[26,"Gereizt",2],
[27,"Im Internetcafe",4],
[28,"Fernsehen",3],
[29,"Essen",3],
[30,"Pause",3],
[31,"Spielen!",3],
[32,"Planschen",3],
[33,"Bin müde",2],
[34,"Telefonieren",3],
[35,"Schlafen",3],
[36,"Habe Besuch.",5],
[37,"Sporteln",3],
[38,"Shoppen",3],
[39,"WC",4],
[40,"Gassi gehen",4],
[41,"Sonnen",3],
[42,"Urlaub",3],
[43,"Hausarbeit",3],
[44,"Rauchen",3],
[45,"Im Garten",4],
[46,"Chillen",3],
[47,"Stylen",3],
[48,"Handarbeiten",3],
[49,"Kochen",3],
[50,"Nachdenklich",2],
[51,"Gl&uuml;cklich",2],
[52,"Surfe mit Handy",0],
[53,"Verwirrt",2]
],
AREA: function() {
return document.getElementById('dr');
},
forwardUser: false,
readCategory: function(category) {
var display = document.getElementById('stList');
var all = false;
if (arguments.length == 0) all = true;
var resultDescription = [];
var resultIds = [];
if (all == false) {
for ( var i = 0, len = OnlineStatus.DATABASE.length; i < len; i++ ) {
var j = OnlineStatus.DATABASE[i][2];
var description = OnlineStatus.DATABASE[i][1];
if (j == category) {
resultDescription.push(description);
}
}
resultDescription.sort();
for ( var k = 0, len = resultDescription.length; k < len; k++ ) {
var statusDescription = resultDescription[k];
for ( var i = 0, len2 = OnlineStatus.DATABASE.length; i < len2 ; i++ ) {
var description = OnlineStatus.DATABASE[i][1];
var ids = OnlineStatus.DATABASE[i][0];
if (description == statusDescription) {
resultIds.push(ids);
}
}
}
}
else {
for ( var i = 0, len = OnlineStatus.DATABASE.length; i < len; i++ ) {
if (OnlineStatus.DATABASE[i][2] != 0) {
resultDescription.push(OnlineStatus.DATABASE[i][1]);
resultIds.push(OnlineStatus.DATABASE[i][0]);
}
}
}
display.innerHTML = "";
display.innerHTML = "";
var template = "";
for (var i = 0, len = resultDescription.length; i < len; i++) {
template += "<a href='#' onclick='OnlineStatus.setStatus("+resultIds[i]+")' id='status"+resultIds[i]+"' class='pd3' title='Hier klicken und dein Status ist "+resultDescription[i]+"'><div class='stFr stLa stL"+resultIds[i]+"'></div><em>"+resultDescription[i]+"</em></a>";
}
display.innerHTML += template;
OnlineStatus.clearActiveNavigation();
if (arguments.length == 0) category = "";
document.getElementById('stCat'+category).className = "activeSt";
},
clearActiveNavigation: function () {
var navigationElements = ['stCat1', 'stCat2', 'stCat3', 'stCat4', 'stCat5', 'stCat']
for (var i = 0, len = navigationElements.length; i < len; i++) {
document.getElementById(navigationElements[i]).className = "";
}
},
toggleSelection: function() {
var area = OnlineStatus.AREA();
if (area.style.display == "block") {
area.style.display = "none";
document.getElementById("brStatus").className = "icStatus"
}
else {
var selection = OnlineStatus.getSelectionTemplate();
area.innerHTML = selection;
area.style.display = "block";
document.getElementById("brStatus").className = "icStatus active fwB";
OnlineStatus.showStart();
}
},
hideSelection: function () {
var area = OnlineStatus.AREA();
area.innerHTML = "";
area.style.display = "none";
document.getElementById("brStatus").className = "icStatus";
},
getSelectionTemplate: function () {
var selection = "";
if (document.getElementById("udStatus").className == "icSt2") {
selection += "<div class='pd15 taC bgY1' style='border-top:2px solid #ebdeb9'><big><b>Wieder zurück?</b> Abwesenheit durch die Wahl eines neuen Status beenden!</big></div>";
OnlineStatus.forwardUser = true;
}
selection += ""
+ "<div id='st' class='frame'>"
+ "<div id='stSet' class='selection cf'>"
+ "<div class='navigation'>"
+ "<a id='stCat1' onclick='OnlineStatus.showStart()' class='activeSt'>Status wählen</a>"
+ "<a id='stCat2' onclick='OnlineStatus.readCategory(2)'>So fühle ich mich</a>"
+ "<a id='stCat3' onclick='OnlineStatus.readCategory(3)'>Das mache ich</a>"
+ "<a id='stCat4' onclick='OnlineStatus.readCategory(4)'>Da bin ich</a>"
+ "<a id='stCat5' onclick='OnlineStatus.readCategory(5)'>Achtung!</a>"
+ "<a id='stCat' onclick='OnlineStatus.readCategory()'>Alle anzeigen</a>"
+ "</div>"
+ "<div id='stList' class='listing'></div>"
+ "</div>"
+ "<a class='ddUp' onclick='OnlineStatus.hideSelection()'><img src='"+Jpy.picurl+"/i/ic/poDoUp.gif'></a>"
+ "</div>";
return selection;
},
showStart: function() {
OnlineStatus.clearActiveNavigation();
var activeStatusId = OnlineStatus.getActiveStatus();
var selection = ""
+"<a href='#' onclick='OnlineStatus.setStatus(1)' id='status1' class='pd3' title='Hier klicken und dein Status ist Online'><div class='stFr stLa stL1'></div><em>Ich bin online!</em></a>"
+"<a href='#' onclick='OnlineStatus.setStatus(3)' id='status3' class='pd3' title='Hier klicken und dein Status ist kurz weg'><div class='stFr stLa stL3'></div><em>Ich bin kurz weg!</em></a>"
+"<a href='#' onclick='OnlineStatus.setAfk()' id='status2' class='pd3' title='Hier klicken um eine Abwesenheitsmeldung einzutragen'><div class='stFr stLa stL2'></div><em>Ich bin abwesend</em></a>"
+"<a href='#' onclick='OnlineStatus.setStatus(9)' id='status6' class='pd3' title='Hier klicken um Status "+OnlineStatus.DATABASE[9][1]+" zu setzen'><div class='stFr stLa stL9'></div><em>"+OnlineStatus.DATABASE[9][1]+"</em></a>"
+"<a href='#' onclick='OnlineStatus.setStatus(6)' id='status9' class='pd3' title='Hier klicken um Status "+OnlineStatus.DATABASE[6][1]+" zu setzen'><div class='stFr stLa stL6'></div><em>"+OnlineStatus.DATABASE[6][1]+"</em></a>"
+"<a href='#' onclick='OnlineStatus.setStatus(4)' id='status46' class='pd3' title='Hier klicken um Status "+OnlineStatus.DATABASE[4][1]+" zu setzen'><div class='stFr stLa stL4'></div><em>"+OnlineStatus.DATABASE[4][1]+"</em></a>"
+"<a href='#' onclick='OnlineStatus.setStatus(11)' id='status11' class='pd3' title='Hier klicken um Status "+OnlineStatus.DATABASE[11][1]+" zu setzen'><div class='stFr stLa stL11'></div><em>"+OnlineStatus.DATABASE[11][1]+"</em></a>"
+"<a href='#' onclick='OnlineStatus.setStatus(19)' id='status19' class='pd3' title='Hier klicken um Status "+OnlineStatus.DATABASE[19][1]+" zu setzen'><div class='stFr stLa stL19'></div><em>"+OnlineStatus.DATABASE[19][1]+"</em></a>"
+"<a href='#' onclick='OnlineStatus.setStatus("+OnlineStatus.DATABASE[activeStatusId][0]+")' id='status11' class='pd3' style='border:2px solid #dcdcdc;color:#417bc4' title='Du bist "+OnlineStatus.DATABASE[activeStatusId][1]+"'><div class=\'stFr stLa stL"+OnlineStatus.DATABASE[activeStatusId][0]+"\'></div><em>Aktiv: "+OnlineStatus.DATABASE[activeStatusId][1]+"</em></a>";
document.getElementById('stList').innerHTML = selection;
document.getElementById('stCat1').className = "activeSt";
},
getActiveStatus: function() {
var statusId = document.getElementById("udStatus").className;
return statusId.replace(/[^0-9]*/g, "");
},
setStatus: function (statusId) {
var setStatus = new AjaxHandler();
var callback = {
json: true,
success: function(data) {
if (!data.error) {
document.getElementById("udStatus").className = "icSt"+data;
OnlineStatus.hideSelection();
SystemMessage.inline.success("Du bist jetzt <span class=\'icSt"+data+"\'>&nbsp;</span>")
if (OnlineStatus.forwardUser == true) {
window.setTimeout("OnlineStatus.forwardToStart()", 500);
}
}
else {
SystemMessage.error(data)
}
}
};
var parameters = {
statusId : statusId
};
setStatus.request('POST', "/backend/setStatus.php?h="+User.hash, callback, parameters);
},
forwardToStart: function () {
var url = window.location.href;
var newUrl = url.match(/http\:\/\/[a-z]{1,10}\.jappy\.[a-zA-Z]{2,4}/gi);
window.location.href = newUrl;
},
setAfk: function() {
document.getElementById('stSet').style.background = "#F1f1f1";
var afkConfig = ""
+ "<form method='post' action='/settings/awayMessage' accept-charset='UTF-8'>"
+ "<div class='pd15'>"
+ "<input id='awayMessageOn' type='hidden' name='awayMessage[toggle]' value='1'>"
+ "<textarea name='awayMessage[awayMessage]' id='awayMessageText' rows='3' wrap='VIRTUAL' class='teG3' style='width:100%'>Ich bin abwesend.</textarea>"
+ "</div>"
+ "<div class='liAc'>"
+ "<a onclick='OnlineStatus.hideSelection();' class='inCo rb5 cp'>Abbrechen</a> <a onclick='MessageEditor.preview(\"awayMessageText\",\"welcome\");' class='inCo rb5 cp'>Vorschau</a> <button type='submit' accesskey='s' class='inCo rb5 cp'><span class='icOk'>&nbsp;</span>Abwesenheit speichern!</button>"
+ "</div>"
+ "</form>";
document.getElementById('stSet').innerHTML = afkConfig;
MessageEditor.register("awayMessageText", "noSmilies", "welcome", 32);
}
}
String.prototype.trim = function() {
 return this.replace(/^\s+|\s+$/, '');
}
// Thu Sep  2 09:39:56 2010