// JavaScript Document
var page_context_help = '';
var highlighted_tr = new Array();
var ns = (navigator.appName.indexOf('Netscape') != -1);
var d = document;
var px = document.layers ? '' : 'px';


function OnChange(o){
	NewWindow(o.value,'',screen.width,screen.height,'yes','center');
}

/**
 * Open popup 
 *
 * @parameter: url = URL
 * @parameter: w = width
 * @parameter: h = height
 * @parameter: popupName = name of popup
 * @parameter: scrollbars (default is 0 - without scroll)
 * @access: public
 * @return: null
*/ 

function popup(url, w, h, popupName, scrollbars)
{
	if(popupName == '') popupName='popup';
	if(scrollbars == '') scrollbars=0;
	if(w==0) w=(screen.width);
	if(h==0) h=(screen.height);
	options='menubar=no, scrollbars='+scrollbars+', statusbar=no, resizable=no, toolbar=no, location=no, status=yes';
	var top=(screen.height-h)/2-18;
	var left=(screen.width-w)/2-8;
	var win_open = window.open(url, popupName, 'top='+top+', left='+left+', width='+w+', height='+h+', '+options);
}

function NewWindow(mypage, myname, w, h, scroll, pos) {
	var test_scroll=scroll;
	if(pos=='random'){LeftPosition=(screen.width)?Math.floor(Math.random()*(screen.width-w)):100;TopPosition=(screen.height)?Math.floor(Math.random()*((screen.height-h)-75)):100;}
	if(pos=='center')
	{
	    if (screen.width && screen.height)
	    {
	        //alert(w+" "+h+" "+screen.width+" "+screen.height);
	        if (screen.width<w) {LeftPosition=20;w=screen.width-50;test_scroll='yes'}
	        else {LeftPosition=(screen.width-w)/2;}
	        if ((screen.height-50)<=h) {TopPosition=20;h=screen.height-170;test_scroll='yes'}
	        else {TopPosition=(screen.height-h)/2;}
	    }
	    else {LeftPosition=20;TopPosition=20;test_scroll='yes'}
	    //alert(LeftPosition+" "+TopPosition+" "+w+" "+h+" "+screen.width+" "+screen.height);
	}
	else if((pos!='center' && pos!='random') || pos==null){LeftPosition=20;TopPosition=20}
    settings='width='+w+',height='+h+',top='+(TopPosition-50)+',left='+LeftPosition+',scrollbars='+test_scroll+',location=no,directories=no,status=no,menubar=no,toolbar=no,resizable=no';
	win=window.open(mypage,myname,settings);
	
	return win;
}

function escapeHTML(txt) {
	if (!txt) return '';
	
	var buf = [];
	var ESCAPE_TABLE = {
		"<": "&lt;",
		">": "&gt;",
		"&": "&amp;",
		"'": "&#39;", // &apos; doesn't work in IE.
		'"': "&quot;",
		'\n': "<br>"
	}
	for(var i = 0; i < txt.length; i++){
		var c = txt.charAt(i);
		var o = ESCAPE_TABLE[c];
		if(o){
			c = o;
		}
		buf.push(c);
	}
	return buf.join("");
}

var debugContainer;
function debug(obj, clean) {
	var step, debugTxt = '';
	
	if (typeof(obj) == "object") {
		for (step in obj) {
			debugTxt += step + ': ' + obj[step] + '\n\n\n';
		}
	} else {
		debugTxt = obj;
	}
	
	debugContainer = top.document.getElementById('debugContainer');
	if (!debugContainer) {
		var dbgContainer = top.document.createElement('DIV');
		dbgContainer.id = 'debugContainer';
		dbgContainer.style.zIndex = 1000; // undeva pe la .. 2cm in exteriorul monitorului spre ochiu tau :-p
		dbgContainer.style.border = '1px solid red';
		dbgContainer.style.bottom = 0;
		dbgContainer.style.right = 0;
		dbgContainer.style.width = 800;
		dbgContainer.style.height = 600;
		dbgContainer.style.overflow = "auto";
		dbgContainer.style.position = "absolute";
		dbgContainer.style.backgroundColor = "white";
		dbgContainer.ondblclick = function() {
			top.document.body.removeChild(top.document.getElementById("debugContainer"));
		}
		
		top.document.body.appendChild(dbgContainer);
		debugContainer = top.document.getElementById('debugContainer');
	}
	if (clean) {
		debugContainer.innerHTML = '';
	}
	debugContainer.innerHTML += escapeHTML(debugTxt);

	debugContainer.scrollTop = debugContainer.scrollHeight;
	return null;
}


