Changeset 67
- Timestamp:
- 09/11/07 17:35:40 (17 years ago)
- Location:
- trunk
- Files:
-
- 177 added
- 13 deleted
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/expressoMail1_2/js/search.js
r61 r67 50 50 div_button_search.style.width = "600px"; 51 51 div_button_search.style.height = "25px"; 52 div_button_search.innerHTML = "<table border='0' width=' 100%' cellpadding='0' cellspacing='0'>"+52 div_button_search.innerHTML = "<table border='0' width='50%' cellpadding='0' cellspacing='0' align='right'>"+ 53 53 "<tr>"+ 54 "<td width='350px'><font size='2'><b>" + get_lang('Result of the search') + " .:</b></font> "+55 "<span id='num_search_results'></span></td>"+56 54 "<td><input type='button' value=" + get_lang('Search') + " onclick='EsearchE.func_search()'></td>"+ 57 55 "<td><input type='button' value=" + get_lang('Clean') + " onclick='EsearchE.func_clean()'></td>"+ … … 64 62 65 63 if(!Element("table_layer")){ 66 var table_layer = document.createElement("DIV"); 67 table_layer.id = "table_layer"; 68 table_layer.innerHTML = "<br><table border='0' cellpading='0' cellspacing='0' width='100%'>"+ 69 "<tr>"+ 70 "<td width='20%' style='background:#C0C0C0'><b>" + get_lang('Folder') + "</b></td>"+ 71 "<td width='30%' style='background:#C0C0C0'><b>" + get_lang('Who') + "</b></td>"+ 72 "<td width='30%' style='background:#C0C0C0'><b>" + get_lang('Subject') + "</b></td>"+ 73 "<td width='10%' style='background:#C0C0C0'><b>" + get_lang('Date') + "</b></td>"+ 74 "<td width='10%' style='background:#C0C0C0' align='left'><b>" + get_lang('Size') + "</b></td>"+ 75 "</tr>"+ 76 "</table>"; 77 table_layer.style.position = "absolute"; 78 table_layer.style.left = "10px"; 79 table_layer.style.top = "238px"; 80 table_layer.style.width = "638px"; 81 form_search.appendChild(table_layer); 82 } 83 // Resultado 84 if(!Element("div_form_result")){ 85 var div_form_result = document.createElement("DIV"); 86 div_form_result.id = "div_form_result"; 87 div_form_result.style.position = "absolute"; 88 div_form_result.style.left = "10px"; 89 div_form_result.style.top = "270px"; 90 div_form_result.style.width = "635px"; 91 div_form_result.style.height = "120px"; 92 div_form_result.style.borderStyle = "outset"; 93 div_form_result.style.borderColor = "black"; 94 div_form_result.style.borderWidth = "1px"; 95 div_form_result.style.overflow = "auto"; 96 div_form_result.innerHTML = ""; 97 form_search.appendChild(div_form_result); 98 } 99 100 EsearchE.showWindow(Element("window_search")); 64 var table_layer = ""; 65 } 66 67 if(value == "") 68 EsearchE.showWindow(Element("window_search")); 101 69 102 70 // Cria as caixas postais; … … 186 154 // Monta Resultado no Box 187 155 searchE.prototype.mount_result_box = function(data){ 188 var label = "Resultado da Pesquisa";189 Element("border_id_0").innerHTML = " <font color='red'>" + label + '</font> <font face="Verdana" size="1" color="#505050">[<span id="new_m"> </span> / <span id="tot_m">0</span>]</font>';190 156 draw_box(new Array(), "_search"); 191 157 draw_paging(0); … … 201 167 var var_tmp = data.split("##"); 202 168 var cont = parseInt(0); 203 var div_form = document.getElementById("div_form_result");204 169 var_tmp.sort(); 205 170 for(var i=0; i < var_tmp.length; i++){ … … 227 192 var tbody = document.createElement("TBODY"); 228 193 if(nw_array.length > 0){ 229 Element('num_search_results').innerHTML = "<span class='action_info_th'> "+nw_array.length +" mensagens encontradas.</span>"; 230 } 231 else 232 Element('num_search_results').innerHTML = ''; 194 write_msg(nw_array.length + get_lang(' search results')); 195 } 233 196 234 197 for( var i=0; i < nw_array.length; i++){ 235 198 var tr = document.createElement("TR"); 236 var color = "#F7F7F7";237 tr.style.background = color;199 var color = "#F0F0F0"; 200 tr.style.background = color; 238 201 239 202 var aux = nw_array[i].split("--"); … … 242 205 var uid_msg = aux[5]; 243 206 var td = document.createElement("TD"); 207 td.style.border = "1px solid #FFFFFF"; 208 td.style.height = "20px"; 244 209 if( j <= 4){ 245 210 if( j == 0){ 246 td.width = " 20%";211 td.width = "10%"; 247 212 var nm_box = aux[0].split(cyrus_delimiter); 248 213 var td1 = nm_box.pop(); … … 252 217 } 253 218 if( j == 1){ 254 td.width = "3 0%";255 var td1 = aux[1];219 td.width = "35%"; 220 var td1 = '<a href=javascript:void(0) onclick=EsearchE.open_msg(\"' + url_encode(mailbox) + '\",\"' + uid_msg + '\",\"' + subject_encode + '\")>' + aux[1].substr(0,25) + '</a>'; 256 221 } 257 222 if( j == 2){ 258 223 var subject_encode = url_encode(aux[2]); 259 td.width = "3 0%";224 td.width = "35%"; 260 225 var td1 = '<a href=javascript:void(0) onclick=EsearchE.open_msg(\"' + url_encode(mailbox) + '\",\"' + uid_msg + '\",\"' + subject_encode + '\")>' + aux[2].substr(0,25) + '...</a>'; 261 226 … … 271 236 var td1 = aux[4]; 272 237 } 238 273 239 td.innerHTML = td1; 274 240 tr.appendChild(td); … … 279 245 } 280 246 table.appendChild(tbody); 281 div_form.appendChild(table); 247 248 if(window.content_id_border_id_procurar) 249 { 250 // Remove header 251 content_id_border_id_procurar.removeChild(content_id_border_id_procurar.firstChild); 252 alternate_border("border_id_procurar"); 253 } 254 else 255 var border_id = create_border(get_lang("Search Results"), "border_id_procurar"); 256 257 if(is_ie) 258 document.getElementById("border_table").width = "99.5%"; 259 260 /* Put header */ 261 var table_element = document.createElement("TABLE"); 262 var tbody_element = document.createElement("TBODY"); 263 table_element.setAttribute("id", "table_message_header_box"); 264 table_element.className = "table_message_header_box"; 265 tr_element = document.createElement("TR"); 266 tr_element.className = "message_header"; 267 td_element1 = document.createElement("TD"); 268 td_element1.setAttribute("width", "10%"); 269 td_element1.align = "left"; 270 td_element1.innerHTML = get_lang("Folder"); 271 td_element2 = document.createElement("TD"); 272 td_element2.setAttribute("width", "35%"); 273 td_element2.align = "left"; 274 td_element2.innerHTML = get_lang("Who"); 275 td_element3 = document.createElement("TD"); 276 td_element3.setAttribute("width", "35%"); 277 td_element3.align = "left"; 278 td_element3.innerHTML = get_lang("Subject"); 279 td_element4 = document.createElement("TD"); 280 td_element4.setAttribute("width", "10%"); 281 td_element4.align = "center"; 282 td_element4.innerHTML = get_lang("Date"); 283 td_element5 = document.createElement("TD"); 284 td_element5.setAttribute("width", "10%"); 285 td_element5.align = "right"; 286 td_element5.innerHTML = get_lang("Size"); 287 288 tr_element.appendChild(td_element1); 289 tr_element.appendChild(td_element2); 290 tr_element.appendChild(td_element3); 291 tr_element.appendChild(td_element4); 292 tr_element.appendChild(td_element5); 293 tbody_element.appendChild(tr_element); 294 table_element.appendChild(tbody_element); 295 content_id_border_id_procurar.appendChild(table_element); 296 /*end of "put header"*/ 297 298 content_id_border_id_procurar.appendChild(table); 282 299 } 283 300 … … 411 428 // clean; 412 429 searchE.prototype.func_clean = function(){ 413 Element('num_search_results').innerHTML = '';430 delete_border("border_id_procurar",'false'); 414 431 // Limpa os campos; 415 432 for(var i=0; i < this.fields.length; i++){ … … 437 454 // close 438 455 searchE.prototype.func_close = function(type){ 439 Element('num_search_results').innerHTML = '';440 456 var _this = this; 441 457 _this.name_box_search = ""; … … 449 465 if(!this.searchW[div.id]) { 450 466 div.style.width = "660px"; 451 div.style.height = " 400px";467 div.style.height = "255px"; 452 468 div.style.visibility = "hidden"; 453 469 div.style.position = "absolute"; -
trunk/instant_messenger/IMManager.php
r64 r67 92 92 foreach ( $users as $key => $val ) 93 93 { 94 if( $users[$key]['time0'] > $users[$key]['time1'] ) 95 { 96 $users[$key]['time1'] = $users[$key]['time0']; 97 $users[$key]['attempt'] = 0; 94 $time_now = time(); 95 if ( ( $time_now - $users[$key]['timeClient'] ) < DISCONNECT_AFTERWARDS_OF ) 96 { 98 97 readSocket($users, $key); 99 98 } 100 99 else 101 100 { 102 $users[$key]['attempt']++; 103 if( $users[$key]['attempt'] > 5 ) 101 if((($time_now - $users[$key]['timeClient']) / DISCONNECT_AFTERWARDS_OF) > 2 ) 104 102 { 105 103 $users[$key]['jabber']->disconnect(); … … 143 141 $_resource = $_SESSION['phpgw_info']['instant_messenger']['resource_jabber']; 144 142 $_time = time(); 145 $_SESSION['phpgw_info']['instant_messenger']['time'] = $_time; 143 $_SESSION['phpgw_info']['instant_messenger']['timeClient'] = $_time; 144 $_SESSION['phpgw_info']['instant_messenger']['timeServer'] = $_time; 146 145 $_SESSION['phpgw_info']['instant_messenger']['socket'] = NULL; 147 146 $_SESSION['phpgw_info']['instant_messenger']['socket']['in'] = NULL; … … 157 156 $pUsers[$pSession] = array(); 158 157 $pUsers[$pSession]['jabber'] = $a; 159 $pUsers[$pSession]['time0'] = $_time; 160 $pUsers[$pSession]['time1'] = 0; 161 $pUsers[$pSession]['attempt'] = 0; 158 $pUsers[$pSession]['timeClient'] = $_time; 162 159 } 163 160 else … … 199 196 if ( $is_user ) 200 197 { 201 $pUsers[$pSession]['time0'] = $_SESSION['phpgw_info']['instant_messenger']['time']; 198 $pUsers[$pSession]['timeClient'] = $_SESSION['phpgw_info']['instant_messenger']['timeClient']; 199 $_SESSION['phpgw_info']['instant_messenger']['timeServer'] = time(); 200 202 201 $readSocket = @$pUsers[$pSession]['jabber']->readSocket(); 203 202 -
trunk/instant_messenger/inc/class.Ujabber.inc.php
r64 r67 11 11 $return = null; 12 12 13 $_SESSION['phpgw_info']['instant_messenger']['time'] = time();13 $_SESSION['phpgw_info']['instant_messenger']['timeClient'] = time(); 14 14 $_SESSION['phpgw_info']['instant_messenger']['socket']['block'] = true; 15 15 $xml = $_SESSION['phpgw_info']['instant_messenger']['socket']['in']; -
trunk/instant_messenger/inc/im_acl.inc.php
r64 r67 50 50 <link rel="stylesheet" href="' . $webserver_url . 'templates/default/messenger.css" /> 51 51 <script> 52 var im_send_file="' . $_SESSION['phpgw_info']['instant_messenger']['send_file_jabber'] . '";53 52 var im_path="' . $webserver_url . '"; 54 53 var ini_wzdd = false; -
trunk/instant_messenger/inc/im_sessions.inc.php
r55 r67 7 7 $_SESSION['phpgw_info']['instant_messenger']['port_jabber'] = $GLOBALS['phpgw_info']['server']['port_jabber']; 8 8 $_SESSION['phpgw_info']['instant_messenger']['resource_jabber'] = $GLOBALS['phpgw_info']['server']['resource_jabber']; 9 $_SESSION['phpgw_info']['instant_messenger']['send_file_jabber'] = $GLOBALS['phpgw_info']['server']['send_file_jabber'];10 9 11 10 # Conf. Ldap -
trunk/instant_messenger/index.php
r55 r67 26 26 $_SESSION['phpgw_info']['instant_messenger']['port_jabber'] = $GLOBALS['phpgw_info']['server']['port_jabber']; 27 27 $_SESSION['phpgw_info']['instant_messenger']['resource_jabber'] = $GLOBALS['phpgw_info']['server']['resource_jabber']; 28 $_SESSION['phpgw_info']['instant_messenger']['send_file_jabber'] = $GLOBALS['phpgw_info']['server']['send_file_jabber']; 28 29 29 // Conf. Ldap 30 30 $_SESSION['phpgw_info']['instant_messenger']['server_ldap_jabber'] = $GLOBALS['phpgw_info']['server']['server_ldap_jabber']; -
trunk/instant_messenger/js/im_functions.js
r65 r67 7 7 this.UsersNot = []; 8 8 this.userPrefe = false; 9 this.im_time_ = false;10 9 } 11 10 … … 263 262 else 264 263 offline = eval(IM_Preferences.LoadPreferences('ch_offline')); 264 265 265 var group = func.byId("all_groups").firstChild; 266 266 while ( group ) 267 267 { 268 var contact = group.firstChild .nextSibling;269 while ( contact = contact.nextSibling)268 var contact = group.firstChild; 269 while ( contact ) 270 270 { 271 if( func.byId(contact.id))271 if(contact.tagName == "DIV") 272 272 { 273 var childF = func.byId(contact.id).firstChild;274 if( childF.src == img_unavailable.src && !offline 273 var childF = contact.firstChild; 274 if( childF.src == img_unavailable.src && !offline) 275 275 func.byId(contact.id).style.display = "none"; 276 276 else 277 277 func.byId(contact.id).style.display = "block"; 278 278 } 279 contact = contact.nextSibling; 279 280 } 280 281 group = group.nextSibling; … … 626 627 var form_menu_button_right = '<dl style="z-index:99999">'+ 627 628 '<dt><a href="javascript:void(0);" onclick="javascript:IM_Preferences.Update_NickName(\''+pElement+'\');"><img src="'+img_group_close.src+'">' + IM.get_lang('Nick') + '</a>'+ 628 '<dt><a href="javascript:void(0);" onclick="javascript:IM_Preferences.SendFile(\''+pElement+'\');"><img src="'+img_group_close.src+'">' + IM.get_lang('Send File') + '</a>'+629 629 '<dt><a href="javascript:void(0);" onclick="javascript:IM_Preferences.Update_Group(\''+pElement+'\');"><img src="'+img_group_close.src+'">' + IM.get_lang('Group') + '</a>'+ 630 630 '<dt><a href="javascript:void(0);" onclick="javascript:IM_Preferences.RemoveContact(\''+pElement+'\');"><img src="'+img_group_close.src+'">' + IM.get_lang('Delete') + '</a>'+ … … 666 666 '<item function="IM_Preferences.Add_userLoad()" lang="'+IM.get_lang('Add Contact')+'"/>' + 667 667 '<item function="IM_Preferences.Remove_userLoad()" lang="'+IM.get_lang('Remove Contact')+'"/>' + 668 '<item function="IM_Preferences.vCard()" lang="'+IM.get_lang(' Information')+'"/>' +668 '<item function="IM_Preferences.vCard()" lang="'+IM.get_lang('Vcard')+'"/>' + 669 669 '<item function="IM_Preferences.yourPreferences()" lang="'+IM.get_lang('preferences')+'"/>' + 670 670 '</menu>'; -
trunk/instant_messenger/js/im_preferences.js
r64 r67 6 6 this.save_vcard = ""; 7 7 this.jid = false; 8 this.im_timer_xa = ""; 8 9 } 9 10 … … 283 284 if(pType) 284 285 { 285 var action = prompt('Digite um novo apelido para : ' + pJid 286 name = action;286 var action = prompt('Digite um novo apelido para : ' + pJid, " "); 287 name = (action == "Apelido") ? "" : action ; 287 288 }else{ 288 var action = prompt('Digite um novo grupo para : ' + pJid );289 group = action ;289 var action = prompt('Digite um novo grupo para : ' + pJid , " "); 290 group = action ; 290 291 } 291 292 … … 297 298 XMLTools.request('$this.Ujabber.updateContact','POST',handler_update_contact,"jid="+pJid+"&name="+name+"&group="+group); 298 299 } 299 300 300 } 301 301 … … 387 387 IM_Preferences.prototype.vCardAdd = function() 388 388 { 389 var el_vcard = new Array('FN','NICKNAME','ORGNAME','ORGUNIT','ROLE','BDAY','DESC'); 390 var vcard = ""; 391 var value = ""; 392 var div_jid = document.getElementById("vcard_" + this.jid); 393 var elements = div_jid.firstChild; 394 395 for(var i in el_vcard) 396 { 397 value = ( document.getElementById(el_vcard[i]).value ) ? document.getElementById(el_vcard[i]).value : ""; 398 if( elements.tagName == el_vcard[i] && value != "") 399 { 400 if( el_vcard[i] === 'NICKNAME' ) 401 document.getElementById('span_nickname').innerHTML = "<b> " + value.substring(0,15) + "</b>"; 402 if( el_vcard[i] === 'DESC' ) 403 document.getElementById('span_message').innerHTML = "<b> " + value.substring(0,20) + "...</b>"; 404 elements.innerHTML = value; 405 } 406 elements = elements.nextSibling; 407 vcard += value + "_vkrd_"; 408 } 409 410 vcard = vcard.substr(0,vcard.length - 6 ); 389 var Nvcard = new Array('FN','NICKNAME','ORGNAME','ORGUNIT','ROLE','BDAY','DESC'); 390 var vcard = ""; 391 for(var i in Nvcard) 392 { 393 if( Nvcard[i] === 'NICKNAME' ) 394 document.getElementById('span_nickname').innerHTML = "<b> " + document.getElementById(Nvcard[i]).value.substring(0,15) + "</b>"; 395 if( Nvcard[i] === 'DESC' ) 396 document.getElementById('span_message').innerHTML = "<b> " + document.getElementById(Nvcard[i]).value.substring(0,20) + "...</b>"; 397 vcard += document.getElementById(Nvcard[i]).value + "_vkrd_"; 398 } 399 400 vcard = vcard.substr(0,vcard.length - 6 ); 411 401 412 402 var handler_vcard_add = function(XMLdata) … … 442 432 } 443 433 } 444 IM.im_time_ = func.byId('in_time').value; 434 435 this.im_timer_xa = func.byId('in_time').value; 445 436 preferences += ( func.trim(func.byId('in_time').value )) ? 'in_time:' + func.byId('in_time').value + ";" : 'in_time:0;'; 446 437 preferences += ( func.byId('rd_nm').checked ) ? 'rd_nm:true;' : 'rd_nm:false;'; … … 463 454 IM_Preferences.prototype.GetYourPreferences = function() 464 455 { 456 var _this = this; 465 457 if(!IM.userPrefe) 466 458 { … … 470 462 data = data.firstChild.nodeValue; 471 463 IM.userPrefe = data; 472 IM.im_time_ = this.LoadPreferences('ch_offline');464 _this.TimerXa(_this.LoadPreferences('in_time')); 473 465 } 474 466 XMLTools.request('$this.db_im.get_preferences','GET',handler_getPreferences); … … 479 471 { 480 472 var preferences_im = IM.userPrefe; 481 473 482 474 while( preferences_im !== "") 483 475 { … … 508 500 document.getElementById(ele).checked = eval(val); 509 501 } 502 } 503 504 /* 505 * Estado de Ausente Automático 506 */ 507 508 IM_Preferences.prototype.TimerXa = function(pTimer) 509 { 510 this.im_timer_xa = pTimer; 511 _awayTimer = setTimeout("IM.setAway()", parseInt(pTimer) * 60000 ); 510 512 } 511 513 … … 545 547 } 546 548 547 /*548 * Envio de arquivo549 */550 551 IM_Preferences.prototype.SendFile = function(pJid)552 {553 if(im_send_file == 'true'){554 Templates.Send_file(pJid);555 }else{556 alert('Funçao Indisponível!');557 }558 }559 560 IM_Preferences.prototype.SizeFile = function()561 {562 var h_SizeFile = function(data)563 {564 alert(data);565 }566 cIM.cExecute("$this.upload.size_file",h_SizeFile);567 }568 569 549 // Build Object 570 571 550 var IM_Preferences = new IM_Preferences(); -
trunk/instant_messenger/js/im_templates.js
r64 r67 243 243 } 244 244 245 Templates.prototype.Wait_file = function(pJid) 246 { 247 if(document.getElementById("send_file_im").value != ""){ 248 document.getElementById("div_send_file_im").style.display = "none"; 249 document.getElementById("status_upload").style.display = "block"; 250 this.UpdateStatusSendFile(pJid); 251 }else{ 252 alert("É necessário informar um arquivo para envio!"); 253 } 254 } 255 256 Templates.prototype.UpdateStatusSendFile = function(pJid) 257 { 258 var _this = this; 259 this.time_set = setTimeout("Templates.Wait_file('" + pJid + "')",80); 260 if(this.transfer == 100){ 261 clearTimeout(this.time_set); 262 document.getElementById("div_send_file_im").style.display = "block"; 263 document.getElementById("status_upload").style.display = "none"; 264 document.getElementById("send_file_im").value = ""; 265 this.transfer = 0; 266 this.time_set = ""; 267 268 var h_name_file = function(data){ 269 var pJID = pJid; 270 var message_conf = '<iframe name="IM_down_file" style="display:none"></iframe>'+ 271 '<b>VOCÊ ACABA DE RECEBER UM ARQUIVO !!!! </b>'+ 272 '<a href="../instant_messenger/inc/class.download.inc.php?file=' + data + '" target="IM_down_file">Clique aqui</a>'; 273 var Conf_send_file = function(data){ 274 if(!data) 275 alert(data); 276 } 277 cIM.cExecute("$this.Ujabber.SendMessage",Conf_send_file,"to="+pJID+"&body="+url_encode(encodeURI(message_conf))); 278 } 279 cIM.cExecute("$this.upload.name_file",h_name_file); 280 }else{ 281 var h_size_file = function(data){ 282 _this.transfer++; 283 document.getElementById("progressbar_f").style.width = _this.transfer + "%"; 284 document.getElementById("porcent_im").innerHTML = _this.transfer + "%"; 285 } 286 cIM.cExecute("$this.upload.size_file",h_size_file); 287 } 288 } 289 290 //Templates 291 var Templates = new Templates(); 245 //Templates 246 var Templates = new Templates(); -
trunk/instant_messenger/js/im_var_globals.js
r65 r67 7 7 var focusFlag = true; 8 8 9 window. onblur = windowBlur;10 window. onfocus = windowFocus;11 window. onclick = windowFocus;12 window. onmousemove= awayTimer;9 window.document.onblur = windowBlur; 10 window.document.onfocus = windowFocus; 11 window.document.onclick = windowFocus; 12 window.document.onmouseover = awayTimer; 13 13 14 14 var window_title = document.title; … … 23 23 IM.setAway(); 24 24 25 if( IM.im_time_)25 if(window.IM_Preferences) 26 26 { 27 27 if ( _awayTimer ) 28 28 clearTimeout(_awayTimer); 29 _awayTimer = setTimeout("IM.setAway()", parseInt(IM .im_time_) * 60000 );29 _awayTimer = setTimeout("IM.setAway()", parseInt(IM_Preferences.im_timer_xa) * 60000 ); 30 30 } 31 31 } 32 awayTimer(); 32 33 33 function windowBlur() {focusFlag = false; document.title = window_title;} 34 34 function windowFocus() {focusFlag = true; document.title = window_title;} -
trunk/instant_messenger/templates/default/config.tpl
r20 r67 6 6 </tr> 7 7 <!-- END header --> 8 8 9 <!-- BEGIN body --> 9 10 <tr bgcolor="{row_on}"> … … 49 50 <td><input type="password" name="newsettings[password_ldap_jabber]" value="{value_password_ldap_jabber}"></td> 50 51 </tr> 52 <!-- END body --> 51 53 52 <tr bgcolor="{row_off}">53 <td>Permitir Transferência de Arquivo:</td>54 <td><select name="newsettings[send_file_jabber]">55 <option value="false" {selected_send_file_jabber_false}>Não</option>56 <option value="true" {selected_send_file_jabber_true}>Sim</option>57 </select>58 </td>59 </tr>60 61 <!-- END body -->62 54 <!-- BEGIN footer --> 63 55 <tr bgcolor="{th_bg}">
Note: See TracChangeset
for help on using the changeset viewer.