var owidth=200, iwidth, ooffsetx=13, ooffsety=(ns4)?-20:10, ox=0, oy=0, our=null, html='', delay=250, g_timeout, g_on=false
var DOM2=document.getElementById
var ie4 = (document.all)?true:false
var ns4 = window.Event?true:false
var ie5, ie6, ie7
if (ie4) {
  if (navigator.userAgent.indexOf('MSIE 5')>0) ie5=true
  if (navigator.userAgent.indexOf('MSIE 6')>0) ie6=true
  if (navigator.userAgent.indexOf('MSIE 7')>0) ie7=true
} else ie5 = ie6 = false

var ie=ie4||ie5||ie6||ie7
var ns6 = (DOM2&&!ie)?true:false
var ns=ns4||ns6

if((ns)||(ie)){
	document.onmousemove=mouseMove
	if(ns4) document.captureEvents(Event.MOUSEMOVE)
} else {
	ourlib=no_lib
	nd=no_lib
}

function no_lib () {
	return true
}

function lwr (what, where) {
	what+="\n";
	if (DOM2) document.getElementById(where).innerHTML = what
	else if (ns) {var l=document.layers[where].document; l.open(); l.write(what); l.close();} 
	else document.all[where].innerHTML = what
}

function lwr_text (what, where) {
	what+="\n";
	if (ns6) {
	  var HTMLElement = document.getElementById(where);
	  if(typeof HTMLElement!="undefined") {
		  var parsedText = document.createTextNode(what);
		  HTMLElement.innerHTML = "";
		  HTMLElement.appendChild( parsedText );
	  }
	} else if (DOM2) document.getElementById(where).innerText = what
	else if (ns) {var l=document.layers[where].document; l.open(); l.write(what); l.close();} 
	else document.all[where].innerText = what
}


function ourlib_delayed () {
	if (typeof(g_timeout) != 'undefined' && g_timeout) clearTimeout(g_timeout) 
	lwr(html, 'ourDiv')
	if (our) showObject(our)
}

function ourlib (p_html, ofs_x, ofs_y) {
  if(ns4) our=document.ourDiv;
  if(ie) our=ourDiv.style;
  if(ns6) our=document.getElementById("ourDiv");
  if (ofs_x) ooffsetx = ofs_x; else ooffsetx=13;
  if (ofs_y) ooffsety = ofs_y; else ooffsety=10;
	repositionTo(our, ox, oy)
	html=p_html
	if (typeof(g_timeout) != 'undefined' && g_timeout) clearTimeout(g_timeout)
	g_timeout=setTimeout('ourlib_delayed()', delay)
	g_on=true
}

function nd () {
	if (typeof(g_timeout) != 'undefined' && g_timeout) clearTimeout(g_timeout)
	if (our) {
		hideObject(our)
		delete our
	}
	g_on=false
	return true
}

function getObject(obj_id) {
  var obj;
  // alert('searching for ' + obj_id);
  if(ns4) obj=eval('document.'+obj_id);
  if(ie) { 
	try {
	  obj = eval(obj_id+'.style');
	} catch (e) { return; };
  }
  if(ns6) obj=document.getElementById(obj_id);
  //  alert('found a ' + typeof(obj_id));
  return obj;
}

function getObj(obj_id) {
  var obj;
  if(ns4) obj=eval('document.'+obj_id);
  if(ie) { 
	try {
	  obj = eval('document.all.'+obj_id);
	} catch (e) { return; };
  }
  if(ns6) obj=document.getElementById(obj_id);
  return obj;
}

function hideObject(obj, no_display){
  if (typeof(obj) == 'undefined' || obj == null ) return false;
  if (ie) { obj.visibility="hidden"; if (!no_display) obj.display = 'none'; }
  else if (ns6||DOM2) { obj.style.visibility="hidden"; if (!no_display) obj.style.display = 'none'; }
  else if (ns4) obj.visibility="hide"
}

function showObject(obj, no_display, d_style){
  if (typeof(obj) == 'undefined' || obj == null ) return false;
  if (!d_style) d_style = 'block';
   if (ie) { obj.visibility="visible"; if (!no_display) obj.display = d_style; }
  else if (ns6||DOM2) { obj.style.visibility="visible"; if (!no_display) obj.style.display = d_style; }
  else if (ns4) obj.visibility="show"
}

function repositionTo(obj,xL,yL){
	if(ns6){
		if ( xL != null )
			obj.style.left=xL + "px"
		if ( yL != null )
			obj.style.top=yL+ "px"
	} else if ((ns4)||(ie)) {
		if ( xL != null )
			obj.left=xL
		if ( yL != null )
			obj.top=yL
	}
}

function placeLayer(){
	var placeX, placeY
	var winoffset = 0;
	if ( ie ) {
		if ( !document.body ) {
			return;
		}
		winoffset=document.body.scrollLeft;
	} else {
		winoffset=window.pageXOffset;
	}

	if (document.documentElement && document.documentElement.clientWidth) {
		iwidth=document.documentElement.clientWidth
	} else if (document.body && document.body.clientWidth) {
		iwidth=document.body.clientWidth
	}		

	if (ns4) iwidth=innerWidth
	if (ns6) iwidth=outerWidth
	
	placeX=ox+ooffsetx
	if((eval(placeX)+ eval(owidth))>(winoffset + iwidth)){
		placeX=iwidth + winoffset - owidth
		if(placeX<0) placeX=0
	}
	
	var scrolloffset=(ie4)? document.body.scrollTop : window.pageYOffset
	placeY=oy + ooffsety
	if (g_on) repositionTo(our, placeX, placeY)
}

