var Ticker = {
ID_DOM: function() {
return {
ENTRY: "taEntry",
COMMENT: "taComments",
BUTTON_COMMENT_SEND: "taButtonAdd",
FORM_COMMENT_ADD: "taAdd",
TEXTAREA_COMMENT_ADD: "taTextareaComment",
COMMENTS_COUNT: "taCounterComments",
COMMENT_CHARSLEFT: "taCharsLeft",
ENTRY_CHARSLEFT: "taEntryCharsLeft",
TICKER_ADD_TEXTAREA: "taAddTextarea",
TICKER: "ta",
TICKER_FRAME: "tk",
ENTRY_ADD_BUTTON: "taEntrySend",
ENTRY_ADD_FRAME: "taEntryAdd",
ERROR_MESSAGE: "taErrorMessage",
PROFILE_NAVIGATION_TRIGGER: "tkShowInput",
COMMENT_ADD: "taAddComment"
}
}(),
CLASS_DOM: function() {
return {
ENTRY: "entry cf",
ENTRY_HOVER: "entry bgY1 cf",
ENTRY_SIMPLE: "entry cf",
ENTRY_SIMPLE_HOVER: "entry bgY1 cf",
ENTRY_SIMPLE_INJECT: "entry bgY1 bbY2 cf",
ENTRY_ADD_FRAME: "addEntry",
ENTRY_ADD_BUTTON: "inCo fs12 rb5 cp",
ADD_ICON: "icAdd",
ERROR_MESSAGE: "bgR1 bbR1 pd10 fs12 taC",
ENTRY_LIST_PROFILE: "profile",
COMMENT_ITEM: "item cf",
NAVIGATION_ACTIVE: "link add cp",
NAVIGATION: "link cp",
COMMENT_PICTURE: "picture"
}
}(),
CONSTANT: function() {
return {
MAX_CHARS: 250,
LOCK_TIME: 2000
}
}(),
TEXT: function () {
return {
ERROR_TIME: "Du kannst nicht so schnell hintereinander tickern!",
ERROR_ENTRY_ADD_FAILED: "Der Eintrag konnte nicht hinzugefügt werden.",
ERROR_COMMENT_ADD_FAILED: "Der Kommentar konnte nicht hinzugefügt werden.",
TIMESTAMP_0 : "Vor 0 Min."
}
}(),
userStamp: undefined,
lock: false,
init: function () {
if (document.getElementById("taAddTextarea")) {
document.getElementById("taAddTextarea").onkeyup = function () {
Ticker.limitValue(document.getElementById("taAddTextarea"));
}
document.getElementById("taAddTextarea").focus();
}
if (document.getElementById(Ticker.ID_DOM.TEXTAREA_COMMENT_ADD)) {
document.getElementById(Ticker.ID_DOM.TEXTAREA_COMMENT_ADD).onkeyup = function () {
Ticker.limitValue(document.getElementById(Ticker.ID_DOM.TEXTAREA_COMMENT_ADD));
}
document.getElementById(Ticker.ID_DOM.TEXTAREA_COMMENT_ADD).focus();
}
if (document.getElementById(Ticker.ID_DOM.TICKER)) {
if (document.getElementById(Ticker.ID_DOM.TICKER).className == "profile" || document.getElementById(Ticker.ID_DOM.TICKER).className == "archive") {
var divBoxes = document.getElementById(Ticker.ID_DOM.TICKER).getElementsByTagName('div');
var entryList = [];
for (var i = 0, len = divBoxes.length; i < len; i++) {
if (divBoxes[i].className == Ticker.CLASS_DOM.ENTRY_SIMPLE) {
entryList.push(divBoxes[i]);
}
}
for (var i = 0, len = entryList.length; i < len; i++) {
entryList[i].onmouseover = function () {
this.className = Ticker.CLASS_DOM.ENTRY_SIMPLE_HOVER;
};
entryList[i].onmouseout = function () {
this.className = Ticker.CLASS_DOM.ENTRY_SIMPLE;
}
}
}
}
},
limitValue: function (textarea) {
var entry = textarea.value;
var balance = Ticker.CONSTANT.MAX_CHARS - entry.length;
var counterArea = document.getElementById(Ticker.ID_DOM.ENTRY_CHARSLEFT)
var counterValue = counterArea.getElementsByTagName("b")[0];
if (balance > 0) {
counterValue.innerHTML = balance;
if (entry.search(/\n|\r/) != -1) {
textarea.value = entry.replace(/\n|\r/g, "");
}
}
else {
entry.replace(/\n|\r/g, "").slice(0,Ticker.CONSTANT.MAX_CHARS);
}
},
activeEntry: undefined,
mayDeleteEntry: function (trigger, entryId, userId) {
if (this.activeEntry) this.activeEntry.style.background = "";
Jpy.remove("lyDeleteTickerEntry");
var entry = document.getElementById("taEntry"+entryId);
entry.style.background = "#e1e1e1";
this.activeEntry = entry;
var layer = Jpy.layer.add("lyDeleteTickerEntry", trigger, {x:-175,y:-50});
var box = DOM.div({className:"pd10 bgW fs12 taL bdG6"});
box.innerHTML = "Diesen Ticker-Eintrag wirklich löschen?";
layer.appendChild(box);
var actionbar = DOM.actionbar("Ja!", "Abbrechen");
actionbar.send.onclick = function () {
Ticker.deleteEntry(entryId, userId, "profile");
Jpy.remove("lyDeleteTickerEntry");
}
actionbar.abort.onclick = function () {
Jpy.remove("lyDeleteTickerEntry");
entry.style.background = "";
}
layer.appendChild(actionbar.frame);
},
deleteEntry: function(entryId, userId, hash, mode) {
var deleteEntry = new AjaxHandler();
var callback = {
success: function(data) {
if (data != "") data = eval("("+ data+ ")");
if (!data.error || data == "") {
if (mode == "move") {
var url = window.location.href;
url.replace(/[0-9]*$/gi, "archive");
window.location.href = url;
}
else {
document.getElementById("taEntries").removeChild(document.getElementById("taEntry"+entryId));
}
}
else {
Ticker.handleError(data);
}
},
failure: function(statusCode) {
Jpy.handleAjaxError(statusCode);
}
};
deleteEntry.request('POST', "/backend/user/ticker.php?h="+User.hash, callback,
{
entryId: entryId,
userId: userId,
action: "deleteEntry"
});
},
openEntry: function(entryId) {
var username;
if (/popup/.test(window.location.href) == true) {
username = (/\/popup\/([a-z0-9\-\_]{2,16})/gi).exec(window.location.href);
if (username[1]) {
window.location = "/popup/"+username[1]+"/ticker/"+entryId;
}
}
else {
username = (/\/user\/([a-z0-9\-\_]{2,16})/gi).exec(window.location.href);
if (username[1]) {
window.location = "/user/"+username[1]+"/ticker/"+entryId;
}
}
},
add: {
showError: function (text) {
Jpy.remove("taErrorMessage");
var error = DOM.div({className:"bgR1 bbR1 pd10 fs12 taC",id:"taErrorMessage",text:text})
var errorMessageReceiver;
errorMessageReceiver = document.getElementById("taEntries");
if(!errorMessageReceiver) {
errorMessageReceiver = document.getElementById("ta");
var firstChild = errorMessageReceiver.childNodes[0];
errorMessageReceiver.insertBefore(error, firstChild);
}
else {
errorMessageReceiver.parentNode.insertBefore(error, document.getElementById("taEntries"));
}
},
showInput: function (triggerArea, tickerEntrySetting, style) {
style = style || "actionbar cf";
if (!this.tickerEntrySettingStatus) this.tickerEntrySettingStatus = tickerEntrySetting;
triggerArea.value = "";
triggerArea.style.color = "#585858";
triggerArea.style.height = "53px";
triggerArea.onclick = function () {return false;}
var frame = triggerArea.parentNode.parentNode;
triggerArea.id = "taAddTextarea";
var actionbar = DOM.div({className:style});
var tickerSetting = DOM.span({className:"privacy"});
var textAll = "<span class='icPrivacyAll'>&nbsp;</span> An Alle";
var textBuddy = "<span class='icPrivacyBuddies'>&nbsp;</span> An Freunde";
if (this.tickerEntrySettingStatus == undefined) {
tickerSetting.innerHTML = "<span class='icPrivacyBuddies'>&nbsp;</span><i>Nur an Freunde</i>";
tickerSetting.className = "pd5";
}
else if (this.tickerEntrySettingStatus == 0) {
tickerSetting.innerHTML = textAll;
}
else {
tickerSetting.innerHTML = textBuddy;
}
if (this.tickerEntrySettingStatus != undefined) {
tickerSetting.onmouseover = function () {
Jpy.css.hoverClass(tickerSetting, "bgY1");
}
tickerSetting.onclick = function () {
if (Ticker.add.tickerEntrySettingStatus == 0) {
tickerSetting.innerHTML = textBuddy;
Ticker.add.tickerEntrySettingStatus = 1;
}
else {
tickerSetting.innerHTML = textAll;
Ticker.add.tickerEntrySettingStatus = 0;
}
}
}
actionbar.appendChild(tickerSetting);
var charsLeft = document.createElement("span");
charsLeft.id = Ticker.ID_DOM.ENTRY_CHARSLEFT;
charsLeft.style.marginRight = "15px";
charsLeft.style.marginLeft = "15px";
var remainChars = document.createElement("b");
remainChars.appendChild(document.createTextNode(Ticker.CONSTANT.MAX_CHARS))
charsLeft.appendChild(document.createTextNode("Noch "));
charsLeft.appendChild(remainChars);
charsLeft.appendChild(document.createTextNode(" Zeichen"));
actionbar.appendChild(charsLeft)
var buttonAdd = document.createElement("a");
buttonAdd.className = Ticker.CLASS_DOM.ENTRY_ADD_BUTTON;
buttonAdd.id = Ticker.ID_DOM.ENTRY_ADD_BUTTON
buttonAdd.appendChild(document.createTextNode("Ticker senden"));
actionbar.appendChild(buttonAdd)
frame.appendChild(actionbar);
document.getElementById("taAddTextarea").onkeyup = function () {
Ticker.limitValue(this);
}
MessageEditor.register("taAddTextarea", "noSmilies simpleFonts noColors noImages noQuote focus","", undefined, 420);
document.getElementById("taAddTextarea").focus();
document.getElementById(Ticker.ID_DOM.ENTRY_ADD_BUTTON).onclick = function () {
Ticker.add.send();
}
},
injectEntry: function (entryText, entryId, tickerEntrySetting) {
if (!tickerEntrySetting) tickerEntrySetting = 0;
var dateClass = "date";
if (tickerEntrySetting == 1) {
dateClass = "date friend";
}
var template = ""
+ "<div class='"+dateClass+"'><span class='ts1'>"+Ticker.TEXT.TIMESTAMP_0+"</span></div>"
+ "<div class='plain'>"+entryText+"</div>"
+ "<div class='moderation'><span onclick='Ticker.mayDeleteEntry(this, "+entryId+", "+User.id+");return false;' class='cp'><span class='icDelete'>&nbsp;</span></span></div>";
var entry = DOM.div({className:"entry cf",id:"taEntry"+entryId})
entry.innerHTML = template;
if (document.getElementById("taEntries")) {
var entries = document.getElementById("taEntries");
if (entries.innerHTML == "") {
entries.appendChild(entry);
}
else {
entries.insertBefore(entry, entries.getElementsByTagName("div")[0]);
}
}
else {
var entriesFrame = document.createElement("div");
entriesFrame.id = "taEntries";
entriesFrame.appendChild(entry);
if (!document.getElementById("ta")) {
if (Jpy.id("tk")) {
Jpy.id("tk").appendChild(DOM.div({id:"ta",className:"profile"}));
}
}
if (Jpy.id("ta")) {
document.getElementById("ta").appendChild(entriesFrame);
}
else {
return;
}
}
document.getElementById("taAddTextarea").value = "";
document.getElementById("taAddTextarea").focus();
document.getElementById("taEntryCharsLeft").getElementsByTagName("b")[0].innerHTML = Ticker.CONSTANT.MAX_CHARS;
document.getElementById("taEntry"+entryId).className = "entry bgY1 bbY2 cf";
window.setTimeout("document.getElementById(Ticker.ID_DOM.ENTRY+"+entryId+").className='entry cf'", 1000)
document.getElementById(Ticker.ID_DOM.ENTRY+entryId).onmouseover = function () {
this.className = Ticker.CLASS_DOM.ENTRY_SIMPLE_HOVER;
};
document.getElementById(Ticker.ID_DOM.ENTRY+entryId).onmouseout = function () {
this.className = Ticker.CLASS_DOM.ENTRY_SIMPLE;
};
document.getElementById(Ticker.ID_DOM.ENTRY+entryId).getElementsByTagName('div')[1].onclick = function () {
Ticker.openEntry(entryId);
}
},
setLock: function () {
Ticker.lock = true;
window.setTimeout(function(){Ticker.lock=false}, Ticker.CONSTANT.LOCK_TIME);
},
setPrivacy: function (trigger) {
var textAll = "<span class='icPrivacyAll'>&nbsp;</span> An Alle";
var textBuddy = "<span class='icPrivacyBuddies'>&nbsp;</span> An Freunde";
if (Ticker.add.tickerEntrySettingStatus == undefined) Ticker.add.tickerEntrySettingStatus = TickerPrivacyStatus;
if (Ticker.add.tickerEntrySettingStatus == 0) {
trigger.innerHTML = textBuddy;
Ticker.add.tickerEntrySettingStatus = 1;
}
else {
trigger.innerHTML = textAll;
Ticker.add.tickerEntrySettingStatus = 0
}
},
send: function () {
if (Ticker.lock != true && document.getElementById("taAddTextarea").value.length > 0) {
var tickerEntrySetting = Ticker.add.tickerEntrySettingStatus;
var entryText = document.getElementById("taAddTextarea").value
$.post(
"/backend/user/ticker.php?h=" + User.hash,
{
text: entryText,
tickerEntrySetting: tickerEntrySetting,
action: "addEntry"
},
function(data) {
var data = ParseJSON(data);
if (data.success) {
Ticker.add.injectEntry(Jpy.modifyText(entryText), data.entryId, tickerEntrySetting);
Ticker.add.setLock();
if (document.getElementById(Ticker.ID_DOM.ERROR_MESSAGE) != null) {
document.getElementById(Ticker.ID_DOM.TICKER_FRAME).removeChild(document.getElementById(Ticker.ID_DOM.ERROR_MESSAGE))
}
}
else {
if(data.error) {
Ticker.add.showError(data.error);
}
else {
Ticker.add.showError(Ticker.TEXT.ERROR_ENTRY_ADD_FAILED);
}
}
}
);
}
else {
Ticker.add.showError(Ticker.TEXT.ERROR_TIME);
}
}
},
comments: {
add: function(entryId, userId) {
if (Ticker.lock != true && document.getElementById(Ticker.ID_DOM.TEXTAREA_COMMENT_ADD).value.length > 0) {
var callback = {
success: function(data) {
if(data == -1) {
Ticker.add.showError("Es ist ein Fehler aufgetreten");
}
else {
data = ParseJSON(data);
if(data.error) {
Ticker.add.showError(data.error);
}
else if(data.success) {
if(data.userStamp) {
Ticker.userStamp = data.userStamp;
}
Ticker.comments.inject(entryId, userId, Jpy.modifyText(textValue), data.creationTimestamp);
document.getElementById(Ticker.ID_DOM.TEXTAREA_COMMENT_ADD).focus();
document.getElementById(Ticker.ID_DOM.TEXTAREA_COMMENT_ADD).value = "";
}
}
},
failure: function(error) {
Ticker.add.showError("Es ist ein Fehler aufgetreten");
}
};
var url = "/backend/user/ticker.php?h=" + User.hash;
var textValue = document.getElementById(Ticker.ID_DOM.TEXTAREA_COMMENT_ADD).value;
var postVars = {
entryId : entryId,
userId: userId,
text: textValue,
action: "addComment"
};
if(!Ticker.userStamp) {
postVars.stampRequired = 1;
}
new AjaxHandler().request("POST", url, callback, postVars);
}
else {
Ticker.add.showError(Ticker.TEXT.ERROR_TIME);
}
},
inject: function (entryId, userId, text, creationTimestamp) {
var onlinestatus = "ni";
var status = Ticker.userStamp.status;
if (Userstamp.stamps[0] & status) onlinestatus = "no";
if (Userstamp.stamps[1] & status) onlinestatus = "na";
if (Userstamp.stamps[2] & status) onlinestatus = "nx";
var birthday = false;
if (Userstamp.stamps[3] & status) birthday = true;
var moderation = false;
if (Userstamp.stamps[4] & status) moderation = true;
var comment = DOM.div({
className: Ticker.CLASS_DOM.COMMENT_ITEM
});
var frame = document.getElementById(Ticker.ID_DOM.COMMENT_ADD);
var userPicture = document.getElementById(Ticker.ID_DOM.COMMENT_ADD).getElementsByTagName("img")[0];
var btnDelete = DOM.link({
className: "inCo rb5 cp",
href: "javascript: void(0)",
child: [
DOM.span({
className: "icDelete",
text: "&nbsp;"
}),
DOM.span({
text: "Löschen"
})
]
});
btnDelete.onclick = function() {
Ticker.deleteComment(entryId, userId, creationTimestamp, User.hash, this);
}
var picture = DOM.div({
className: Ticker.CLASS_DOM.COMMENT_PICTURE,
child: DOM.image({
src: userPicture.src
})
});
var content = DOM.div({
className: "comment bgG1"
});
var stamp = document.createElement("p");
var deletionArea = DOM.div({
className: "taR pd10",
child: btnDelete
});
deletionArea.appendChild(btnDelete);
comment.appendChild(picture);
stamp.appendChild(DOM.span({
text: Userstamp.create(Ticker.userStamp.nickname, Ticker.userStamp.age, Ticker.userStamp.gender, onlinestatus, birthday, moderation)
}));
stamp.appendChild(DOM.span({
text: Timestamp.generate(creationTimestamp, {
format: "advanced"
})
}));
content.appendChild(stamp);
content.appendChild(DOM.span({
text: text
}));
content.appendChild(deletionArea);
comment.appendChild(content);
frame.parentNode.insertBefore(comment, frame);
frame.parentNode.insertBefore(frame, comment);
}
},
deleteComment: function(entryId, userId, authorId, anotherId, hash, element) {
$.post(
"/backend/user/ticker.php?h="+ hash,
{
entryId: entryId,
userId: userId,
authorId: authorId,
anotherId: anotherId,
action: "deleteComment"
},
function(data) {
if (data != "") {
var data = eval("("+ data+ ")");
}
if (!data.error) {
var elementParent = element.parentNode.parentNode.parentNode;
document.getElementById(Ticker.ID_DOM.TICKER).removeChild(elementParent);
}
else {
Ticker.handleError(data.error);
}
}
);
},
updateLatestTickerEntries: function(numberOfEntriesPerPage, startIndex){
startIndex = parseInt(startIndex);
$.post(
"/backend/user/tickerAbo.php",
{
numberOfEntriesPerPage: numberOfEntriesPerPage,
startIndex: startIndex,
action: "updateLatestTickerEntriesJSON"
},
function(data) {
if(data != -1) {
data = ParseJSON(data);
var l = data.length;
var entryList = document.getElementById(TickerAbo.ID_DOM.ENTRY_LIST);
var fragment = document.createDocumentFragment();
for(var i = 0; i < l; i++) {
fragment.appendChild(TickerAbo.startpage.getEntry(data[i].id, data[i].text, data[i].stamp, data[i].numberOfComments, data[i].creationTimestamp));
}
entryList.innerHTML = "";
entryList.appendChild(fragment);
var buttonBackward = document.getElementById(TickerAbo.ID_DOM.TICKER_ENTRY_NAVIGATION_BACKWARD)
var buttonForward = document.getElementById(TickerAbo.ID_DOM.TICKER_ENTRY_NAVIGATION_FORWARD)
var labelOverallNumberOf = document.getElementById(TickerAbo.ID_DOM.TICKER_OVERALL_NUMBER_OF)
var overallNumberOfTickerEntries = parseInt(labelOverallNumberOf.textContent);
numberOfEntriesPerPage = parseInt(numberOfEntriesPerPage);
var navigationIndices = Ticker.getNavigationIndices(startIndex, overallNumberOfTickerEntries, numberOfEntriesPerPage);
if(overallNumberOfTickerEntries > numberOfEntriesPerPage) {
if(navigationIndices.previous < 0) {
buttonBackward.style.display = "none";
}
else {
buttonBackward.onclick = function() {Ticker.updateLatestTickerEntries(numberOfEntriesPerPage, navigationIndices.previous)};
buttonBackward.style.display = "inline";
}
if(navigationIndices.next) {
buttonForward.onclick = function() {Ticker.updateLatestTickerEntries(numberOfEntriesPerPage, navigationIndices.next)};
buttonForward.style.display = "inline";
}
else {
buttonForward.style.display = "none";
}
}
else {
buttonForward.style.display = buttonBackward.style.display = "none";
}
}
}
);
},
getNavigationIndices: function(indexCurrent, overallNumberOfElements, numberOfEntriesPerPage) {
indexCurrent = parseInt(indexCurrent);
overallNumberOfElements = parseInt(overallNumberOfElements);
numberOfEntriesPerPage = parseInt(numberOfEntriesPerPage);
var indexPrevious;
var indexNext;
indexPrevious = indexCurrent - numberOfEntriesPerPage;
if(indexPrevious < 0) {
indexPrevious = 0
}
if(indexPrevious == indexCurrent) {
indexPrevious = -1;
}
indexNext = indexCurrent + numberOfEntriesPerPage;
if(indexNext >= overallNumberOfElements) {
indexNext = undefined
}
return {
previous: indexPrevious,
next: indexNext
}
},
handleError: function(error) {
SystemMessage.inline.success(error.error);
},
tickerLayer: function(pregivenText) {
if (Ticker.layerLock == true) {
return false;
}
var layer = new Jpy.layerDragable.get({
width: "418px",
title: "News dieser Gruppe tickern:",
offset: {x:0,y:20},
instructions: {
id: "ticker"
}
});
layer.layer.box.style.overflow = "hidden";
Ticker.layerLock = true;
var tickerEditorDiv = DOM.div();
var tickerEditor = DOM.textarea({
style: {
width: "418px"
},
className: "teG3",
text: pregivenText
});
tickerEditorDiv.appendChild(tickerEditor);
layer.frame.appendChild(tickerEditorDiv);
Ticker.add.showInput(tickerEditor, 0, "abG1");
tickerEditor.value = pregivenText;
if (Jpy.id("taEntrySend")) {
Jpy.id("taEntrySend").onclick = function () {
Ticker.add.send();
layer.layer.remove();
SystemMessage.inline.success("Der Link zum Eintrag wurde erfolgreich getickert.");
Ticker.layerLock = false;
}
}
if (layer.close) {
layer.close.onclick = function () {
layer.layer.remove();
Ticker.layerLock = false;
}
}
return false;
}
}
Ticker.init();
// Wed Jan  5 15:27:44 2011