// toggle the checked state of a set of checkboxes
// based on a checkbox trigger
function js_toggle_checks(checked, set_name) {

	var elements = document.getElementsByTagName('input');
	var unique_id;
	var i = 0;
	
	for (i = 0; i < elements.length; i ++) {
		if (elements[i].type == 'checkbox' && elements[i].name == set_name && !elements[i].disabled) {
			elements[i].checked = checked;
			unique_id = elements[i].name + elements[i].value;
			if (checked) {
                if ( typeof(marked_row[unique_id]) == 'undefined' || !marked_row[unique_id] ) {
                    elements[i].parentNode.parentNode.className += ' marked';
                    marked_row[unique_id] = true;
                }
			} else {
	            elements[i].parentNode.parentNode.className = elements[i].parentNode.parentNode.className.replace(' marked', '');
	            marked_row[unique_id] = false;
			}
		}
	}

	return true;
}

//selectType poate fi : switch, all, none
function switchMultipleCheckBox(objForm, textMatch, selectType) {	
	var items = objForm.elements;
	if (!selectType) selectType = 'switch';
	
	for(i=0; i < items.length; i++)
	{
		if(items[i].name.match(textMatch))
		{
			if (selectType == 'switch')
			{
				if(items[i].checked==true)
					items[i].checked = false;
				else if(items[i].disabled==false)
					items[i].checked = true;
			}
			if (selectType == 'all') items[i].checked = true;
			if (selectType == 'none') items[i].checked = false;
		}
	}
}


function set_context_help(msg) {
	var context_box = document.getElementById('context_box');
	//alert('x: '+context_box);
	if (context_box) {
		context_box.innerHTML = msg ? msg : defaultContextMessage ? defaultContextMessage : '';
	}
	return null;
}

/**
 * This array is used to remember mark status of rows in browse mode
 */
var marked_row = new Array;

/**
 * enables highlight and marking of rows in data tables
 *
 */
function listingRowsInit() {
	
    // for every table row ...
	var rows = document.getElementsByTagName('tr');
	for ( var i = 0; i < rows.length; i++ ) {
	    // ... with the class 'odd' or 'even' ...
		if ( 'oddRow' != rows[i].className && 'evenRow' != rows[i].className ) {
		    continue;
		}

	    // ... add event listeners ...
        // ... to highlight the row on mouseover ...
	    if ( navigator.appName == 'Microsoft Internet Explorer' ) {
	        // but only for IE, other browsers are handled by :hover in css
			rows[i].onmouseover = function() {
				//alert(this.className)
				this.className = this.className.replace(' hover', '');
			    this.className += ' hover';
			}
			rows[i].onmouseout = function() {
			    this.className = this.className.replace( ' hover', '' );
			}
	    }
        // ... and to mark the row on click ...
		rows[i].onmousedown = function() {
		    var unique_id;
            var checkbox;
            var input_nr = 0;
            var inputs = this.getElementsByTagName( 'input' );
            var found = false;
            while (input_nr < inputs.length && !found) {
            	checkbox = inputs[input_nr];
            	if (checkbox && checkbox.id.match('/^del_')) {
            		found = true;
            		break;
            	}
            	input_nr ++;
            }
            
            if ( checkbox && checkbox.type == 'checkbox' ) {
                unique_id = checkbox.name + checkbox.value;
            } else if ( this.id.length > 0 ) {
                unique_id = this.id;
            } else {
		        return;
		    }

            if ( typeof(marked_row[unique_id]) == 'undefined' || !marked_row[unique_id] ) {
                marked_row[unique_id] = true;
            } else {
                marked_row[unique_id] = false;
            }
			
            if ( marked_row[unique_id] ) {
            	this.className = this.className.replace(' marked', '');
			    this.className += ' marked';
            } else {
			    this.className = this.className.replace(' marked', '');
            }

            if ( checkbox && checkbox.disabled == false ) {
                checkbox.checked = marked_row[unique_id];
            }
		}

		// ... and disable label ...
		var labeltag = rows[i].getElementsByTagName('label')[0];
		if ( labeltag ) {
		    labeltag.onclick = function() {
		        return false;
		    }
	    }
	    // .. and checkbox clicks
		var checkbox = rows[i].getElementsByTagName('input')[0];
		if ( checkbox ) {
		    checkbox.onclick = function() {
		        // opera does not recognize return false;
		        this.checked = ! this.checked;
		    }
	    }
	}
}

