
/*
 * FORM navigation commands
 */
RQ.nav = {};

RQ.nav.saveEditors = function() {
	for(var i=0; i<RQ.ui.editors.length; i++) {
		var editor = RQ.ui.editors[i];
		editor.saveHTML();
	}
}

RQ.nav.cancel = function(frmid,ajax) {
	if(ajax == true) {
		var form = YAHOO.util.Dom.get(frmid);
		RQ.nav._ajax(form,"cancel");
		return false;
	} else {
		var form = YAHOO.util.Dom.get(frmid);
		form["op"].value = "cancel";
		RQ.nav.saveEditors();
		form.submit();
	}
}
RQ.nav.close = function(frmid,ajax) {
	if(ajax == true) {
		var form = YAHOO.util.Dom.get(frmid);
		RQ.nav._ajax(form,"close");
	} else {
		var form = YAHOO.util.Dom.get(frmid);
		form.method = "POST";
		form["op"].value = "close";
		RQ.nav.saveEditors();
		form.submit();
	}
}
RQ.nav.population = function(frmid,action) {
	var form = YAHOO.util.Dom.get(frmid);
	form["op"].value = "refreshlist";
	form["opparam"].value = action;
	RQ.nav.saveEditors();
	form.submit();
}

RQ.nav.submit = function(frmid,ajax) {
	if(ajax == true) {
		var form = YAHOO.util.Dom.get(frmid);
		RQ.nav._ajax(form,form["op"].value,form["opparam"].value);
	} else {
		var form = YAHOO.util.Dom.get(frmid);
		RQ.nav.saveEditors();
		form.submit();
	}
}

RQ.nav.submitAndProcess = function(frmid,url) {
	var form = YAHOO.util.Dom.get(frmid);
	var scrollPos = RQ.util.docScrollTop();
	form["scrollPos"].value = scrollPos;
	form["op"].value = "postback";
	form["opparam"].value = url;

	RQ.nav.saveEditors();
	form.submit();
}
RQ.nav.popsubmit = function(frmid) {
	var form = YAHOO.util.Dom.get(frmid);
	RQ.nav._ajax(form,"submit");
	return false;
}
RQ.nav.filter = function(elt,param) {
	var form = RQ.nav._form(elt);
	RQ.nav._ajax(form,"filter",param);
	return false;
}

RQ.nav.editlayout = function(frmid,layout) {
	var form = YAHOO.util.Dom.get(frmid);
	RQ.nav._ajax(form,"layout",layout);
	return false;
}

RQ.nav.popdatasubmit = function(frmid) {
	var form = YAHOO.util.Dom.get(frmid);
	
	var ctxid = form["ctx"].value;
	var url = ContextPath+'/ajax?op=submit&ctx='+ctxid;
    if(typeof(PageName) != "undefined")
        url += "&page="+PageName;
    if(typeof(DevMode) != "undefined")
        url += "&dev=true";
	
	YAHOO.util.Connect.setForm(form, true, true);
	var callback = { 
		upload: function (o) { alert('upload') },
		success: function (o) { alert('success') },
		failure:function (o) { alert('failure') }
	};
	YAHOO.util.Connect.asyncRequest('POST', url, callback);
	return false;
}

RQ.nav.checkProgress = function(ctxid) {
	setTimeout("RQ.nav.updateProgress('"+ctxid+"')", 100);
}

RQ.nav.updateProgress = function(ctxid) {
	var url = ContextPath+'/ajax?op=progress&ctx='+ctxid;
    if(typeof(DevMode) != "undefined")
        url += "&dev=true";
    var callback = {
 		success: function (r) {
			var resp = r.responseXML.getElementsByTagName("ajax-response")[0];
			RQ.util.cleanWhitespace(resp);
			var html = resp.firstChild.nodeValue;
			var tag = YAHOO.util.Dom.get("rqctx"+ctxid+"prg");
			if(tag != null) {
				tag.innerHTML = html;
			}
 			setTimeout("RQ.nav.updateProgress('"+ctxid+"')", 100);
		},
		failure:function (o) {
		}
    };
	YAHOO.util.Connect.asyncRequest('POST',url,callback);
}

function showFlybyAct(event,wid,cls,action,ids) {
    var eventTarget = event.target ? event.target : event.srcElement;
	var pos = YAHOO.util.Dom.getXY(eventTarget);
  	var form = RQ.nav._form(eventTarget);
  	var url = cls+":flyby?layout=flyby&sysId="+ids+"&wid="+wid+"&x="+pos[0]+"&y="+pos[1];
	RQ.nav._ajax(form,"action",url,"flyby");
}

RQ.nav.showFlyby =  function(wid,cls,x,y,id) {
  	var widget = YAHOO.util.Dom.get(wid.substring(2));
  	var form = RQ.nav._form(widget);
  	var url = cls+":flyby?layout=flyby&sysId="+id+"&wid="+wid+"&x="+x+"&y="+y;
	RQ.nav._ajax(form,"action",url,"flyby");
}

