// This JavaScript contains common routines for
// auto generation of HOD html files.

// get 2-char designator used in JAR file names
function getLanguage(locale) {

  var language = "";
  if (locale != "") {
    if ((locale == "pt_PT") || (locale == "zh_TW")) {
      // then we're dealing with Trad Chinese or True Portuguese
      language = '_' + locale;
    } else {
      language = '_' + locale.substring(0, 2);
    }
  }
  return language;
}

function detectLanguage(locale) {
  var candidate = locale;
  if (candidate == null || candidate == '') {
    if (isIE()) {
      candidate = navigator.browserLanguage.toLowerCase();
    } else {
      candidate = navigator.language.toLowerCase();
    }
  }

  if ((candidate == 'zh_tw') || (candidate == 'tw') || (candidate == 'zh-tw') || (candidate == 'zh_TW'))
    candidate = 'zh_TW';
  else if ((candidate == 'pt-pt') || (candidate == 'pt_PT'))
    candidate = 'pt_PT';
  else if (candidate == 'cn')
    candidate = 'zh';
  else if (candidate == 'jp')
    candidate = 'ja';
  else
    candidate = candidate.substring(0,2);

  var supportedLanguages = "cs,da,de,el,en,es,fi,fr,hu,it,ja,ko,nl,no,pl,pt,pt_PT,ru,sl,sv,tr,zh,zh_TW";
  if (supportedLanguages.indexOf(candidate) == -1) {
      candidate = "en";
  }

  return candidate;
}

function js_trace(traceString) {
  if (parent.hod_DebugOn) {
    alert(traceString);
  }
}


function createPathName(newFileName) {
  var newURL;
  if (parent.hod_CodeBase == "") {
    newURL = parent.hod_URL;
  } else {
    newURL = parent.hod_CodeBase;
    if (newURL.charAt(newURL.length-1) != '/') {
      newURL += '/';
    }
  }
  return createRelativePathName(newURL,newFileName);
}

function createRelativePathName(newURL,newFileName)
{
   var i = newURL.lastIndexOf('/');
   if (i < 0) {
      return newFileName;
   } else {
      newURL = newURL.substring(0,i+1);
      return newURL + newFileName;
   }
}

// gets codepages associated with certain languages
function getCodepages(locale) {
  var srchStr = new RegExp(locale.substring(0,2), 'i');
  var hacp1a_langs='de es fr it pt';
  var hacp1b_langs='da fi nl no sv';
  var hacpce_langs='cs hu pl sl';
  var hacpxx_langs='ja ko ru tr zh';
  if (hacp1a_langs.search(srchStr) != -1)
    return ',hacp1a.jar';
  if (hacp1b_langs.search(srchStr) != -1)
    return ',hacp1b.jar';
  if (hacpce_langs.search(srchStr) != -1)
    return ',hacpce.jar';
  if (locale == 'zh_TW')
    return ',hacptw.jar';
  if (locale == 'el_GR')
    return ',hacpgr.jar';
  // otherwise, codepage can be determined from locale
  if (locale != 'en_US')
    return (',hacp' + locale.substring(0,2) + '.jar');
  else
    return '';
}

// return component name for the codepage jar
function getCodepagesComponent(codepage_archive) {
   if (codepage_archive == ',hacp1a.jar') {
      return ';HACP1A';
   }
   if (codepage_archive == ',hacp1b.jar') {
      return ';HACP1B';
   }
   if (codepage_archive == ',hacpce.jar') {
      return ';HACPCE';
   }
   if (codepage_archive == ',hacptw.jar') {
      return ';HACPTW';
   }
   if (codepage_archive == ',hacpgr.jar') {
      return ';HACPGR';
   }
   if (codepage_archive == ',hacpja.jar') {
      return ';HACPJA';
   }
   if (codepage_archive == ',hacpko.jar') {
      return ';HACPKO';
   }
   if (codepage_archive == ',hacpru.jar') {
      return ';HACPRU';
   }
   if (codepage_archive == ',hacptr.jar') {
      return ';HACPTR';
   }
   if (codepage_archive == ',hacpzh.jar') {
      return ';HACPZH';
   }

   return '';
}


// getAppletParams() allows the Administrator to add any applet
// parameters to the main HTML (HOD.html, HODDebug.html, etc).
function getAppletParams(appletParams) {
  var fs = "";
  for (ii = 0; ii < appletParams.length; ii++)
    fs += appletParams[ii] + '\n';

  return fs;
}

// self-explanatory...
function getAppletCloser(HorA) {
  if (HorA == "applet")
    return "</APPLET>";
  else
    return "</OBJECT>";
}