function make_td_hover(td_obj, new_class, new_class2) {
	
	if (td_obj.className == 'tabel_frame_jos_active') {
		td_obj.className = 'tabel_frame_jos_active_hover';
	} else {
		td_obj.className = 'tabel_frame_jos_hover';
	}
	return null;
}

function make_td_clean(td_obj) {
	
	if (td_obj.className == 'tabel_frame_jos_active_hover') {
		td_obj.className = 'tabel_frame_jos_active';
	} else {
		td_obj.className = 'tabel_frame_jos';
	}
	return null;
}

function make_td_active(td_obj) {
	
	var frameName;
	if (window.name == 'left') {
		frameName = 'main.left';
	} else if (window.name == 'main') {
		frameName = 'main';
	} else {
		frameName = 'menu_frame';
	}

	var locate = 'top.' + frameName + '.document.getElementsByTagName("td");';
	tds = eval(locate);
	for (i in tds) {
		if (tds[i].className && tds[i].className == 'tabel_frame_jos_active') {
			tds[i].className = 'tabel_frame_jos';
		}
	}
	td_obj.className = 'tabel_frame_jos_active_hover';
	return null;
}

function move_selected(id_from, id_to) {
	var from = document.getElementById(id_from);
	var to = document.getElementById(id_to);
	var i;
	if (from && to) {
		var from_size = from.length;
		var to_size;
		for (i = 0; i < from_size; i++) {
			if(from.options[i].selected == true) {
				to_size = to.length;
				to.options[to_size]= new Option(from.options[i].text, from.options[i].value);
			}
		}
		
		for (i = (from_size - 1); i>=0; i--) {
			if (from.options[i].selected == true) {
				from.options[i] = null;
			}
		}
		
		if (from.length != 0) {
			window.setTimeout('selOpt("' + id_from + '", ' + (from.length-1) + ')', 0);
		}
		if (to.length != 0) {
			window.setTimeout('selOpt("' + id_to + '", ' + (to.length-1) + ')', 0);
		}
	}
} 

/* IE trick */
function selOpt(id, index){
	try {
		document.getElementById(id).selectedIndex = index;
	} catch(e) {}
}

function patch_inputs(form_id, submit_id) {

	var form_obj = document.getElementById(form_id);
	var submit_obj = document.getElementById(submit_id);
	
	if (!submit_obj || !form_obj || !form_obj.elements) {
		return false;
	}
	
	var elements = form_obj.elements;
	var i = 0;
	
	for (i = 0; i < elements.length; i ++) {
		if (elements[i].tagName == 'INPUT' && (elements[i].type == 'text' || elements[i].type == 'password') && elements[i].id) {

			enter_click(elements[i].id, submit_id);
		}
	}

	return true;

}

function set_focus(id) {
	/* when having name[idx] as first element - forward focus to rendered name0 element */
	_reg_exp = /\[idx\]/g;
	id = id.replace(_reg_exp, '0');

	var obj = document.getElementById(id);
	if (!obj) {
		return false;
	}

	if (obj.focus && obj.type != 'hidden') {
		obj.focus();
	}

	return true;
	
}

function select_field(id) {
	/* when having name[idx] as first element - forward focus to rendered name0 element */
	_reg_exp = /\[idx\]/g;
	id = id.replace(_reg_exp, '0');

	var obj = document.getElementById(id);
	if (!obj) {
		return false;
	}

	if (obj.select) {
		obj.select();
	}

	return true;
}

function set_chelp(text) {
	if (text.length > 0) {
		if(top.menu_frame){
			var obj = top.menu_frame.document.getElementById('hint_text');
		} else {
			var obj = document.getElementById('hint_text');
		}
	}
	if (obj) {
		obj.style.display = 'block';
		obj.innerHTML = text;
	}
}

function clear_chelp() {
	if (top.menu_frame) {
		var obj = top.menu_frame.document.getElementById('hint_text');
	} else {
		var obj = document.getElementById('hint_text');
	}
	if (obj) {
		obj.style.display = 'none';
	}
}