RQ.nav.showFlybyAct =  function(event,frmid,cls,act,id) {
    var eventTarget = event.target ? event.target : event.srcElement;
  	var form = RQ.nav._form(eventTarget);
  	var pos = YAHOO.util.Dom.getXY(eventTarget);
  	var url = cls+":"+act+"?layout=flyby&sysId="+id+"&wid="+frmid+"&x="+pos[0]+"&y="+pos[1];
	RQ.nav._ajax(form,"action",url,"flyby");
	return false;
}


RQ.nav.prev = function(frmid) {
	var form = YAHOO.util.Dom.get(frmid);
	form["op"].value = "prev";
	RQ.nav.saveEditors();
	form.submit();
}

RQ.nav.jsract = function(url,frmid) {
	var form = YAHOO.util.Dom.get(frmid);
	RQ.nav._ajax(form,"action",url);
}
RQ.nav.jsrnav = function(url,frmid) {
	var form = YAHOO.util.Dom.get(frmid);
	RQ.nav._ajax(form,"entry",url);
}
RQ.nav.action = function(url,frmid) {
	var form = YAHOO.util.Dom.get(frmid);
	form.method = "POST";
	var scrollPos = RQ.util.docScrollTop();
	form["scrollPos"].value = scrollPos;
	form["op"].value = "action";
	form["opparam"].value = url;
	RQ.nav.saveEditors();
	form.submit();
}
RQ.nav.ajaxaction = function(url,frmid) {
	var form = YAHOO.util.Dom.get(frmid);
	RQ.nav._ajax(form,"action",url,"slide");
	return false;
}
RQ.nav.ajaxitem = function(frmid,path,rw,mode,ret) {
	var form = YAHOO.util.Dom.get(frmid);
	RQ.nav._ajax(form,"item",path,"slide");
	return false;
}
RQ.nav.ajaxsubmit = function(frmid,path,rw,mode,ret) {
	var form = YAHOO.util.Dom.get(frmid);
	RQ.nav._ajax(form,form["op"].value,form["opparam"].value, "slideleft");
	return false;
}

RQ.nav.popup = function(url,frmid) {
	var form = YAHOO.util.Dom.get(frmid);
	form.method = "POST";

	var scrollPos = RQ.util.docScrollTop();
	form["scrollPos"].value = scrollPos;
	form["op"].value = "action";
	form["opparam"].value = url;
	RQ.nav.saveEditors();
	form.submit();
	return false;
}
RQ.nav.select = function(id,frmid) {
	var form = YAHOO.util.Dom.get(frmid);
	form.method = "POST";

	var scrollPos = RQ.util.docScrollTop();
	form["scrollPos"].value = scrollPos;
	form["op"].value = "select";
	form["opparam"].value = id;
	RQ.nav.saveEditors();
	form.submit();
	return false;
}
RQ.nav.jsrselect = function(id,frmid) {
	var form = YAHOO.util.Dom.get(frmid);
	RQ.nav.saveEditors();
	RQ.nav._ajax(form,"select",id);
	return false;
}

RQ.nav.item = function(frmid,path,rw,mode,ret) {
	var form = YAHOO.util.Dom.get(frmid);
	if(rw == true) {
		form.method = "POST";
	}
	form["op"].value = "item";
	form["opparam"].value = path;
	var scrollPos = RQ.util.docScrollTop();
	form["scrollPos"].value = scrollPos;
	RQ.nav.saveEditors();
	form.submit();
	return false;
}
RQ.nav.additem = function(frmid,path,mode) {
	var form = YAHOO.util.Dom.get(frmid);
	form.method = "POST";
	form["op"].value = "additem";
	form["opparam"].value = path;
	var scrollPos = RQ.util.docScrollTop();
	form["scrollPos"].value = scrollPos;
	RQ.nav.saveEditors();
	form.submit();
	return false;
}
RQ.nav.ajaxadditem = function(frmid,path,mode) {
	var form = YAHOO.util.Dom.get(frmid);
	RQ.nav._ajax(form,"additem",path,"slide");
	return false;
}
RQ.nav.addinlineitem = function(frmid,path,mode) {
	var form = YAHOO.util.Dom.get(frmid);
	RQ.nav._ajax(form,"addinlineitem", path);
	return false;	
}
RQ.nav.ajaxaddinlineitem = function(frmid,path,mode) {
	var form = YAHOO.util.Dom.get(frmid);
	RQ.nav._ajax(form,"addinlineitem",path,"slide");
	return false;
}
RQ.nav.addexpr = function(frmid,path,mode) {
	var form = YAHOO.util.Dom.get(frmid);
	RQ.nav._ajax(form,"additem", path);
	return false;
}
RQ.nav.remitem = function(frmid,path) {
	var form = YAHOO.util.Dom.get(frmid);
	RQ.nav._ajax(form,"remitem", path);
	return false;
}

// parent form
RQ.nav._form = function(elt) {
    // retrieve the parent form
    var form = elt;
    while(form != null && form.tagName != 'FORM') {
        // get the parent
        form = form.parentNode;
    }
    return form;
}

