var headerMsgLock = false;
function write_msg (message){
if (headerMsgLock){
setTimeout('write_msg("'+message+'");', 300);
return;
}
headerMsgLock = true;
headerDiv = document.getElementById("divAppboxHeader");
var labelBefore = headerDiv.innerHTML;
headerDiv.innerHTML = '
';
setTimeout('headerMsgLock = false; document.getElementById("divAppboxHeader").innerHTML = \"'+labelBefore+'\";', 2000);
}
// This array stores the events in table to avoid conflict in screen
var screenTable = new Array();
var today = new Date();
var weekDay = today.getDay();
function createEventDiv(eventDiv){
eventDiv.className = "event_div";
eventDiv.style.height = parseInt(eventDiv.childNodes[2].id-eventDiv.childNodes[1].id)/120000+"px";
var end_ = timeStamp2id(eventDiv.childNodes[2].id).substr(8);
var start_ = parseInt(timeStamp2id(eventDiv.childNodes[1].id).substr(8),10);
if (viewType == "Day"){
if (!screenTable[weekDay])
screenTable[weekDay] = new Array();
eventDiv.style.width = "190px";
currentPos = 1;
for (var hour = parseInt(start_,10); hour < parseInt(end_,10);(hour%100 == 30)?hour+=70:hour+=30){
if (!screenTable[weekDay][hour])
screenTable[weekDay][hour] = 0;
if (currentPos <= screenTable[weekDay][hour])
currentPos = screenTable[weekDay][hour]+1;
}
for (var hour = parseInt(start_,10); hour < parseInt(end_,10);(hour%100 == 30)?hour+=70:hour+=30)
screenTable[weekDay][hour] = currentPos;
eventDiv.style.left = 90+(205*(currentPos-1)) + "px" ;
eventDiv.onmouseover = function(){ createButtons(eventDiv); };
eventDiv.onmouseout = function(){ removeButtons(eventDiv); };
var resizeDiv = document.createElement('DIV');
resizeDiv.id = "resize_" + eventDiv.id;
resizeDiv.className = 'resize_div';
resizeDiv.style.right = (parseInt(eventDiv.style.width)-10)*-1+"px;";
resizeDiv.style.bottom = ((parseInt(eventDiv.style.height)-24)*-1)+"px;";
resizeDiv.onmousedown = function() { resizeEvent(eventDiv); };
eventDiv.appendChild(resizeDiv);
}
if (viewType == "Week"){
var tempDate = new Date;
tempDate.setTime(eventDiv.childNodes[2].id);
if (!screenTable[tempDate.getDay()])
screenTable[tempDate.getDay()] = new Array();
currentPos = 1;
if (!screenTable[tempDate.getDay()][start_])
screenTable[tempDate.getDay()][start_] = 0;
if (currentPos <= screenTable[tempDate.getDay()][start_])
currentPos = screenTable[tempDate.getDay()][start_]+1;
screenTable[tempDate.getDay()][start_] = currentPos;
var widthValue = 100;
eventDiv.style.width = widthValue+"px";
var headerElement = document.getElementById('weekHeader_'+timeStamp2id(eventDiv.childNodes[2].id).substr(0,8));
if (currentPos > 1)
eventDiv.style.left = (10+(tempDate.getDay()*122)+(widthValue*currentPos))+"px";
headerElement.style.width = (widthValue*currentPos)+"px";
eventDiv.style.height = "20px";
eventDiv.style.cursor = "pointer";
eventDiv.onmouseover = function () { this.style.height = (parseInt(this.style.height)+40)+"px"; };
eventDiv.onmouseout = function () { this.style.height = (parseInt(this.style.height)-40)+"px"; };
eventDiv.onclick = function () { calendar.getView('div_main','Day','&time='+timeStamp2id(eventDiv.childNodes[2].id).substr(0,8)); };
}
var tdElement = document.getElementById(timeStamp2id(eventDiv.childNodes[1].id));
if (viewType == "Month"){
eventDiv.style.width = "90px";
eventDiv.style.heigth = "20px";
var tdElement = document.getElementById(timeStamp2id(eventDiv.childNodes[1].id).substr(0,8)+'0000');
}
eventDiv.style.top = (tdElement.offsetTop + 145) + "px" ;
tdElement.appendChild(eventDiv);
}
function createButtons(eventDiv) {
var lnk = document.getElementById('remove_'+eventDiv.id);
var lnk2 = document.getElementById('details_'+eventDiv.id);
if (!lnk){
var removeLink = document.createElement('a');
removeLink.id = "remove_" + eventDiv.id;
removeLink.href = "javascript:removeEvent("+eventDiv.id.substr(6)+");";
removeLink.innerHTML = '';
removeLink.style.position = "absolute";
removeLink.style.top = "0px";
removeLink.style.left = "175px";
var showDetailLink = document.createElement('a');
showDetailLink.id = "details_" + eventDiv.id;
showDetailLink.href = "javascript:alert('show details');";
showDetailLink.innerHTML = '';
showDetailLink.style.position = "absolute";
showDetailLink.style.top = "0px";
showDetailLink.style.left = "160px";
eventDiv.appendChild(showDetailLink);
eventDiv.appendChild(removeLink);
}
else{
lnk.style.visibility="visible";
lnk2.style.visibility="visible";
}
}
function removeButtons(eventDiv){
var lnk = document.getElementById('remove_'+eventDiv.id);
var lnk2 = document.getElementById('details_'+eventDiv.id);
if (lnk){
lnk.style.visibility="hidden";
lnk2.style.visibility="hidden";
}
}
function removeEvent (id) {
var handler_removeEvent = function (data) {
var serverRet = data.firstChild.childNodes[0];
var retStatus = serverRet.substringData(0,4);
if (retStatus == "false")
write_msg(get_lang("Error") + ": " + serverRet.data)
else{
var eventDiv = document.getElementById("event_"+id);
if (viewType == "Day"){
init_ = timeStamp2id(eventDiv.childNodes[1].id).substr(8);
end_ = timeStamp2id(eventDiv.childNodes[2].id).substr(8);
for (var hour = parseInt(init_,10); hour < parseInt(end_,10);(hour%100 == 30)?hour+=70:hour+=30)
screenTable[weekDay][hour]--;
}
eventDiv.parentNode.removeChild(eventDiv);
write_msg(get_lang("Event were deleted"));
}
}
XMLTools.request('$this.uicalendar.removeEvent&id='+id, 'GET', handler_removeEvent);
}
function quickAddEvent (description, startTime, endTime)
{
var endDate = new Date();
endDate.setTime(id2timeStamp(endTime)+1800000);
var handler_quickAdd = function (data) {
calendar.dialog('infowindow');
var serverRet = data.firstChild.childNodes[0];
var retStatus = serverRet.substringData(0,5);
if (retStatus == "false")
write_msg(get_lang("Error") + ": " + get_lang(serverRet.data.substr(6)));
else{
var tdElement = document.getElementById(startTime);
var eventDiv = document.createElement('DIV');
eventDiv.id = "event_" + serverRet.substringData(6,serverRet.data.length);
eventDiv.innerHTML = description;
var endDateDiv = document.createElement('DIV');
var startDateDiv = document.createElement('DIV');
endDateDiv.id = endDate.getTime();
startDateDiv.id = id2timeStamp(startTime);
eventDiv.appendChild(startDateDiv);
eventDiv.appendChild(endDateDiv);
createEventDiv(eventDiv);
write_msg(get_lang("Event were added successfully!"));
}
}
XMLTools.request('$this.uicalendar.quickAdd&start='+parseInt(id2timeStamp(startTime)/1000)+'&end='+parseInt(endDate.getTime()/1000)+'&desc='+description, 'GET', handler_quickAdd);
}
function changeEvent(objEvent,field,value){
init_ = timeStamp2id(objEvent.childNodes[1].id).substr(8);
end_ = timeStamp2id(objEvent.childNodes[2].id).substr(8);
var handler_changeEvent = function (data){
var serverRet = data.firstChild.childNodes[0];
var retStatus = serverRet.substringData(1,5);
if (retStatus == "false")
write_msg(get_lang("Error") + ": " + serverRet.data)
else
switch (field) {
case 'edatetime':
for (var hour = parseInt(init_,10); hour < parseInt(end_,10);(hour%100 == 30)?hour+=70:hour+=30)
screenTable[weekDay][hour]--;
objEvent.childNodes[2].id = value*1000;
var resizeIcon = document.getElementById("resize_"+objEvent.id);
resizeIcon.parentNode.removeChild(resizeIcon);
createEventDiv(objEvent);
break;
default:
alert('not implemented');
}
}
XMLTools.request('$this.uicalendar.changeEvent&cal_id='+objEvent.id.substr(6)+'&field='+field+'&value='+value, 'GET', handler_changeEvent);
}
// Convert Unix Time Stamp to Div Id used in calendar
function timeStamp2id(timeStamp){
var tmpDate = new Date();
tmpDate.setTime(timeStamp);
return (tmpDate.getYear()+1900)+""+
(tmpDate.getDate()<10?"0"+tmpDate.getDate():tmpDate.getDate())+
(tmpDate.getMonth()<9?"0"+(tmpDate.getMonth()+1):(tmpDate.getMonth()+1))+
(tmpDate.getHours()<10?"0"+tmpDate.getHours():tmpDate.getHours())+
(tmpDate.getMinutes()<10?"0"+tmpDate.getMinutes():tmpDate.getMinutes());
}
// Convert the opposite of function above
function id2timeStamp(id){
objDate = new Date();
objDate.setYear(id.substr(0,4));
objDate.setMonth(id.substr(6,2)-1);
objDate.setDate(id.substr(4,2));
objDate.setHours(id.substr(8,2));
objDate.setMinutes(id.substr(10,2));
return objDate.getTime();
}
function get_lang(_key,_arg1,_arg2,_arg3,_arg4){
if (_key.length == 0)
return '';
if(!array_lang[0]){
return _key+"*";
}
_value = "";
for(i = 0; i < array_lang[0].length;i++){
if(array_lang[0][i] == _key.toLowerCase()) {
_value = array_lang[1][i];
break;
}
}
if(!_value)
return _key+"*";
if(_arg1 || _arg2 ||_arg3 || _arg4) {
for(j = 1; j <= 4; j++){
if(eval("_arg"+j)) {
var regExp = new RegExp("%"+j+"");
_value = _value.replace(regExp,eval("_arg"+j));
}
}
}
return _value;
}
function resizeEvent (eventDiv) {
_dragArea.pressed = 1;
_dragArea.initEvent = eventDiv.parentNode.id;
_dragArea.resizing = 1;
_dragArea.currentEvent = eventDiv;
}
refreshLang();