function swapOptions(obj,i,j)
{
	var o = obj.options;
	tmp=o[j].text;
	o[j].text = o[i].text;
	o[i].text = tmp;
	tmp=o[j].value;
	o[j].value = o[i].value;
	o[i].value = tmp;
	tmp=o[j].selected;
	o[j].selected = o[i].selected;
	o[i].selected = tmp;
}

function moveOptionUp(id)
{
	var obj = document.getElementById(id);
	for(i=0;i<obj.options.length;i++)
	{
		if(obj.options[i].selected)
		{
			if(i != 0 && !obj.options[i-1].selected)
			{
				swapOptions(obj,i,i-1);
				obj.options[i-1].selected = true;
			}
		}
	}
}
function moveOptionDown(id)
{
	var obj = document.getElementById(id);
	for(i=obj.options.length-1;i>=0;i--)
	{
		if(obj.options[i].selected)
		{
			if(i !=(obj.options.length-1) && !obj.options[i+1].selected)
			{
				swapOptions(obj,i,i+1);
				obj.options[i+1].selected = true;
			}
		}
	}
}

function unset_highlight_tr(id) {
	
	var trs = document.getElementsByTagName('tr');
	var i = 0;
	for (i = 0; i < trs.length; i ++) {
		if (trs[i].id == id) {
			trs[i].className = "";
			var tmp_arr = new Array();
			for (i = 0; i < highlighted_tr.length; i ++) {
				if (highlighted_tr[i] != id) {
					tmp_arr.push(highlighted_tr[i]);
				}
			}
			highlighted_tr = tmp_arr;
			return true;
		}
	}
	return false;
}

function clear_highlighted_tr() {

	var tmp_arr = highlighted_tr;

	var i = 0;
	for (i = 0; i < tmp_arr.length; i ++) {
		unset_highlight_tr(tmp_arr[i]);
	}

	highlighted_tr = new Array();
}

/* select all elements from a multiple select except option with value="line" */
function multiple_select_all(obj, state) {
	
	if (!obj || obj.type != 'select-multiple') {
		return false;
	}
	if (!state) {
		state = true;
	}
	var size = obj.options.length;	
	for(i = 0; i < size; i++) {
		obj.options[i].selected = state;
	}
	return true;
}

function submit_search_form(id, msg) {
    var elem = document.getElementById(id);
    if (elem.value.length > 0){
        return true;
    }
    alert(msg);
    elem.focus();
    return false;
}

function verify_checkboxset(set_name){
    var inputs = document.getElementsByTagName('input');
    var i,have_checked;
    var cell;
    
    have_checked = false;
    
    for(i = 0; i < inputs.length; i++){
        cell = inputs[i];
        if (cell.name == set_name){
             if (!cell.disabled && cell.checked) {
                have_checked = true;
				break;
             }

        }

    }
    
    return have_checked;
}

function remove_selected(checkbox_id,alert_txt,confirm_txt){

    if (!verify_checkboxset(checkbox_id)) {
        alert(alert_txt);
        return false;
    }

   if (confirm_txt.length > 0) {
       if (!confirm(confirm_txt)) {
            return false;
        }
    }
    return true;
}

function enter_click(src, dst) {
	var obj1 = document.getElementById(src);
	if (!obj1) {
		return false;
	}

	var obj2 = document.getElementById(dst);
	if (!obj2) {
		return false;
	}

	obj1.onkeypress =
		function (evt) {
			var c = document.layers ? evt.which 
				: document.all ? event.keyCode
				: evt.keyCode;
			if (c == 13) {
				if (obj2.click) {
					obj2.click();
				} else {
					if (obj2.onclick) {
						obj2.onclick();
						return false;
					}
				}
			}
			return true;
		};

	if (document.layers) {
		document.captureEvents(Event.KEYPRESS);
	}

	return true;
}

function set_highlight_tr(id) {
	trs = document.getElementsByTagName('tr');
	for (i = 0; i < trs.length; i ++) {
		if (trs[i].id == id) {
			//determine if focus is in the visible tab for current subject
			if (typeof tabView != 'undefined') {
				var activeTabDivId = tabView.get('activeTab').get('contentEl').id;
				//debug(activeTabDiv)
				var crtElem = trs[i];
				while (crtElem.parentNode) {
					crtElem = crtElem.parentNode
					if (crtElem.nodeName == 'DIV' && crtElem.id && /^tab/.test(crtElem.id)) {
						//debug(crtElem)
						if (activeTabDivId != crtElem.id) {
							//search within all tabs to determine needed id to activate
							for (var tabNr=0; tabNr<tabView.get('tabs').length; tabNr++) {
								if (tabView.get('tabs')[tabNr].get('contentEl').id == crtElem.id) {
									tabView.set('activeTab', tabView.get('tabs')[tabNr]);
								}
							}
						}
					}
				}

			}
			
			trs[i].className = "highlight";
			highlighted_tr.push(id);
			return true;
		}
	}

	return false;
}