RQ.nav.closeFlyby = function(frmid) {
	// js close all the flybys
    var flybys = RQ.util.getElementsByTagAndClassName(document,"div", "flyby");
    for(var i=0; i<flybys.length; i++) {
    	var flb = flybys[i];
    	if(flb.style.display != "none") {
	    	// check ifthe mouse is around or within the flyby
	    	flb.style.display = "none";
	    	// hide the corresponding iframe
	    	var ifr = YAHOO.util.Dom.get(flb.id.substring(0,flb.id.length-3)+"if");
	    	if(ifr != null)
		    	ifr.style.display = "none";
		}
    }
    // send the close info to the server for server resource cleanup
	var form = YAHOO.util.Dom.get(frmid);
	if(form != null) {
		RQ.nav._ajax(form,"close");
	}
	return false;
}

RQ.nav.closePopup = function() {
	var popup = YAHOO.util.Dom.get("rqpopup");
	if(popup != null) {
		popup.parentNode.removeChild(popup);
	}
	return false;
}
RQ.nav.newevent = function(url,frmid) {
	var form = YAHOO.util.Dom.get(frmid);
	RQ.nav._ajax(form,"action",url,"panel");
}

RQ.nav.pushFormContent = function(frmid,body) {

	var form = YAHOO.util.Dom.get(frmid);
	if(form == null) {
		return body;
	}
	// and the list of fields
    var fields = new Array();
    RQ.util.findInputFields(fields, form);
    for ( var i = 0 ; i < fields.length ; i++ ) {
        var field = fields[i];
        if ( field.name != undefined && field.name != "" && field.value != undefined ) {
            if(field.type == 'checkbox') {
	            body += "&";
            	body += field.name +  "=" + encodeURIComponent(field.checked);
            } else if(field.name != 'op' && field.name != 'opparam') {
	            body += "&";
            	body += field.name +  "=" + encodeURIComponent(field.value);
            }
        }
    }
	return body;
}

RQ.nav.Help = {};
RQ.nav.Help.currentFb = null;

RQ.nav.Help.register = function(helper) {
	YAHOO.util.Event.addListener(helper, "click", RQ.nav.Help.flyby);
	YAHOO.util.Event.addListener(helper, "mouseout", RQ.nav.Help.flyout);
}

RQ.nav.Help.flyby = function(evt) {
    var eventTarget = evt.target ? evt.target : evt.srcElement;
    var form = RQ.nav._form(eventTarget);
    if(form == null) {
    	return;
    }
  	var d = RQ.nav.Help.currentFb;
  	if(d != null) {
  		d.style.display = "none";
  		d.parentNode.removeChild(d);
  		RQ.nav.Help.currentFb = null;
  	}

    // get the context form
    var ctx = findInputValue(form, "ctx").value;
    var w = eventTarget.offsetWidth+1;
    var h = eventTarget.offsetHeight;
	var url = ContextPath+'/ajax?op=helper&ctx='+ctx+'&w='+w+'&h='+h+'&name='+eventTarget.id;
    if(typeof(DevMode) != "undefined")
        url += "&dev=true";
    var callback = {
 		success: function (r) {
			var resp = r.responseXML.getElementsByTagName("ajax-response")[0];
			RQ.util.cleanWhitespace(resp);
			resp = resp.firstChild;
			var id = resp.getAttribute("id");
			var html = resp.firstChild.nodeValue;
		    var hlp = YAHOO.util.Dom.get(id);
		    if(hlp != null) {
			    // create a div for the flyby 
			    var d = document.createElement("div");
			    d.className = "rqhlpfb";
			    d.innerHTML = html;
				// add the div to the document
				hlp.parentNode.appendChild(d);
				RQ.nav.Help.currentFb = d;			

				var pos = YAHOO.util.Dom.getXY(hlp);
				pos[0] = pos[0] + 22;
				pos[1] = pos[1] + 22;

				var scrollX = RQ.util.docScrollLeft();
				var scrollY = RQ.util.docScrollTop();
				var rX = pos[0] + d.offsetWidth + 5;
				var rY = pos[1] + d.offsetHeight + 5;
				var maxX = YAHOO.util.Dom.getClientWidth() + scrollX - 12;   
				var maxY = YAHOO.util.Dom.getClientHeight() + scrollY;
				// align on the left
				if(rX > maxX) {
					pos[0] = maxX - d.offsetWidth - 5;
				}
				// align on the top also
				if(rY > maxY) {
					pos[1] = maxY - d.offsetHeight - 5;
				}
				YAHOO.util.Dom.setXY(d,pos);
			}
		},
		failure:function (o) {
		}
    };
	YAHOO.util.Connect.asyncRequest('GET',url,callback);	
	YAHOO.util.Event.stopEvent(evt);
}
RQ.nav.Help.flyout = function(evt) {
  	var d = RQ.nav.Help.currentFb;
  	if(d != null) {
  		d.style.display = "none";
  		d.parentNode.removeChild(d);
  		RQ.nav.Help.currentFb = null;
  	}


}


