I think I'm getting tired
[squirrelmail.git] / functions / page_header.php
index b193b73f9021123261e4d731d3f826bdb11ea92e..df2ca0d0accc475f4f087c3157f7f80750d46a18 100644 (file)
@@ -3,7 +3,7 @@
 /**
  * page_header.php
  *
- * Copyright (c) 1999-2004 The SquirrelMail Project Team
+ * Copyright (c) 1999-2005 The SquirrelMail Project Team
  * Licensed under the GNU GPL. For full terms see the file COPYING.
  *
  * Prints the page header (duh)
@@ -38,23 +38,34 @@ function displayHtmlHeader( $title = 'SquirrelMail', $xtra = '', $do_hook = true
 
     if ($frames) {
         echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">';
-    } else {          
+    } else {
         echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">';
     }
     echo "\n\n" . html_tag( 'html' ,'' , '', '', 'lang="'.$squirrelmail_language.'"' ) . "\n<head>\n";
 
+    /*
+     * Add closing / to link and meta elements only after switching to xhtml 1.0 Transitional.
+     * It is not compatible with html 4.01 Transitional
+     */
     if ( !isset( $custom_css ) || $custom_css == 'none' ) {
         if ($theme_css != '') {
-            echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"$theme_css\" />";
+            echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"$theme_css\">";
         }
     } else {
         echo '<link rel="stylesheet" type="text/css" href="' .
-             $base_uri . 'themes/css/'.$custom_css.'" />';
+             $base_uri . 'themes/css/'.$custom_css.'">';
     }
 
     if ($squirrelmail_language == 'ja_JP') {
+        /*
+         * force correct detection of charset, when browser does not follow
+         * http content-type and tries to detect charset from page content.
+         * Shooting of browser's creator can't be implemented in php.
+         * We might get rid of it, if we follow http://www.w3.org/TR/japanese-xml/
+         * recommendations and switch to unicode.
+         */
         echo "<!-- \xfd\xfe -->\n";
-        echo '<meta http-equiv="Content-type" content="text/html; charset=euc-jp" />' . "\n";
+        echo '<meta http-equiv="Content-type" content="text/html; charset=euc-jp">' . "\n";
     }
 
     if ($do_hook) {
@@ -96,9 +107,18 @@ function makeInternalLink($path, $text, $target='') {
     if ($target != '') {
         $target = " target=\"$target\"";
     }
-    $hooktext = do_hook_function('internal_link',$text);
-    if ($hooktext != '')
-        $text = $hooktext;
+
+    // This is an inefficient hook and is only used by
+    // one plugin that still needs to patch this code,
+    // plus if we are templat-izing SM, visual hooks
+    // are not needed.  However, I am leaving the code
+    // here just in case we find a good (non-visual?)
+    // use for the internal_link hook.
+    //
+    //$hooktext = do_hook_function('internal_link',$text);
+    //if ($hooktext != '')
+    //    $text = $hooktext;
+
     return '<a href="'.$base_uri.$path.'"'.$target.'>'.$text.'</a>';
 }
 
@@ -144,7 +164,7 @@ function displayPageHeader($color, $mailbox, $xtra='', $session=false) {
     $session = 0;
     }
 
-    if($javascript_on) {
+    if( $javascript_on || strpos($xtra, 'new_js_autodetect_results.value') ) {
 
       switch ( $module ) {
         case 'src/read_body.php':
@@ -243,6 +263,170 @@ function displayPageHeader($color, $mailbox, $xtra='', $session=false) {
             displayHtmlHeader ('SquirrelMail', $js);
             break;
 
+        case 'src/right_main.php':
+// following code graciously stolen from phpMyAdmin project at:
+// http://www.phpmyadmin.net
+            $js = <<<EOS
+/**
+ * This array is used to remember mark status of rows in browse mode
+ */
+var marked_row = new Array;
+
+
+/**
+ * Sets/unsets the pointer and marker in browse mode
+ *
+ * @param   object    the table row
+ * @param   integer  the row number
+ * @param   string    the action calling this script (over, out or click)
+ * @param   string    the default background color
+ * @param   string    the color to use for mouseover
+ * @param   string    the color to use for marking a row
+ *
+ * @return  boolean  whether pointer is set or not
+ */
+function setPointer(theRow, theRowNum, theAction, theDefaultColor, thePointerColor, theMarkColor)
+{
+    var theCells = null;
+
+    // 1. Pointer and mark feature are disabled or the browser can't get the
+    //    row -> exits
+    if ((thePointerColor == '' && theMarkColor == '')
+        || typeof(theRow.style) == 'undefined') {
+        return false;
+    }
+
+    // 2. Gets the current row and exits if the browser can't get it
+    if (typeof(document.getElementsByTagName) != 'undefined') {
+        theCells = theRow.getElementsByTagName('td');
+    }
+    else if (typeof(theRow.cells) != 'undefined') {
+        theCells = theRow.cells;
+    }
+    else {
+        return false;
+    }
+
+    // 3. Gets the current color...
+    var rowCellsCnt  = theCells.length;
+    var domDetect    = null;
+    var currentColor = null;
+    var newColor     = null;
+    // 3.1 ... with DOM compatible browsers except Opera that does not return
+    //         valid values with "getAttribute"
+    if (typeof(window.opera) == 'undefined'
+        && typeof(theCells[0].getAttribute) != 'undefined') {
+        currentColor = theCells[0].getAttribute('bgcolor');
+        domDetect    = true;
+    }
+    // 3.2 ... with other browsers
+    else {
+        currentColor = theCells[0].style.backgroundColor;
+        domDetect    = false;
+    } // end 3
+
+    // 3.3 ... Opera changes colors set via HTML to rgb(r,g,b) format so fix it
+    if (currentColor.indexOf("rgb") >= 0)
+    {
+        var rgbStr = currentColor.slice(currentColor.indexOf('(') + 1,
+                                     currentColor.indexOf(')'));
+        var rgbValues = rgbStr.split(",");
+        currentColor = "#";
+        var hexChars = "0123456789ABCDEF";
+        for (var i = 0; i < 3; i++)
+        {
+            var v = rgbValues[i].valueOf();
+            currentColor += hexChars.charAt(v/16) + hexChars.charAt(v%16);
+        }
+    }
+
+    // 4. Defines the new color
+    // 4.1 Current color is the default one
+    if (currentColor == ''
+        || currentColor.toLowerCase() == theDefaultColor.toLowerCase()) {
+        if (theAction == 'over' && thePointerColor != '') {
+            newColor              = thePointerColor;
+        }
+        else if (theAction == 'click' && theMarkColor != '') {
+            newColor              = theMarkColor;
+            marked_row[theRowNum] = true;
+            // deactivated onclick marking of the checkbox because it's also executed
+            // when an action (clicking on the checkbox itself) on a single item is 
+            // performed. Then the checkbox would get deactived, even though we need 
+            // it activated. Maybe there is a way to detect if the row was clicked, 
+            // and not an item therein...
+            //document.getElementById('msg[' + theRowNum + ']').checked = true;
+        }
+    }
+    // 4.1.2 Current color is the pointer one
+    else if (currentColor.toLowerCase() == thePointerColor.toLowerCase()
+             && (typeof(marked_row[theRowNum]) == 'undefined' || !marked_row[theRowNum])) {
+        if (theAction == 'out') {
+            newColor              = theDefaultColor;
+        }
+        else if (theAction == 'click' && theMarkColor != '') {
+            newColor              = theMarkColor;
+            marked_row[theRowNum] = true;
+            //document.getElementById('msg[' + theRowNum + ']').checked = true;
+        }
+    }
+    // 4.1.3 Current color is the marker one
+    else if (currentColor.toLowerCase() == theMarkColor.toLowerCase()) {
+        if (theAction == 'click') {
+            newColor              = (thePointerColor != '')
+                                  ? thePointerColor
+                                  : theDefaultColor;
+            marked_row[theRowNum] = (typeof(marked_row[theRowNum]) == 'undefined' || !marked_row[theRowNum])
+                                  ? true
+                                  : null;
+            //document.getElementById('msg[' + theRowNum + ']').checked = false;
+        }
+    } // end 4
+
+    // 5. Sets the new color...
+    if (newColor) {
+        var c = null;
+        // 5.1 ... with DOM compatible browsers except Opera
+        if (domDetect) {
+            for (c = 0; c < rowCellsCnt; c++) {
+                theCells[c].setAttribute('bgcolor', newColor, 0);
+            } // end for
+        }
+        // 5.2 ... with other browsers
+        else {
+            for (c = 0; c < rowCellsCnt; c++) {
+                theCells[c].style.backgroundColor = newColor;
+            }
+        }
+    } // end 5
+
+    return true;
+} // end of the 'setPointer()' function
+EOS;
+            $js = "\n".'<script language="JavaScript" type="text/javascript">' .
+                        "\n<!--\n" . $js;
+            if ($compose_new_win == '1') {
+                if (!preg_match("/^[0-9]{3,4}$/", $compose_width)) {
+                    $compose_width = '640';
+                }
+                if (!preg_match("/^[0-9]{3,4}$/", $compose_height)) {
+                    $compose_height = '550';
+                }
+                $js .= "\nfunction comp_in_new(comp_uri) {\n".
+                     "       if (!comp_uri) {\n".
+                     '           comp_uri = "'.$compose_uri."\";\n".
+                     '       }'. "\n".
+                     '    var newwin = window.open(comp_uri' .
+                     ', "_blank",'.
+                     '"width='.$compose_width. ',height='.$compose_height.
+                     ',scrollbars=yes,resizable=yes,status=yes");'."\n".
+                     "}\n\n";
+            }
+            $js .= "// -->\n</script>\n";
+            $onload = '';
+            displayHtmlHeader ('SquirrelMail', $js);
+            break;
+
         default:
             $js = '<script language="JavaScript" type="text/javascript">' .
                  "\n<!--\n" .
@@ -302,7 +486,7 @@ function displayPageHeader($color, $mailbox, $xtra='', $session=false) {
     echo "<body text=\"$color[8]\" bgcolor=\"$color[4]\" link=\"$color[7]\" vlink=\"$color[7]\" alink=\"$color[7]\" $onload>\n\n";
     /** Here is the header and wrapping table **/
     $shortBoxName = htmlspecialchars(imap_utf7_decode_local(
-                     readShortMailboxName($mailbox, $delimiter)));
+                readShortMailboxName($mailbox, $delimiter)));
     if ( $shortBoxName == 'INBOX' ) {
         $shortBoxName = _("INBOX");
     }
@@ -431,4 +615,4 @@ function compose_Header($color, $mailbox) {
     echo "<body text=\"$color[8]\" bgcolor=\"$color[4]\" link=\"$color[7]\" vlink=\"$color[7]\" alink=\"$color[7]\" $onload>\n\n";
 }
 
-?>
\ No newline at end of file
+?>