]> code.citadel.org Git - citadel.git/blobdiff - webcit/static/wclib.js
* streamline copyright statements; add Conclusion of included components; flip to...
[citadel.git] / webcit / static / wclib.js
index 155af4e1149aa9396107f1f5ca77977682f6453f..79df4271ef8aa0aa572ce9ddb244c6b6d12d4f94 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,13 +229,13 @@ 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 ) {
     expandFloor(mailboxSPAN);
@@ -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,12 +649,24 @@ function HandleRSVP(question_divname, title_divname, msgnum, cal_partnum, sc) {
 // TODO: Collapse into one function
 function toggleTaskDtStart(event) {
        var checkBox = $('nodtstart');
+       var checkBoxTime = $('dtstart_time');
        dtStart = document.getElementById("dtstart");
+       dtStartHour = document.getElementById("dtstart_hour");
+       dtStartMinute = document.getElementById("dtstart_minute");
        if (checkBox.checked) {
                dtStart.disabled = true;
+               dtStartHour.disabled = true;
+               dtStartMinute.disabled = true;
                dtStart.style.textDecoration = "line-through";
        } else {
                dtStart.disabled = false;
+               if (checkBoxTime.checked) {
+                       dtStartHour.disabled = false;
+                       dtStartMinute.disabled = false;
+               } else {
+                       dtStartHour.disabled = true;
+                       dtStartMinute.disabled = true;
+               }
                dtStart.style.textDecoration = "";
                if (dtStart.value.length == 0)
                        dtStart.dpck._initCurrentDate();
@@ -634,12 +674,24 @@ function toggleTaskDtStart(event) {
 }
 function toggleTaskDue(event) {
        var checkBox = $('nodue');
+       var checkBoxTime = $('due_time');
        dueField = document.getElementById("due");
+       dueFieldHour = document.getElementById("due_hour");
+       dueFieldMinute = document.getElementById("due_minute");
        if (checkBox.checked) {
                dueField.disabled = true;
+               dueFieldHour.disabled = true;
+               dueFieldMinute.disabled = true;
                dueField.style.textDecoration = "line-through";
        } else {
                dueField.disabled = false;
+               if (checkBoxTime.checked) {
+                       dueFieldHour.disabled = false;
+                       dueFieldMinute.disabled = false;
+               } else {
+                       dueFieldHour.disabled = true;
+                       dueFieldMinute.disabled = true;
+               }
                dueField.style.textDecoration = "";
                if (dueField.value.length == 0)
                        dueField.dpck._initCurrentDate();
@@ -651,7 +703,9 @@ function ToggleTaskDateOrNoDateActivate(event) {
                toggleTaskDtStart(null);
                toggleTaskDue(null);
                $('nodtstart').observe('click', toggleTaskDtStart);
+               $('dtstart_time').observe('click', toggleTaskDtStart);
                $('nodue').observe('click', toggleTaskDue);
+               $('due_time').observe('click', toggleTaskDue);
        } 
 }
 function TaskViewGatherCategoriesFromTable() {
@@ -757,6 +811,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 +837,8 @@ function WCLog(msg) {
     console.log(msg);
   } else if (!!window.opera && !!opera.postError) {
     opera.postError(msg);
+  } else {
+    wc_log += msg + "\r\n";
   }
 }
 
@@ -794,11 +867,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) {
@@ -815,6 +908,9 @@ function resizeViewport() {
   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 {