// Global vars for iHelp
var iHelpWindow;
var iCtx;
var iHelpHtml;
var iHelpTitle;
var iHelpAppName;

function openIHelp(appName, windowTitle, servletContext, htmlData) {

  iHelpTitle = windowTitle;
  iCtx = servletContext;
  iHelpHtml = htmlData;
  iHelpAppName = appName;

  if(iHelpWindow==null || iHelpWindow.closed) {
    // Bug #13054
    // NOTE: The URL parameter to window.open() *MUST* point to an empty but valid file.
    // IE 6 + SP2 pop-up blocker will eat the pop-up window if using SSL.
    // It will also pop a dialog about leaving a secure site, which can be confusing.
	  iHelpWindow=window.open(iCtx+"/help/iHelp-content.html","iHelp","height=500,width=650,status=no,toolbar=no,menubar=no,scrollbars=yes,location=no,resizable=yes,dependent=yes");
	  setTimeout('createIHelpFrames()',10);
  }

  else {
	  setTimeout('createIHelpFrames()',10);
  }
}

function createIHelpFrames() {
  dc = iHelpWindow.document;
  dc.open();
  dc.writeln("<html>\n<head>\n<title>" + iHelpTitle + "</title>\n</head>");
  dc.writeln("<frameset rows=\"110,*,60\" frameborder=\"no\" border=\"0\" framespacing=\"0\">");
  dc.writeln("<frame src=\"" + iCtx + "/help/iHelp-masthead.jsp?app=" + iHelpAppName + "\" name=\"topFrame\" noresize=\"noresize\" id=\"topFrame\" title=\"Masthead Frame\" scrolling=\"no\">");
  dc.writeln("<frame src=\"" + iCtx + "/help/iHelp-content.html\" name=\"contentFrame\" id=\"mainFrame\" title=\"Content Frame\">");
  dc.writeln("<frame src=\"" + iCtx + "/help/iHelp-button.jsp?app=" + iHelpAppName + "\" name=\"buttonFrame\" noresize=\"noresize\" id=\"buttonFrame\" title=\"Button Frame\" scrolling=\"no\">");
  dc.writeln("</frameset>\n</html>");
  dc.close();
  setTimeout('writeIHelp()',10);
}

function writeIHelp() {
  dc = iHelpWindow.frames['contentFrame'].document;
  dc.open();
  dc.writeln("<html><head><!-- Content Frame --><title></title>");
  dc.writeln("<link type=\"text/css\" rel=\"stylesheet\" href=\"" + iCtx + "/styles/Styles-Help.css\">");
  dc.writeln("</head>\n<body>");
  dc.writeln("<div class=\"IHlpConTxt\">");
  dc.write(iHelpHtml);
  dc.writeln("\n</div>\n</body>\n</html>");
  dc.close();
  iHelpWindow.focus();
}

function openHelp(url) {
	var windowstatus;

    if(windowstatus==null||windowstatus.closed)
    {
		windowstatus=window.open(url,"Help","height=600,width=800,status=no,toolbar=yes,menubar=no,scrollbars=yes,location=no,resizable=yes,dependent=yes");
                if (windowstatus != null)
		    windowstatus.focus();
    } else {
		windowstatus.document.location=url;
		windowstatus.focus();
	}
}

function do_dblClick(row, typeName)
{
    var a=document.MyGrid;
    if (a != null ) {
        // if this is not a folder
        if ("folder" != typeName) {
            do_onMenu("Edit","","");
        }
    }
}

function do_capabilityDblClick(row, type)
{
//    alert("row= "+row+"\n"+"type= "+type);

    var text = decodeToUTF8(base64decode(row));
//    alert("text = " + text);
    var hasChildrenToEnd_Array = text.split("[$]");
    var hasChildren_and_protected = hasChildrenToEnd_Array[1].split("[#]");
    var hasChildren = hasChildren_and_protected[0]
    var isProtected = hasChildren_and_protected[1];

//    alert(" hasChildren = " + hasChildren + " protected = " + isProtected);

    var a=document.MyGrid;
    if (a != null ) {
        // only allow edit if this row is not protected
        if ("f" == hasChildren && "f" == isProtected) {
            do_onCapabilityMenu("Edit","","");
        } else if ("f" == hasChildren && "t" == isProtected) {
            alert(protectedCapabilityMsg);
        }
    }
}

function do_newDblClick(row, type)
{
//    alert("row= "+row+"\n"+"type= "+type);

    var a=document.MyGrid;
    if (a != null ) {
        // if this row cannot contain children
        if ("1" != type) {
            do_onResourceMenu("Edit","","");
        }
    }
}

function do_onMenu(item,r,c)
{
    var a=document.MyGrid;

//    alert("item = "+item+"\n"+"r= "+r+"\n"+"c= "+c);

    if (a != null) {
        document.forms[0].treestate.value = a.getAllExpandedItems(",");

        document.forms[0].id.value = a.getSelectedItemIds(",");
        if ((document.forms[0].id.value == null) || (document.forms[0].id.value.length < 1)) {
            document.forms[0].id.value = r;
        }
    }
    else
        document.forms[0].id.value = "";

    document.forms[0].command.value = item;
    document.forms[0].submit();
}