RQ.nav.currentFlyby = null;

/*
 * Ajax magement of updates
 */
RQ.nav._ajax = function(form,op,param,ajaxmode,target) {
	RQ.nav.saveEditors();

	var frmid = form.id;
	var ctxid = frmid.substring(6);
	var body = "op="+op;
	if(param) 
		body += "&opparam="+encodeURIComponent(param);
	if(target)
		body += "&target="+target;
	if(ajaxmode) 
		body += "&ajaxmode="+ajaxmode;
	else if(frmid.substring(0,6) == "rqsrch") 
		body += "&ajaxmode=filter";
	
	if(typeof(PageName) != "undefined")
		body += "&page="+PageName;
	// portlet?
	var portlet = form;
    while(portlet != null && portlet.className != 'rqportlet') {
        // get the parent
        portlet = portlet.parentNode;
    }
	if(portlet != null) {
		body += "&portlet="+portlet.id;
	}	
    if(typeof(DevMode) != "undefined")
        body += "&dev=true";
	
	// push the field contents
	body = RQ.nav.pushFormContent(frmid, body);
    var dispatcher = YAHOO.util.Dispatcher; 
    var id = frmid+"cnt";
    var config = {};
    
    dispatcher.updateContent = function(responseXML,config) {
		var resp = responseXML.getElementsByTagName("ajax-response")[0];
		if(resp == null)
			return;
		
		RQ.util.cleanWhitespace(resp);
		var mode = resp.getAttribute("mode");
		var targetId = resp.getAttribute("target");
		var html = resp.firstChild.nodeValue;
		var id = resp.getAttribute("id");
		if(mode == "flyby") {
			var wid = resp.getAttribute("wid");
			var x = parseInt(resp.getAttribute("x"));
			var y = parseInt(resp.getAttribute("y"))-10;
		    var flash = RQ.util.flash.findFlashContent(YAHOO.util.Dom.get(wid));
			var flb = YAHOO.util.Dom.get(wid+"flb");
		    var pos;
		    if(flash != null) {
				pos = YAHOO.util.Dom.getXY(flash);
			} else {
				var frm = YAHOO.util.Dom.get(wid);
				flb = document.createElement("div");
				flb.className = "flyby";
				flb.style.visibility = "visible";
				flb.style.display = "block";
				frm.appendChild(flb);
				pos = YAHOO.util.Dom.getXY(frm);
				if(RQ.nav.currentFlyby != null) {
					RQ.nav.currentFlyby.style.visibility = "hidden";
					RQ.nav.currentFlyby.style.display = "none";
				}
				pos[0] = 0;
				pos[1] = 24;
			} 
			// position the iframe first
			var flbif = YAHOO.util.Dom.get(wid+"if");
		    var temp = document.createElement("div");
		    // remove existing flb children
			while (flb.firstChild) {
			  flb.removeChild(flb.firstChild);
			}					
			flb.appendChild(temp);
			RQ.nav.currentFlyby = flb;	
			currentFlyif = flbif;

			flb.style.display = "block";
			flbif.style.display = "block";
			

			// updatde the flyby content
			this.process(temp,html,config);	
			
			var scrollX = RQ.util.docScrollLeft();
			var scrollY = RQ.util.docScrollTop();
			var rX = x + pos[0] + flb.offsetWidth + 5;
			var rY = y + pos[1] + flb.offsetHeight + 5;
			
			var maxX = YAHOO.util.Dom.getClientWidth() + scrollX - 12;   
			var maxY = YAHOO.util.Dom.getClientHeight() + scrollY;
	
			// align on the left
			if(rX > maxX) {
				x = maxX - flb.offsetWidth - pos[0] - 5;
			}
			// align on the top also
			if(rY > maxY) {
				y = maxY - flb.offsetHeight - pos[1] - 5;
			}
			pos[0] = pos[0] + x;
			if(pos[0]<0)
				pos[0] = 0;
			pos[1] = pos[1] + y;
			if(pos[1] < 0)
				pos[1] = 0;


			// adjust iframe height
			flb.style.visibility = "visible";
			YAHOO.util.Dom.setXY(flb,pos);
			if(flbif != null) {			
				flbif.style.height = (flb.offsetHeight+1)+"px";
				flbif.style.visibility = "visible";
				YAHOO.util.Dom.setXY(flbif, pos);
			}
			RQ.dragdrop.initDragAndDropTargets(flb);
			RQ.menu.initMenus(flb);
		} else if(mode == "panel") {
			RQ.nav.panel = new YAHOO.widget.Panel("rqpanel",  
               { 
					fixedcenter:true,
					width:"600px",
					underlay:"shadow",
					close: true, 
					draggable: false, 
					zindex:4,
					modal: true,
					visible: false,
					effect:{effect:YAHOO.widget.ContainerEffect.FADE, duration: 0.1}
               });
			var kl = new YAHOO.util.KeyListener(document, { keys:27 },                               
                                        { fn:RQ.nav.panel.hide, 
                                          scope:RQ.nav.panel, 
                                          correctScope:true }, "keyup" ); 
			RQ.nav.panel.cfg.queueProperty("keylisteners", kl);
			RQ.nav.panel.setBody(html);
			var lbl = resp.getAttribute("lbl");
			if(lbl != null)
				RQ.nav.panel.setHeader(lbl);
			RQ.nav.panel.render(document.body);
			RQ.nav.panel.show();
			var divPanel = YAHOO.util.Dom.get("rqpanel");
			RQ.dragdrop.initDragAndDropTargets(divPanel);
			RQ.menu.initMenus(divPanel);			

		} else if(targetId != null) {
			var current = YAHOO.util.Dom.get(targetId);
			// update the HTML content
			if(current) {
				this.process(current,html,config);
				RQ.dragdrop.initDragAndDropTargets(current);		
				RQ.menu.initMenus(current);
			}
		} else {
			var current = YAHOO.util.Dom.get(id);
			// update the HTML content
			if(current) {
				// cleanup all the editors
				RQ.ui.editors = new Array();	
				// update the zone content
				this.process(current,html,config);
				YAHOO.util.Event.onContentReady(id, function () {
					RQ.dragdrop.initDragAndDropTargets(current);		
					RQ.menu.initMenus(current);
					// lookup for the last focus control
					if(RQ.nav.lastFocusForm) {
						var form = YAHOO.util.Dom.get(RQ.nav.lastFocusForm);
						if(form != null && RQ.nav.lastFocus) {
							ctrl = form[RQ.nav.lastFocus];
							if(ctrl != null && typeof(ctrl.focus) != "undefined") { 
								ctrl.focus();
								setCaretToEnd(ctrl);
							}
						}
					}
				});
			}
		}	
    }
    var callback = {
 		success: function (o) {
			if (o.responseXML) {
				dispatcher.updateContent( o.responseXML, config );
			}
		},
		failure:function (o) {
		}
    };
    
    dispatcher.post(id, ContextPath+'/ajax', body, callback); 
}


