/*
        $Header: /Develop/concept/res/concept/ext/UqHtmlPage.js 105   27.02.07 8:20 Mg $
*/
var uqChanged = new Array(0);
var uqPageTimeout=false;
var uqTimeoutTimer=null;
var uqLastElementChanged=null;
var uqFocusElement=null;
var uqColorChanged="#FFFACD";
var uqColorInvalid="#FA8072";
var uqChangesConfirmed=true;
var uqChangesConfirmedPrefix="<changesConfirmed>";
var uqLookupNext=0;
var uqLookupDest=new Array(3);
var uqLookupType=new Array(3);
var uqZoomIds=new Array(0);
var uqDefaultButtonId=null;
var uqGetPageDone=false;
var uqPrintMode=false;
var uqRowFocusBackgroundColor='#C2CCDE';

function uqLookup(servlet,item,result,resultType) {
    var lookupIndex=uqLookupNext++;
    if (uqLookupNext>=uqLookupDest.length) uqLookupNext=0;
    uqLookupDest[lookupIndex]=result!=null?document.getElementById(result):null;
    if ((result == null) || (uqLookupDest[lookupIndex]!=null)) {
        if (resultType==null) {
            if (uqLookupDest[lookupIndex].type) {
                resultType='VALUE';
            } else {
                resultType='HTML';
            }
        }
        uqLookupType[lookupIndex]=resultType;
        if (resultType=='VALUE'){
            uqLookupDest[lookupIndex].value='?'; // init to "unknown"
        }
        var p=servlet.indexOf('?');
        if (p>=0) {
            servlet+='&';
        } else {
            servlet+='?';
        }
        servlet+='ITEM=';
        if (item!=null) {
            servlet+=escape(item);
        }
        document.getElementById('UQLOOKUP'+lookupIndex).src=servlet;
    } else {
        alert('uqLookup: Can not find element: '+result);
    }
}

function uqLookupDone(iframeElm) {
    var iframeId=iframeElm.id;
    var lookupIndex=iframeId.charAt(iframeId.length-1)-'0';
    if (uqLookupDest[lookupIndex]!=null) {
        var rep=document.frames(iframeId).document.getElementById('UQLOOKUPRESULT');
        if (rep!=null) {
            var e=uqLookupDest[lookupIndex];
            var t=uqLookupType[lookupIndex];
            if (t=='VALUE') {
                e.value=rep.value;
            } else if (t=='TITLE') {
                e.title=rep.value;
            } else {
                e.innerHTML=rep.value;
            }
        }
        uqLookupDest[lookupIndex]=null;
    }
}

function uqIgnoreError() {
    return true;
}

function uqSetFocus() {
    if (uqFocusElement!=null) {
        var fe=document.getElementById(uqFocusElement); //
        if (fe!=null) {
           fe.focus();
        }
    }
}

function uqHiddenHtml() {
	if (uqPrintMode) return;
    document.write('<form name="uqPageRetriever" method="POST"><input name="COMMAND" type="hidden"></form>');
    // TODO: causes a security alert with https on IE (mixed content)
	if (location.href.substr(0,8) != "https://") {
        for (var i=0;i<uqLookupDest.length;i++) {
            document.write('<iframe id="UQLOOKUP');
            document.write(i);
            document.write('" style="display:none;" onload="uqLookupDone(this);"></iframe>');
        }
    }
}

function uqOnload(timeoutSecs,printMode,focusId,defaultButtonId) {
    uqHiddenHtml();
	
    if (timeoutSecs!=null) {
            // uqTimeoutTimer=window.setInterval("uqPageTimeout()",timeoutSecs*1000);
    }

	uqPrintMode=printMode;    

    uqFocusElement=focusId;

	uqDefaultButtonId=defaultButtonId;

    //uqEnableButton(document.getElementById("uqSaveButton"),false);
    uqStartSubmitonenterListener();

    uqSetFocus();
    setTimeout(uqSetFocus,200); // some browsers need a litle time ...

    if (printMode) {
		//uqClearBackgroundColor(document.childNodes);
		//uqClearBackgroundColor(document.getElementsByTagName('body'));
		//uqClearBackgroundColor(document.getElementsByTagName('div'));
		//uqClearBackgroundColor(document.getElementsByTagName('table'));
    }
}

function uqClearBackgroundColor(ee) {
	if (!ee) return;
	for (var i=0;i<ee.length;i++)
	{
		var e = ee[i];
		if (e.style) {
			e.style.backgroundColor='#FFFFFF';
		}
		uqClearBackgroundColor(e.childNodes);
	}
}

function uqToggleDisplay(elmId) {
    var elm=document.getElementById(elmId);
    if (elm.style.display=='none') {
        elm.style.display='';
    } else {
        elm.style.display='none';
    }
}