// look at passed URL to see if we're actually a bookmarked session
// (assume if string 'Launch=' is contained therein, then true
function isBookmark(mySearch) {
  if (mySearch.length < 2) {
    return false;
  } else {
    return (mySearch.toLowerCase().indexOf('launch=') != -1);
  }
}

// need to lookup jar file name to see if it has
// an equivalent Java 2 version
function isJarJava2(jfn) {
  var fontExp = new RegExp('hafnt', 'i');
  var langExp = new RegExp('ha_', 'i');
  var codepageExp = new RegExp('hacp', 'i');
  var dropFromJava2 = 'hodsign.jar hodsignn.jar';

  var others  = 'hodimg.jar hodsql.jar CachedAppletRemover.jar';

  if (dropFromJava2.search(jfn) != -1) {
     return '';
  }
  else if ((jfn.search(fontExp) != -1) || (jfn.search(langExp) != -1) || (jfn.search(codepageExp) != -1)) {
    return jfn;
  } else {
    var parts = jfn.split('.');
    var sExp = new RegExp(jfn, 'i');  // build search regexp
    if (others.search(sExp) != -1) {
      return jfn;
    } else {
      return parts[0] + '2.' + parts[1];
    }
  }
}

function convertJarsToJava2(jfnArray) {
  var jararray = jfnArray.split(',');
  var finaljars = '';
  var i = 0;
  while (i < jararray.length) {
    var tmp = isJarJava2(jararray[i]);
    if (tmp != '') {
       if (i != 0)
         finaljars += ',';
       finaljars += tmp
    }
    i++;
  }
  return finaljars;
}

// we need to figure out Java support via VBScript
function runDetectApps() {
  if (isIE()) {
    document.writeln('<APPLET name="detectappletAPPLET" archive=HODDetect.jar MAYSCRIPT CODE="com.ibm.eNetwork.HOD.detect.DetectPluginApplet"');
    if (parent.hod_CodeBase != '')
      document.writeln(' CODEBASE="' + parent.hod_CodeBase + '"');
    document.writeln(' WIDTH="2" HEIGHT="2">\n');
    document.writeln('<PARAM NAME=cabinets    VALUE="HODDetect.cab">\n');
    document.writeln('<PARAM NAME="starttype" VALUE = "APPLET">\n');
    document.writeln('</APPLET>\n');
  }
}

function pullOutJavaType(searchStr) {
  if (searchStr != null && searchStr.length > 1) {
    var searchArr = searchStr.split('&');
    for (ii = 0; ii < searchArr.length; ii++) {
      // NOTE: parameter might include Userid and Password!
      var searchSpl = searchArr[ii].split('=');
      if (searchSpl[0].toLowerCase().indexOf('javatype') != -1) {
        return searchSpl[1];
      }
    }
  }
  return 'notfound';
}


// check to see if we know what kind of Java we must use --
// parameter gives Java type passed in as search argument
function checkJavaTypeAndSetObplet(detectedType) {
  if ((detectedType != 'notfound') && (detectedType != 'detect')) {
    parent.hod_JavaType = detectedType;
    if (detectedType == 'java2' && isIE() && !isMacIE())  {
      parent.hod_Obplet = 'object';
    } else {
      parent.hod_Obplet = 'applet';
    }
    location.replace(createRelativePathName(parent.hod_URL,parent.hod_FinalFile + '?' + parent.hod_SearchArg));
  } else {
    var switcher = 0;
    if (parent.hod_JavaType == 'java1')
      switcher += 10;
    else if (parent.hod_JavaType == 'java2')
      switcher += 20;

    if (isNetscape6x() || isMacIE())
      switcher += 1;
    else if (isIE())
      switcher += 2;

    switch (switcher) {
    case 0:    // detect/Netscape 4
    case 10:   // Java1/Netscape 4
    case 12:   // Java1/IE
      parent.hod_JavaType = 'java1';
      parent.hod_Obplet = 'applet';
      break;
    case 1:    // detect/Netscape 6
    case 11:   // Java1/Netscape 6/Mac OS (invalid, default to Java 2)
    case 21:   // Java2/Netscape 6/Mac OS
      parent.hod_JavaType = 'java2';
      parent.hod_Obplet = 'applet';
      break;
    case 2:    // detect/IE
    case 22:   // Java2/IE
      runDetectApps();
//    startAppletTimer();
      break;
    case 20:   // Java2/Netscape 4
      // we asked for Java 2, but we won't get it with NS 4x
//      alert(parent.getHODMsg(1) + parent.getHODMsg(3));
      parent.hod_JavaType = 'java1';
      parent.hod_Obplet = 'applet';
      break;
    }
  }
  // if we've already figured out what we want to do
  if (parent.hod_Obplet != '') {
    // javaType might be messed up, so we want to override it with
    // the search argument in URL
    parent.hod_SearchArg = splitSearchAndRebuild(parent.hod_SearchArg, parent.hod_JavaType);
    if (parent.hod_SearchArg.length != 0) {
      location.replace(createRelativePathName(parent.hod_URL,parent.hod_FinalFile + '?' + parent.hod_SearchArg));
    } else {
      location.replace(createRelativePathName(parent.hod_URL,parent.hod_FinalFile));
    }
  }

}