RQ.nav.pb = function(elt) {
	var form = RQ.nav._form(elt);
	RQ.nav._ajax(form,"postback");
    RQ.nav.onFocus(elt);
}

RQ.nav.pbuc = function(elt,name) {
	var form = RQ.nav._form(elt);
	RQ.nav._ajax(form,"userchange",name);
}


RQ.nav.ucb = function(check) {
	var form = RQ.nav._form(check);
	var name = check.name.substring(2);
	var input = form[name];
	if(input) {
		input.value = check.checked;
	}
}

RQ.nav.callback =
{
	success: function(r) { RQ.nav.updateContent(r) },
	failure: function(o) { alert(o.status) },
	timeout: 20000,
	argument: null
}

RQ.nav.fltclear = function(ctxid) {
	var form = YAHOO.util.Dom.get("rqform"+ctxid);
	RQ.nav._ajax(form,"fltclear",null,"portlet");
}

RQ.nav.listnav = function(ctxid,page) {
	var form = YAHOO.util.Dom.get("rqform"+ctxid);
	RQ.nav._ajax(form,"nav",page,"portlet");
}
RQ.nav.sortnav = function(ctxid,propName,order) {
	var form = YAHOO.util.Dom.get("rqform"+ctxid);
	RQ.nav._ajax(form,"nav","sort:"+propName+":"+order,"portlet");
}


RQ.nav.orderitems = function(elt,prop,items) {
	var form = RQ.nav._form(elt);
	RQ.nav._ajax(form,"orderitems",prop+":"+items);
}
RQ.nav.listsearch = function(ctxid) {
	var form = YAHOO.util.Dom.get("rqform"+ctxid);
	var txt = form[ctxid+"search"].value;
	RQ.nav._ajax(form,"search",txt);
	return false;
}
RQ.nav.search = function(ctxid) {
	var form = YAHOO.util.Dom.get("rqform"+ctxid);
	RQ.nav._ajax(form,"search");
	return false;
}
RQ.nav.filtersearch = function(ctxid) {
	// cancel the time of there is one running
	if(RQ.nav.filtertimer != null) {
		clearTimeout(RQ.nav.filtertimer);
		RQ.nav.filtertimer = null;
	}

	var flt = YAHOO.util.Dom.get("rqsearchcnt"+ctxid);
	if(flt != null) {
		flt.className = "waiting";
	}	
	var form = YAHOO.util.Dom.get("rqsrch"+ctxid);
	RQ.nav._ajax(form,"search");
	return false;
}
RQ.nav.filtertoggle = function(ctxid,val) {
	var form = YAHOO.util.Dom.get("rqsrch"+ctxid);
	form["flt.type"].value = val;
	RQ.nav._ajax(form,"search");
}

RQ.nav.filtertimer = null;
RQ.nav.filterchange = function(ctxid) {
	if(RQ.nav.filtertimer != null) {
		clearTimeout(RQ.nav.filtertimer);
		RQ.nav.filtertimer = null;
	}
	RQ.nav.filtertimer = setTimeout("RQ.nav.filtersearch('"+ctxid+"')", 700);
}