function mouseMove(e){
	if (ns){
		ox=e.pageX
		oy=e.pageY
	}

	if (ie4) {
		ox=event.x
		oy=event.y
	}

	if ( ie ) {
		ox=event.x+document.documentElement.scrollLeft
		oy=event.y+document.documentElement.scrollTop
	}
	placeLayer()
}

function hide_row(id) {
	var obj;
	var i = 0;
  
	while ( typeof(obj = getObject(id+i)) != 'undefined' && obj ) {
		hideObject(getObject(id+i));
		i++;
	}
}

function show_row(id) {
	var obj;
	var i = 0;
  
	while ( typeof(obj = getObject(id+i)) != 'undefined' && obj ) {
		showObject(getObject(id+i), false, ie?'block':'table-row');
		i++;
	}
}

function popup(text, width) {
	p = '<table class="hint" border="0" cellspacing="0" cellpadding="0">'
	p+=	'<tr><th>' + text + '</th></tr>'
	p+=	'<tr><td><img height="10" align="top" src="/images/query_bg_bot3.gif"></td></tr>'
	p+= '</table>'
   	return p;
}

function getTop(element) {
    var valueT = 0;
    do {
      valueT += element.offsetTop  || 0;
      element = element.offsetParent;
    } while (element);
	return valueT;
}


function getBottom(element) {
    var valueB = getTop(element);
	return valueB + element.clientHeight;
}


function push_anchor_to_id (id, anchor) {
	if ( typeof(hint_anchors) != 'undefined' ) {
		for ( var i = 0; i < hint_anchors.length; i++ ) {
			if ( id == hint_anchors[i].id) {
				if ( typeof(hint_anchors[i].anchors) == 'undefined' ) {
					hint_anchors[i].anchors = new Array();
				}
			
				hint_anchors[i].anchors.push(anchor);
			}
		}
	}	
}

function q_visible (element) {	
	var max_loop_cnt = 100;
	var loop_cnt = 0;
    while ( element.parentNode != null) {
	  loop_cnt ++;
	  if ( element.style.visibility == 'hidden' || loop_cnt > max_loop_cnt) {
		return false;
	  }	 	
      element = element.parentNode;
	}

	return true;	
}

function repositionHints() {
	if ( typeof(hint_anchors) != 'undefined' ) {
		var maxBottom = 0;
		for ( var i = 0; i < hint_anchors.length; i++ ) {
		    var el = getObject(hint_anchors[i].id);
			
			if ( !el ) {//if element is not found, skip iteration
				continue;
			}
			
			var anchor = undefined;
			if ( typeof(hint_anchors[i].anchors) != 'undefined' ) { //if elements is attached to more than one anchors, position the element next to the virst visible anchor
				for ( var j = 0; j < hint_anchors[i].anchors.length; j ++) {
					var tmp_anchor = getObj((hint_anchors[i].anchors)[j]);
					if ( typeof(tmp_anchor) != 'undefined' && tmp_anchor != null )
					  if ( q_visible(tmp_anchor) ) {
						anchor = tmp_anchor;
						break;
  					  }
				}
			} else {
				anchor = getObj(hint_anchors[i].id + '_anchor');
			}

			var depend_offset = 0;
			if ( typeof(hint_anchors[i].depend_on) != 'undefined' ) {
				var depend_on_obj = getObj(hint_anchors[i].depend_on);
				if ( typeof(depend_on_obj) != 'undefined' && depend_on_obj != null ) {
					depend_offset = getBottom(depend_on_obj);				
				}
			} else 	if ( typeof(hint_anchors[i].depend_on_array) != 'undefined' ) {
				for ( var j = 0; j < hint_anchors[i].depend_on_array.length; j ++) {
					var tmp_depend = getObj((hint_anchors[i].depend_on_array)[j]);
					if ( typeof(tmp_depend) != 'undefined' && tmp_depend != null )
					  if ( q_visible(tmp_depend) ) {
						depend_offset = getBottom(tmp_depend);				
						break;
  					  }
				}				
			}

			var elObj = getObj(hint_anchors[i].id);
			
			if ( typeof(anchor) == 'undefined' ) {
				hideObject(el);
			} else {
				var pos = Math.max(getTop(anchor) + hint_anchors[i].offset, depend_offset);
				var offset = pos + hint_anchors[i].offset;
				if ( hint_anchors[i].show_on_reposition ) {
					showObject(el);
				}
				repositionTo(el, null, offset);
				maxBottom = Math.max(maxBottom, getBottom(elObj));
			}	
		}

		var rightColumn = getObj('left_right_r');
		var centerColumn = getObj('left_right_l');
		if ( rightColumn != null && centerColumn != null) {
			if ( getBottom(centerColumn) < maxBottom ) {
				rightColumn.style.height = (maxBottom - getTop(rightColumn)) + "px";
			}
		}
	}
}
