]> code.citadel.org Git - citadel.git/blobdiff - webcit/static/wclib.js
* add conditional to check room-types
[citadel.git] / webcit / static / wclib.js
index 5d530d56681c11c3b4b868ddc504c432d54ffeb4..7cc4d2239f16f04a0eac67effd6b7c3f4579f0ad 100644 (file)
@@ -1,9 +1,11 @@
-//
-// $Id$
-//
-// JavaScript function library for WebCit.
-//
-//
+/*
+ * $Id$
+ * Copyright 2005 - 2009 The Citadel Team
+ * Licensed under the GPL V3
+ *
+ * JavaScript function library for WebCit.
+ *
+ */
 
 
 var browserType;
@@ -20,6 +22,8 @@ var currentDropTarget = null;
 var supportsAddEventListener = (!!document.addEventListener);
 var today = new Date();
 
+var wc_log = "";
+var is_ie6 = false;
 if (document.all) {browserType = "ie"}
 if (window.navigator.userAgent.toLowerCase().match("gecko")) {
        browserType= "gecko";
@@ -36,11 +40,28 @@ document.observe('dom:loaded', function() { if (!!document.getElementById("ib_ch
 function CtdlRandomString()  {
        return((Math.random()+'').substr(3));
 }
+function strcmp ( str1, str2 ) {
+    // http://kevin.vanzonneveld.net
+    // +   original by: Waldo Malqui Silva
+    // +      input by: Steve Hilder
+    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
+    // +    revised by: gorthaur
+    // *     example 1: strcmp( 'waldo', 'owald' );
+    // *     returns 1: 1
+    // *     example 2: strcmp( 'owald', 'waldo' );
+    // *     returns 2: -1
+    return ( ( str1 == str2 ) ? 0 : ( ( str1 > str2 ) ? 1 : -1 ) );
+}
 
 function emptyElement(element) {
   childNodes = element.childNodes;
   for(var i=0; i<childNodes.length; i++) {
+    try {
     element.removeChild(childNodes[i]);
+    } catch (e) {
+      WCLog(e+"|"+e.description);
+    }
   }
 }
 /** Implements superior internet explorer 'extract all child text from element' feature'. Falls back on buggy, patent violating standardized method */
@@ -191,6 +212,10 @@ function switch_to_menu_buttons() {
 }
 function IconBarRoomList() {
   var currentExpanded = ctdlLocalPrefs.readPref("rooms_expanded");
+  var curRoomName = "";
+  if (document.getElementById("rmname")) {
+    curRoomName = getTextContent(document.getElementById("rmname"));
+  }
   currentDropTargets = new Array();
   var iconbar = document.getElementById("iconbar");
   roomlist = document.getElementById("roomlist");
@@ -204,15 +229,15 @@ function IconBarRoomList() {
   mailboxSPAN.appendChild(document.createTextNode(_mailbox));
   $(mailboxSPAN).observe('click', expandFloorEvent);
   mailboxLI.appendChild(mailboxSPAN);
-  mailboxLI.setAttribute("class", "floor");
+  mailboxLI.className = "floor";
   var mailboxUL = document.createElement("ul");
   mailboxLI.appendChild(mailboxUL);
   var mailboxRooms = GetMailboxRooms();
   for(var i=0; i<mailboxRooms.length; i++) {
     var room = mailboxRooms[i];
-    currentDropTargets.push(addRoomToList(mailboxUL, room));
+    currentDropTargets.push(addRoomToList(mailboxUL, room, curRoomName));
   }
-  if (currentExpanded != null && currentExpanded == "Mailbox") {
+  if (currentExpanded != null && currentExpanded == _mailbox ) {
     expandFloor(mailboxSPAN);
   }
   for(var a=0; a<floors.length; a++) {
@@ -225,13 +250,13 @@ function IconBarRoomList() {
     floorSPAN.appendChild(document.createTextNode(name));
     $(floorSPAN).observe('click', expandFloorEvent);
     floorLI.appendChild(floorSPAN);
-    floorLI.setAttribute("class", "floor");
+    floorLI.className = "floor";
     var floorUL = document.createElement("ul");
     floorLI.appendChild(floorUL);
     var roomsForFloor = GetRoomsByFloorNum(floornum);
     for(var b=0; b<roomsForFloor.length; b++) {
       var room = roomsForFloor[b];
-      currentDropTargets.push(addRoomToList(floorUL, room));
+      currentDropTargets.push(addRoomToList(floorUL, room, curRoomName));
     }
     if (currentExpanded != null && currentExpanded == name) {
       expandFloor(floorSPAN);
@@ -239,7 +264,7 @@ function IconBarRoomList() {
   }
 }
 
-function addRoomToList(floorUL,room) {
+function addRoomToList(floorUL,room, roomToEmphasize) {
   var roomName = room[RN_ROOM_NAME];
   var flag = room[RN_ROOM_FLAG];
   var curView = room[RN_CUR_VIEW];
@@ -269,6 +294,9 @@ function addRoomToList(floorUL,room) {
   if (hasNewMsgs) {
     className += " room-newmsgs";
   }
+  if (roomName == roomToEmphasize) {
+    className += " room-emphasized";
+  }
   roomLI.setAttribute("class", className);
   roomA.dropTarget = true;
   roomA.dropHandler = roomListDropHandler;
@@ -621,28 +649,42 @@ function HandleRSVP(question_divname, title_divname, msgnum, cal_partnum, sc) {
 // TODO: Collapse into one function
 function toggleTaskDtStart(event) {
        var checkBox = $('nodtstart');
-       dtStart = document.getElementById("dtstart");
+       var checkBoxTime = $('dtstart_time_assoc');
+       var dtstart = document.getElementById("dtstart");
+       var dtstart_date = document.getElementById("dtstart_date");
+       var dtstart_time = document.getElementById("dtstart_time");
        if (checkBox.checked) {
-               dtStart.disabled = true;
-               dtStart.style.textDecoration = "line-through";
+               dtstart_date.style.visibility = "hidden";
+               dtstart_time.style.visibility = "hidden";
        } else {
-               dtStart.disabled = false;
-               dtStart.style.textDecoration = "";
-               if (dtStart.value.length == 0)
-                       dtStart.dpck._initCurrentDate();
+               if (checkBoxTime.checked) {
+                       dtstart_time.style.visibility = "visible";
+               } else {
+                       dtstart_time.style.visibility = "hidden";
+               }
+               dtstart_date.style.visibility = "visible";
+               if (dtstart.value.length == 0)
+                       dtstart.dpck._initCurrentDate();
        }
 }
 function toggleTaskDue(event) {
        var checkBox = $('nodue');
-       dueField = document.getElementById("due");
+       var checkBoxTime = $('due_time_assoc');
+       var due = document.getElementById("due");
+       var due_date = document.getElementById("due_date");
+       var due_time = document.getElementById("due_time");
        if (checkBox.checked) {
-               dueField.disabled = true;
-               dueField.style.textDecoration = "line-through";
+               due_date.style.visibility = "hidden";
+               due_time.style.visibility = "hidden";
        } else {
-               dueField.disabled = false;
-               dueField.style.textDecoration = "";
-               if (dueField.value.length == 0)
-                       dueField.dpck._initCurrentDate();
+               if (checkBoxTime.checked) {
+                       due_time.style.visibility = "visible";
+               } else {
+                       due_time.style.visibility = "hidden";
+               }
+               due_date.style.visibility = "visible";
+               if (due.value.length == 0)
+                       due.dpck._initCurrentDate();
        }
 }
 function ToggleTaskDateOrNoDateActivate(event) {
@@ -651,7 +693,9 @@ function ToggleTaskDateOrNoDateActivate(event) {
                toggleTaskDtStart(null);
                toggleTaskDue(null);
                $('nodtstart').observe('click', toggleTaskDtStart);
+               $('dtstart_time_assoc').observe('click', toggleTaskDtStart);
                $('nodue').observe('click', toggleTaskDue);
+               $('due_time_assoc').observe('click', toggleTaskDue);
        } 
 }
 function TaskViewGatherCategoriesFromTable() {
@@ -670,13 +714,14 @@ function attachDatePicker(relative) {
 }
 function eventEditAllDay() {
        var allDayCheck = document.getElementById("alldayevent");
-       var dtend= document.getElementById("dtendcell");
+       var dtend_time = document.getElementById("dtend_time");
+       var dtstart_time = document.getElementById("dtstart_time");
        if(allDayCheck.checked) {
-               //dtend.disabled = true;
-               dtend.style.textDecoration = "line-through";
+               dtstart_time.style.visibility = "hidden";
+               dtend_time.style.visibility = "hidden";
        } else {
-               //dtend_day.disabled = false;
-               dtend.style.textDecoration = "";
+               dtstart_time.style.visibility = "visible";
+               dtend_time.style.visibility = "visible";
        }
 }
 
@@ -757,6 +802,23 @@ function RecurrenceShowHide() {
        }
 
 }
+
+
+// Enable or disable the 'check attendee availability' button depending on whether
+// the attendees list is empty
+function EnableOrDisableCheckButton()
+{
+       if ($('attendees_box').value.length == 0) {
+               $('check_button').disabled = true;
+       }
+       else {
+               $('check_button').disabled = false;
+       }
+}
+
+
+
+
 function launchChat(event) {
 window.open('chat', 'ctdl_chat_window', 'toolbar=no,location=no,directories=no,copyhistory=no,status=no,scrollbars=yes,resizable=yes');
 }
@@ -766,6 +828,8 @@ function WCLog(msg) {
     console.log(msg);
   } else if (!!window.opera && !!opera.postError) {
     opera.postError(msg);
+  } else {
+    wc_log += msg + "\r\n";
   }
 }
 
@@ -794,11 +858,31 @@ function fixbanner() {
   // Use prototype api methods here
   var elems = [$('room_banner'),$('actiondiv')];
   fixMissingCSSTable(elems);
-  var banner = $('banner'); 
-  if (banner != null) {
+  if (!is_ie6) {
+    Event.observe(window, 'resize', makeContentScrollable);
+    makeContentScrollable();
+  }
+}
+function makeContentScrollable() {
+if (document.getElementById("banner")
+      && document.getElementById("content") 
+      && !document.getElementById("summary_view")) {
+  WCLog("makeContentScrollable");
+    document.body.style.overflowY="hidden";
+    var global = $("global");
+    global.className += "scrollable";
+    var content = document.getElementById("content");
+    var banner = document.getElementById("banner");
+    var bannerHeight = banner.offsetHeight;
+    banner.style.width="100%";
+    var bannerPercent = (bannerHeight/document.viewport.getHeight())*100;
+    //banner.style.height=bannerPercent+"%";
+    content.style.overflowY="scroll";
+    //content.style.top=bannerPercent+"%";
+    content.style.height=(100-bannerPercent)+"%";
+    content.style.right="0px";
   }
 }
-
 function fixOffsetBanner() {
   var banner = document.getElementById("banner");
   if (banner.offsetLeft > 0) {
@@ -809,12 +893,15 @@ function fixOffsetBanner() {
     contentDiv.style.width = newContentWidth+"px";
   }
 }
-/** Attempt to stop overflowing in x-axis in IE */
+/** Attempt to stop overflowing in x-axis in IE6 */
 function resizeViewport() {
   var documentWidth = 0;
   var viewportWidth = document.viewport.getWidth();
   var iconbar = $('iconbar');
   var global = $('global');
+  if (iconbar == null || global == null || document.documentElement == null) {
+    return;
+  }
   if (typeof window.offsetWidth != 'undefined') {
     documentWidth = window.offsetWidth;
   } else {