RQ.nav.onFocus = function(elt) {
	RQ.nav.lastFocus = elt.name;
	var form = RQ.nav._form(elt);
	if(form != null)
		RQ.nav.lastFocusForm = form.id;
	else
		RQ.nav.lastFocusForm = null;
}

RQ.nav.goto = function(url) {
	document.location = url;
}
RQ.nav.Menu = {};
RQ.nav.Menu.currentFb = null;

RQ.nav.Menu.register = function(menu) {
	YAHOO.util.Event.addListener(menu, "click", RQ.nav.Menu.showMenu);
}

RQ.nav.Menu.showMenu = function(evt) {
    var eventTarget = evt.target ? evt.target : evt.srcElement;
	var td = eventTarget;
    while(td != null && td.tagName != 'TD') {
        // get the parent
        td = td.parentNode;
    }
    if(td == null) {
    	return;
    }
    
    var form = RQ.nav._form(td);
    if(form == null) {
    	return;
    }
  	var d = RQ.nav.Menu.currentFb;
  	if(d != null) {
  		d.style.display = "none";
  		d.parentNode.removeChild(d);
  		RQ.nav.Menu.currentFb = null;
  	}
    // get the context form
    var ctx = findInputValue(form, "ctx").value;
    var w = eventTarget.offsetWidth+1;
    var h = eventTarget.offsetHeight;
	var url = ContextPath+'/ajax?op=menu&ctx='+ctx+'&w='+w+'&h='+h+'&page='+PageName+'&name='+td.id;
    if(typeof(DevMode) != "undefined")
        url += "&dev=true";
    var callback = {
 		success: function (r) {
			var resp = r.responseXML.getElementsByTagName("ajax-response")[0];
			RQ.util.cleanWhitespace(resp);
			resp = resp.firstChild;
			var id = resp.getAttribute("id");
			var html;
			if(resp.firstChild.nextSibling != null) 
			    html = resp.firstChild.nextSibling.nodeValue;
			else
			    html = resp.firstChild.nodeValue;
			
		    var men = YAHOO.util.Dom.get(id);
		    if(men != null) {
			    // create a div for the flyby 
			    var d = document.createElement("div");
			    d.className = "rqmenfb";
			    d.innerHTML = html;
				// add the div to the document
				men.appendChild(d);
				RQ.nav.Menu.currentFb = d;			
				var pos = YAHOO.util.Dom.getXY(men);
				pos[0] = pos[0] + 22;
				pos[1] = pos[1] + 22;
				
				var scrollX = RQ.util.docScrollLeft();
				var scrollY = RQ.util.docScrollTop();
				var rX = pos[0] + d.offsetWidth + 5;
				var rY = pos[1] + d.offsetHeight + 5;
				var maxX = YAHOO.util.Dom.getClientWidth() + scrollX - 12;   
				var maxY = YAHOO.util.Dom.getClientHeight() + scrollY;
				// align on the left
				if(rX > maxX) {
					pos[0] = maxX - d.offsetWidth - 5;
				}
				// align on the top also
				if(rY > maxY) {
					pos[1] = maxY - d.offsetHeight - 5;
				}
				YAHOO.util.Dom.setXY(d,pos);
			}
		},
		failure:function (o) {
		}
    };
	YAHOO.util.Connect.asyncRequest('GET',url,callback);
	YAHOO.util.Event.stopEvent(evt);
}
RQ.nav.Menu.flyout = function(evt) {
  	var d = RQ.nav.Menu.currentFb;
  	if(d != null) {
  		d.style.display = "none";
  		d.parentNode.removeChild(d);
  		RQ.nav.Menu.currentFb = null;
  	}
}


RQ.nav.Menu.showPageMenu = function(eventTarget, page) {
    var w = eventTarget.offsetWidth+1;
    var h = eventTarget.offsetHeight;
	var url = ContextPath+'/ajax?op=menu&name=page:'+page+'&w='+w+'&h='+h+'&page='+page;
    if(typeof(DevMode) != "undefined")
        url += "&dev=true";
    var callback = {
 		success: function (r) {
			var resp = r.responseXML.getElementsByTagName("ajax-response")[0];
			RQ.util.cleanWhitespace(resp);
			resp = resp.firstChild;
			var id = resp.getAttribute("id");
			var oMenu = new YAHOO.widget.Menu("rqmentg"+id, { });
            var oMenu = new YAHOO.widget.Menu(
                                "rqmentg"+id, 
                                {
                                    position: "static", 
                                    hidedelay: 750, 
                                    lazyload: true, 
                                    effect: { 
                                        effect: YAHOO.widget.ContainerEffect.FADE,
                                        duration: 0.25
                                    } 
                                }
                        );
	        var tg = YAHOO.util.Dom.get("rqmen"+id);
			oMenu.render("rqmen"+id);
			oMenu.show();
		},
		failure:function (o) {
		}
    };
	YAHOO.util.Connect.asyncRequest('GET',url,callback);
}