// note: this function might also be called from HodJavaDetect.js
// in the case of IE + plugin
// once we decide whether Java 1 or 2, then we call the outer frameset
// again with the results of the detection
function setdetectandswitch(detect) {
  switch (detect) {
  // if APPLET tag, probably Java 1
  case 0:
    // if no Java found, offer the Java 2 plugin
    if (navigator.platform == 'Win32') {
      var choice = confirm(parent.getHODMsg(0) + parent.getHODMsg(2));
      if (choice) {
        parent.location.replace(createPathName(parent.lang + '/help/winutils.html?[jre]'));
        break;
      }
    } else {
      alert(parent.getHODMsg(0) + parent.getHODMsg(3));
    }
    break;
  case 1:
    // check to insure we aren't expecting Java 2
//  if (parent.hod_JavaType == 'java2') {
//    if (navigator.platform == 'Win32') {
//      var choice = confirm(parent.getHODMsg(1) + parent.getHODMsg(2));
//      if (choice) {
//        parent.location.replace(createPathName(parent.lang + '/help/winutils.html?[jre]'));
//        break;
//      }
//    } else {
//      alert(parent.getHODMsg(1) + parent.getHODMsg(3));
//    }
//  }
    parent.hod_JavaType = 'java1';
    parent.hod_Obplet = 'applet';
    js_trace('setdetectandswitch, java type = java1, obplet = applet');
    parent.hod_SearchArg = splitSearchAndRebuild(parent.hod_SearchArg, parent.hod_JavaType);
    parent.location.replace(recreateURL(parent.hod_URL, parent.hod_SearchArg));
    break;
  // if OBJECT tag, then we're definitely Java 2
  case 2:
    parent.hod_JavaType = 'java2';
    parent.hod_Obplet = 'object';
    js_trace('setdetectandswitch, java type = java2, obplet = object');
    parent.hod_SearchArg = splitSearchAndRebuild(parent.hod_SearchArg, parent.hod_JavaType);
    parent.location.replace(recreateURL(parent.hod_URL, parent.hod_SearchArg));
    break;
  }
}

// split search argument up into constituent parts,
// then rebuild with updated Java type
function splitSearchAndRebuild(searchArg, javaType) {
  var ideal = 'JavaType=' + javaType;
  var results = '';
  if (searchArg == null || searchArg.length < 2) {
    results = ideal;
  } else {
    // split search argument up into constituent parts
    var searchArr = searchArg.split('&');
    var found = false;
    for (i = 0; i < searchArr.length; i++) {
      // we have to do something funky here, since the obfuscated
      // userid+password might be included in search argument.
      var j = searchArr[i].toLowerCase().indexOf('javatype');
      if (j != -1) {
        searchArr[i] = searchArr[i].substring(0, j) + ideal;
        found = true;
      }
      if (i != 0) {
        results += '&';
      }
      results += searchArr[i];
    }
    if (!found) {
      results += '&' + ideal;
    }
  }
  return results;
}

function recreateURL(oldURL, oldSearch) {
  var results;
  var i = oldURL.lastIndexOf('?');
  if (i == -1) {
    results = oldURL + '?' + oldSearch;
  } else {
    results = oldURL.substring(0,i) + '?' + oldSearch;
  }
  return results;
}

function hod_Strip(inString)
{
  var outString = /[\w,]+/.exec(inString);
  return outString[0];
}

function findValueOfAppletParm(parmArray, name)
{
  var parmValue = "";
  for (var i = 0; i < parmArray.length; i++) {
    if (parmArray[i].toLowerCase().indexOf(name.toLowerCase()) != -1) {
      // then we've found what we're looking for, so extract the value
      var k = parmArray[i].toLowerCase().indexOf('value');
      if (k != -1) {
        parmValue = parmArray[i].substring(k+5);
        parmValue = hod_Strip(parmValue);
      }
    }
  }
  return parmValue;
}

function addExtraArchives(parmArray, cabOrJar)
{
  if (!(parmArray.length > 0)) return "";
  var restOfString = findValueOfAppletParm(parmArray, "AdditionalArchives");
  if (restOfString.length <= 1) return "";
  var archiveArray = restOfString.split(',');
  var extra = ',' + archiveArray[0] + '.' + cabOrJar;
  for (var j = 1; j < archiveArray.length; j++) {
     extra += ',' + archiveArray[j] + '.' + cabOrJar;
  }
  return extra;
}