var base64s =
 "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

function base64encode(decStr){
  var bits, dual, i = 0, encOut = '';
  while(decStr.length >= i + 3){
    bits = (decStr.charCodeAt(i++) & 0xff) <<16;
    bits |= (decStr.charCodeAt(i++) & 0xff) <<8; 
    bits |=  (decStr.charCodeAt(i++) & 0xff);
    encOut +=
     base64s.charAt((bits & 0x00fc0000) >>18) +
     base64s.charAt((bits & 0x0003f000) >>12) +
     base64s.charAt((bits & 0x00000fc0) >> 6) +
     base64s.charAt((bits & 0x0000003f));
    }
  if(decStr.length -i > 0 && decStr.length -i < 3){
    dual = Boolean(decStr.length -i -1);
    bits =
     ((decStr.charCodeAt(i++) & 0xff) <<16) |
     (dual ? (decStr.charCodeAt(i) & 0xff) <<8 : 0);
    encOut +=
      base64s.charAt((bits & 0x00fc0000) >>18) +
      base64s.charAt((bits & 0x0003f000) >>12) +
      (dual ? base64s.charAt((bits & 0x00000fc0) >>6) : '=') +
      '=';
    }
  return encOut
}

function base64decode(encStr) {
  var bits, decOut = '', i = 0;
  for(; i<encStr.length; i += 4){
    bits = (base64s.indexOf(encStr.charAt(i))    & 0xff) <<18; 
    bits |= (base64s.indexOf(encStr.charAt(i +1)) & 0xff) <<12; 
    bits |= (base64s.indexOf(encStr.charAt(i +2)) & 0xff) << 6;
    bits |= (base64s.indexOf(encStr.charAt(i +3)) & 0xff);

    decOut += String.fromCharCode(
     (bits & 0xff0000) >>16, (bits & 0xff00) >>8, bits & 0xff);
    }
  if(encStr.charCodeAt(i -2) == 61)
    return decOut.substring(0, decOut.length -2);
  else if(encStr.charCodeAt(i -1) == 61)
    return decOut.substring(0, decOut.length -1);
  else return decOut;
}

// Quick and dirty UTF8 decoder
//(only handles BMP, skips characters it can't decode)
function decodeToUTF8(encStr) {
  var byte1, byte2, byte3, code, decOut = '', i = 0;
  while(i<encStr.length){
    byte1= encStr.charCodeAt(i++) & 0xff;
    
    if (byte1 < 128) {
      // One byte encoding
      decOut+= String.fromCharCode(byte1);
    }
    else if (byte1 >= 192 && byte1 < 224) {
      // Two byte encoding
      byte2= encStr.charCodeAt(i++) & 0xff;
      decOut+= String.fromCharCode(((byte1 & 0x1f) << 6) + (byte2 & 0x3f));
    }
    else if (byte1 >= 224 && byte1 < 240) {
      // Three byte encoding
      byte2= encStr.charCodeAt(i++) & 0xff;
      byte3= encStr.charCodeAt(i++) & 0xff;
      decOut+= String.fromCharCode(((byte1 & 0x0f) << 12) + ((byte2 & 0x3f) << 6) + (byte3 & 0x3f));
    }    
  }
  return decOut;
}

function do_onCapabilityMenu(item,r,c)
{
    var new_name;
    var a=document.MyGrid;

//    alert("item = "+item+"\n"+"r= "+r+"\n"+"c= "+c);

    if (a != null) {
        document.forms[0].capabilityTreeState.value = a.getAllExpandedItems(",");

        document.forms[0].id.value = a.getSelectedItemIds(",");
        if ((document.forms[0].id.value == null) || (document.forms[0].id.value.length < 1)) {
            document.forms[0].id.value = r;
        }
    }
    else
        document.forms[0].id.value = "";

    if (item == "Rename..." || item == "Save As...") {
        var text = decodeToUTF8(base64decode(r));
//        alert("text = " + text);
        var typeToEnd_Array = text.split("[^]");
        var objNameToEnd_Array = typeToEnd_Array[1].split("[~]");
        var objName = objNameToEnd_Array[0];

//        alert(" objName = " + objName);

        if (item == "Rename...") {
            document.forms[0].newName.value = prompt(objName + ": " + renameCapabilityMsg, objName);
        } else if (item == "Save As...") {
            document.forms[0].newName.value = prompt(objName + ": " + saveasCapabilityMsg, objName);
        }

        if (document.forms[0].newName.value == objName) {
            alert("Name '" + objName + "' not changed.");
        } else if (document.forms[0].newName.value != "null") {
            // Ok was hit and the name was changed to something
            // different than the current name, so submit
            document.forms[0].command.value = item;
            document.forms[0].submit();
        } else {
            // do nothing as this indicates that the Cancel button
            // was clicked
        }
    } else {
        document.forms[0].command.value = item;
        document.forms[0].submit();
    }
}