function buttonImage(obj) {
    var bimg=obj.childNodes('buttonImage');
    if (bimg && bimg.name && bimg.name=='buttonImage') {
        return bimg;
    }
    var nodes=obj.childNodes;
    if (nodes) {
        for (var i=0;i<nodes.length;i++) {
            var iimg=buttonImage(nodes[i]);
            if (iimg) {
                return iimg;
            }
        }
    }
}

function uqEnableButton(button,enabled) {
    if (button==null) {
        return;
    }
    var disabled=!enabled;
    if (button.disabled!=disabled) {
        var bImg=buttonImage(button);
        if (bImg) {
            var bImgSrc=bImg.src;
            var hasSuffix=button.disabled?'_d.':'_e.';
            var p=bImgSrc.lastIndexOf(hasSuffix);
            if (p>=0) {
                var beforeSuffix=bImgSrc.substring(0,p);
                var afterSuffix=bImgSrc.substring(p+3,bImgSrc.length);
                var wantedSuffix=disabled?'_d.':'_e.';
                bImgSrc=beforeSuffix+wantedSuffix+afterSuffix;
                bImg.src=bImgSrc;
            }
            button.disabled=disabled;
        }
    }
}

function uqHighlight(inputField,color) {
    inputField.style.backgroundColor=color;
}

function uqInvalidateChanges(inputField) {
    if (inputField!=null) {
        uqHighlight(inputField,uqColorInvalid);
    }
    for(var i=0;i<uqChanged.length;i++) {
        if(uqChanged[i]!=null) {
            uqHighlight(uqChanged[i],uqColorInvalid);
        }
    }
    //uqEnableButton(document.getElementById('uqSaveButton'),false);
    uqChanged = new Array(0);
    uqChangesConfirmed=true;
    window.status='Page has timed out and is not valid for updates any more';
}

function uqPageTimeout() {
    uqPageTimeout=true;
    if (uqTimeoutTimer!=null) {
        window.clearInterval(uqTimeoutTimer);
        uqTimeoutTimer=null;
    }
    uqInvalidateChanges(null);
}


function uqValidPage() {
	if ((!document.uqPostbackForm && !document.uqPageRetriever) || uqPageTimeout) {
		window.location.reload(true);
		return false;
	}
	return true;
}


function uqCheckType(storageType,value) {
    if (storageType=='I' || storageType=='F') {
        /*
        if(isNaN(value)) {
            return 'Not a number';
        }
        var ival=parseInt(value);
        var fval=parseFloat(value);
        if(storageType=='I' && ival!=fval) {
            return 'Not a valid integer number';
        }
        */
    } else if (storageType=='DA') {
    } else if (storageType=='TI') {
    } else if (storageType=='DT') {
    }

    return null;
}

function uqChange(inputField,storageType) {
	if (!uqValidPage()) return;
	if (uqPrintMode) return;

    for(var i=0;i<uqChanged.length;i++) {
        if(uqChanged[i]==inputField) {
            uqChanged[i]=null;
            break;
        }
    }

    if (storageType!=null) {
        var msg=uqCheckType(storageType,inputField.value);
        if (msg!=null) {
            window.status=msg;
            uqHighlight(inputField,uqColorInvalid);
            return;
        }
    }

    window.status='';
    
    if (!document.uqPostbackForm) {
	    uqHighlight(inputField,uqColorChanged);
	
	    var arrayIndex=uqChanged.length;
	    for(var i=0;i<uqChanged.length;i++) {
	        if(uqChanged[i]==null) {
	            arrayIndex=i;
	            break;
	        }
	    }
	    uqChanged[arrayIndex]=inputField;
	    uqChangesConfirmed=false;
    }
    
    uqLastElementChanged=inputField;
    //uqEnableButton(document.getElementById('uqSaveButton'),true);
}

function uqBuildCommand(commandHandler,command) {
    return ":"+commandHandler+":"+command.length+":"+command;
}


