// Copyright (C) 1999-2008 InetSoft Technology Corp
winIdx = 1;
winCount = 1;

if(!self.name || self.name == '') {
   self.name = "window" + winCount++;
}

function escape2(str) {
   str = escape(str);
   str = str.replace(/[+]/g, '%2B');
   return str;
}

function getTargetName(target, opNotStartWithFrame) {
   if(target == 'null' || target == "") {
      var w = self;
      target = w.name;

      while(target == "reportiframe" && w.parent != undefined &&
            w.parent.name != "" && !opNotStartWithFrame)
      {
         w = w.parent;

         // @by tonyy, fix bug1184132973671 and bug1185612786718
         if(w.name == null || w.name == "" || w.name == "_blank" ||
            w.name == "_parent" || w.name == "_search" || w.name == "_top")
         {
            break;
         }

         target = w.name;
      }
   }

   return target;
}

function showReplet0(servlet, name, uID, target) {
   var isViewsheet = ((window.location.href.indexOf("op=flashMovie") >= 0) ||
      (window.location.href.indexOf("op=Resource&name=web%2fflash.html") >= 0));
   var userID = (uID == null) ? "" : uID ;
   target = getTargetName(target);
   var serv = servlet.indexOf('previousID') < 0 ? servlet :
      servlet.substring(0, servlet.indexOf('previousID'));
   var lastChar = serv.charAt(serv.length - 1);
   serv += serv.indexOf("?") > 0 ?
      (lastChar == "&" || lastChar == "?" ? "" : "&") : "?";

   var servParamsStr = servlet.indexOf('previousID') > 0 ?
      servlet.substring(servlet.indexOf('previousID')) : null;
   var previousID;
   var previousMode;
   var previousPn;

   if(servParamsStr != null) {
      var servParams = servParamsStr.split('&');
      previousID = servParams[0].substring(servParams[0].indexOf('=') + 1);
      previousMode = servParams[1].substring(servParams[1].indexOf('=') + 1);
      previousPn = servParams[2].substring(servParams[2].indexOf('=') + 1);
   }

   var url = serv + (!isViewsheet && !window.inDashboard ?
      "previousID=" + previousID + "&" : "") +
      "op=FrameReplet" + userID + "&name=" + name;

   var selfWindow = target == window.parent.name || target == window.name ||
      target == '_self' || target == '_parent' || target == '_top';

   if(selfWindow == true) {
      selfWindow = !window.inDashboard;
   }

   if(selfWindow) {
      var thisURL = !isViewsheet ? serv +
         "op=Page" + userID + "&ID=" + byteEncode(previousID) +
         "&pn=" + previousPn + "&mode=" + previousMode :
         window.location.href;

      if(thisURL.indexOf("op[3d]Resource[26]name[3d]web%2fflash.html") < 0) {
         var previousURL = byteEncode2(thisURL);
         url += "&isHyperlink=true&previousURL=" + previousURL;
      }
   }

   return window.open(url, target);
}

function showReport(servlet, name, uID, target, version, viewsheet) {
   var isViewsheet = viewsheet == 'true';
   target = getTargetName(target, servlet.indexOf("resetdashboard") != -1);
   var userID = (uID == null) ? "" : uID ;
   var serv = servlet.indexOf('previousID') < 0 ? servlet :
      servlet.substring(0, servlet.indexOf('previousID'));
   var lastChar = serv.charAt(serv.length - 1);
   serv += serv.indexOf("?") > 0 ?
      (lastChar == "&" || lastChar == "?" ? "" : "&") : "?";

   var servParamsStr = servlet.indexOf('previousID') > 0 ?
      servlet.substring(servlet.indexOf('previousID')) : null;
   var previousID;
   var previousMode;
   var previousPn;

   if(servParamsStr != null) {
      var servParams = servParamsStr.split('&');
      previousID = servParams[0].substring(servParams[0].indexOf('=') + 1);
      previousMode = servParams[1].substring(servParams[1].indexOf('=') + 1);
      previousPn = servParams[2].substring(servParams[2].indexOf('=') + 1);
   }

   var url = serv + (!isViewsheet && !window.inDashboard ?
      "previousID=" + previousID + "&" : "") +
      "op=frameReport" + userID + "&name=" + name + "&target=" + target;

   if(version != null) {
      url += "&version=" + version;
   }

   var selfWindow = target == window.parent.name || target == window.name ||
      target == '_self' || target == '_parent' || target == '_top';

   if(selfWindow == true) {
      selfWindow = !window.inDashboard;
   }

   if(selfWindow) {
      var thisURL = !isViewsheet ? serv +
         "op=Page" + userID + "&ID=" + previousID +
         "&pn=" + previousPn + "&mode=" + previousMode :
         window.location.href;

      if(thisURL.indexOf("op[3d]Resource[26]name[3d]web%2fflash.html") < 0) {
         var previousURL = byteEncode2(thisURL);
         url += "&isHyperlink=true&previousURL=" + previousURL;
      }
   }

   return window.open(url, target);
}

function showDrillURL(servlet, name, reqname, params, target, linkType,
                      viewsheet)
{
   var str = "";

   for(var i = 0; i < params.length; i+=2) {
      var key = params[i];
      var val = params[i + 1];
      var pname = URLDecode(key);

      if(pname.indexOf("sub_query_param^_^") >= 0 || pname == "req" ||
         pname == "name")
      {
         continue;
      }

      str += "&" + key + "=" + val;
   }

   if(str.indexOf("&") == 0) {
      str = str.substring(1);
   }

   if(linkType == 1) {
      var url = name + (name.indexOf("?") >= 0 ? "&" : "?");
      url = url + str;
      showURL(url, target);
      return;
   }
   else {
      if(linkType == 8) {
         showViewsheet(servlet, name, "", params, "", target);
         return;
      }

      if(servlet.indexOf("https" >= 0) && _root.is_ie7) {
         window.setTimeout(function() {
            showReplet(servlet, byteEncode(name), reqname, params, "",
                       target, "", viewsheet);
            }, 1);
      }
      else {
         showReplet(servlet, byteEncode(name), reqname, params, "",
                    target, "", viewsheet);
      }
   }
}

function fillParameters(params, model, row, linkType) {
   var fixedParams = new Array();

   for(var i = 0; i < params.length; i += 2) {
      var pname = URLDecode(params[i]);
      var idx = pname.indexOf("Param_");

      if(linkType == 1 && idx < 0) {
         fixedParams.push(params[i], params[i + 1]);
         continue;
      }

      pname = pname.substring("Param_".length);
      var field = params[i + 1];
      var cidx = getColumnIndex(model, field);

      if(cidx < 0) {
         fixedParams.push(params[i], params[i + 1]);
         continue;
      }

      fixedParams.push(pname, model.getData(row, cidx));
   }

   return fixedParams;
}

function getColumnIndex(model, field) {
   for(var i = 0; i < model.getColCount(); i++) {
      var header = model.getData(0, i);

      if(header == field) {
         return i;
      }
   }

   return -1;
}

/**
 * Show drill link parameters.
 */