function trim(obj_value){
	var reg_ex = /^\s+/;
	obj_value = obj_value.replace(reg_ex, '');
	var reg_ex = /\s+$/;
	obj_value = obj_value.replace(reg_ex, '');
	return obj_value;
}

/**!\fn set_focus_tr(msg, id, trid) {{{
 * \brief highlight a field containing an erroneous value
 *  
 * \param msg Language pack key
 * \param id Field ID
 * \param trid Table row ID, defaults to 'tr-$id'
 * 
 * \return TRUE on success
 * \return FALSE on error
 */
function set_focus_tr(msg, id, trid) {
	
	if (!msg || !id) {
		return false;
	}

	if (!trid) {
		trid = 'tr-' + id;
	}

	set_highlight_tr(trid);
	alert(msg);
	set_focus(id); 
	select_field(id); 

	return true;

} /* }}} set_focus_tr */

/* counts selected options from select component with given id */
function count_selected(id) {
	var selector = document.getElementById(id), count = 0;
	
	for (i = 0; i < selector.length; i++) {
		if(selector.options[i].selected == true) {
			count ++;
		}
	}
	return count;
}

/* alert something and return false */
function alert_false(msg) {
	alert(msg);
	return false
}

/* returns object with given ID */
function get_object(id) {
	return document.getElementById(id);
} 

function cssclass_exists(class_name) {
		var cssRules;
		if (document.all) {
				cssRules = 'rules';
		}
		else if (document.getElementById) {
				cssRules = 'cssRules';
		}
		for (var S = 0; S < document.styleSheets.length; S++){
				for (var R = 0; R < document.styleSheets[S][cssRules].length; R++) {
						var reg_ex = new RegExp(class_name);
						if (reg_ex.test(document.styleSheets[S][cssRules][R].selectorText)) {
								return true;
						}
				}
		}	

		return false;

} 

/***********************************/
function disable_obj_ids(state, ids) {
	var id_list = new Array; 
	id_list = ids.split('|');
	
	for (i = 0; i < id_list.length; i ++) {
		var _obj = get_object(id_list[i]);
		if (_obj) {
			disable_obj(_obj, state);
		}
	} 
}

function disable_obj(obj, state) {
	if (!obj) {
		return false;
	}

	if (obj.tagName == 'IMG') {

		var src_parts_first = obj.src.split("/");
		var src_parts = src_parts_first[src_parts_first.length - 1].split(".");
		var reg_ex = /_off$/;
		if (!reg_ex.test(src_parts[0])) {
			if (state == true) {
				src_parts[0] += "_off";
				src_parts_first[src_parts_first.length - 1] = src_parts[0] + "." + src_parts[1];
				obj.src = src_parts_first.join("/");
			}
		} else {
			if (state == false) {
				src_parts[0] = src_parts[0].replace(reg_ex, "");
				src_parts_first[src_parts_first.length - 1] = src_parts[0] + "." + src_parts[1];
				obj.src = src_parts_first.join("/");
			}
		}
		
		if (obj.parentNode.tagName == 'A') {
			/* automatically disable the parent anchor */
			var parent_anchor = obj.parentNode;

			if (state == true) {
				disabled_anchors[parent_anchor.id] = new Array;
				disabled_anchors[parent_anchor.id]['href'] = parent_anchor.href;
				disabled_anchors[parent_anchor.id]['onclick'] = parent_anchor.onClick;

				parent_anchor.removeAttribute('href');
				parent_anchor.removeAttribute('onClick');

				/* change the mouse pointer to the default arrow */
				obj.style.cursor = 'default';

			} else {
				if (disabled_anchors[parent_anchor.id]) {
					parent_anchor.setAttribute('href', disabled_anchors[parent_anchor.id]['href']);
					parent_anchor.setAttribute('onClick', disabled_anchors[parent_anchor.id]['onclick']);
				}

				/* change the mouse pointer to the pointer cursor */
				obj.style.cursor = 'pointer';
			}

		}

	} else {
		if (obj.tagName == 'A') {

			if (state == true) {
				disabled_anchors[parent_anchor.id] = new Array;
				disabled_anchors[parent_anchor.id]['href'] = parent_anchor.href;
				disabled_anchors[parent_anchor.id]['onclick'] = parent_anchor.onClick;
				
				parent_anchor.removeAttribute('href');
				parent_anchor.removeAttribute('onClick');
				
			} else {
				if (disabled_anchors[parent_anchor.id]) {
					parent_anchor.setAttribute('href', disabled_anchors[parent_anchor.id]['href']);
					parent_anchor.setAttribute('onClick', disabled_anchors[parent_anchor.id]['onclick']);
				}

			}
			

		} else {
			obj.disabled = state;
			if (obj.className.length != 0) {
				if (state == true) {
					reg_ex = /_disabled$/;
					if (!reg_ex.test(obj.className)) {
						var new_class = obj.className + "_disabled";
						if (cssclass_exists(new_class)) {
							obj.className = new_class;
						}
					}
				} else {
					reg_ex = /_disabled$/;
					if (reg_ex.test(obj.className)) {
						new_class = obj.className.replace(reg_ex, "");
						if (cssclass_exists(new_class)) {
							obj.className = new_class;
						}
					}
				}
			}
		}
	}

	return true;
}