function setSelectionRange(input, selectionStart, selectionEnd) {
  if (input.setSelectionRange) {
    input.focus();
    input.setSelectionRange(selectionStart, selectionEnd);
  }
  else if (input.createTextRange) {
    var range = input.createTextRange();
    range.collapse(true);
    range.moveEnd('character', selectionEnd);
    range.moveStart('character', selectionStart);
    range.select();
  }
}
function setCaretToEnd (input) {
  setSelectionRange(input, input.value.length, input.value.length);
}


RQ.debug = {};

RQ.debug.toggleBreakpoint = function(evt) {
    var mk = evt.target ? evt.target : evt.srcElement;
    while(mk && mk.tagName != "DIV") {
        mk = mk.parentNode;
    }
    var url = ContextPath+'/ajax?op=debug&opparam=toggleBreakpoint:'+mk.id;
    if(typeof(DevMode) != "undefined")
        url += "&dev=true";

    var callback = {
        success: function (r) {
            var resp = r.responseXML.getElementsByTagName("ajax-response")[0];
            RQ.util.cleanWhitespace(resp);
            var el = resp.firstChild;
            var status = el.attributes["status"].value;
            if(status == "ok") {
                var td = YAHOO.util.Dom.get(el.attributes["id"].value);
                var state = el.attributes["bk"].value;
                if(state == "on") {
                    YAHOO.util.Dom.addClass(td,"rqbk");           
                } else if(state == "off") {
                    YAHOO.util.Dom.removeClass(td,"rqbk");           
                }
            }
        },
        failure:function (o) {
        }
    };
    YAHOO.util.Connect.asyncRequest('POST',url,callback);
}

RQ.debug.findDebugger = function() {
	var dbgs = RQ.util.getElementsByTagAndClassName(document,"div", "rqdbgpanel");
    if(dbgs.length > 0) {
        return RQ.nav._form(dbgs[0]);    
    } else {
        return null;
    }
}


RQ.debug.start = function(evt) {
    var form = RQ.debug.findDebugger();
    RQ.debug.action(form.id,"start");
}
RQ.debug.stop = function(evt) {
    var form = RQ.debug.findDebugger();
    RQ.debug.action(form.id,"stop");
}
RQ.debug.resume = function(evt) {
    var form = RQ.debug.findDebugger();
    RQ.debug.action(form.id,"resume");
}
RQ.debug.stepinto = function(evt) {
    var form = RQ.debug.findDebugger();
    RQ.debug.action(form.id,"stepinto");
}
RQ.debug.stepover = function(evt) {
    var form = RQ.debug.findDebugger();
    RQ.debug.action(form.id,"stepover");
}
RQ.debug.stepreturn = function(evt) {
    var form = RQ.debug.findDebugger();
    RQ.debug.action(form.id,"stepreturn");
}

RQ.debug.refresh = function(frmid) {
    var frm = YAHOO.util.Dom.get(frmid);
    RQ.nav.pb(frm);
}

RQ.debug.findElement = function(el,name) {
    var children = el.childNodes;
    for(var i=0; i<children.length; i++) {
        var child = children[i];
        if(typeof(child.tagName) != "undefined" && child.tagName == name) {
            return child;
        }
    }
    return null;
}

RQ.debug.scrollSrc = function() {
    var dbgsrc = YAHOO.util.Dom.get("rqdbgsrc");
    if(dbgsrc != null) {
	    var posSrc = YAHOO.util.Dom.getXY(dbgsrc);
	    var sels = RQ.util.getElementsByTagAndClassName(dbgsrc,"div", "rqlnsel");
	    if(sels.length > 0) {
	        var posMk = YAHOO.util.Dom.getXY(sels[0]);
	        var top = posMk[1]-posSrc[1];
	        // visible?
	        if(top > 330) {
	           // scroll the source
	           dbgsrc.scrollTop = dbgsrc.scrollTop + top - 80;
	        }
	        if(top < 0) {
	           dbgsrc.scrollTop = 0;
	        }
	    }
    }
}