function uqServlet(commandHandler,command,target) {
	if (uqPrintMode) return;
    var cmds = "";

    if (command!=null && command.substring(0,18)==uqChangesConfirmedPrefix) {
        uqChangesConfirmed=true;
        command=command.substring(18,command.length);
    }
    if (!uqChangesConfirmed) {
        if(window.showModalDialog){
            var x=window.showModalDialog(
                'no.webcenter.concept.servlet.html.UqHtmlConfirmChangesServlet','',
                'dialogHeight:120px;dialogWidth:20;center:yes;status:no;scroll:no;');

            if (x==null || x=="Cancel") {
                return;
            }
            if (x=="No") {
                uqInvalidateChanges(null);
            }
        } else {
            if(!confirm("Save changes?")){
                if(confirm("Invalidate changes?")){
                    uqInvalidateChanges(null);
                } else {
                    return;
                }
            }
        }
    }

    for(var i=0;i<uqChanged.length;i++) {
        if (uqChanged[i]!=null) {
            var elem=uqChanged[i];
            var id=elem.id;
            var value;
            if (elem.type=="checkbox") {
                value=elem.checked?"1":"0";
            } else if (elem.type=="select-one") {
                value="";
                for (var s=0;s<elem.options.length;s++) {
                    if (elem.options[s].selected) {
                        value=elem.options[s].value;
                        break;
                    }
                }
            } else if (elem.type=="select-multiple") {
                value="";
                for (var s=0;s<elem.options.length;s++) {
                    if (elem.options[s].selected) {
                        value+=elem.options[s].value+";";
                    }
                }
            } else if (elem.type=="textarea") {
            	  if (navigator.userAgent.indexOf("MSIE") == -1) {
            	     // Mozilla counts line feeds wrong
            	     value = elem.value;
            	     var maxlen = value.length;
            	     var nboLf = 0;
            	     var ci;
            	     for (ci = 0; ci < (maxlen + nboLf); ci++) {
            	        if (value.charAt(ci) == '\n') {
            	           nboLf++;
            	        }
            	     }
            	     var paddString = "";
            	     for (ci = 0; ci < nboLf; ci++) {
            	     		paddString += "\n";
            	     }
            	     value += paddString;
            	  } else {
            	  	  value = elem.value;
            	  }
            } else {
                value=elem.value;
            }
            cmds=cmds+uqBuildCommand(id,value);
        }
    }

    if (commandHandler) {
        cmds=cmds+uqBuildCommand(commandHandler,command);
    	var pbe=document.getElementById('uqPostbackEvent');
	    if (pbe) {
    		pbe.value=commandHandler + ":" + command;
	    }
    }

    uqGetPage(null,cmds,target);
}

function uqGetPage(url,commands,target) {
	if (!uqValidPage()) return;
	if (uqPrintMode) return;
	
    if (target==null) target="_self";

    if (url==null) {
        url=document.location.href;
        var p=url.indexOf('?');
        if (p>=0) {
                url=url.substring(0,p);
        }
    }

    if (commands==null) {commands="";}

    // we do it this way (and not by window.open()) to get the POST method
    if (document.uqPostbackForm) {
        document.uqPostbackForm.action=url;
        document.uqPostbackForm.target=target;
        document.uqPostbackForm.submit();
    } else {
        document.uqPageRetriever.action=url;
        document.uqPageRetriever.elements['COMMAND'].value=commands;
        document.uqPageRetriever.target=target;
        document.uqPageRetriever.submit();
    }
}

function uqGetTargetPage(url,target) {
	if (uqPrintMode) return;
    if (target==null) target="_self";
    /*
    if (target=="_self") {
        if (uqGetPageDone) {
            return;
        }
        uqGetPageDone=true;
    }
    */

    window.open('',target).location.href=url;
}

function uqSetSearchCondition(eId) {
    var operElem=document.getElementById(eId+'_OPER');
    var valueElem=document.getElementById(eId+'_VALUE');
    var resultElem=document.getElementById(eId);

    resultElem.value='';

    if (operElem.options[0].selected) {
        valueElem.readOnly=true;
        valueElem.value='';
    } else {
        valueElem.readOnly=false;
        for (var s=1;s<operElem.options.length;s++) {
            if (operElem.options[s].selected) {
                resultElem.value=operElem.options[s].value+' '+valueElem.value;
                break;
            }
        }
    }

    uqChange(resultElem,null);
    uqHighlight(operElem,uqColorChanged);
    uqHighlight(valueElem,uqColorChanged);
}

/* called from the zooming appl */
function uqZoom(oid, ref) {
	if (uqPrintMode) return;
    var params;
    var paramsPos=ref.indexOf('|');
    var setHref=false;
    if (paramsPos>0) {
        params=ref.substring(paramsPos+1,ref.length);
        ref=ref.substring(0,paramsPos);
        var uqParamsEnd=params.indexOf('|');
        if (uqParamsEnd>=0) {
            var uqParams=params.substring(0,uqParamsEnd);
            params=params.substring(uqParamsEnd+1,params.length);
            if (uqParams.indexOf('NOCACHE')>=0) setHref=true;
        }
    } else {
        params="resizable=yes,scrollbars=no,width=400,height=400";
    }
    zoomname=uqZoomName(ref);
    wnd=self[zoomname];
    if(!wnd || wnd.closed) {
        wnd=window.open('', zoomname, params);
        self[zoomname]=wnd;
        setHref=true;
    }
    if (setHref) {
        wnd.location.href=ref; /* tjj: must do it like this - do not try to use 1. param in open() */
    }
    uqZoomIds[zoomname]=oid;
    wnd['zoomObj']=oid;
    wnd['zoomOpener']=window;
    wnd.focus();
}