/* given a value find corresponding index of select option having that value */
function get_option_index_by_val(select_obj, search_val) {
	var found_index = null;
	
	for (i = 0; i < select_obj.length; i++) {
		if (select_obj.options[i].value == search_val) {
			found_index = i;
			break;
		}
	}
	return found_index;
}

/* given an option value, remove the option having value="value" */
function remove_select_option_by_val(select_obj, search_val) {
	var found_index;
	
	found_index = get_option_index_by_val(select_obj, search_val);
	if (found_index != null) {
		select_obj.remove(found_index);
		return true;
	}
	return false;
}

function attachEventHandler(element, eventName, handler) {
	if (document.all) {
		element.attachEvent('on' + eventName, handler)
	} else {
		element.addEventListener(eventName, handler, false)
	}
}


function detachEventHandler(element, eventName, handler) {
	if (document.all) {
		element.detachEvent('on' + eventName, handler)
	} else {
		element.removeEventListener(eventName, handler)
	}
}


function getElementByEvent(evt) {
	if (document.all) {
		return event.srcElement
	} else {
		return evt.currentTarget
		//return evt.target
	}
}


function getAbsoluteX(element) {
	var absoluteX = 0;

	if (element.offsetParent) {
		while (element.offsetParent) {
			absoluteX += element.offsetLeft;
			element = element.offsetParent
		}
	} else if (element.x) {
		absoluteX += element.x
	}

	return absoluteX
}

function getAbsoluteY(element) {
	var absoluteY = 0;

	if (element.offsetParent) {
		while (element.offsetParent) {
			absoluteY += element.offsetTop;
			element = element.offsetParent
		}
	} else if (element.y) {
		absoluteY += element.y
	}
	
	return absoluteY
}

function stopPropagation(evt) {
	if (document.all) { //IE
		event.cancelBubble = true
	} else { //DOM
		evt.stopPropagation()
	}
}


function getMouseButton(evt) {
	if (document.all) { //IE
		return event.button
	} else { //DOM
		return evt.button
	}
}


function getStyle(element) {
	if (document.all) { //IE
		return element.currentStyle
	} else { //DOM
		return document.defaultView.getComputedStyle(element, null)
	}
}

//function that folds/unfolds an element
//comment: the firefox/mozila issue solved.
function fold(id, expanded) {

	var elem = document.getElementById(id);//get element

	var block = 'block';

	if(elem){
		var str = elem.tagName.toLowerCase();

		if(get_browser().browser != 'msie' && str == 'tr'){
			block = 'table-row';  
		}

		if(expanded){
			elem.style.display = block;
		} else{
			elem.style.display = 'none';
		}
	}
	return null;
}

// toggle folding on an object specified by ID
function toggle_fold(id) {
	var obj = document.getElementById(id);

	if (!obj) {
		return false;
	}

	fold(id, !(obj.style.display == 'none'));

	return true;

}

