4f2310a8131b4aed5bd1f0a7c06497ff73255aa1
2 * This array is used to remember mark status of rows in browse mode
4 * @copyright © 2005-2009 The SquirrelMail Project Team
5 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
8 var marked_row
= new Array
;
9 var orig_row_colors
= new Array();
12 * (un)Checks checkbox for the row that the current table cell is in
13 * when it gets clicked.
15 * @param string The (internal) name of the checkbox
16 * that should be (un)checked
17 * @param JavaScript event object The JavaScript event associated
18 * with this mouse click
19 * @param string The name of the encapsulating form
20 * @param string The (real) name of the checkbox
21 * that should be (un)checked
22 * @param string Any extra JavaScript (that will
23 * be executed herein if non-empty);
24 * must be valid JavaScript expression(s)
26 function row_click(chkboxName
, event
, formName
, checkboxRealName
, extra
) {
27 var chkbox
= document
.getElementById(chkboxName
);
29 // initialize orig_row_color if not defined already
30 if (!orig_row_colors
[chkboxName
]) {
31 orig_row_colors
[chkboxName
] = chkbox
.parentNode
.getAttribute('bgcolor');
32 if (orig_row_colors
[chkboxName
].indexOf("clicked_") == 0)
33 orig_row_colors
[chkboxName
] = orig_row_colors
[chkboxName
].substring(8, orig_row_colors
[chkboxName
].length
);
35 chkbox
.checked
= (chkbox
.checked
? false : true);
37 if (extra
!= '') eval(extra
);
42 * Gets the current class of the requested row. This is a browser specific function.
43 * Code shamelessly ripped from setPointer() below.
45 function getCSSClass (theRow
)
48 // 3.1 ... with DOM compatible browsers except Opera that does not return
49 // valid values with "getAttribute"
50 if (typeof(window
.opera
) == 'undefined'
51 && typeof(theRow
.getAttribute
) != 'undefined'
52 && theRow
.getAttribute('className') ) {
53 rowClass
= theRow
.getAttribute('className');
55 // 3.2 ... with other browsers
57 rowClass
= theRow
.className
;
64 * Sets a new CSS class for the given row. Browser-specific.
66 function setCSSClass (obj
, newClass
) {
67 if (typeof(window
.opera
) == 'undefined' && typeof(obj
.getAttribute
) != 'undefined' && obj
.getAttribute('className') ) {
68 obj
.setAttribute('className', newClass
, 0);
71 obj
.className
= newClass
;
76 * This function is used to initialize the orig_row_color array so we do not
77 * need to predefine the entire array
79 function rowOver(chkboxName
) {
80 var chkbox
= document
.getElementById(chkboxName
);
81 var rowClass
, rowNum
, overClass
, clickedClass
;
83 if (!orig_row_colors
[chkboxName
]) {
84 rowClass
= getCSSClass(chkbox
.parentNode
.parentNode
);
85 if (rowClass
.indexOf("clicked_") == 0)
86 rowClass
= rowClass
.substring(8, rowClass
.length
);
87 orig_row_colors
[chkboxName
] = rowClass
;
89 rowClass
= orig_row_colors
[chkboxName
];
91 rowNum
= chkboxName
.substring(chkboxName
.length
- 1, chkboxName
.length
);
94 * The mouseover and clicked CSS classes are always the same name!
96 overClass
= 'mouse_over';
97 clickedClass
= 'clicked';
98 setPointer(chkbox
.parentNode
.parentNode
, rowNum
, 'over' , rowClass
, overClass
, clickedClass
);
103 * (un)Checks all checkboxes for the message list from a specific form
104 * when it gets clicked.
106 * @param string the id of the form where all checkboxes should be (un)checked
107 * @param string the first three characters of target checkboxes, if any
108 * @param boolean use fancy row coloring when a checkbox is checked
109 * @param string new color of the checked rows
111 function toggle_all(formname
, name_prefix
, fancy
) {
112 var TargetForm
= document
.getElementById(formname
);
114 for (var i
= 0; i
< TargetForm
.elements
.length
; i
++) {
115 if (TargetForm
.elements
[i
].type
== 'checkbox' && (name_prefix
== '' || TargetForm
.elements
[i
].name
.substring(0,3) == name_prefix
)) {
117 array_key
= TargetForm
.elements
[i
].getAttribute('id');
118 // initialize orig_row_color if not defined already
119 if (!orig_row_colors
[array_key
]) {
120 rowClass
= getCSSClass(TargetForm
.elements
[i
].parentNode
.parentNode
);
121 if (rowClass
.indexOf("clicked_") == 0)
122 rowClass
= rowClass
.substring(8, rowClass
.length
);
123 orig_row_colors
[array_key
] = rowClass
;
125 origClass
= orig_row_colors
[array_key
];
126 clickedClass
= 'clicked';
127 setPointer(TargetForm
.elements
[i
].parentNode
.parentNode
, j
,'click' , origClass
, origClass
, clickedClass
);
130 TargetForm
.elements
[i
].checked
= !(TargetForm
.elements
[i
].checked
);
136 * Sets/unsets the pointer and marker in browse mode
138 * @param object theRow the table row
139 * @param integer theRowNum the row number
140 * @param string theAction the action calling this script (over, out or click)
141 * @param string defaultClass the default background CSS class
142 * @param string mouseoverClass the CSS class to use for mouseover
143 * @param string clickedClass the CSS class to use for marking a row
145 * @return boolean whether pointer is set or not
147 function setPointer(theRow
, theRowNum
, theAction
, defaultClass
, mouseoverClass
, clickedClass
)
149 // 1. Pointer and mark feature are disabled or the browser can't get the
151 if ((mouseoverClass
== '' && clickedClass
== '')
152 || typeof(theRow
.className
) == 'undefined') {
156 // 2. Verify we can get the current row or exit
157 if (typeof(document
.getElementsByTagName
) != 'undefined') {
160 else if (typeof(theRow
) != 'undefined') {
167 // 3. Gets the current CSS class...
169 var currentClass
= getCSSClass(theRow
);
170 if (currentClass
.indexOf("clicked_") == 0)
171 currentClass
= 'clicked';
173 // 4. Defines the new class
174 // 4.1 Current class is the default one
175 if (currentClass
== ''
176 || currentClass
.toLowerCase() == defaultClass
.toLowerCase()) {
177 if (theAction
== 'over' && mouseoverClass
!= '') {
178 newClass
= mouseoverClass
;
180 else if (theAction
== 'click' && clickedClass
!= '') {
181 newClass
= clickedClass
;
182 marked_row
[theRowNum
] = true;
183 // deactivated onclick marking of the checkbox because it's also executed
184 // when an action (clicking on the checkbox itself) on a single item is
185 // performed. Then the checkbox would get deactived, even though we need
186 // it activated. Maybe there is a way to detect if the row was clicked,
187 // and not an item therein...
188 //document.getElementById('msg[' + theRowNum + ']').checked = true;
191 // 4.1.2 Current class is the mouseover one
192 else if (currentClass
.toLowerCase() == mouseoverClass
.toLowerCase()
193 && (typeof(marked_row
[theRowNum
]) == 'undefined' || !marked_row
[theRowNum
])) {
194 if (theAction
== 'out') {
195 newClass
= defaultClass
;
197 else if (theAction
== 'click' && clickedClass
!= '') {
198 newClass
= clickedClass
;
199 marked_row
[theRowNum
] = true;
200 //document.getElementById('msg[' + theRowNum + ']').checked = true;
203 // 4.1.3 Current color is the clicked one
204 else if (currentClass
.toLowerCase() == clickedClass
.toLowerCase()) {
205 if (theAction
== 'click') {
206 newClass
= (mouseoverClass
!= '')
209 marked_row
[theRowNum
] = false;
210 //document.getElementById('msg[' + theRowNum + ']').checked = false;
214 // 5. Sets the new color...
216 setCSSClass(theRow
, newClass
);
220 } // end of the 'setPointer()' function
222 function comp_in_new_form(comp_uri
, button
, myform
, iWidth
, iHeight
) {
223 comp_uri
+= "&" + button
.name
+ "=1";
224 for ( var i
=0; i
< myform
.elements
.length
; i
++ ) {
225 if ( myform
.elements
[i
].type
== "checkbox" && myform
.elements
[i
].checked
)
226 comp_uri
+= "&" + myform
.elements
[i
].name
+ "=1";
228 if (!iWidth
) iWidth
= 640;
229 if (!iHeight
) iHeight
= 550;
230 var sArg
= "width=" + iWidth
+ ",height=" + iHeight
+ ",scrollbars=yes,resizable=yes,status=yes";
231 var newwin
= window
.open(comp_uri
, "_blank", sArg
);
234 function comp_in_new(comp_uri
, iWidth
, iHeight
) {
235 if (!iWidth
) iWidth
= 640;
236 if (!iHeight
) iHeight
= 550;
237 sArg
= "width=" + iWidth
+ ",height=" + iHeight
+ ",scrollbars=yes,resizable=yes,status=yes";
238 var newwin
= window
.open(comp_uri
, "_blank", sArg
);
242 * Reload the read_body screen on sending an mdn receipt
245 var mdnuri
=window
.location
+'&sendreceipt=1';
246 window
.location
= mdnuri
;
249 var alreadyFocused
= false;
250 function checkForm(smaction
) {
252 if (alreadyFocused
) return;
255 * this part is used for setting the focus in the compose screen
258 if (smaction
== "select") {
259 document
.forms
['compose'].body
.select();
260 } else if (smaction
== "focus") {
261 document
.forms
['compose'].body
.focus();
265 * All other forms that need to set the focus
267 var f
= document
.forms
.length
;
270 while( pos
== -1 && i
< f
) {
271 var e
= document
.forms
[i
].elements
.length
;
273 while( pos
== -1 && j
< e
) {
274 if ( document
.forms
[i
].elements
[j
].type
== 'text' || document
.forms
[i
].elements
[j
].type
== 'password' || document
.forms
[i
].elements
[j
].type
== 'textarea' ) {
282 document
.forms
[i
-1].elements
[pos
].focus();
289 parent
.frames
['right'].focus();
290 parent
.frames
['right'].print();
293 /* JS implementation of more/less links in To/CC. Could later be extended
294 * show/hide other interface items */
295 function showhide (item, txtmore, txtless) {
296 var oTemp=document.getElementById("recpt_tail_" + item);
297 var oClick=document.getElementById("toggle_" + item);
298 if (oTemp.style.display=="inline") {
299 oTemp.style.display="none";
300 oClick.innerHTML=txtmore;
302 oTemp.style.display="inline";
303 oClick.innerHTML=txtless;