function do_onResourceMenu(item,r,c)
{
    var a=document.MyGrid;

//    alert("item = "+item+"\n"+"r= "+r+"\n"+"c= "+c);

    if (a != null) {
        document.forms[0].resourceTreeState.value = a.getAllExpandedItems(",");

        document.forms[0].id.value = a.getSelectedItemIds(",");
        if ((document.forms[0].id.value == null) || (document.forms[0].id.value.length < 1)) {
            document.forms[0].id.value = r;
        }
    }
    else
        document.forms[0].id.value = "";

    if (item == "Rename..." || item == "Save As...") {
        var text = decodeToUTF8(base64decode(r));
//        alert("text = " + text);
        var objTypeToEnd_Array = text.split("[^]");
        var objType = objTypeToEnd_Array[0];
        if (objType == "Resource" || objType == "ResourceFolder") {
            var beforeResName = text.split("[$]");
            var resNameToEnd = beforeResName[1];
            var resNameToEnd_Array = resNameToEnd.split("[@]");
            var objName = resNameToEnd_Array[0];
        } else {
            var beforeObjName = text.split("[!]");
            var objNameToEnd = beforeObjName[1];
            var objNameToEnd_Array = objNameToEnd.split("[|]");
            var objName = objNameToEnd_Array[0];
        }

//        alert(" objType = " + objType + " objName = " + objName);

        if (item == "Rename..." && (objType == "Resource" || objType == "ResourceFolder")) {
            document.forms[0].newName.value = prompt(objName + ": " + renameResourceMsg, objName);
        } else if (item == "Rename..." && (objType == "ResourceObject" || objType == "ResourceObjectFolder")) {
            document.forms[0].newName.value = prompt(objName + ": " + renameResourceObjectMsg, objName);
        } else if (item == "Save As..." && (objType == "Resource" || objType == "ResourceFolder")) {
            document.forms[0].newName.value = prompt(objName + ": " + saveasResourceMsg, objName);
        } else if (item == "Save As..." && (objType == "ResourceObject" || objType == "ResourceObjectFolder")) {
            document.forms[0].newName.value = prompt(objName + ": " + saveasResourceObjectMsg, objName);
        }

        if (document.forms[0].newName.value == objName) {
            alert("Name '" + objName + "' not changed.");
        } else if (document.forms[0].newName.value != "null") {
            // Ok was hit and the name was changed to something
            // different than the current name, so submit
            document.forms[0].command.value = item;
            document.forms[0].submit();
        } else {
            // do nothing as this indicates that the Cancel button
            // was clicked
        }
    } else {
        document.forms[0].command.value = item;
        document.forms[0].submit();
    }
}

function do_onError(msg) {
    var s = document.URL;
    var errMessage = null;
    if (msg != null) {
        errMsg = "&error=" + msg;
    }

    s = s.substring(0,s.lastIndexOf("/"));
    s = s.substring(0,s.lastIndexOf("/") + 1);
    if (errMsg != null)
        location.replace(s + "login.jsp?nextPage=" + document.URL + errMsg);
    else
        location.replace(s + "login.jsp?nextPage=" + document.URL);
}

function do_onResourceError(msg) {
    var msg_array = msg.split("$");
    var action = msg_array[0];
    var msgtext = msg_array[1];

    if (action == "ALERT") {
        var alertmsg = "alert('" + msgtext + "');";
//        alert(alertmsg);
        setTimeout(alertmsg, 1000);
    } else if (action == "LOGOUT") {
        do_onError(msgtext);
    }
}

function do_actionOnError(action,msg) {
    if (action == "ALERT") {
        var alertmsg = "alert(\"" + msg + "\");";
        setTimeout(alertmsg, 1000);
    } else {
        do_onError(msg);
    }
}

function submitOnReturnKey(evt) {
    return submitOnReturnKey(evt, 'Login');
}

function submitOnReturnKey(evt, cmd) {
    var CR = 13; // Carriage Return
    var charCode;
    if (navigator.appName == "Netscape") charCode = evt.which
    else charCode = evt.keyCode;
    if (charCode == CR) {
        document.forms[0].command.value = cmd;
        document.forms[0].submit();
        return false;
    }
    return true;
}



// Utility code to write to a layer
function wsLayerWrite(layerName, txt) {
    txt += "\n";

    if (document.layers) {
        var lyr = document.layers[layerName].document;

        lyr.write(txt)
        lyr.close()
    } else if (document.all) {
        document.all[layerName].innerHTML = txt;
    } else if (document.getElementById) {
        var over = document.getElementById(layerName);
        range = document.createRange();
        range.setStartBefore(over);
        domfrag = range.createContextualFragment(txt);
        while (over.hasChildNodes()) {
                over.removeChild(over.lastChild);
        }
        over.appendChild(domfrag);
    }
}

function SetChecked(form, regexpString, trueForOn) {
    var regExp = new RegExp(regexpString);
    for ( var i = 0; i < form.elements.length; i++ ) {
        var e = form.elements[i];
        if ( e.type == 'checkbox' ) {
            if (regExp.test(e.name)) {
                e.checked = trueForOn;
            }
        }
    }
}