function uqOpenPrintWindow(ref) {
    var params="resizable=yes,scrollbars=yes,menubar=no,width=600,height=700";
    var wnd=window.open("", "tempPrintWin", params);
    wnd.location.href=ref;
    wnd.focus();
}

function uqZoomName(ref) {
    var paramsPos=ref.indexOf('?');
    if (paramsPos>0) {
        ref = ref.substring(0,paramsPos);
    }
    return zoomname="ZoomWindow"+ref.replace(/[\.\?\=\&]/g,'_');
}

/* close a window by its ref */
function uqZoomClose(ref) {
    zoomname=uqZoomName(ref);
    wnd=self[zoomname];
    if(wnd){
        wnd.close();
    }
}

/* called from the zoom application */
function uqZoomSelect(newValue) {
    var zobj=null;
    var zopener=window['zoomOpener'];
    if(!zopener) {
        zopener=window.opener;
    }
    var oid=window['zoomObj'];
    if(!oid && zopener) {
        oid=zopener.uqZoomIds[window.name];
    }
    if(oid && zopener) {
        zobj=zopener.document.getElementById(oid);
    }
    if(!zopener || !zobj) {
        alert('Press the zoom button in the main screen first!');
        return;
    }
    zobj.value=newValue;
    if(zobj.fireEvent){
        zobj.fireEvent("onchange");
    } else {
        zopener.uqChange(zobj,null);
    }
    zobj.focus();
    window.close();
}

function uqLBToggle(cb,cbValue,valueHolderId,immediateUpdate) {
	if (uqPrintMode) return;
    var valueHolder=document.getElementById(valueHolderId);
    cbValue+=';';
    var lbValue=valueHolder.value;
    var p=lbValue.indexOf(cbValue);
    if (cb.checked) {
        if (p<0) {
            lbValue+=cbValue;
        }
    } else {
        if (p>=0) {
            var a=p>0?lbValue.substring(0,p):'';
            p+=cbValue.length;
            var b=p<lbValue.length?lbValue.substring(p,lbValue.length):'';
            lbValue=a+b;
        }
    }
    valueHolder.value=lbValue;
    uqChange(valueHolder,null);
    uqHighlight(cb,uqColorChanged);
    if (immediateUpdate) {
        uqServlet(null,uqChangesConfirmedPrefix);
    }
}

function uqClickButtonByID(clickid){
    var elem = document.getElementById(clickid);
    if(elem != null){
        elem.click();
        /* use this if button implemented using anchor tag
        var hrefstr = unescape(elem.href);
        if((hrefstr.length > 11) && (hrefstr.substring(0,11) == "javascript:")){
            eval(hrefstr.substring(11,hrefstr.length));
        } else {
            elem.fireEvent("onclick");
        }
        */
    }
}

// see uqStartSubmitonenterListener();
function uqSubmitonenterA(){
    if(window.event && (window.event.keyCode == 13) &&
        ((window.event.srcElement.type == "text") || 
        (window.event.srcElement.type == "checkbox") || 
        (window.event.srcElement.type == "password"))){
        if (uqDefaultButtonId) {
	        window.event.srcElement.blur();
	        uqClickButtonByID(uqDefaultButtonId);
        }
        return false;
    }
}

// see uqStartSubmitonenterListener();
function uqSubmitonenterB(e){
    if((e.which == 13) &&
        ((e.target.type == "text") || 
        (e.target.type == "checkbox") || 
        (e.target.type == "password"))){
        if (uqDefaultButtonId) {
	        e.target.blur();
	        uqClickButtonByID(uqDefaultButtonId);
        }
        return false;
    }
}

// start the eventlistener
function uqStartSubmitonenterListener(){
    // there are two types.
    if(document.captureEvents){
        // for Mozilla, Netscape 6 and Opera
        document.captureEvents(Event.KEYPRESS);
        document.onkeypress = uqSubmitonenterB;
    } else {
        // for IE
        document.onkeypress = uqSubmitonenterA;
    }
}

function selectableRow(row,inFocus) {
	if (row && row.style) {
		if (inFocus) {
			row.style.backgroundColor=uqRowFocusBackgroundColor;
			row.style.cursor='pointer';
		} else {
			row.style.backgroundColor='';
			row.style.cursor='';
		}
	}
}

