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.numberFormat = function(number, precision, standard) {
if(!number && !standard) {
standard = 0;
}
var numberToFormat = number || standard;
var numberFormatted = new Number(numberToFormat);
return numberFormatted.toFixed(precision);
}
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.buddies.list.data;
if (this.len > 0 && this.len < 3) {
var keyword = new RegExp("^"+this.trigger.value, "i");
for (var i in buddies) {
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 in buddies) {
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 = {
json: true,
success: function(data) {
Jpy.buddies.list = new DataStorage(data)
Jpy.buddies.list.sortBy("stamp.nickname")
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 () {
var layer = new Jpy.layer.get({
trigger: Jpy.searchSuggest.trigger,
offset: {x:0,y:22},
id: "lySearchSuggest"
});
this.frame = layer.frame;
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 elem = document.getElementById(id);
return elem;
}
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.overview = {
show: function () {
var layer = new Jpy.layer.get({
offset: {x:0,y:30},
trigger: this.trigger,
instructions: {
className: "overview",
style: {
display: "block"
}
}
})
this.frame = layer.frame;
this.trigger.className = "hover end cp";
this.trigger.getElementsByTagName('span')[0].className = "icUp";
var observer = DOM.link({text:"<span class='icAbos'>&nbsp;</span>Abos</a>",href:"/myjappy/observer"})
var chat = DOM.link({href:"#",text:"<span class='icChat'>&nbsp;</span>Chat"});
chat.setAttribute("target", "chat");
chat.onclick = function () {
Twaddler.enterMultiUserChat(User.id);
return false;
}
var list = DOM.div({child:[observer,chat]})
if (!User.components) User.components = ["1","1","1","1"];
if(User.components[1] == 1) {
var com = DOM.link({text:"<span class='icComs'>&nbsp;</span>Coms <i>(Gruppen)</i>",href:"/com"});
list.appendChild(com);
}
if(User.components[3] == 1) {
var event = DOM.link({text:"<span class='icEvents'>&nbsp;</span>Events <i>(Partys, Treffen )</i>",href:"/event"});
list.appendChild(event);
}
if(User.components[0] == 1) {
var flog = DOM.link({text:"<span class='icFlog'>&nbsp;</span>Flogs <i>(Infos an Freunde)</i>",href:"/flog"});
list.appendChild(flog);
}
var forum = DOM.link({text:"<span class='icForumTopic'>&nbsp;</span>Forum",href:"/forum"});
list.appendChild(forum);
var games = DOM.link({text:"<span class='icSt31'>&nbsp;</span>Spiele",href:"/infos/games"});
list.appendChild(games);
if(User.components[2] == 1) {
var almanac = DOM.link({text:"<span class='icAlmanac'>&nbsp;</span>Termine",href:"/almanac"});
list.appendChild(almanac);
}
this.list = list;
list.onmouseover = function () {
Jpy.layer.remove('lyNavigationExtra');
}
this.frame.appendChild(list);
},
hide: function () {
Jpy.layer.remove('lyNavigationExtra');
if (!this.frame) return;
this.frame.style.display = "none";
this.trigger.className = "end cp";
this.trigger.childNodes[1].className = "icDown";
},
toggle: function (trigger) {
this.trigger = trigger;
if (this.frame && this.frame.style.display == "block") {
this.hide();
}
else {
this.show();
}
}
}
Jpy.headNavigation = {
init: function () {
var that = Jpy.headNavigation;
if (document.getElementById("heCredits")) {
this.credits = Jpy.id("heCredits");
this.credits.onclick = function () {
that.show(that.credits, "credits");
return false;
}
this.rank = Jpy.id("heRank");
this.rank.onclick = function () {
that.show(that.rank, "rank");
return false;
}
}
this.status = Jpy.id("heStatus");
this.status.onclick = function () {
that.abort();
OnlineStatus.toggleSelection();
Jpy.overview.hide();
return false;
}
this.status.onmouseover = function () {
that.abort();
}
},
abort: function () {
if (this.active.id != "") {
Jpy.layer.remove(this.active.id);
this.active = {
id: "",
type: ""
};
}
this.setClass();
if (this.mouseover == true) {
this.removeMouseover();
}
},
active: {
id: "",
type: ""
},
show: function(trigger, type, source) {
source = source || "click";
if (source == "click" && this.active.type == type) {
this.mouseover = true;
this.abort();
return;
}
else if (source == "click" && this.active.type != type) {
this.mouseover = false;
this.abort();
}
else if (source == "mouse" && this.active.type != type) {
this.mouseover = false;
this.abort();
}
else {
return;
}
this[type].className = "link hover";
var layer = new Jpy.layer.get({
trigger:trigger,
id:"heNavigationUser",
offset:{x:0,y:28}
});
if (this.mouseover == false) {
this.addMouseover();
}
this.active.id = layer.id;
this.active.type = type;
var layout = new this.template(type);
layer.frame.appendChild(layout.frame);
},
mouseover: false,
removeMouseover: function () {
this.credits.onmouseover = function () {
return false;
}
this.rank.onmouseover = function () {
return false;
}
},
addMouseover: function () {
var that = Jpy.headNavigation;
this.credits.onmouseover = function () {
that.show(that.credits, "credits", "mouse");
}
this.rank.onmouseover = function () {
that.show(that.rank, "rank", "mouse");
}
this.mouseover = true;
},
setClass: function () {
if (document.getElementById("heCredits")) {
this.credits.className = "link";
this.rank.className = "link";
}
},
template: function (type) {
if (type == "credits") {
this.frame = DOM.div({className:"headDropdown",child:[
DOM.link({href:"/myjappy/transactions",text:"<span class='icCredit'>&nbsp;</span>Transaktionen"}),
DOM.link({href:"/shop/features",text:"<span class='icFunction'>&nbsp;</span>Funktionelle Erweiterungen"}),
DOM.link({href:"/shop/gifts",text:"<span class='icGift'>&nbsp;</span>Virtuelle Geschenke"}),
DOM.link({href:"/shop/emotionsAdditional",text:"<span class='icEmotion'>&nbsp;</span>Emotions"})
]
})
}
else if (type == "rank") {
this.frame = DOM.div({className:"headDropdown",child:[
DOM.link({href:"/myjappy/rank",text:"<span class='icRank'>&nbsp;</span>Mein Rang"}),
DOM.link({href:"/myjappy/experience",text:"<span class='icXp'>&nbsp;</span>Erfahrung"})
]
})
}
}
}
Jpy.urlHash = (function() {
var listeners = [];
if (navigator.appName.indexOf("Internet Explorer") != -1) {
listeners.indexOf = function(needle) {
var numberOfElements = this.length;
for(var i = numberOfElements; i--; ) {
if(this[i] == needle) {
return i;
}
}
return -1;
};
}
function addListener(functionName) {
if(listeners.indexOf(functionName) == -1) {
listeners.push(functionName);
try {
(new Function("return "+functionName+"(Jpy.urlHash.hash)"))();
}
catch(ex) {}
}
}
function removeListener(functionName) {
var pos = listeners.indexOf(functionName);
if(pos == -1) return;
listeners.splice(pos, 1);
}
function sendNotification() {
var numberOfFunctions = listeners.length
if(numberOfFunctions == 0) return;
for(var i = numberOfFunctions; i--; ) {
var functionName = listeners[i];
try {
(new Function("return "+functionName+"(Jpy.urlHash.hash)"))();
}
catch(ex) {}
}
}
function replace(hash) {
if (Jpy.getApp() < 0) {
var anker = DOM.div({
id:"anchor_"+hash
});
anker.innerHTML = "<a href=\"#\" name=\""+hash.substr(1)+"\"></a>";
if(Jpy.id("he")) {
Jpy.id("he").appendChild(anker);
}
}
Jpy.urlHash.hash = hash;
window.location.hash = hash;
if (Jpy.getApp() < 0) {
Jpy.remove("anchor_"+hash);
}
}
function set(key, value) {
var hash = Jpy.urlHash.hash ? Jpy.urlHash.hash : window.location.hash;
var reg = new RegExp("[#|;]"+key+"=[a-z0-9\\.\\-_,]*;", "i");
if(reg.test(hash)) {
var reg2 = new RegExp(";"+key+"=[a-z0-9\\.\\-_,]*;", "i");
var reg3 = new RegExp("#"+key+"=[a-z0-9\\.\\-_,]*;", "i");
if(reg2.test(hash)) {
hash = hash.replace(reg2, ";"+key+"="+value+";");
}
else if(reg3.test(hash)) {
hash = hash.replace(reg3, "#"+key+"="+value+";");
}
else {
hash = hash.replace(reg, key+"="+value+";");
}
}
else {
if(/;$/.test(hash)) {
hash += key+"="+value+";";
}
else if(/#/.test(hash)) {
hash += key+"="+value+";";
}
else {
hash = key+"="+value+";";
}
}
replace(hash);
}
function remove(key) {
var hash = Jpy.urlHash.hash ? Jpy.urlHash.hash : window.location.hash;
var reg = new RegExp("[#|;]"+key+"=[a-z0-9\\.\\-_,]*;", "i");
if(reg.test(hash)) {
var reg2 = new RegExp(";"+key+"=[a-z0-9\\.\\-_,]*;", "i");
if(reg2.test(hash)) {
hash = hash.replace(reg2, ";");
}
else {
hash = hash.replace(reg, "");
}
}
replace(hash);
}
function get(key) {
var hash = Jpy.urlHash.hash ? Jpy.urlHash.hash : window.location.hash;
var reg = new RegExp("[#|;]"+key+"=[a-z0-9\\.\\-_,]*;", "i");
if(!reg.test(hash)) {
return false;
}
var regExec = new RegExp("[#|;]"+key+"=([a-z0-9\\.\\-_,]*);", "i");
return regExec.exec(hash)[1];
}
setInterval("Jpy.urlHash.watch()", 100);
return {
hash: null,
listener: {
add: function(functionName) {
addListener(functionName);
},
remove: function(functionName) {
removeListener(functionName);
}
},
watch: function() {
if(this.hash !== window.location.hash) {
this.hash = window.location.hash;
sendNotification();
}
},
set: function(key, value) {
set(key,value);
},
remove: function(key) {
remove(key);
},
get: function(key) {
return get(key);
}
}
})();
Jpy.initEvents = function () {
var more = Jpy.id('heMore');
more.onclick = function () {
Jpy.overview.toggle(more);
return false;
};
more.ondblclick = function () {
Jpy.overview.toggle(more);
return false;
};
Jpy.headNavigation.init();
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.getDate = function () {
var now = new Date();
return {
hh: Jpy.clearUnderTen(now.getHours()),
mm: Jpy.clearUnderTen(now.getMinutes()),
ddmmyyyy: ""+Jpy.clearUnderTen(now.getDate())+"."+Jpy.clearUnderTen(now.getMonth()+1)+"."+now.getFullYear()
}
}
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.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 (elem) {
elem = Jpy.getElement(elem);
if (!!(elem && elem.nodeType == 1)) {
if (elem.tagName == "TR") {
elem.style.display = "table-row";
}
else {
elem.style.display = "block";
}
}
}
Jpy.hide = function (elem) {
elem = Jpy.getElement(elem);
if (!!(elem && elem.nodeType == 1)) {
elem.style.display = "none";
}
}
Jpy.getElement = function (info) {
var elem;
if (typeof info == "string") {
if (document.getElementById(info)) {
elem = document.getElementById(info);
}
else {
elem = "";
}
}
else {
elem = info;
}
return elem;
}
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);
}
if (val == +val) {
val = val.toString();
}
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(!elem || !elem.className) {
return
}
var searchClass = new RegExp(name, "g");
if (searchClass.test(elem.className) == 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)})
},
hoverIcon: function (elem) {
elem.onmouseover = (function (elem) {
return function () {
Jpy.css.addClass(elem, 'hover');
var icon = elem.getElementsByTagName("span")[0];
icon.className = icon.className.replace(/Pale/gi,"");
elem.onmouseout = (function (elem, icon) {
return function () {
icon.className = icon.className += "Pale";
Jpy.css.removeClass(elem, "hover");
}
})(elem, icon);
}
})(elem);
},
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 (imageAddress, picWidth, imageHash, instructions) {
var image = DOM.image(instructions);
if (imageAddress == null || imageAddress == "" || imageAddress == undefined) {
image.src = Jpy.picurl+"/i/ge/Kb.gif";
}
else {
if ((/^http:/).test(imageAddress) == true) {
image.src = imageAddress;
}
else {
if (imageHash) {
image.src = Jpy.profilimageUrl+"/ub/xs/"+imageHash+"/"+imageAddress;
}
else {
image.src = Jpy.profilimageUrl+"/ub/xs/"+imageAddress;
}
}
}
if (picWidth) {
image.width = picWidth;
image.height = parseInt(picWidth) + 5;
}
return image;
}
Jpy.getCalendarWeek = function (timestamp) {
function getThursday(ts) {
var thursday = new Date();
thursday.setTime(ts.getTime() + (3-((ts.getDay()+6) % 7)) * 86400000);
return thursday;
}
var currentThursday = getThursday(timestamp)
var firstThursday = getThursday(new Date(timestamp.getFullYear(), 0, 4));
return Math.floor(1.5+(currentThursday.getTime()-firstThursday.getTime())/86400000/7);
}
Jpy.merge = function (container, feed) {
function merge(container, feed) {
for (var n in feed) {
if (Object.prototype.toString.call(feed[n]) == '[object Object]') {
if (container[n] == undefined) {
container[n] = feed[n];
}
else {
merge(container[n],feed[n])
}
}
else {
container[n] = feed[n];
}
}
}
merge(container, feed);
return container;
}
Jpy.layer = {
getMaxZIndex: function () {
var zIndex = 10000;
for (var n in this.list) {
if (this.list[n].zIndex > zIndex) {
zIndex = this.list[n].zIndex;
}
}
return zIndex+1;
},
list: {
},
remove: function (id) {
if (this.list[id]) {
this.list[id].remove();
}
},
get: function (instructions) {
var layers = document.getElementById("ly");
layers.style.display = "block";
instructions = instructions || {};
if (instructions.offset) {
if (instructions.offset.x == undefined) {
instructions.offset = {
x: instructions.offset[0],
y: instructions.offset[1]
}
}
}
else {
instructions.offset = {
x: 0,
y: 0
}
}
this.daughters = null;
var position = {};
if (instructions.trigger == undefined) {
position.y = Jpy.getScrolling().y + 250;
position.x = document.body.clientWidth/2 -430;
}
else {
position.y = Jpy.getOffsetPosition(instructions.trigger).y
position.x = Jpy.getOffsetPosition(instructions.trigger).x
}
if (instructions.position != undefined) {
position.y = instructions.position.y,
position.x = instructions.position.x
}
if (instructions.id != undefined) {
this.id = instructions.id;
}
else {
var id = new Date();
this.id = "layer_"+parseInt(id.getTime());
}
if (instructions.mother && instructions.mother != null) {
this.mother = instructions.mother;
if (Jpy.layer.list[instructions.mother] != undefined) {
var mother = Jpy.layer.list[instructions.mother];
if (mother.daughters == null) {
mother.daughters = {}
}
mother.daughters[this.id] = this
}
}
this.zIndex = Jpy.layer.getMaxZIndex();
var layerInstructions = {
id:this.id,
style:{
position: "absolute",
top: position.y+instructions.offset.y,
left: position.x+instructions.offset.x
}
}
if (instructions.instructions) {
layerInstructions = Jpy.merge(layerInstructions, instructions.instructions)
}
if (instructions.box) {
this.box = instructions.box;
}
if (instructions.type) {
this.type = instructions.type;
}
if (instructions.reference) {
this.reference = instructions.reference;
}
if (instructions.task) {
this.task = instructions.task;
}
this.frame = DOM.div(layerInstructions)
this.frame.style.zIndex = this.zIndex;
Jpy.layer.list[this.id] = this;
this.remove = function () {
if (this.daughters != undefined && this.daughters != null) {
if (Jpy.getLength(this.daughters) > 0) {
for (var n in this.daughters) {
if (this.daughters[n].id) this.daughters[n].remove();
}
this.dauthers = undefined;
this.mother = undefined;
}
else {
this.daughters = null;
}
}
if (this.task != null && this.taks != undefined) {
TaskManager.remove(this.task);
}
if (this.mother != undefined) {
if (Jpy.layer.list[this.mother] != undefined) {
delete Jpy.layer.list[this.mother].daughters[this.id];
}
}
if (this.frame) {
Jpy.remove(this.frame);
}
delete Jpy.layer.list[this.id];
}
this.highlight = function () {
var maxZIndex = Jpy.layer.getMaxZIndex();
this.frame.style.zIndex = maxZIndex;
this.zIndex = maxZIndex;
if (this.daughters != undefined) {
for (var n in this.daughters) {
this.daughters[n].highlight();
}
}
}
this.move = function (position, mode) {
mode = mode || "to";
if (mode == "by") {
this.frame.style.left= parseInt(this.frame.style.left) + position.x;
this.frame.style.top= parseInt(this.frame.style.top) + position.y;
}
else {
this.frame.style.left= position.x;
this.frame.style.top= position.y;
}
if (this.daughters != undefined) {
for (var n in this.daughters) {
var daughter = this.daughters[n];
daughter.move({
x: position.x + daughter.offset.x,
y: position.y + daughter.offset.y
}, mode)
}
}
}
layers.appendChild(this.frame)
if (this.mother) {
var motherFrame = Jpy.layer.list[this.mother].frame;
this.offset = {
x: Jpy.getOffsetPosition(this.frame).x - Jpy.getOffsetPosition(motherFrame).x,
y: Jpy.getOffsetPosition(this.frame).y - Jpy.getOffsetPosition(motherFrame).y
}
}
},
add: function (layerName, trigger, offSet) {
return new this.get({
id: layerName,
trigger: trigger,
offset: offSet
}).frame;
},
getLayerByReference: function (reference) {
var result = null;
for (var n in this.list) {
if (this.list[n].reference == reference) {
result = this.list[n];
break;
}
}
return result;
},
getLayersByType: function (type) {
var result = [];
for (var n in this.list) {
if (this.list[n].type == type) {
result.push(this.list[n]);
}
}
if (result.length == 0) {
result = null;
}
return result;
}
}
Jpy.layerDragable = {
drag: {
init: function() {
return;
}
},
get: function (instructions) {
instructions = instructions || {};
if (instructions.reference) {
var ref = Jpy.layer.getLayerByReference(instructions.reference);
if (ref != null) {
ref.highlight();
this.frame = ref.box;
this.layer = ref;
return;
}
}
var trigger = instructions.trigger || null;
var id = instructions.id || undefined;
var width = instructions.width || "600px";
var offset = instructions.offset || {x:0,y:0};
var title = instructions.title || "";
var mother = instructions.mother || undefined;
var type = instructions.type || "layer";
var reference = instructions.reference || null;
var task = instructions.task || null;
this.frame = DOM.div({className:"dragBox",style:{width:width}});
this.layer = new Jpy.layer.get({
id: id,
trigger: trigger,
offset: offset,
mother: mother,
box: this.frame,
type: type,
reference: reference,
task: task,
instructions: {
className:"layerDragable standard",
style: {
width: width
}
}
});
this.title = DOM.div({className:"title",text:title})
this.close = DOM.span({className:"icClose cp",text:"&nbsp;"});
this.close.title = title+" schließen";
this.close.onclick = (function (layer) {
return function () {
layer.remove();
}
})(this.layer);
this.close.onmouseover = (function (close) {
return function () {
Jpy.css.hoverClass(close, "icCloseHover");
}
})(this.close);
this.header = DOM.div({className:"dragHead cf",style:{width:width},child:[this.title,this.close]})
this.layer.frame.appendChild(this.header);
this.layer.frame.appendChild(this.frame);
this.highlightFrame = (function (layer) {
return function () {
layer.style.background = "#bacce2";
layer.onmouseout = function () {
layer.style.background = "#d1d1d1";
}
}
})(this.layer.frame);
this.setMaxZIndex = (function (layer) {
return function () {
if (Jpy.layerDragable.enableHighlight == true) layer.highlight();
}
})(this.layer);
this.layer.frame.onclick = this.setMaxZIndex;
Jpy.addEvent(this.layer.frame, "mouseover", this.highlightFrame)
if (instructions.lockHighlight) {
this.lockHighlight()
}
Jpy.layerDragable.initDrag(this);
},
add: function (trigger, id, width, offset) {
var frame = new this.get({
trigger: trigger,
id: id,
width: width,
offset: offset
});
return frame.frame;
},
dragStatus: false,
lockHighlight: function () {
this.enableHighlight = false;
window.setTimeout(function(){
Jpy.layerDragable.enableHighlight = true;
},100)
},
enableHighlight: true,
initDrag: function (layer) {
var that = Jpy.layerDragable;
var setZindex = function () {
if (that.dragStatus == false) {
if (Jpy.layerDragable.enableHighlight == true) layer.setMaxZIndex();
}
}
Jpy.addEvent(layer.layer, "mousedown", setZindex)
var moveFrame = function (e) {
that.movingLayer = layer.layer;
if (that.dragStatus == false) {
setZindex();
that.movingLayer.frame.style.background = "#9fbadb";
that.dragStatus = true;
}
that.mouseOffset = Jpy.getMouseOffset(that.movingLayer.frame, e);
Jpy.layerDragable.initMouseTracking();
}
Jpy.addEvent(layer.header, "mousedown", moveFrame);
},
mouseUp: function(){
var that = Jpy.layerDragable;
var frame = that.movingLayer.frame;
if (frame != null) {
frame.style.background = "#d1d1d1";
}
frame = null;
that.dragStatus = false;
that.stopMouseTracking()
},
mouseMove: function(e){
e = e || window.event;
var that = Jpy.layerDragable;
var layer = that.movingLayer;
var mousePosition = Jpy.getMousePosition(e);
if (layer){
layer.move({
x: mousePosition.x - that.mouseOffset.x,
y: mousePosition.y - that.mouseOffset.y
})
return false;
}
},
initMouseTracking: function () {
Jpy.addEvent(document, "mousemove", Jpy.layerDragable.mouseMove);
Jpy.addEvent(document, "mouseup", Jpy.layerDragable.mouseUp);
},
stopMouseTracking: function () {
Jpy.removeEvent(document, "mousemove", Jpy.layerDragable.mouseMove);
},
mouseOffset: null,
movingLayer: null
}
Jpy.ignore = function (userId) {
SystemMessage.loading.start();
var ignoreUser = new AjaxHandler();
var callback = {
success: function(data) {
if (data == "ok") {
SystemMessage.loading.end();
SystemMessage.inline.success("Nutzer wird ab sofort ignoriert!");
}
else if(data == "-5") {
SystemMessage.inline.error("Dein Profil muss erst aktiviert werden!");
}
Jpy.layer.remove("lyConfirm");
SystemMessage.loading.end();
}
};
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 = {
json: true,
success: function(data) {
SystemMessage.loading.end();
ContactFilter.data = data;
ContactFilter.show(trigger);
}
};
getContactFilter.request('GET', "/backend/user/contactFilter.php?action=get", callback);
},
show: function (trigger) {
Jpy.layer.remove("lyContactFilterEdit");
this.layer = new Jpy.layerDragable.get({
trigger: trigger,
id: "lyContactFilterEdit",
width: "450px",
offset: {x:164,y:-200},
title: "Kontaktfilter bearbeiten"
})
this.inject.getFrame();
if (ContactFilter.data != null) {
this.inject.insertBasis(true);
this.inject.insertSettings();
}
else if (ContactFilter.data == null) {
this.inject.insertInfoNotSet();
}
},
inject: {
getFrame: function () {
var frame = document.getElementById('lyContactFilterEdit');
Jpy.layer.remove('lyContactFilterBox');
var box = DOM.div({id:"lyContactFilterBox",className:"bgW fs12",style:"text-indent:15px;width:450px;padding-top:15px"})
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.showImageWhitelistingError = function(whitelist, offendingUrls) {
Jpy.layer.remove("lyImageWhitelisting");
var infoBox = new Jpy.layer.get({
id: "lyImageWhitelisting"
})
var frame = infoBox.frame;
frame.appendChild(
DOM.div({
className:"pd10",
style: {
fontSize:"14px"
},
text:"Dein Text enthält Bilder, die nicht eingebunden werden können!"
})
)
if(offendingUrls) {
frame.appendChild(
DOM.div({
className:"pd10 bgG1",
text:"Folgende Bilder können nicht eingebunden werden."
})
)
for(var j in offendingUrls) {
frame.appendChild(
DOM.div({
className:"pd10 coR1",
style: {
fontSize:"14px"
},
text:offendingUrls[j]
})
)
}
}
frame.appendChild(
DOM.div({
className:"pd10",
style: {
fontSize:"14px"
},
text:"Zugelassene Bilderdienste:"
})
)
for (var i in whitelist) {
var link = DOM.link({
href:"http://www."+whitelist[i].identifier,
className:"coB3 cp",
text:whitelist[i].identifier
})
link.setAttribute("target", "_blank")
frame.appendChild(
DOM.div({
className:"pd3",
style: {
textIndent:"10px"
},
child: link
})
)
}
var actionbar = DOM.actionbar("Ok", "Schließen");
actionbar.send.onclick = function() {
Jpy.layer.remove("lyImageWhitelisting");
}
actionbar.abort.onclick = function() {
Jpy.layer.remove("lyImageWhitelisting");
}
infoBox.frame.appendChild(actionbar.frame)
infoBox.frame.className = "bgW pd10 ldN taL bdG6 fs12 bdG8";
infoBox.frame.style.backgroundColor = "#ffffff";
};
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 = {
json: true,
success: function(data) {
SystemMessage.loading.end();
var buddies = new DataStorage(data);
buddies.sortBy("stamp.nickname")
Jpy.buddies.list = buddies;
Jpy.buddies.inject();
}
};
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 = [];
var buddies = Jpy.buddies.list.data;
var regexStart = new RegExp("^"+searchInput, "i");
var regexGlobal = new RegExp(searchInput, "i");
if (searchInput.length < 3) {
for (var n in buddies) {
if ((regexStart).test(buddies[n].stamp.nickname) == true) results.push(buddies[n]);
}
}
else if (searchInput.length == 0) {
results = Jpy.buddies.list.data;
}
else {
for (var m in buddies) {
var buddy = buddies[m];
if ((regexGlobal).test(buddy.stamp.nickname) == true){
results.push(buddies[m]);
}
else if (buddy.realName) {
if ((regexStart).test(buddy.realName.firstname) == true || (regexStart).test(buddy.realName.surname) == true) {
results.push(buddy);
}
}
}
}
var sortedResults = new DataStorage(results)
sortedResults.sortBy("stamp.nickname");
this.inject(sortedResults);
},
inject: function (results) {
var buddies = results || this.list;
if (document.getElementById('buBuddyList')) {
var box = document.getElementById('buBuddyListBox');
box.innerHTML = "";
}
else {
var layer = new Jpy.layerDragable.get({
trigger: this.triggerElement,
id: "buBuddyList",
width: "350px",
offset: {x:164,y:-200}
});
var frame = layer.frame;
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);
}
if (buddies.length == 0) {
if (document.getElementById('buBuddyList')) {
document.getElementById('buBuddyListBox').innerHTML = "<div class='pd5 lh20'>Keine Freunde mit den Suchkriterien gefunden.</div>";
}
else {
SystemMessage.inline.show("Du hast keine Freunde!");
}
}
else {
for (var i = 0, len = buddies.length; i < len; i++) {
var friend = buddies.order[i];
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"})
line.onmouseover = (function(line) {
return function () {
line.style.background = "#fffee0";
line.style.borderBottom = "1px solid #f0efd8";
line.getElementsByTagName('div')[2].style.visibility = "visible";
line.onmouseout = function () {
line.style.background = "#ffffff";
line.style.borderBottom = "1px solid #ffffff";
line.getElementsByTagName('div')[2].style.visibility = "hidden";
}
}
})(line);
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 optionMail = DOM.span({className:"icMail cp",child:"&nbsp;"});
optionMail.onmouseover = (function (optionMail, nickname) {
return function () {
Tooltip(optionMail, nickname+" anschreiben")
}
})(optionMail, friend.stamp.nickname);
optionMail.onclick = (function(trigger, nickname) {
return function () {
MessageSystem.compose(trigger, nickname);
Jpy.layerDragable.lockHighlight();
}
})(box, friend.stamp.nickname)
var optionEmotion = DOM.span({className:"icEmotion cp",child:"&nbsp;"});
optionEmotion.onmouseover = (function (trigger, nickname) {
return function () {
Tooltip(trigger, nickname+" eine Emotion überreichen");
}
})(optionEmotion, friend.stamp.nickname);
optionEmotion.onclick = (function(userId, nickname, trigger) {
return function () {
Emotions.load(userId, nickname , trigger, {x:-200,y:-50})
Jpy.layerDragable.lockHighlight();
}
})(friend.stamp.userId, friend.stamp.nickname , optionEmotion)
var optionGift = DOM.link({href:"/user/"+friend.stamp.nickname+"/gifts/donate",title:"Beschenken",child:"<span class='icGift cp'>&nbsp;</span>"})
var optionGb = DOM.span({className:"icGb cp",child:"&nbsp;"});
optionGb.onmouseover = (function (trigger, nickname) {
return function () {
Tooltip(trigger, nickname+" einen Gästebucheintrag schreiben");
}
})(optionGb, friend.stamp.nickname);
optionGb.onclick = (function(trigger, nickname, userId) {
return function () {
Jpy.buddies.guestbook.add(trigger, nickname, userId)
Jpy.layerDragable.lockHighlight();
}
})(optionGb, friend.stamp.nickname, friend.stamp.userId)
var options = DOM.div({className:"fr taR pd5",style:{visibility:"hidden",width:"120px"},child:[
optionMail,
optionEmotion,
optionGift,
optionGb
]});
line.appendChild(options);
box.appendChild(line);
}
}
document.getElementById('buBuddyListSearch').focus();
},
guestbook: {
add: function (trigger, userName, userId) {
var mother = undefined;
if (document.getElementById("buBuddyList")) {
mother = "buBuddyList";
}
var layer = new Jpy.layerDragable.get({
trigger: trigger,
id: "lyGuestbookAdd",
width: "630px",
offset: {x:-200,y:-90},
title: "Gästebucheintrag an "+userName,
mother: mother
});
var frame = layer.frame;
var box = DOM.div({className:"bgG1 pd5"});
var textarea = DOM.textarea({className:"teG3",style:{width:"620px",height:"180px"},id:"gbTextareaAdd"})
box.appendChild(textarea);
frame.appendChild(box);
MessageEditor.register(textarea, "", "", 4, undefined, "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();
var check = ParseJSON(data);
if(check.validImageHosters) {
Jpy.showImageWhitelistingError(check.validImageHosters, check.offendingLinks);
return false;
}
else 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) {
SystemMessage.inline.error(errorText);
}
switch(errorCode) {
case "-2":
injectError(Jpy.buddies.guestbook.currentReceiver+" ist nicht auf deiner Freundesliste!");
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;
case "-18":
injectError("Du hast schon dreimal in Folge geschrieben. Warte doch ein wenig (neues Gästebuch).");
break;
case "-19":
injectError("Du kannst heute nicht mehr in Gästebücher schreiben (neues Gästebuch).");
break;
case "-20":
injectError(Jpy.buddies.guestbook.currentReceiver+" möchte keine reinen Bildeinträge haben (neues Gästebuch).");
break;
case "-21":
injectError(Jpy.buddies.guestbook.currentReceiver+" möchte ausschließlich Texteinträge haben (neues Gästebuch).");
break;
case "-22":
injectError("Eintrag konnte nicht gespeichert werden.");
break;
case "-23":
injectError("Du kannst heute keine weiteren Gästebucheintrag machen..");
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;
}
Jpy.modifyText = function(text, instructions) {
instructions = instructions || {};
var colors = true;
if (instructions.colors != undefined) colors = instructions.colors;
var basics = true;
if (instructions.basics != undefined) basics = instructions.basics;
var advancedFonts = true;
if (instructions.advancedFonts != undefined) advancedFonts = instructions.advancedFonts;
var images = true;
if (instructions.images != undefined) images = instructions.images;
var links = true;
if (instructions.links != undefined) links = instructions.links;
var quotes = true;
if (instructions.quotes != undefined) quotes = instructions.quotes;
var smilies = true;
if (instructions.smilies != undefined) smilies = instructions.smilies;
if (basics == true) {
text = text.replace(/\[b\]/gi, "<span style='font-weight: bold;'>").replace(/\[\/b\]/gi, "</span>")
text = text.replace(/\[i\]/gi, "<span style='font-style: italic;'>").replace(/\[\/i\]/gi, "</span>")
text = text.replace(/\[u\]/gi, "<span style='text-decoration: underline;'>").replace(/\[\/u\]/gi, "</span>")
}
if (colors == true) {
text = text.replace(/\[color\=\#([0-9a-zA-Z]{6})\]/gi, "<span style='color:#$1'>").replace(/\[\/color\]/gi, "</span>");
text = text.replace(/\[bgcolor\=\#([0-9a-zA-Z]{6})\]/gi, "<span style='background:#$1'>").replace(/\[\/bgcolor\]/gi, "</span>");
}
if (advancedFonts == true) {
text = text.replace(/\[size\=([0-9]{1,2})\]/gi, "<span style='font-size:$1px;'>").replace(/\[\/size\]/gi, "</span>");
text = text.replace(/\[list\]/gi, "<li>").replace(/\[\/list\]/gi, "</li>");
text = text.replace(/\[right\]/gi, "<div align='right'>").replace(/\[\/right\]/gi, "</div>");
text = text.replace(/\[center\]/gi, "<div align='center'>").replace(/\[\/center\]/gi, "</div>");
}
if (images == true) {
text = text.replace(/\[img\]([a-zA-Z0-9\_\.\-\/\:\#\?]*)\[\/img\]/gi, "<img src='$1' style='max-width:400px;' class='ext' alt='Externes Bild kann nicht angezeigt werden' border='0'>");
}
text = text.replace(/\n/g, "<br>")
if (links == true) {
text = text.replace(/\[url\=(.*?)\](.*?)\[\/url\]/gi, " <a href='$1' target='_blank'>$2</a>")
}
if (quotes == true) {
text = text.replace(/\[quote\](.*?)\[\/quote\]/gi, "<div class='fuQb bgG1 ovH'><div class='fuQh'>Zitat: </div><div class='mr5'>$1</div></div>");
}
if (smilies == true) {
for (var i = 0, len = Jpy.smilies.length; i < len; i++) {
text = text.replace(Jpy.smilies[i].pattern, "<img src=\'"+Jpy.picurl+"/i/sm/"+Jpy.smilies[i].icon+".gif\'>");
}
}
return text;
}
Jpy.smilies = [
{title: ':)', shortcut: ':)', icon: 'smile', pattern: /\:\)/g},
{title: ':(', shortcut: ':(', icon: 'frown', pattern: /\:\(/g},
{title: ':o', shortcut: ':o', icon: 'redface', pattern: /\:o/gi},
{title: ':D', shortcut: ':D', icon: 'biggrin', pattern: /\:D/gi},
{title: ';)', shortcut: ';)', icon: 'wink', pattern: /\;\)/g},
{title: ':p', shortcut: ':p', icon: 'tongue', pattern: /\:p/gi},
{title: ':cool:', shortcut: ':cool:', icon: 'cool', pattern: /\:cool\:/g},
{title: ':rolleyes:', shortcut: ':rolleyes:', icon: 'rolleyes', pattern: /\:rolleyes\:/g},
{title: ':eek:', shortcut: ':eek:', icon: 'eek', pattern: /\:eek\:/g},
{title: ':confused:', shortcut: ':confused:', icon: 'confused', pattern: /\:confused\:/g},
{title: ':kiss:', shortcut: ':kiss:', icon: 'kiss', pattern: /\:kiss\:/g},
{title: ':superbad:', shortcut: ':superbad:', icon: 'superbad', pattern: /\:superbad\:/g},
{title: ':music:', shortcut: ':music:', icon: 'music', pattern: /\:music\:/g},
{title: ':zzz:', shortcut: ':zzz:', icon: 'zzz', pattern: /\:zzz\:/g},
{title: ':kissed:', shortcut: ':kissed:', icon: 'kissed', pattern: /\:kissed\:/g},
{title: ':girl:', shortcut: ':girl:', icon: 'girl', pattern: /\:girl\:/g},
{title: ':omg:', shortcut: ':omg:', icon: 'omg', pattern: /\:omg\:/g},
{title: ':auua:', shortcut: ':auua:', icon: 'auua', pattern: /\:auua\:/g},
{title: ':bad:', shortcut: ':bad:', icon: 'bad', pattern: /\:bad\:/g},
{title: ':top:', shortcut: ':top:', icon: 'top', pattern: /\:top\:/g},
{title: ':baeh:', shortcut: ':baeh:', icon: 'baeh', pattern: /\:baeh\:/g},
{title: ':inno:', shortcut: ':inno:', icon: 'inno', pattern: /\:inno\:/g},
{title: ':snief:', shortcut: ':snief:', icon: 'snief', pattern: /\:snief\:/g},
{title: ':crying:', shortcut: ':crying:', icon: 'crying', pattern: /\:crying\:/g},
{title: ':inlove:', shortcut: ':inlove:', icon: 'inlove', pattern: /\:inlove\:/g},
{title: ':shy:', shortcut: ':shy:', icon: 'shy', pattern: /\:shy\:/g},
{title: ':shock:', shortcut: ':shock:', icon: 'shock', pattern: /\:shock\:/g},
{title: ':cheers:', shortcut: ':cheers:', icon: 'cheers', pattern: /\:cheers\:/g},
{title: ':nausea:', shortcut: ':nausea:', icon: 'puke', pattern: /\:nausea\:/g},
{title: ':x', shortcut: ':x', icon: 'shutup', pattern: /\:x/gi},
{title: ':stare:', shortcut: ':stare:', icon: 'observe', pattern: /\:stare\:/g},
{title: 'x(', shortcut: 'x(', icon: 'painful', pattern: /x\(/gi},
{title: ':hum:', shortcut: ':hum:', icon: 'hum', pattern: /\:hum\:/g}
]
var DRI = {};
var Design = function () {};
Design.prototype = {
append: function (mother, daughters) {
if (!(daughters instanceof Array) && !(daughters instanceof Object)) {
daughters = [daughters];
}
for (var i = 0, len = daughters.length; i < len; i++) {
mother.appendChild(daughters[i]);
}
},
memory: {
},
setInstructions: function (instruction, elem) {
instruction = instruction || {}
var set = {
value: function(value) {
elem.value = value;
},
className: function(value) {
elem.className = value;
},
id: function(value) {
elem.id = value;
},
src: function(value) {
elem.src = value;
},
name: function(value) {
elem.name = value;
},
type: function(value) {
elem.setAttribute("type", value);
},
style: function(value) {
Jpy.css.set([elem], value);
},
text: function(value) {
if (Object.prototype.toString.call(value) == "[object String]") {
elem.innerHTML = value;
return;
}
else {
elem.appendChild(value);
return;
}
},
href: function(value) {
elem.href = value;
},
autocomplete: function(value) {
elem.setAttribute("autocomplete", value);
},
tabindex: function(value) {
elem.setAttribute("tabindex", value);
},
checked: function(value) {
elem.checked = value;
},
child: function(value) {
if (Object.prototype.toString.call(value) == "[object Array]") {
for (var i = 0, len = value.length; i < len; i++) {
this.text(value[i]);
}
}
else {
this.text(value);
}
},
click: function(value) {
elem.onclick = value;
},
mouseover: function(value) {
elem.onmouseover = value;
},
mouseout: function(value) {
elem.onmouseout = value;
},
keyup: function(value) {
elem.onkeyup = value;
},
title: function(value) {
elem.title = value;
},
alt: function (value) {
if (elem.tagName == 'IMG') {
elem.alt = value;
}
},
dri: function(index) {
DRI[index] = elem;
}
}
for (var property in instruction) {
if (set[property]) {
set[property](instruction[property])
}
}
return elem;
},
input: function (instruction) {
return this.setInstructions(instruction, document.createElement('input'));
},
txt: function (text) {
return document.createTextNode(text);
},
text: function (text) {
return document.createTextNode(text);
},
label: function (instruction) {
if (instruction) {
return this.setInstructions(instruction, document.createElement("label"));
}
else {
return document.createElement("label");
}
},
textarea: function (instruction) {
var textarea = document.createElement('textarea');
return this.setInstructions(instruction, textarea);
},
div: function (instruction) {
this.memory["div"] = this.memory["div"] || document.createElement('div');
if (instruction) {
return this.setInstructions(instruction, this.memory["div"].cloneNode(true));
}
else {
return this.memory["div"].cloneNode(true);
}
},
link: function (instruction) {
instruction = instruction || {}
if (instruction.href == undefined) instruction.href = "#"
return this.setInstructions(instruction, 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');
}
},
fragment: function () {
return document.createDocumentFragment();
},
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) {
return 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],
format: "",
type: "string",
get: function (creationTimestamp, instructions) {
if (instructions) {
if (instructions.type) {
this.type= instructions.type;
}
if (instructions.format) {
this.format = instructions.format;
}
if (instructions.step) {
this.step = instructions.steps;
}
}
var now = new Date();
creationTimestamp = parseInt(creationTimestamp)*1000;
var stamp = new Date(creationTimestamp);
if (stamp > (now+5000)) {
return Timestamp.future(stamp, now);
}
now = now.getTime();
var difference = Math.floor((now-creationTimestamp)/60000);
if (difference < 0) difference = 0;
if (creationTimestamp+this.step[0] > now) {
if (this.type == "object") {
return DOM.span({className:"ts2",text:"vor "+difference+" Min."});
}
else {
return "<span class='ts1'>vor "+difference+" Min.</span>";
}
}
else if (creationTimestamp+this.step[1] > now) {
if (difference > 120) {
difference = Math.floor(difference/60) + " Std."
}
else {
difference = difference + " Min."
}
if (this.type == "object") {
return DOM.span({className:"ts2",text:"vor "+difference});
}
else {
return "<span class='ts2'>vor "+difference+"</span>";
}
}
else {
var fullDate;
if (this.format == "advanced") {
var weekdays = ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"];
var weekdayToGerman = [6, 0, 1, 2, 3, 4, 5];
fullDate = weekdays[weekdayToGerman[stamp.getDay()]]+"., "+Jpy.clearUnderTen(stamp.getDate())+"."+Jpy.clearUnderTen(stamp.getMonth()+1);
}
else {
fullDate = Jpy.clearUnderTen(stamp.getDate())+"."+Jpy.clearUnderTen(stamp.getMonth()+1)+"."+stamp.getFullYear()+" - "+Jpy.clearUnderTen(stamp.getHours())+":"+Jpy.clearUnderTen(stamp.getMinutes());
}
if (this.type == "object") {
return DOM.span({className:"coG5",text:fullDate});
}
else {
return "<span class='coG5'>"+fullDate+"</span>";
}
}
},
generate: function (timestamp) {
return Timestamp.get(timestamp);
},
future: function (stamp, now) {
var fullDate = Jpy.clearUnderTen(stamp.getDate())+"."+Jpy.clearUnderTen(stamp.getMonth()+1)+"."+stamp.getFullYear()+" - "+Jpy.clearUnderTen(stamp.getHours())+":"+Jpy.clearUnderTen(stamp.getMinutes());
if (stamp.getDate() == now.getDate()) {
return "<span class='ts1'>Heute</span> um "+Jpy.clearUnderTen(stamp.getHours())+":"+Jpy.clearUnderTen(stamp.getMinutes());
}
else if (stamp.getDate()-now.getDate()== 1) {
return "<span class='ts2'>Morgen</span> um "+Jpy.clearUnderTen(stamp.getHours())+":"+Jpy.clearUnderTen(stamp.getMinutes());
}
else {
return "<span class='coG5'>"+fullDate+"</span>";
}
}
}
var Tooltip = function (trigger, text) {
new Jpy.layer.get({
id: "lyTooltip",
trigger: trigger,
offset: {x:-3,y:-35},
instructions: {
child:[
DOM.div({style:{
background:"url("+Jpy.picurl+"/i/ge/poDoG1.gif) no-repeat",
width:"11px",
height:"5px",
position:"absolute",
marginTop: "26px",
marginLeft: "6px",
zIndex: Jpy.layer.getMaxZIndex()
}}),
DOM.div({className:"pd5 rb5 fs12",text:text,style:{
background: "#d1d1d1",
color: "#000000",
border: "1px solid #a5a5a5"
}})
]
}
});
trigger.onmouseout = function () {
Jpy.layer.remove("lyTooltip");
}
}
var Infolayer = function (trigger, text, style, offsetPosition, width) {
var offset = offsetPosition || {x:0,y:-100};
if (typeof(offset) == "array") {
offset = {
x:offsetPosition[0],
y:offsetPosition[1]
}
}
text = text || "kein Text";
if(style == false || !style) style = false;
if(!width) width = null;
var layer = new Jpy.layer.get({
id: "lyInfolayer",
trigger: trigger,
offset: offset,
instructions: {
className: "pd10 lh17 fs12 rb5",
text: text
}
});
var pointer = new Jpy.layer.get({
id: "lyInfolayerPointer",
trigger: layer.frame,
offset: {x:10,y:-7},
instructions: {
style: {
width: "15px",
height: "8px"
}
}
});
if (style != false) {
if (style == "yellow") {
Jpy.css.set([layer.frame], {
border: "1px solid #ebdeb9",
borderRight: "1px solid #ffe65d",
borderBottom: "1px solid #ffe65d",
background: "#fffee0"
});
pointer.frame.style.backgroundImage = "url('"+Jpy.picurl+"/i/ge/po/tY1.gif')"
}
}
else {
Jpy.css.set([layer.frame], {
border: "1px solid #a0a0a0",
borderRight: "1px solid #838383",
borderBottom: "1px solid #838383",
background: "#ffffff"
});
pointer.frame.style.backgroundImage = "url('"+Jpy.picurl+"/i/ge/po/tG2.gif')"
}
layer.frame.style.textAlign = "left";
if (width != null) {
layer.frame.style.width = width+"px";
}
pointer.frame.style.backgroundRepeat = "no-repeat";
trigger.onmouseout = function () {
Jpy.layer.remove(layer.id)
Jpy.layer.remove(pointer.id)
}
}
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) {
if (callback.json) {
callback.failure(xhr.status, ParseJSON(xhr.responseText));
}
else {
callback.failure(xhr.status, xhr.responseText);
}
}
else {
Jpy.handleAjaxError(xhr.status);
}
}
};
xhr.open(method, url);
xhr.setRequestHeader("X-JpyAx", 1);
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 EncodeJSON = function(object) {
 var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
 escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
 gap,
 indent,
 meta = {
 '\b': '\\b',
 '\t': '\\t',
 '\n': '\\n',
 '\f': '\\f',
 '\r': '\\r',
 '"' : '\\"',
 '\\': '\\\\'
 },
 rep;
 function quote(string) {
 escapable.lastIndex = 0;
 return escapable.test(string) ?
 '"' + string.replace(escapable, function (a) {
 var c = meta[a];
 return typeof c === 'string' ? c :
 '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
 }) + '"' :
 '"' + string + '"';
 }
function str(key, holder) {
 var i,
 k,
 v,
 length,
 mind = gap,
 partial,
 value = holder[key];
 if (value && typeof value === 'object' &&
 typeof value.toJSON === 'function') {
 value = value.toJSON(key);
 }
 if (typeof rep === 'function') {
 value = rep.call(holder, key, value);
 }
 switch (typeof value) {
 case 'string':
 return quote(value);
 case 'number':
 return isFinite(value) ? String(value) : 'null';
 case 'boolean':
 case 'null':
 return String(value);
 case 'object':
 if (!value) {
 return 'null';
 }
 gap += indent;
 partial = [];
 if (Object.prototype.toString.apply(value) === '[object Array]') {
 length = value.length;
 for (i = 0; i < length; i += 1) {
 partial[i] = str(i, value) || 'null';
 }
 v = partial.length === 0 ? '[]' :
 gap ? '[\n' + gap +
 partial.join(',\n' + gap) + '\n' +
 mind + ']' :
 '[' + partial.join(',') + ']';
 gap = mind;
 return v;
 }
 if (rep && typeof rep === 'object') {
 length = rep.length;
 for (i = 0; i < length; i += 1) {
 k = rep[i];
 if (typeof k === 'string') {
 v = str(k, value);
 if (v) {
 partial.push(quote(k) + (gap ? ': ' : ':') + v);
 }
 }
 }
 } else {
 for (k in value) {
 if (Object.hasOwnProperty.call(value, k)) {
 v = str(k, value);
 if (v) {
 partial.push(quote(k) + (gap ? ': ' : ':') + v);
 }
 }
 }
 }
 v = partial.length === 0 ? '{}' :
 gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' +
 mind + '}' : '{' + partial.join(',') + '}';
 gap = mind;
 return v;
 }
 }
return str('', {'': object});
}
var ParseJSON = function(data) {
if (typeof data !== "string" || !data) {
return null;
}
data = data.trim(data);
if ( /^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")
.replace(/(?:^|:|,)(?:\s*\[)+/g, "")) ) {
if (window.JSON && window.JSON.parse) {
return window.JSON.parse(data)
}
else {
return (new Function("return " + data))();
}
}
else {
return data;
}
}
var SystemMessage = {
variation: 0,
template: function (message, title) {
title = title || undefined;
var text = DOM.div({
className:"text",
text: title == undefined ? "Fehler" : title
})
if (this.variation != 0) {
text.innerHTML = title == undefined ? "Bestätigung <span class='icOk'>&nbsp;</span>" : title;
}
var pointer = DOM.div({
className:"red",
text: "<div class='pointer'>&nbsp;</div>"
})
if (this.variation != 0) {
pointer.className = "green"
}
return DOM.div({
className: "info cf",
child: [
DOM.div({
className: "icon cf",
child: [
text,
pointer
]
}),
DOM.div({
className: "plain",
child: [
DOM.div({
className:"block",
text:message
})
]
})
]
})
},
success: function (message, title) {
this.variation = 1;
document.getElementById('no').innerHTML = "";
document.getElementById('no').appendChild(this.template(message, title));
},
error: function (message, title) {
this.variation = 0;
document.getElementById('no').innerHTML = "";
document.getElementById('no').appendChild(this.template(message, title));
},
loading: {
start: function () {
Jpy.layer.remove("lyWait");
var layer = new Jpy.layer.get({
id:"lyWait"
});
layer.frame.appendChild(DOM.div({className:"system",text:"<span class='wait'><img src='"+Jpy.picurl+"/i/ge/loading.gif' class='vaMid'> Bitte warten ...</span>"}));
},
end: function () {
Jpy.layer.remove("lyWait");
}
},
confirm: {
show: function (message, trigger, confirmFunction, abortFunction, offset) {
Jpy.layer.remove("lyConfirm");
trigger = trigger || undefined;
if (trigger == null) trigger = undefined;
message = message || "Bitte Vorgang bestätigen."
if(!confirmFunction || confirmFunction == null) {
confirmFunction = (function (trigger) {
return function () {
window.location = trigger.href;
}
})(trigger);
}
if(!abortFunction || abortFunction == null) {
abortFunction = function () {
Jpy.layer.remove("lyConfirm");
return false;
};
}
var layer = new Jpy.layerDragable.get({
trigger: trigger,
id: "lyConfirm",
width: "400px",
offset: offset
})
this.prepareLayout(layer.frame, message, confirmFunction, abortFunction);
},
prepareLayout: function (frame, message, confirmFunction, abortFunction) {
var paddingFrame = DOM.div({style:{padding:"10px"},text:message});
var messageFrame = DOM.div({className:"fs12 taL lh20",style:"background:#e3e3e3;width:400px",child:paddingFrame});
var actionbar = DOM.actionbar("Bestätigen", "Abbrechen");
actionbar.abort.onclick = abortFunction
if(typeof confirmFunction == "string") {
actionbar.send.onclick = function () {
return (new Function("return "+confirmFunction))();
}
}
else {
actionbar.send.onclick = confirmFunction;
}
DOM.append(frame, [messageFrame, actionbar.frame])
}
},
inline: {
error: function (text, delay, position) {
delay = delay || 2000;
position = position || undefined;
var layer = new Jpy.layer.get({
position: position
});
layer.frame.style.zIndex = layer.frame.style.zIndex + 10;
layer.frame.appendChild(DOM.div({className:"system",text:"<span class='error'><span class='icReadme'>&nbsp;</span>"+text+"</span>"}))
window.setTimeout(function(){layer.remove()}, delay);
},
success: function (text, delay, position) {
delay = delay || 2000;
position = position || undefined;
var layer = new Jpy.layer.get({
position: position
})
layer.frame.style.zIndex = layer.frame.style.zIndex + 10;
layer.frame.appendChild(DOM.div({className:"system",text:"<span class='success'><span class='icOk'>&nbsp;</span>"+text+"</span></span>"}))
window.setTimeout(function(){layer.remove()}, delay);
}
}
}
var ProfilVisitors = {
show: function (trigger) {
if (document.getElementById('lyProfilVisitorsFrame')) {
Jpy.layer.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 layer= new Jpy.layerDragable.get({
trigger: trigger,
id: "lyProfilVisitorsFrame",
width: "630px",
offset: {x:-500,y:-290},
title: "Meine letzten Profilbesucher (max. 20)"
})
var box = DOM.div({className:"bgW fs12 ldN pd10 cf"});
for (var n in ProfilVisitors.list) {
if (ProfilVisitors.list[n].stamp != undefined) {
var userImage = Jpy.getUserImage(ProfilVisitors.list[n].stamp.profileImage);
var userLink = DOM.link({href:"/user/"+ProfilVisitors.list[n].stamp.nickname,child:userImage});
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"},child:userLink})
entry.innerHTML += "<br>"+userStamp;
box.appendChild(entry);
}
}
layer.frame.appendChild(box);
}
}
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.listOfEmotions = new DataStorage(data.emotions);
Emotions.show(receiverId, receiverNickname, 3, 0, trigger, offset);
}
};
var parameters = {
receiverId : receiverId,
receiverNickname : receiverNickname
}
getEmotions.request('POST', "/backend/user/emotion.php?h="+User.hash, callback, parameters);
},
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 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 (numberOfEmotions > 15) {
if (mode == 0) {
numberOfEmotions = 15;
footerStatus = 0;
}
else if (mode == 1) {
numberOfEmotions = emotions.order.length;
footerStatus = 1;
}
}
for (var i = 0, len = numberOfEmotions; i < len; i++) {
var emotion = emotions.order[i];
var rowClassName = "item";
var title = "Hier klicken um "+receiverNickname+" - "+emotion.name+" - zu überreichen!";
if (User.credits < emotion.charge) {
rowClassName = "item unvaluable";
title = "Diese Emotion kannst du dir nicht leisten!";
}
var image = "<img src=\'"+Jpy.picurl+"/i/em/"+emotion.icon+"\'>";
if (emotion.id < 81) {
image = "<span class='emG em"+emotion.id+"'>&nbsp;</span>";
}
var entry = DOM.div({className:rowClassName+" cf"});
var name = DOM.div({className:"name",text:image+" "+emotion.name})
if (/\[/.test(emotion.name)) name.style.color = "#417bc4";
var cost = DOM.div({className:"cost",text:"<span class='icCredit'>&nbsp;</span>"+emotion.charge+""})
var link = DOM.link({href:"/emotions/"+receiverNickname+"/"+receiverId+"/emotionAdd/"+emotion.id+"?h="+User.hash,child:[name,cost]});
link.onclick = (function (receiverId, emotionId, cost, trigger, image, text, icon) {
return function () {
Jpy.remove("lyEmotionAdd");
var sure = new Jpy.layer.get({
id: "lyEmotionAdd",
trigger:trigger,
offset: {x:0,y:0},
mother: "emFrame"
})
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.frame.appendChild(vote);
sure.frame.onclick = function () {
Emotions.send(this, receiverId, emotionId, cost, image, text, icon);
}
return false;
}
})(receiverId, emotion.id, emotion.charge, link, image, emotion.name, emotion.icon);
if (User.credits < emotion.charge) {
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' style='text-decoration:none;color:#f1f1f1;padding-left:12px;margin:0'>&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='/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 = {};
emotions = Emotions.listOfEmotions
if (sort == 1) {
Emotions.listOfEmotions.sortBy("name");
}
else {
emotions.sortBy("charge", "numbers");
}
if (document.getElementById('emFrame')) {
Jpy.show("emFrame");
Jpy.remove("em");
appendEmotions(mode);
}
else {
var offsetPosition = {};
if (offset == false) {
offsetPosition = {
x:-250,
y:-250
};
}
else {
offsetPosition = offset;
}
var layer = new Jpy.layerDragable.get({
trigger: trigger,
id: "emFrame",
width: "310px",
offset: offsetPosition,
title: "Emotion an "+receiverNickname
});
var frame = layer.frame;
if (offset == false) {
frame.style.top = "300px";
}
appendEmotions(mode);
}
},
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 diesem Nutzer heute bereits eine Emotion ü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.layer.remove("emFrame");
Jpy.layer.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() {
this.trigger = Jpy.id("heStatus");
this.userStatus = this.trigger.getElementsByTagName("span")[0];
var area = OnlineStatus.AREA();
if (area.style.display == "block") {
area.style.display = "none";
this.trigger.className = "link";
}
else {
var selection = OnlineStatus.getSelectionTemplate();
area.innerHTML = selection;
area.style.display = "block";
this.trigger.className = "link hover";
OnlineStatus.showStart();
}
},
hideSelection: function () {
var area = OnlineStatus.AREA();
area.innerHTML = "";
area.style.display = "none";
this.trigger.className = "link";
},
getSelectionTemplate: function () {
var selection = "";
if (this.userStatus.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 = this.userStatus.className;
return statusId.replace(/[^0-9]*/g, "");
},
setStatus: function (statusId) {
var setStatus = new AjaxHandler();
var callback = {
json: true,
success: function(data) {
if (!data.error) {
OnlineStatus.userStatus.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);
}
}
var DataStorage = function (obj) {
this.data = obj;
this.order = [];
this.sortBy = function (prop, keywords) {
prop = prop || "";
if (prop == "") return;
var obj = this.data;
var sortArray = [];
if ((/\./).test(prop)) {
var levels = prop.split(".");
if (levels.lenth > 2) return;
for (var m in obj) {
if (obj[m][levels[0]]) sortArray.push(obj[m][levels[0]][levels[1]]+"#####"+m);
}
}
else {
for (var n in obj) {
if (obj[n][prop]) sortArray.push(obj[n][prop]+"#####"+n);
}
}
var sort;
if (/desc/.test(keywords)) {
if (/numbers/.test(keywords)) {
sortArray.sort(function(a,b){return parseFloat(b) - parseFloat(a)});
}
else {
sortArray.sort(function(a,b){return b - a})
}
}
else {
if (/numbers/.test(keywords)) {
sortArray.sort(function(a,b){return parseFloat(a) - parseFloat(b)});
}
else {
if (Jpy.getApp() == 0) {
sort = function(a,b){
a = a.toLowerCase();
b = b.toLowerCase();
if (a > b) return 1;
if (a < b) return -1;
return 0;
}
sortArray.sort(sort)
}
else {
sortArray.sort()
}
}
}
this.sortedBy = prop;
this.length = sortArray.length;
this.order = [];
for (var i = 0; i < this.length; i++) {
this.order[i] = this.data[sortArray[i].replace(/[^#]*(#####)/, "")];
}
}
}
String.prototype.trim = function() {
 return this.replace(/^\s+|\s+$/, '');
};
function nprintf() {
var numberOfArguments = arguments.length;
var text = arguments[0];
for (var i = 1; i < numberOfArguments; ++i) {
var regex = new RegExp("\\{" + (i-1) + "\\}", "g");
text = text.replace(regex, arguments[i]);
}
return text;
}
function gettext(text) {
return text;
}
// Wed Jan  5 15:27:50 2011