function get_browser(){
  
  var detect = navigator.userAgent.toLowerCase();
  
  var browser,version,place;
  
  //find browser
  if (detect.indexOf('konqueror') + 1){
	 browser = "konqueror";
	 OS = "Linux";
	 place = detect.indexOf('konqueror') + 1;
  } else if (detect.indexOf('safari') + 1){ 
    browser = "safari";
	  place = detect.indexOf('safari') + 1;
  } else if (detect.indexOf('omniweb') + 1){
    browser = "omniweb";
	  place = detect.indexOf('omniweb') + 1;
  } else if (detect.indexOf('opera') + 1){
    browser = "opera";
	  place = detect.indexOf('opera') + 1;
  } else if (detect.indexOf('webtv') + 1){
    browser = "webtv";
	  place = detect.indexOf('webtv') + 1;
  } else if (detect.indexOf('icab') + 1){
    browser = "icab";
	  place = detect.indexOf('icab') + 1;
  } else if (detect.indexOf('msie') + 1){
    browser = "msie";
	  place = detect.indexOf('msie') + 1;
  } else if (!detect.indexOf('compatible')){
	 browser = "netscape"
	 version = detect.charAt(8);
  } else if (!detect.indexOf('mozilla')){
	 browser = "mozilla"
	 place = detect.indexOf('mozilla') + 1;
  }
  else{
    browser = "unknown";
  }

  //find version
  if (!version){
    version = detect.charAt(place + browser.length);
  }
  
  this.browser = browser;
  this.version = version
  
  return this;
}

function show_ajax_loader() {
	var loaderObj = document.getElementById('ajax_loader');
	var docBody = document.getElementsByTagName('BODY')[0];
	var top = docBody.scrollTop;
	loaderObj.style.top = top;
	loaderObj.style.display = "block";

	return true;
}

function hide_ajax_loader() {
	var loaderObj = document.getElementById('ajax_loader');
	if (loaderObj) loaderObj.style.display = "none";

	return true;
}

//attach titles to all td cells from listing table; do this fromjs to avoid page overload with title="..."  on every cell
function attachCellTitles(table_id) {
	var title = '';
	var tableObj = get_object(table_id);
	if (!tableObj) return;
	var tds = tableObj.getElementsByTagName('TD');
	//alert(tds.length);
	for (var i=0; i<tds.length; i++) {
		if (tds[i].className == "title_off") continue;
		tds[i].title = document.all ? tds[i].innerText : tds[i].textContent;
		//tds[i].title = tds[i].innerHTML;
	}
}

//delay tab load - allow browser to render its content
function activateTab(tabId) {
	if (tabView) {
		tabView.set("activeTab", tabView.get("tabs")[tabId]);
	}
}

document.getElementsByClassName = function(className)
{   var outArray = new Array();
    var item;
    try {
        var xpathResult = document.evaluate('//*[@class = "' + className + '"]', document, null, 0, null);
        while (item = xpathResult.iterateNext())
            outArray[outArray.length] = item;
    }
    catch(err) {
        // ie fix
        var currentIndex = 0;
        var allElements = document.getElementsByTagName('*');
        for(var i=0; i < allElements.length; i++)
        {   if(allElements[i].className.match(className))
            {   outArray[currentIndex] = allElements[i];
                currentIndex++;
            }
        }
    }
    return outArray;
}

/* given a value find corresponding index of select option having that value */
function get_option_index_by_val(select_obj, search_val) {
	var found_index = null;
	
	for (i = 0; i < select_obj.length; i++) {
		if (select_obj.options[i].value == search_val) {
			found_index = i;
			break;
		}
	}
	return found_index;
}

/* given an option value, remove the option having value="value" */
function remove_select_option_by_val(select_obj, search_val) {
	var found_index;
	
	found_index = get_option_index_by_val(select_obj, search_val);
	if (found_index != null) {
		select_obj.remove(found_index);
		return true;
	}
	return false;
}

function get_selected_options(selObj) {
	var  strSelObj = [];
	for (var i=0; i<selObj.length; i++) {
		if (selObj.options[i].selected == true) {
			strSelObj[strSelObj.length] = selObj.options[i].value;
		}
	}
	return strSelObj;
}

//from client js, needed for preview
function openPost(page) {
	if (page.substring(0,4) == 'http') {
	} else {
		if (page.substring(0,1) == '/') {
			page = ROOT_HOST + page.substring(1);
		} else {
			page = ROOT_HOST + page;
		}
	}
    window.open(page,'Mail','height=600,width=800,scrollbars=no');
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}