RQ.debug.action = function(frmid,opparam) {
    var form = YAHOO.util.Dom.get(frmid);
    
    var body = "op=debug&opparam="+opparam+"&id="+frmid;
    if(typeof(DevMode) != "undefined")
        body += "&dev=true";
    
    body = RQ.nav.pushFormContent(frmid, body);
    var dispatcher = YAHOO.util.Dispatcher; 
    var id = "rqdbgsrc";
    var config = {};
    
    dispatcher.updateContent = function(responseXML,config) {
        var resp = responseXML.getElementsByTagName("ajax-response")[0];
        if(resp == null)
            return;
        
        RQ.util.cleanWhitespace(resp);
        var el = resp.firstChild;
        var status = el.getAttribute("status");
        var id = el.getAttribute("id");
        var frm = YAHOO.util.Dom.get(id);
		if(frm != null && status == "ok") {
		
            var respStatusId = el.getAttribute("statusid");
            var oldStatusId = frm["statusid"].value;
            if(respStatusId != oldStatusId) {
                // ignore this one
                return;
            }
            
		    var debug = "true" == el.getAttribute("debug");
		    RQ.debug.btnDebug.set("disabled", debug == false);
		    
		    var run = "true" == el.getAttribute("run");
            RQ.debug.btnRun.set("disabled", run == false);

		    var stop = "true" == el.getAttribute("stop");
            RQ.debug.btnStop.set("disabled", stop == false);
		
		    var stepinto = "true" == el.getAttribute("stepinto");
            RQ.debug.btnStepInto.set("disabled", stepinto == false);
    
		    var stepover = "true" == el.getAttribute("stepover");
            RQ.debug.btnStepOver.set("disabled", stepover == false);
		
		    var stepreturn = "true" == el.getAttribute("stepreturn");
            RQ.debug.btnStepReturn.set("disabled", stepreturn == false);
		      
		    // stack?
		    var elStack = RQ.debug.findElement(el,"stack");
		    var dbgstack = YAHOO.util.Dom.get("rqdbgstack");
            if(dbgstack && elStack) {
                var html = elStack.firstChild.nodeValue;
                // update the zone content
                this.process(dbgstack,html,config);
            }
            
            // variables?
            var elVariables = RQ.debug.findElement(el,"variables");
            if(elVariables != null) {
                var html = elVariables.firstChild.nodeValue;
                var varLists = RQ.util.getElementsByTagAndClassName(document,"div", "rqdbgvars");
                for(var i=0; i<varLists.length; i++) {
                    var varList = varLists[i];
	                // update the zone content
	                this.process(varList,html,config);
                }
            }
		    
            // source ?
            var elSource = RQ.debug.findElement(el,"source");
            var dbgsrc = YAHOO.util.Dom.get("rqdbgsrc");
            // update the HTML content
            if(dbgsrc && elSource != null) {
                var html = elSource.firstChild.nodeValue;
                // cleanup all the editors
                RQ.ui.editors = new Array();    
                // update the zone content
                this.process(dbgsrc,html,config);
                YAHOO.util.Event.onContentReady(id, function () {
                    RQ.dragdrop.initDragAndDropTargets(dbgsrc);        
                    RQ.menu.initMenus(dbgsrc);
                    // lookup for the last focus control
                    if(RQ.nav.lastFocusForm) {
                        var form = YAHOO.util.Dom.get(RQ.nav.lastFocusForm);
                        if(form != null && RQ.nav.lastFocus) {
                            ctrl = form[RQ.nav.lastFocus];
                            if(ctrl != null && typeof(ctrl.focus) != "undefined") { 
                                ctrl.focus();
                                setCaretToEnd(ctrl);
                            }
                        }
                    }
                });
            }
            var pos = el.getAttribute("pos");
            var src = el.getAttribute("src");
            if(pos != "false" && pos != null) {
                // set the current pos
                var mk = YAHOO.util.Dom.get(src+"-"+pos);
                var sels = RQ.util.getElementsByTagAndClassName(dbgsrc,"div", "rqlnsel");
                for(var i=0; i<sels.length; i++) {
                    YAHOO.util.Dom.removeClass(sels[i],"rqlnsel");    
                }
                if(mk != null) {
	                var tr = mk.parentNode;
	                var lns = RQ.util.getElementsByTagAndClassName(tr,"div", "rqln");
	                YAHOO.util.Dom.addClass(lns[0],"rqlnsel");  
	                var lcs = RQ.util.getElementsByTagAndClassName(tr,"div", "rqc");
	                YAHOO.util.Dom.addClass(lcs[0],"rqlnsel");
	                RQ.debug.scrollSrc();  
	            }
            }
        }
    };
    
    var callback = {
        success: function (o) {
            if (o.responseXML) {
                dispatcher.updateContent( o.responseXML, config );
            }
        },
        failure:function (o) {
        }
    };
    
    dispatcher.post(id, ContextPath+'/ajax', body, callback); 
}

RQ.debug.execute = function(frmid) {
    var form = YAHOO.util.Dom.get(frmid);
    RQ.nav._ajax(form,"debug","execute");
}

RQ.debug.poolListener = function() {

    var poolers = RQ.util.getElementsByTagAndClassName(document,"div", "rqpooler");
    for(var i=0; i<poolers.length; i++) {
        var pooler = poolers[i];
        var form = RQ.nav._form(pooler);
        RQ.debug.refresh(form.id);            
    }
    setTimeout("RQ.debug.poolListener()", 500);
}

RQ.debug.poolDebugger = function() {

    var dbgs = RQ.util.getElementsByTagAndClassName(document,"div", "rqdebugger");
    for(var i=0; i<dbgs.length; i++) {
        var dbg = dbgs[i];
        var form = RQ.nav._form(dbg);
        RQ.debug.action(form.id,'reload');            
    }    

    setTimeout("RQ.debug.poolDebugger()", 520);
}


YAHOO.register("rqnav", RQ.nav, {version: "2.1.6", build: "100"});