function showDrill(servlet, name, query, reqname, params, target, linkType,
                   viewsheet)
{
   // request server for parameters via executing sub-query
   var op = "drill";

   for(var i = 0; i < params.length; i += 2) {
      var pname = URLDecode(params[i]);
      
      if(pname == 'req' || pname == 'name') {
         continue;
      }

      if(pname.indexOf("sub_query_param^_^") < 0 &&
         pname.indexOf("Param_") < 0 && pname != "sub_query_param") {
         continue;
      }

      op += "&" + params[i] + "=" + params[i + 1];
   }

   op += "&query=" + query;

   if(name != null && name != "") {
      var isViewsheet = viewsheet == 'true';
      op += "&assetName=" + (isViewsheet ? "Viewsheet: " : "Replet: ") + name;
   }

   var ajax = new isii_AJAX(null, op, null, servlet, true);
   ajax.addFinishListener(function(msg) {
      var ajax = msg.ajax;

      if(ajax.getError() != null) {
         alert(ajax.getError());
      }

      if(!msg.element) {
         return;
      }

      var rows = msg.element.getElementsByTagName("row");

      if(!rows || rows.length == 0) {
         showDrillURL(servlet, name, reqname, params, target,
                      linkType, viewsheet);
      }

      var model = new isii_JSGridModel();

      for(var i = 0; i < rows.length; i++) {
         var row = rows[i];
         var cells = row.getElementsByTagName("cell");

         for(var j = 0; j < cells.length; j++) {
            var cell = cells[j];
            var value = null;

            if(cell.firstChild) {
               value = byteDecode(cell.firstChild.nodeValue);
            }

            model.setData(i, j, value);
         }
      }

      if(model.getRowCount() <= 2) {
         var fparams = fillParameters(params, model, 1, linkType);
         showDrillURL(servlet, name, reqname, fparams, target,
                      linkType, viewsheet);
      }
      else {
         var flashdiv = Element.get("flashdiv");

         if(flashdiv == null) {
            flashdiv = Element.get("objdiv");
         }

         var owidth;

         if(flashdiv) {
            owidth = flashdiv.style.width;
            flashdiv.style.width = "1px";

            if(!_root.is_mac && !_root.is_ie) {
               flashdiv.style.visibility = "hidden";
            }
         }

         var title = "Please select a row";
         var url = "/app?op=drill_dialog";

         var dialog = new isii_JSIFrameDialog(self, title, null,
            getRoot(self), url, function(dlg) {
              dlg.setSize(600, 450);
              dlg.show(true);
            }
         );

         dialog.addFinishListener(function(msg) {
            var row = msg.row;
            var fparams = fillParameters(params, model, row, linkType);

            if(!flashdiv) {
               dialog.close();
            }

            showDrillURL(servlet, name, reqname, fparams, target,
                         linkType, viewsheet);
         });

         dialog.addCloseListener(function(msg) {
            if(flashdiv) {
               flashdiv.style.width = owidth;

               if(!_root.is_mac && !_root.is_ie) {
                  flashdiv.style.visibility = "visible";
               }
            }
         });
      }
   });

   ajax.send();
}

function showReplet(servlet, name, reqname, params, uID, target, drillfrom,
                    viewsheet)
{
   // mark link
   try {
      if(parent) {
         parent.linktime = new Date().getTime();
      }
   }
   catch(ex) {
      // ignore it.
   }

   var isViewsheet = viewsheet == 'true';

   try {
      closeExplorer("995B428F707A964B8BE09EE39398A208", "25%");
   }
   catch(e) {
   }

   target = getTargetName(target, servlet.indexOf("resetdashboard") != -1);

   var userID = (uID == null) ? "" : uID ;
   //var serv = resourceURI ? resourceURI : servlet;
   // fix bug1166688910562. ShowReplet in dashboard works fine, only when
   // "Create New Window when Drilldown" is checked in EM.

   var serv = servlet.indexOf('previousID') < 0 ? servlet :
      servlet.substring(0, servlet.indexOf('previousID'));
   var lastChar = serv.charAt(serv.length - 1);
   serv += serv.indexOf("?") > 0 ?
      (lastChar == "&" || lastChar == "?" ? "" : "&") : "?";

   var servParamsStr = servlet.indexOf('previousID') > 0 ?
      servlet.substring(servlet.indexOf('previousID')) : null;
   var previousID;
   var previousMode;
   var previousPn;

   if(servParamsStr != null) {
      var servParams = servParamsStr.split('&');
      previousID = servParams[0].substring(servParams[0].indexOf('=') + 1);
      previousMode = servParams[1].substring(servParams[1].indexOf('=') + 1);
      previousPn = servParams[2].substring(servParams[2].indexOf('=') + 1);
   }

   var url = serv + (!isViewsheet && !window.inDashboard ?
      "previousID=" + previousID + "&" : "") +
      "op=FrameReplet" + userID + "&name=" + name + "&req=" + reqname;

   if(drillfrom) {
      url += "&drillfrom=" + drillfrom;
   }

   var selfWindow = target == window.parent.name || target == window.name ||
      target == '_self' || target == '_parent' || target == '_top';

   if(selfWindow == true) {
      selfWindow = !window.inDashboard;
   }

   if(selfWindow) {
      var thisURL = !isViewsheet ? serv +
         "op=Page" + userID + "&ID=" + previousID +
         "&pn=" + previousPn + "&mode=" + previousMode :
         window.location.href;

      if(thisURL.indexOf("op[3d]Resource[26]name[3d]web%2fflash.html") < 0) {
         var previousURL = byteEncode2(thisURL);
         url += "&isHyperlink=true&previousURL=" + previousURL;
      }
   }

   // @by justinx, for safari, if the open window document is in a iframe and it
   // write the content, the safari will collapse
   var doc;

   if(selfWindow) {
      if(target == window.parent.name || target == '_parent') {
         doc = window.parent.document;
      }
      else if (target == window.name || target == '_self') {
         doc = window.document;
      }
      else {
         doc = window.top.document;
      }
   }
   else {
      var win = window.open("", target);
      doc = win.document;
   }

   var context = "<html>";
   context += "<head></head><body>";

   context += "<script language='javascript'>";
   context += "function submitit() {";
   context += "  form1.submit();";
   context += "}";
   context += "</script>";

   //context += "<body onload='submitit();'>";
   // in some circumstance, the onload event won't trigger in IE, just trigger
   // the submitit() function after the document has written

   context += "<form action='" + url + "' name='form1' method='post'>";

   if(params) {
      for(var i = 0; i < params.length; i += 2) {
         if(params[i] == 'req' || params[i] == 'name' || params[i] == 'submit' 
            || params[i + 1] == null)
         {
            continue;
         }

         var pname = params[i];
         var idx = pname.lastIndexOf("[");

         if(idx >= 0) {
            pname = pname.substring(0, idx);
         }

         if((typeof params[i + 1]) == 'object') {
            for(var j = 0; j < params[i + 1].length; j++) {
               context += "<input type=hidden name='" + URLDecode(pname) + "' " +
                  "value='" + params[i + 1][j] + "'/>";
            }
         }
         else {
            context += "<input type=hidden name='" + URLDecode(pname) + "' " +
               "value='" + params[i + 1] + "'/>";
         }
      }
   }

   context += "</form>";

   context += "<script language='javascript'>";
   context += "var timer = setInterval(function() {";
   context += "   try {";
   context += "      submitit();";
   context += "      clearInterval(timer);";
   context += "   }";
   context += "   catch(ex) {;";
   context += "   };}, 1000)";
   context += "</script></body></html>";

   doc.writeln(context);
   doc.close();
}

function URLDecode(val) {
  return val == null ? null : unescape(val.replace('+', ' '));
}

function showViewsheet(servlet, assetId, label, params, uID, target, drillfrom){
   try {
      closeExplorer("995B428F707A964B8BE09EE39398A208", "25%");
   }
   catch(e) {
   }

   target = getTargetName(target, servlet.indexOf("resetdashboard") != -1);

   var userID = (uID == null) ? "" : uID ;
   var serv = servlet;
   var singleMode = window.location.href.indexOf("SingleMode=true") != -1;
   var url = serv + (serv.indexOf("?") >= 0 ? "&" : "?") +
      "op=flashMovie&name=/inetsoft/fl/gui/vs/ExploreView_blue.swf" +
      "&identifier=" + assetId + "&theme=blue&fontFamily=Arial" +
      "&EAEnabled=" + "&title=" + byteEncode2(label);

   if(drillfrom) {
      url += "&drillfrom=" + drillfrom;
   }

	if(singleMode) {
		url += "&SingleMode=true";
	}

   var win = window.open("", target);
   var doc = win.document;

   var context = "<html>"
   context += "<head></head>";

   context += "<script language='javascript'>";
   context += "function submitit() {";
   context += "   form1.submit();";
   context += "}";
   context += "</script>";

   context += "<body>";
   context += "<form action='" + url + "' name='form1' method='post'>";

   if(params) {
      for(var i = 0; i < params.length; i += 2) {
         if(params[i] == 'req' || params[i] == 'name' || params[i] == 'submit') {
            continue;
         }

         var pname = params[i];
         var idx = pname.lastIndexOf("[");

         if(idx >= 0) {
            pname = pname.substring(0, idx);
         }

         context += "<input type=hidden name='VSPARAM_" + URLDecode(pname) +
            "' " + "value='" + params[i + 1] + "'/>";
      }
   }

   context += "</form>";

   context += "</body><script language='javascript'>";
   context += "var timer = setInterval(function() {";
   context += "   try {";
   context += "      submitit();";
   context += "      clearInterval(timer);";
   context += "   }";
   context += "   catch(ex) {;";
   context += "   };}, 1000)";
   context += "</script></html>";

   doc.writeln(context);
   doc.close();
}

function showURL(url, target) {
   target = getTargetName(target, true);

   if(url.toLowerCase().search(/http:/) < 0 &&
      url.toLowerCase().search(/https:/) < 0 && url.search(/\./) > 0 &&
      url.search(/\//) != 0 && url.toLowerCase().search(/mailto:/) < 0)
   {
      url = "http://" + url;
   }

   return window.open(url, target);
}

function exportPDF(id, mode, isPopUp, isIE) {
   var aserver = repositoryServlet + getConcat(repositoryServlet);
   var url = aserver + "op=Export&format=PDF&ID=" + id + "&mode=" + mode;

   if(isIE) {
      if(isPopUp) {
         window.open(url, "_blank");
      }
      else {
         window.location.replace(url);
      }
   }
   else {
      window.open(url, "_blank");
   }
}

function exportReport(id, page, pageCnt, cssUrl) {
   var url = resourceURI + (resourceURI.indexOf("?") >= 0 ? "&" : "?") +
      "op=export_template&page=" + page + "&pageCnt=" + pageCnt +
      "&windowName=" + window.name +"&reportID=" + escape(id);
   showPopWin(url, "Export Report", true, 420, 265);
}

function fixURL(url) {
   url = url.indexOf("?") != -1 ? url : url + "?";
   url = url.indexOf("=") == -1 ? url : url + "&";

   return url;
}

function showParameterSheets(id, uID, uri) {
   var userID = (uID==null) ? "" : uID ;
   var target = getTargetName("");
   var target2 = getTargetName("", true);
   url = resourceURI + "?op=frameReplet" + userID + "&name=" +
      id + "&resetReplet=true&target=" + escape(target);
   // @by tonyy, fix bug1166603206296
   var url2 = fixURL(uri) + "op=Replet" + userID + "&name=" +
      id + "&resetReplet=true&target=" + escape(target2);

   if(!closeExplorer("995B428F707A964B8BE09EE39398A208", "25%", url)) {
      self.location.href = url2;
   }
}

function showParameters(id, req, uID, size, pn, mode, uri) {
   var userID = (uID==null) ? "" : uID ;
   var target = getTargetName("", true);

   url = uri + (uri.indexOf("?") >= 0 ? "&" : "?") +
      "op=Request" + userID + "&ID=" + id +
      "&req=" + req + "&target=" + escape(target);

   if(pn != null) {
      url += "&pn=" + pn;
   }

   if(mode != null) {
      url += "&mode=" + mode;
   }

   self.location.href = url;
}

function promptParameters(servlet, id, req, uID, size, pn, mode) {
   var userID = (uID==null) ? "" : uID ;
   var target = getTargetName("", true);

   url = servlet + (servlet.indexOf("?") >= 0 ? "&" : "?") +
      "op=Request" + userID + "&ID=" + id +
      "&req=" + req + "&target=" + escape(target);

   if(pn != null) {
      url += "&pn=" + pn;
   }

   if(mode != null) {
      url += "&mode=" + mode;
   }

   if(size == null || size == "null") {
      size = "700x500";
   }

   var str = escape(size);
   var idx = str.indexOf("x");
   req = req.replace(/ /g, '_');
   req = req.replace(/\./g, '_');

   tar = self.name + '_req' + req;
   // @by mikec, some browser does no support long target name.
   tar = (tar.length > 20) ? tar.substring(0, 20) : tar;

   if(servlet == resourceURI) {
      showPopWin(url, tar,
         true, str.substring(0, idx), str.substring(idx + 1));
   }
   else {
      self.location.href = url;
   }
}

function sendRequest(servlet, id, reqname, params,uID) {
   var target = getTargetName("", true);
   var userID = (uID==null) ? "" : uID ;
   var url = servlet + (servlet.indexOf("?") >= 0 ? "&" : "?") +
      "op=Generate"+userID+"&ID=" + escape(id) + "&req=" +
      reqname + "&pn=" + pn;

   var win = window.open("", target);
   var doc = win.document;
   doc.open("text/html");
   doc.writeln("<html>");
   doc.writeln("<head></head>");
   doc.writeln("<body>");
   doc.writeln("<form action='" + url + "' name='form1' method='post'>");

   if(params) {
      for(var i = 0; i < params.length; i += 2) {
	 doc.writeln("<input type=hidden name='" + params[i] + "' " +
                     "value='" + params[i + 1] + "'/>");
      }
   }

   doc.writeln("</form>");
   doc.writeln("<script language='javascript'>");
   // @by deshx fixed bug1208927843703
   doc.writeln("setTimeout(\"form1.submit()\", 10)");
   doc.writeln("</script>");
   doc.writeln("</body></html>");
   doc.close();
}

function showToc(id, uID, mode) {
   var target = self.name;
   var userID = (uID==null) ? "" : uID ;
   var md = (mode==null) ? 0 : mode ;
   var url = resourceURI + (resourceURI.indexOf("?") >= 0 ? "&" : "?") +
      "op=Toc" + userID + "&ID=" + id + "&mode=" + md +
      "&target=" + escape(target) + "&linkURI=" + escape(servlet);

   var x = _root.is_ie ? 0 : 100;
   var y = _root.is_ie ? self.screenTop : 50;
   var h = 280;

   if(parent.getDialog) {
      parent.getDialog(url , "TOC", true, 300, h);
   }
   else {
      window.open(url , "TOC", true, 300, h);
   }
}

function refresh(id, pn, uID) {
   var userID = (uID==null) ? "" : uID ;
   var url = servlet + (servlet.indexOf("?") >= 0 ? "&" : "?") +
      "op=Refresh"+userID+"&ID=" + escape(id) + "&pn=" + pn;
   self.location = url;
}

function reprint(id, pn, uID) {
   var userID = (uID==null) ? "" : uID ;
   var url = servlet + (servlet.indexOf("?") >= 0 ? "&" : "?") +
      "op=Page"+userID+"&ID=" + escape(id) + "&pn=" + pn;
   self.location = url;
}

function scroll(id, pn, y, uID) {
   var userID = (uID==null) ? "" : uID ;
   //self.location
   var url = servlet + (servlet.indexOf("?") >= 0 ? "&" : "?") +
      "op=Page"+userID+"&ID=" + (id) +
      "&pn=" + pn + "&scrollOffset=" + y;

   self.location = url;
}

function refreshTOC(id, uID) {
   var userID = (uID==null) ? "" : uID ;
   var url = servlet + (servlet.indexOf("?") >= 0 ? "&" : "?") +
      "op=Page" + userID + "&ID=" + (id) +
      "&pn=0" + "&mode=0";
   self.location = url;
}

function edit(name, type) {
   var url = resourceURI + (resourceURI.indexOf("?") >= 0 ? "&" : "?") +
      "op=edit&name=" + name + "&type=" + type;
   openWindow(url, "composerWindow", 750, 550, true,
      'fullscreen=true,center=yes,' +
      'toolbar=no,menubar=no,scrollbars=yes,status=yes,resizable=yes,' +
      'dependent');
}

function prefind(id, servlet, pn, mode, inc, uID, fromG, cssUrl, colNamesValue,
                 formName)
{
   var win = showPopWin("/app" + getConcat("/app") +
                        "op=Resource&name=web%2fssl_blank.html",
                        "Find", true, 640, 220, null, null,
                        function(dlg)
   {
      var win = dlg.getContentPane();
      findsr(id, servlet, pn, mode, inc, uID, fromG, byteEncode(cssUrl),
             colNamesValue, win, formName);
   });
}

function writeDefCss(doc) {
   var defcssurl1 = "/app" + getConcat("/app") +
      "op=Resource&name=theme%2Ecss&type=portal";
   var defcssurl2 = "/app" + getConcat("/app") +
      "op=Resource&name=theme%2Ecss&type=portal&style=true&theme=true";
   doc.writeln("<link rel='stylesheet'  href='" + defcssurl1 + "' type='text/css'>");
   doc.writeln("<link rel='stylesheet'  href='" + defcssurl2 + "' type='text/css'>");
}

function mailToNoFrame(id, servlet, cssUrl, fromAddress, addresses) {
   var win = openWindow("", 'mailWindow', 420, 350, true,
      'toolbar=no,menubar=no,scrollbars=yes,resizable=yes');

   var doc = win.document;
   writeMailTo(doc, id, servlet, cssUrl, fromAddress, addresses,
               "window.close();");
}

function mailTo(id, servlet, cssUrl, fromAddress, addresses, toAdd, ccAdd,
                bccAdd, subject, msg, mailzip, isEmServlet) {
   var win = showPopWin("/app" + getConcat("/app") +
                        "op=Resource&name=web%2fssl_blank.html",
                        "Mail", true, 390, 370, null, null,
                        function(dlg)
   {
      var win = dlg.getContentPane();

      if(win.document){
         var doc = win.document;
         writeMailTo(doc, id, servlet, cssUrl, fromAddress, addresses,
                     "window.frameElement._dialog.close();", toAdd, ccAdd,
                     bccAdd, subject, msg, mailzip, isEmServlet);
      }
      else{
         Element.addEventListener(win, "load", function(e) {
            var doc = win.contentDocument;
            writeMailTo(doc, id, servlet, cssUrl, fromAddress, addresses,
                     "window.frameElement._dialog.close();", toAdd, ccAdd,
                     bccAdd, subject, msg, mailzip, isEmServlet);
         });
      }
   });
}

// by tonyy, fix bug1161835456718, display quotation in text/textbox.
function convertQuotation(str) {
   str = byteDecode(str);

   while(str.indexOf("\"") != -1) {
      str = str.replace("\"", "&quot;");
   }

   while(str.indexOf("'") != -1) {
      str = str.replace("'", "&apos;");
   }

   return str;
}

function importJs(url, doc) {
   var config = new Object();
   config.isText = true;
   var bajax = new isii_AJAX(null, null, null, url, false, config);
   bajax.addFinishListener(function(msg) {
      var ajax = msg.ajax;

      if(ajax.getError() != null) {
         alert(ajax.getError());
         return;
      }

      var content = msg.text;
      content = content.replaceAll("<script", "<scr\" + \"ipt");
      content = content.replaceAll("</script>", "</scr\" + \"ipt>");
      doc.writeln("<script language='javascript'>");
      doc.writeln(content);
      doc.writeln("</script>");
   });
   bajax.send();
}

function writeMailTo(doc, id, servlet, cssUrl, fromAddress, addresses,
   closeScript, toAdd, ccAdd, bccAdd, subject, msg, mailzip, isEmServlet)
{
   var url = resourceURI;
   doc.open("text/html");

   doc.writeln("<html>");
   doc.writeln("<head>");
   doc.writeln("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />");
   doc.writeln("<title>Mail Report</title>");
   writeDefCss(doc);
   doc.writeln("<link rel='stylesheet'  href='"+ cssUrl + "' type='text/css'>");
   // when use doc.writeln() write "<script>...</script>" into web page,
   // the browser may halt, so here we read all js strings from server,
   // then write these strings to page to avoid this problem

   var aserver = repositoryServlet + getConcat(repositoryServlet);
   importJs(aserver + "op=resource&name=%2Finetsoft%2Fsree%2Finternal%2Fmarkup%2Futil%2Ejs", doc);
   importJs(aserver + "op=resource&name=%2Finetsoft%2Fsree%2Finternal%2Fmarkup%2FencodeUtil%2Ejs", doc);
   importJs(aserver + "op=resource&name=%2Finetsoft%2Fsree%2Finternal%2Fmarkup%2FautoComplete%2Ejs", doc);

   doc.writeln("<style type=\"text/css\">");
   doc.writeln("   .unselected {");
   doc.writeln("      color:#000;");
   doc.writeln("   }");
   doc.writeln("   .selected {");
   doc.writeln("      background: #1B2EB8;");
   doc.writeln("      color: #fff;");
   doc.writeln("   }");
   doc.writeln("</style>");
   doc.writeln("<script>");
   doc.writeln("var aserver=\"" + aserver + "\";");
   doc.writeln("var mailToAutoC = new AutoComplete(\"mailToAutoC\", \"mail_to\", \"anonymous_report_mailto_list\");");
   doc.writeln("var ccAutoC = new AutoComplete(\"ccAutoC\", \"mail_cc\", \"anonymous_report_mailto_list\");");
   doc.writeln("var bccAutoC = new AutoComplete(\"bccAutoC\", \"mail_bcc\", \"anonymous_report_mailto_list\");");
   doc.writeln("var fromAutoC = new AutoComplete(\"fromAutoC\", \"from\", \"anonymous_report_from_list\");");
   doc.writeln("function isReady() {");
   doc.writeln("   return pageReady;");
   doc.writeln("}");
   doc.writeln("function pageInit() {");
   doc.writeln("   pageReady = true;");
   doc.writeln("   mailToAutoC.setSwfObject(thisMovie(\"ExternalInterfaceForJS\"));");
   doc.writeln("   ccAutoC.setSwfObject(thisMovie(\"ExternalInterfaceForJS\"));");
   doc.writeln("   bccAutoC.setSwfObject(thisMovie(\"ExternalInterfaceForJS\"));");
   doc.writeln("   fromAutoC.setSwfObject(thisMovie(\"ExternalInterfaceForJS\"));");
   doc.writeln("}");
   doc.writeln("function thisMovie(movieName) {");
   doc.writeln("   if(navigator.appName.indexOf(\"Microsoft\") != -1) {");
   doc.writeln("      return window[movieName];");
   doc.writeln("   }");
   doc.writeln("   else {");
   doc.writeln("      return document[movieName];");
   doc.writeln("   }");
   doc.writeln("}");
   doc.writeln("function byteEncode(str, isEncodeAll) {");
   doc.writeln("if((str == null) || (str == '')) {");
   doc.writeln("return '';");
   doc.writeln("}");
   doc.writeln("if(isEncodeAll == null) {");
   doc.writeln("isEncodeAll = false;");
   doc.writeln("}");
   doc.writeln("var ret = '';");
   doc.writeln("for(var i=0; i < str.length; i++) {");
   doc.writeln("var ch = str.charAt(i);");
   doc.writeln("var code = str.charCodeAt(i);");
   doc.writeln("if(code < 128 && ch != '[' && !isEncodeAll && code != '' &&");
   doc.writeln("   ch != '/' && ch != '\\'' && ch != '=' && ch != '#' &&");
   doc.writeln("   ch != '+' && ch != ' ' && ch != '&') {");
   doc.writeln("ret += ch;");
   doc.writeln("}");
   doc.writeln("else {");
   doc.writeln("ret += \"[\" + code.toString(16) + \"]\";");
   doc.writeln("}");
   doc.writeln("}");
   doc.writeln("return ret;");
   doc.writeln("}");
   doc.writeln("function sendMail() {");
   doc.writeln("   if(verify()) {");
   doc.writeln("      mailToAutoC.saveAutoCompleteList();");
   doc.writeln("      ccAutoC.saveAutoCompleteList();");
   doc.writeln("      bccAutoC.saveAutoCompleteList();");
   doc.writeln("      fromAutoC.saveAutoCompleteList();");
   doc.writeln("      document.form1.subject.value=byteEncode(" +
                         "document.form1.subject0.value);");
   doc.writeln("      document.form1.msg.value=byteEncode(" +
                         "document.form1.msg_a.value);");
   doc.writeln("      document.form1.submit();");
   doc.writeln("   }");
   doc.writeln("   try {");
   doc.writeln("      var parentWin = window.frameElement._dialog.owner;");
   doc.writeln("      parentWin.toAdd = document.form1.email.value;");
   doc.writeln("      parentWin.ccAdd = document.form1.cc.value;");
   doc.writeln("      parentWin.bccAdd = document.form1.bcc.value;");
   doc.writeln("      parentWin.fromAdd = document.form1.from.value;");
   doc.writeln("      parentWin.subject = document.form1.subject0.value;");
   doc.writeln("      parentWin.msg = document.form1.msg_a.value;");
   doc.writeln("   }");
   doc.writeln("   catch(ex) {");
   doc.writeln("   }");
   doc.writeln("}");
   doc.writeln("function verify() {");
   doc.writeln("var cc = document.form1.cc.value;");
   doc.writeln("var bcc = document.form1.bcc.value;");
   doc.writeln("var email = document.form1.email.value;");
   doc.writeln("if((cc == null || isBlank(cc)) &&");
   doc.writeln("	(bcc == null || isBlank(bcc)) &&");
   doc.writeln("	(email == null || isBlank(email))) {");
   doc.writeln("   alert('You must specify some recipients for the message.');");
   doc.writeln("	return false;");
   doc.writeln("}");
   doc.writeln("if(email != null && !isBlank(email) && !echeck(email)) {");
   doc.writeln("	return false;");
   doc.writeln("}");
   doc.writeln("if(cc != null && !isBlank(cc) && !echeck(cc)) {");
   doc.writeln("	return false;");
   doc.writeln("}");
   doc.writeln("if(bcc != null && !isBlank(bcc) && !echeck(bcc)) {");
   doc.writeln("	return false;");
   doc.writeln("}");
   doc.writeln("var from = document.form1.from.value;");
   doc.writeln("if(from == null || isBlank(from)) {");
   doc.writeln("   alert('You must specify the sender for the message.');");
   doc.writeln("	return false;");
   doc.writeln("}");
   doc.writeln("if(from != null && !isBlank(from) && !echeck(from)) {");
   doc.writeln("	return false;");
   doc.writeln("}");
   doc.writeln("return true;");
   doc.writeln("}");
   doc.writeln("function echeck(str) {");
   doc.writeln("var at=\"@\";");
   doc.writeln("var dot=\".\";");
   doc.writeln("if (str.indexOf(at)==-1 || str.indexOf(at)==0 || " +
               "str.indexOf(at)==str.length){");
   doc.writeln("    alert('Invalid email address found.(' + str + ')');");
   doc.writeln("   return false;");
   doc.writeln("}");
   doc.writeln("if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || " +
               "str.indexOf(dot)==str.length){");
   doc.writeln("    alert('Invalid email address found.(' + str + ')');");
   doc.writeln("    return false;");
   doc.writeln("}");
   doc.writeln("return true");
   doc.writeln("}");
   doc.writeln("function setCheckBoxEnable() {");
   doc.writeln("  if(document.form1.format.disabled || document.form1.format.value == 'HTML_BUNDLE' || document.form1.format.value == 'HTML_BUNDLE_NO_PAGINATION') {");
   doc.writeln("     document.form1.compress.disabled = true;");
   doc.writeln("  }");
   doc.writeln("  else {");
   doc.writeln("     document.form1.compress.disabled = false;");
   doc.writeln("  }");
   doc.writeln("}");
   doc.writeln("function isBlank(s) {");
   doc.writeln(" for(var i = 0; i < s.length; i++) {");
   doc.writeln("     var c = s.charAt(i);");
   doc.writeln("     if ((c != ' ') && (c != '\\n') && (c != '\\t')) " +
               "return false;");
   doc.writeln(" }");
   doc.writeln(" return true;");
   doc.writeln("}");

   doc.writeln("function testMail() {");
   doc.writeln("   var element = document.form1.email");
   doc.writeln("   if(!echeck(element.value)) {");
   doc.writeln("      return false;");
   doc.writeln("   }");
   doc.writeln("   var emails = byteEncode(element.value);");
   doc.writeln("   var ajax = new isii_AJAX(null, 'testMail', null, '" + url + "', true);");
   doc.writeln("   var container = new isii_XMLContainer();");
   doc.writeln("   container.clear();");
   doc.writeln("   container.put('toAddresses', emails);");
   doc.writeln("   ajax.addFinishListener(function(msg) {");
   doc.writeln("      var ajax = msg.ajax;");
   doc.writeln("      if(ajax.getError() != null) {");
   doc.writeln("         alert(ajax.getError());");
   doc.writeln("         return;");
   doc.writeln("      }");
   doc.writeln("   });");
   doc.writeln("  ajax.send(container.writeXML());");
   doc.writeln("}");
   doc.writeln("</script>");
   doc.writeln("</head>");
   doc.writeln("<body id=\"mail_body\" bgcolor=white  onload=\"pageInit();\">");
   doc.writeln("<OBJECT id=\"ExternalInterfaceForJS\" WIDTH=\"0\" HEIGHT=\"0\" ");
   doc.writeln(" classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" ");
   doc.writeln(" codebase=\"://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0\" > ");
   doc.writeln("   <PARAM NAME=movie VALUE=\"" + aserver + "op=resource&name=%2Finetsoft%2Fsree%2Finternal%2Fmarkup%2FExternalInterfaceForJS%2Eswf\"> ");
   doc.writeln("   <PARAM NAME=quality VALUE=high> ");
   doc.writeln("   <PARAM NAME=scale VALUE=noborder> ");
   doc.writeln("   <PARAM NAME=bgcolor VALUE=#000000> ");
   doc.writeln("   <PARAM NAME=allowScriptAccess VALUE=sameDomain> ");
   doc.writeln("   <EMBED NAME=\"ExternalInterfaceForJS\" allowScriptAccess=sameDomain ");
   doc.writeln("      src=\"" + aserver + "op=resource&name=%2Finetsoft%2Fsree%2Finternal%2Fmarkup%2FExternalInterfaceForJS%2Eswf\" ");
   doc.writeln("      quality=high WIDTH=\"0\" HEIGHT=\"0\" scale=noborder bgcolor=#000000 ");
   doc.writeln("      TYPE=\"application/x-shockwave-flash\" ");
   doc.writeln("      PLUGINSPAGE=\"http://www.macromedia.com/go/getflashplayer\"> ");
   doc.writeln("   </EMBED> ");
   doc.writeln("</OBJECT> ");
   doc.writeln("<form name='form1' action='" + url + "' method=POST>");
   doc.writeln("<input type=\"hidden\" name=\"ID\" value=\"" + id + "\"/>");
   doc.writeln("<input type=\"hidden\" name=\"subject\" value=\"\"/>");
   doc.writeln("<table id='mailTable' border=0 width='99%'>");
   doc.writeln("<tr><td align=right><label id=\"mail_toLabel\">" +
               "Mail To:</label></td>");

   var addressExist = addresses != '' && addressExist != '|';
   var span = addressExist && isEmServlet ? 1 :
      (!addressExist && !isEmServlet ? 3 : 2);

   doc.writeln("<td colspan=" + span + " width=\"100%\"><input class=\"textbox\" " +
               "id=\"mail_to\" type=text " + "onkeyup= \"mailToAutoC.onkeyup(event)\" " +
               "onblur=\"mailToAutoC.lostFocus()\" autocomplete=\"off\" " +
               "name=email style=\"width:100%\" value='" + toAdd + "'></td>");

   var param = "toolbar=no,scrollbars=yes,width=360,height=250,screenX=100," +
      "screenY=50,toolbar=no,menubar=no,scrollbars=yes,resizable=yes";

   if(addressExist) {
      doc.writeln("<td width='25px'>");
      doc.writeln("<input id=\"browseBtn\" class=\"button\" type=\"button\" value=\"...\" " +
                  "onClick=\"window.open('/app" + getConcat("/app")
                  + "op=mail_list&addresses=" + addresses +
                  "&name=email&action=load' , 'email_to' , '" +
                  param + "');\" style='width:25px'>");
      doc.writeln("</td>");
   }

   if(isEmServlet) {
      doc.writeln("<td align=left><input type=\"button\" id=\"testMailBtn\" value=\"Test Mail\" " +
         "onclick=\"testMail()\" title=\"Send a short test mail to the specified recipient(s)\"/></td>");
   }

   doc.writeln("</tr>");
   doc.writeln("<tr><td align=right><label id=\"mail_ccLabel\">" +
               "CC To:</label></td>");
   doc.writeln("<td colspan=" + (addressExist ? 2 : 3) + " width=\"100%\"><input class=\"textbox\" " +
               "id=\"mail_cc\" type=text " + "onkeyup= \"ccAutoC.onkeyup(event)\" " +
               "onblur=\"ccAutoC.lostFocus()\" autocomplete=\"off\" " +
               " name=cc style=\"width:100%\" value=" + ccAdd + " ></td>");

   if(addressExist) {
      doc.writeln("<td width='25px'>");
      doc.writeln("<input class=\"button\" type=\"button\" value=\"...\" " +
                  "onClick=\"window.open('/app"+ getConcat("/app")
                  + "op=mail_list&addresses=" + addresses +
                  "&name=cc&action=load' , 'cc' , '" + param +
                  "');\" style='width:25px'>");
      doc.writeln("</td>");
   }

   doc.writeln("</tr>");
   doc.writeln("<tr><td align=right><label id=\"mail_bccLabel\">" +
               "BCC To:</label></td>");
   doc.writeln("<td colspan=" + (addressExist ? 2 : 3) + " width=\"100%\"><input class=\"textbox\" " +
               "id=\"mail_bcc\" type=text " + "onkeyup= \"bccAutoC.onkeyup(event)\" " +
               "onblur=\"bccAutoC.lostFocus()\" autocomplete=\"off\" " +
               "name=bcc style=\"width:100%\" value=" + bccAdd + " ></td>");

   if(addressExist) {
      doc.writeln("<td width='25px'>");
      doc.writeln("<input class=\"button\" type=\"button\" value=\"...\" " +
                  "onClick=\"window.open('/app" + getConcat("/app")
                  + "op=mail_list&addresses=" + addresses +
                  "&name=bcc&action=load' , 'bcc' , '" + param +
                  "');\" style='width:25px'>");
      doc.writeln("</td>");
   }

   doc.writeln("</tr>");
   doc.writeln("<tr><td align=right><label id=\"mail_fromLabel\">" +
               "From:</label></td>");
   doc.writeln("<td colspan=3><input class=\"textbox\" id=\"from\" type=text " +
               "style=\"width:100%\" onkeyup= \"fromAutoC.onkeyup(event)\" " +
               "onblur=\"fromAutoC.lostFocus()\" autocomplete=\"off\" " +
               "name=from value=" + fromAddress + "></td></tr>");
   doc.writeln("<tr><td align=right><label id=\"mail_subjectLabel\">" +
               "Subject:</label></td>");
   doc.writeln("<td colspan=3><input class=\"textbox\" id=\"mail_subject\" " +
               "type=text name=subject0 style=\"width:100%\" value='" +
               convertQuotation(subject) + "'>" + "</td></tr>");
   doc.writeln("<tr><td align=right><label id=\"mail_formatLabel\">" +
               "Format:</label></td><td colspan=3>");
   doc.writeln("<select id=\"mail_formatList\" style=\"width:100%\" name=format onClick=\"setCheckBoxEnable()\">");
   doc.writeln(generateMailMenus());
   doc.writeln("</select></td></tr>");
   var str = mailzip ? "checked" : "";
   doc.writeln("<tr><td></td><td align=left colspan=3>" +
               "<input type=checkbox name=\"compress\" " + str + ">" +
               "<label id='mail_bundledAsZipLabel'>Bundled as zip</label></td></tr>");
   doc.writeln("<tr><td></td><td colspan=3>");
   doc.writeln("<input type=hidden id=\"mail_msg_h\" name=msg>");
   doc.writeln("<textarea id=\"mail_msg\" style=\"width:100%\" name=msg_a rows=5 >");
   doc.writeln(convertQuotation(msg));
   doc.writeln("</textarea></td></tr>");
   doc.writeln("<tr><td height=5></td></tr>");
   doc.writeln("<tr><td colspan=4 align=right><input class=\"button\" " +
               "id=\"mail_okButton\" type=button onClick=\"sendMail()\" " +
               "value='OK' style='width:70px'>");
   doc.writeln("");
   doc.writeln("<input class=\"button\" id=\"mail_cancelButton\" type=button " +
               "value='Cancel' onClick='" + closeScript +
               "' style='width:70px'></td></tr>");
   doc.writeln("<input type=hidden name=op value=Mail>");
   doc.writeln("</table></form></body>");
   doc.writeln("<script>document.getElementById('mail_to').focus();");
   doc.writeln("</script></html>");
   doc.close();
}

function showAddresses(addresses, id, cssUrl) {
   var groupaddrs = addresses.split("|");
   var groupnames = new Array();
   var addrs = new Array();

   var emails = groupaddrs[0].split(";");
   emails.sort();
   addrs['{INDIVIDUAL}'] = emails;

   for(var i = 1; i < groupaddrs.length; i++) {
      emails = groupaddrs[i].split(";");
      var gname = emails[0];
      groupnames[groupnames.length] = gname;
      emails = emails.slice(1);
      emails.sort();
      addrs[gname] = emails;
   }

   groupnames.sort();

   var win = window.open("", "addressWindow",
			 'width=360,height=300,screenX=100,screenY=50,' +
			 'toolbar=no,menubar=no,scrollbars=yes,resizable=yes');
   var doc = win.document;
   doc.open("text/html");

   doc.writeln("<html>");
   doc.writeln("<head>");
   doc.writeln("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />");
   doc.writeln("<title>Select Recipients</title>");
   writeDefCss(doc);
   doc.writeln("<link rel='stylesheet'  href='" + cssUrl + "' type='text/css'>");
   doc.writeln("<script>");
   doc.writeln("function submitAddrs() {");
   doc.writeln("var value = \"\";");
   doc.writeln("for(var i = 0; i < document.addrform.addrlist.options.length; i++) {");
   doc.writeln("if(document.addrform.addrlist.options[i].selected == true) {");
   doc.writeln("var addr = document.addrform.addrlist.options[i].value;");
   doc.writeln("if(addr.indexOf(\"@\") > 0) {");
   doc.writeln("if(value.length > 0) {");
   doc.writeln("value = value + \",\";");
   doc.writeln("}");
   doc.writeln("value = value + addr;");
   doc.writeln("}");
   doc.writeln("}");
   doc.writeln("}");
   doc.writeln("window.opener.document." + id + ".value = value;");
   doc.writeln("window.close();");
   doc.writeln("}");
   doc.writeln("</script>");
   doc.writeln("</head>");
   doc.writeln("<body>");
   doc.writeln("<form name=\"addrform\">");
   doc.writeln("<table border=\"0\" cellspacing=\"5\" width=\"100%\">");
   doc.writeln("<tr>");
   doc.writeln("<td align=\"center\"><select name=\"addrlist\" size=\"10\" multiple style=\"width: 300px;\">");

   emails = addrs['{INDIVIDUAL}'];

   for(var i = 0; i < emails.length; i++) {
      if(emails[i] == '') {
         continue;
      }

      doc.writeln("<option value=\"" + emails[i] + "\">" + emails[i] + "</option>");
   }

   if(emails.length > 0 && emails[0] != '') {
      doc.writeln("<option value=\"\"></option>");
   }

   for(var i = 0; i < groupnames.length; i++) {
      if(i > 0) {
         doc.writeln("<option value=\"\"></option>");
      }

      doc.writeln("<option value=\"" + groupnames[i] + "\">" + groupnames[i] + "</option>");

      emails = addrs[groupnames[i]];

      for(var j = 0; j < emails.length; j++) {
         if(emails[j] == '') {
            continue;
         }

         doc.writeln("<option value=\"" + emails[j] + "\">&nbsp;&nbsp;" + emails[j] + "</option>");
      }
   }

   doc.writeln("</select></td></tr>");
   doc.writeln("<tr><td align=\"center\"><input type=\"button\" class=\"button\" value=\"  OK  \" onclick=\"submitAddrs();\">");
   doc.writeln("&nbsp;&nbsp;&nbsp;<input type=\"button\" class=\"button\" value=\"Cancel\" onclick=\"window.close();\"></td></tr>");
   doc.writeln("</table>");
   doc.writeln("</form>");
   doc.writeln("</body>");
   doc.writeln("</html>");

   doc.close();
}

function previewprint(id, page) {
   var url;

   try {
      url = repositoryServlet;
   }
   catch(ex) {
      url = servlet;
   }

   if(is.mac) {
      url = url + (url.indexOf("?") >= 0 ? "&" : "?") +
         "op=PDF&ID=" + escape(id);
   }
   else {
      url = url + (url.indexOf("?") >= 0 ? "&" : "?") +
         "op=PreviewPrint&pn=" + page + "&ID=" + escape(id);
   }

   var frameElem = Element.get("printFrame");

   if(frameElem) {
      frameElem.style.display = "";
   }
   else {
      frameElem = Element.create("iframe");
      Element.append(document.body, frameElem);

      if(_root.is_ie) {
         frameElem.id = "printFrame";
      }
      else {
         frameElem.name = "printFrame";
      }
   }

   if(!_root.is_ie) {
      frameElem.style.width = Element.toPixel(1);
   }

   frameElem.src = url;
}

function sprint(id, page, pageCnt, printers, cssUrl) {
   var win = showPopWin("/app" + getConcat("/app") +
                        "op=Resource&name=web%2fssl_blank.html",
                        "Print", true, 315, 210, null, null,
                        function(dlg)
   {
      var win = dlg.getContentPane();

      if(win.document){
         var doc = win.document;
         doPrint(doc,id, page, pageCnt, printers, cssUrl);
      }
      else{
         Element.addEventListener(win, "load", function(e) {
            var doc = win.contentDocument;
            doPrint(doc,id, page, pageCnt, printers, cssUrl);
         });
      }
   });
}
function doPrint(doc,id, page, pageCnt, printers, cssUrl) {
   var url = resourceURI;
   doc.open("text/html");

   doc.writeln("<html>");
   doc.writeln("<head>");
   doc.writeln("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />");
   doc.writeln("<title>Print Report</title>");
   doc.writeln("<style type=\"text/css\">");
   doc.writeln("form {margin-top: 5px; margin-left: 5px}");
   doc.writeln("</style>");
   writeDefCss(doc);
   doc.writeln("<link rel='stylesheet'  href='"+ cssUrl + "' type='text/css'>");
   doc.writeln("<script>");
   doc.writeln("");
   doc.writeln("function byteEncode(str, isEncodeAll) {");
   doc.writeln("   if((str == null) || (str == '')) {");
   doc.writeln("      return '';");
   doc.writeln("   }");
   doc.writeln("");
   doc.writeln("   if(isEncodeAll == null) {");
   doc.writeln("      isEncodeAll = false;");
   doc.writeln("   }");
   doc.writeln("   var ret = '';");
   doc.writeln("");
   doc.writeln("   for(var i=0; i < str.length; i++) {");
   doc.writeln("      var ch = str.charAt(i);");
   doc.writeln("      var code = str.charCodeAt(i);");
   doc.writeln("");
   doc.writeln("      if(code < 128 && ch != '[' && !isEncodeAll && code != '' &&");
   doc.writeln("         ch != '/' && ch != '\\'' && ch != '=' && ch != '#' &&");
   doc.writeln("         ch != '+' && ch != ' ' && ch != '&' ) {");
   doc.writeln("         ret += ch;");
   doc.writeln("      }");
   doc.writeln("      else {");
   doc.writeln("         ret += \"[\" + code.toString(16) + \"]\";");
   doc.writeln("      }");
   doc.writeln("   }");
   doc.writeln("");
   doc.writeln("   return ret;");
   doc.writeln("}");
   doc.writeln("");
   doc.writeln("function verify() {");
   doc.writeln("  if(document.form2.pages[2].checked) {");
   doc.writeln("    document.form2.range.value = document.form2.range.value.replace(/\\s*/g, '');");
   doc.writeln("    if(document.form2.range.value.match(/^[0-9]+(-[0-9]+)?(,[0-9]+(-[0-9]+)?)*$/) == null) {");
   doc.writeln("      alert('Invalid page range');");
   doc.writeln("      return false;");
   doc.writeln("    }");
   doc.writeln("    var ranges = document.form2.range.value.split(',');");
   doc.writeln("    for(var i = 0; i < ranges.length; i++) {");
   doc.writeln("      var pagenums = ranges[i].split('-');");
   doc.writeln("      for(var j = 0; j < pagenums.length; j++) {");
   doc.writeln("        var pagenum = parseInt(pagenums[j]);");
   doc.writeln("        if(pagenum <= 0 || " + pageCnt + " >= 0 && pagenum > " + pageCnt + ") {");
   doc.writeln("          alert('Invalid page range');");
   doc.writeln("          return false;");
   doc.writeln("        }");
   doc.writeln("      }");
   doc.writeln("    }");
   doc.writeln("  }");
   doc.writeln("");
   doc.writeln("  document.form1.range.value = document.form2.range.value;");
   doc.writeln("  document.form1.printer.value = byteEncode(document.form1.printer0.value);");
   doc.writeln("  return true;");
   doc.writeln("}");
   doc.writeln("");
   doc.writeln("function clearSample() {");
   doc.writeln("   if(document.form2.range.value.search(/^e.g./) >= 0) {");
   doc.writeln("      document.form2.range.value = '';");
   doc.writeln("      document.form2.range.focus();");
   doc.writeln("   }");
   doc.writeln("}");
   doc.writeln("function pagesEvent() {");
   doc.writeln("  for(var i = 0; i < document.form2.pages.length; i++) {");
   doc.writeln("    if(document.form2.pages[i].checked) {");
   doc.writeln("      document.form1.pages.value = document.form2.pages[i].value;");
   doc.writeln("      break;");
   doc.writeln("    }");
   doc.writeln("  }");
   doc.writeln("  document.form1.range.value = document.form2.range.value;");
   doc.writeln("  document.form2.range.disabled = !document.form2.pages[2].checked;");
   doc.writeln("}");
   doc.writeln("");
   // @by jamshedd method added to handle submission of form when we hit
   // the enter key on the page range text field
   doc.writeln("function verifyForm2() {");
   doc.writeln("   if(verify()) {");
   doc.writeln("      document.form1.submit();");
   doc.writeln("   }");
   doc.writeln("");
   doc.writeln("   return false;");
   doc.writeln("}");
   doc.writeln("");
   doc.writeln("</script></head>");
   doc.writeln("<body id=\"print_body\" bgcolor=white>");
   doc.writeln("<form name=form1 action='" + url + "' method=POST " +
               "onSubmit='return verify()' >");
   doc.writeln("<label id=\"print_printerLabel\">Printer:</label>");
   doc.writeln("<select name=printer0 style='width:240' id=\"print_printer\">");

   for(var i = 0; i < printers.length; i++) {
      var selected = "";

      if(i==0) {
         selected = " selected ";
      }

      doc.writeln("<option value='" + i + "'" + selected + ">" +
                  printers[i] + "</option>");
   }

   doc.writeln("</select><br><br>");
   doc.writeln("<input type=hidden name='pages' value='all'>");
   doc.writeln("<input type=hidden name='op' value='Print'>");
   doc.writeln("<input type=hidden name='ID' value='" + id + "'>");
   doc.writeln("<input type=hidden name='currPage' value='" + page + "'>");
   doc.writeln("<input type=hidden name='range'>");
   doc.writeln("<input type=\"hidden\" name=\"printer\" value=\"\"/>");
   doc.writeln("<div align=right style='padding-right:22px;'>");
   doc.writeln("<input class=\"button\" id=\"print_okButton\" type=submit value='OK' style='width:60px;'>");
   doc.writeln("<input class=\"button\" id=\"print_cancelButton\" type=button value='Cancel' style='width:60px;' onClick='window.frameElement._dialog.close();'>");
   doc.writeln("</div>");
   doc.writeln("</form>");
   doc.writeln("<span id='pageSelect' style='visibility:visible;position:absolute'>");
   doc.writeln("<form name=form2 onSubmit='return verifyForm2()'><div style='border-top:1px solid silver;'>");
   doc.writeln("<label id=\"print_pageLabel\">Select Pages:</label><br>");
   doc.writeln("<input type=radio name='pages' value='all' checked onClick='pagesEvent()'><label  id=\"print_pageRadio\">All Pages</label><br>");
   doc.writeln("<input type=radio name='pages' value='current' onClick='pagesEvent()'><label  id=\"print_pageRadio\">Current Page</label><br>");
   doc.writeln("<input type=radio name='pages' value='select' onClick='pagesEvent()'><label  id=\"print_pageRadio\">Enter Pages:</label>");
   doc.writeln("<input class=\"textbox\" id=\"print_pageScope\" style='width:184px;' type=text name='range' value='e.g. 1-3, 6' onmousedown='clearSample()' disabled=true><br><br><br>");
   doc.writeln("</div></form></span>");
   doc.writeln("</body><script>document.getElementById('print_printer').focus();</script></html>");

   doc.close();
}

function saveas(id, servlet, fullname, uID, mode, rmode) {
   var url = resourceURI + (resourceURI.indexOf("?") >= 0 ? "&" : "?") +
      "op=saveas";
   var h = 460;

   if(uID) {
      var userID = (uID == null) ? "" : uID ;
      url += userID + "&action=savingarchive";
      h = 450;
   }
   else {
      url += "&edit=no&action=savingtemplate";
   }

   if(mode) {
      url += "&mode=" + mode;
   }

   if(rmode) {
      url += "&rmode=" + rmode;
   }

   url += "&fullname=" + fullname + "&reportID=" + escape(id);

   showPopWin(url, "Save As", true, 680, h);
}

function save(id, servlet) {
   var ajax = new isii_AJAX(null, "saveas", "directSave", servlet, true);
   var container = new isii_XMLContainer();
   container.put("reportID", byteDecode(id));
   ajax.addFinishListener(saveOver);
   ajax.send(container.writeXML());
}

function saveOver(msg) {
   var ajax = msg.ajax;

   if(ajax.getError() != null) {
      alert(ajax.getError());
   }
   else {
      refreshPage(getReportMode());
   }

   getRoot(self).reportChanged = false;
}

function setZoom(servlet, mode, id, pn, uID, prefix) {
   var comp = Element.get(prefix + "zoomCombo");
   var index = comp.selectedIndex;
   var zoom = comp.options[index].value;
   var userID = (uID==null) ? "" : uID ;

   var url = servlet + (servlet.indexOf("?") >= 0 ? "&" : "?") +
      "op=Page" + userID + "&pn=" + pn + "&ID=" + escape(id) +
      "&zoom=" + zoom + "&mode=" + mode;

   window.location.replace(url);
}

var hsent = false;

function heartbeat(id) {
   try {
      if(!document.all || (document.all && document.readyState == "complete")) {
         var aurl = window.inDashboard ? resourceURI : servlet;
         var url = aurl + (aurl.indexOf("?") >= 0 ? "&" : "?") +
            "op=heartbeat&ID=" + byteEncode(id);
         var config = {"isText":true, "hideLoadingDiv":true};
         var ajax = new isii_AJAX(null, null, null, url, true, config);
         ajax.addFinishListener(function(msg) {});

         try {
            ajax.send();
         }
         catch(ex) {
         }

         hsent = true;
      }
   }
   catch(ex) {
   }

   window.setTimeout("heartbeat('" + id + "')", hsent ? 60000 : 100);
}

function unLoadPage() {
   window.status = '';

   try {
      if(topTitle && getRoot(self).isPortalPage == true) {
         getRoot(self).document.title = topTitle;
      }
   }
   catch(ex) {
   }
}

// The following Element function is copied from util.js to avoid ie dying if
// import more than one js file.
/**
 * Create a specified type element.
 */
function createElement(vtype, vclass, doc, vparent) {
   doc = doc ? doc : document;

   var element = doc.createElement(vtype);

   if(vclass) {
      element.className = vclass;
   }

   if(vparent) {
      appendElement(vparent, element);
   }

   return element;
}

/**
 * Add a child node to the parent node.
 */
function appendElement(vparent, vchild) {
   try {
      vparent.appendChild(vchild);
   }
   catch(ex) {
      alert("" + ex);
   }
}

/**
 * Get the element by this id.
 */
function getElement(vid, doc) {
   doc = doc ? doc : document;

   if(typeof vid == "string") {
      v = doc.getElementById(vid);

      if(v == null) {
         var vs = doc.getElementsByName(vid);

         if(vs.length > 0) {
            v = vs[0];
         }
      }
   }

   return v;
}

window.check = true;
window.isModified = function() {
   var flash = getElement("ExploratoryAnalyzerFlash", document);
   return flash.isModified && flash.isModified();
}

window.openEntry = function(identifier) {
   var flash = getElement("ExploratoryAnalyzerFlash", document);
   flash.openEntry(identifier);
}

window.getReportID = function() {
   var flash = getElement("ExploratoryAnalyzerFlash", document);
   return flash.getReportID();
}

window.getOwner = function() {
   var flash = getElement("ExploratoryAnalyzerFlash", document);
   return flash.getOwner();
}

window.setOpenViewsheet = function(entryPath, myreport, entryID) {
   var flash = getElement("ExploratoryAnalyzerFlash", document);
   flash.setOpenViewsheet(entryPath, myreport, entryID);
}

/**
 * Embed flash to solove active flash problem in IE.
 */
function doUnload(srcname, fullscreen, name) {
   if(window.inDashboard ||
      ("" + window.location).indexOf("resetdashboard") != -1)
   {
      return;
   }

   var _name = name == null ? "ExploratoryAnalyzerFlash" : name;
   window.onbeforeunload = function(e, refresh) {
      var isIE = navigator.appName.indexOf("Microsoft") != -1;

      if(isIE && window._flashLoaded != null && !window._flashLoaded) {
         return "Closing a partially loaded flash may cause IE to malfunction, proceed?";
      }

      if(_name.indexOf("ExploratoryAnalyzer") > -1 &&
	 window.check && window.isModified())
      {
	 return " Worksheet or viewsheet has been modified!!";
      }

      window.check = true;
      var flash = getElement(_name, document);

      if(flash != null && flash.getVSS) {
         var vss = flash.getVSS();

         // making ajax calls in unload causes IE to hang, using the opener's
         // for the ajax call is fine since the opener is not destroyed
         if(vss != null && window.opener && window.opener.closeVSS) {
	    if(!(_name.indexOf("ExploreView") > -1 ||
		 srcname.indexOf("ExploreView") > -1))
            {
               window.opener.closeVSS(vss);
            }
            else if(flash.isSnapshot()) {
               window.opener.closeVSS(vss);
            }
         }
      }

      if(_name.indexOf("ExploratoryAnalyzer") > -1) {
         refreshViewsheet();
      }
   }
}

function closeVSS(ids) {
   var ajax = new isii_AJAX(null, "viewsheetweb&operation=closeVSS", null,
                            "/app" + getConcat("/app"), true,
                            {"isText":true});
   var container = new isii_XMLContainer();
   container.put("vss", ids);
   ajax.send("<xml><head><property><name>__operation__</name><value>" +
             "closeVSS</value></property></head><body>" + container.writeXML() +
             "</body></xml>");
}

/**
 * Embed flash to solove active flash problem in IE.
 */
function embedFlash(doc, protocol, fsrc, aurl, params, mode) {
   var tid = "ExploratoryAnalyzerFlash";
   var swfNode = "";
   var wmode = mode ? mode.toLowerCase() : "window";

   // netscape plugin architecture
   if(navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length) {
      // avoid wmode, it make mouse wheel not working
      var wstr = (wmode != "transparent") ? "" : "wmode=\"" + wmode + "\"";
      swfNode = '<embed type="application/x-shockwave-flash"  src="' + aurl +
         '" width="100%" height="100%" id="' + tid + '" name="' + tid +
         '" ' + wstr + '" scale="noscale" pluginspage="' + protocol +
         '://www.macromedia.com/go/getflashplayer" quality="high" ' +
         'scale="noscale" salign="lt" bgcolor="#ffffff" swLiveConnect=true ' +
         'allowScriptAccess="sameDomain" flashvars="' + params + '"/>';
   }
   // PC IE
   else {
      swfNode = '<object id="' + tid +
         '" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" ' +
         'width="100%" height="100%" codebase="' + protocol +
         '://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0" ' +
         'onmouseover="restoreWindow()">';

      swfNode += '<param name="movie" value="' + aurl + '" />';
      swfNode += '<param name="FlashVars" value="' + params + '" />';
      swfNode += '<param name="allowScriptAccess" value="sameDomain" />';
      swfNode += '<param name="quality" value="high" />';
      swfNode += '<param name="scale" value="noscale" />';
      swfNode += '<param name="salign" value="lt" />';
      swfNode += '<param name="bgcolor" value="#ffffff" />';
      swfNode += "</object>";
   }

   var div = getElement("flashdiv", doc);
   div.innerHTML = swfNode;
}
