// This JavaScript contains common routines for
// auto generation of HOD html files.

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 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 '';
}


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 '';
}


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;
   }
}


function getAppletParams(appletParams) {
  var fs = "";
  for (var ii = 0; ii < appletParams.length; ii++)
    fs += appletParams[ii] + '\n';

  return fs;
}


function isBookmark(mySearch) {
  if (mySearch.length < 2) {
    return false;
  } else {
    return (mySearch.toLowerCase().indexOf('launch=') != -1);
  }
}


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;
}


function runDetectApps(type) {
  var fs = '';
  if (type == 'applet') {
    var timerVal = Number(getJavaDetectParm("setdetecttimer"));
    if (isNaN(timerVal)) timerVal = 15;
    if (timerVal != 0) {
      fs += '<APPLET name="detectappletLOOSE" MAYSCRIPT CODE="com.ibm.eNetwork.HOD.detect.DetectPluginApplet"';
      if (parent.hod_CodeBase != '')
        fs += ' CODEBASE="' + parent.hod_CodeBase + '"';
      fs += ' WIDTH="2" HEIGHT="2">\n';
      fs += '<PARAM NAME="starttype"  VALUE = "LOOSE">\n';
      fs += '</APPLET>\n';
    }
    fs += '<APPLET name="detectappletAPPLET" MAYSCRIPT archive="HODDetect.jar" MAYSCRIPT CODE="com.ibm.eNetwork.HOD.detect.DetectPluginApplet"';
    if (parent.hod_CodeBase != '')
      fs += ' CODEBASE="' + parent.hod_CodeBase + '"';
    fs += ' WIDTH="2" HEIGHT="2">\n';
    fs += '<PARAM NAME=cabinets    VALUE="HODDetect.cab"> \n';
    fs += '<PARAM NAME="starttype"  VALUE = "APPLET">\n';
    fs += '</APPLET>\n';
    if (timerVal != '0') {
      if (getJavaDetectParm("skipobjecttag") == "false")
        startLooseClassTimer(timerVal * 1000, true);
      else
        startLooseClassTimer(timerVal * 1000, false);
    }
  }

  if (type == 'object') {
    fs += '<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93" WIDTH="2" HEIGHT="2" name="detectappletOBJECT">\n';
    fs += '<PARAM NAME="CODE"      VALUE="com/ibm/eNetwork/HOD/detect/DetectPluginApplet.class">\n';
    if (parent.hod_CodeBase != '')
      fs += '<PARAM NAME=CODEBASE VALUE="' + parent.hod_CodeBase + '">\n';
    fs += '<PARAM NAME="type"      VALUE="application/x-java-applet;version=1.3">\n';
    fs += '<PARAM NAME="starttype" VALUE="OBJECT">\n';
    fs += '<PARAM NAME="mayscript" VALUE="true">\n';
    fs += '<PARAM NAME=ARCHIVE     VALUE="HODDetect.jar">\n';
    fs += '</OBJECT>\n';
    startAppletTimer();
  }
  js_trace('runDetectApps() about to write\n' + fs);
  document.writeln(fs);
}


function pullOutJavaType(searchStr) {
  var fj2 = getJavaDetectParm("forcejava2");
  if ((fj2 != "notfound") && (fj2 != "false")) {
    return "java2";
  }
  return getSearchArgParam(searchStr, "javatype");
}


function createObpletAppletParm() {
  var obplet = getSearchArgParam(parent.hod_SearchArg, "obplet");
  if (obplet == 'notfound') return "";
  return '<PARAM NAME="Obplet"    VALUE="' + obplet + '">\n';
}

function searchPluginArray() {
   
   for (i=0; i < navigator.plugins.length; i++) {
      var desc = navigator.plugins[i].description;
      if (desc.indexOf("Java Plug-in ") != -1) {
         //Looking for "Java Plug-in 1.5.0_xx "
         var begin = desc.substring(13);
         var end = begin.indexOf(" ");
         begin = begin.substring(0, end);
         if (begin > '1.5.0_07')
            return true;  //Found one greater that 1.5.0_07
      }
   }

   return false;
}

function getSearchArgParam(searchStr, parm) {
  if (searchStr != null && searchStr.length > 1) {
    var searchArr = searchStr.split('&');
    for (var ii = 0; ii < searchArr.length; ii++) {
      // NOTE: parameter might include Userid and Password!
      var searchSpl = searchArr[ii].split('=');
      if (searchSpl[0].toLowerCase().indexOf(parm) != -1) {
        return searchSpl[1];
      }
    }
  }
  return 'notfound';
}


function getJavaDetectParm(whichParm) {
  var result;
  if (typeof parent.hod_AppletParams == "undefined") {
    result = findValueOfAppletParm(parent.hHod_AppletParams, whichParm); 
  } else {
    result = findValueOfAppletParm(parent.hod_AppletParams, whichParm);
  }
  return result.toLowerCase();
}


function checkJavaTypeAndSetObplet(detectedType) {
  var tempDetectedType = detectedType;
  var tempURL = parent.hod_URL;
  var j = tempURL.indexOf("?");
  if (j != -1) {
    tempURL = tempURL.substring(0,j);
    j = tempURL.lastIndexOf('/');
    if (j != -1) {
      tempURL = tempURL.substring(0,j+1);
    }
  }

   if ((detectedType == 'AutoDetect') || (detectedType == 'autodetect')) {
     detectedType = 'detect'
  }

  if ((detectedType != 'notfound') && (detectedType != 'detect')) {
    parent.hod_JavaType = detectedType;
    parent.hod_Obplet = getSearchArgParam(parent.hod_SearchArg, "obplet");
    if (parent.hodObplet == "notfound")  {
      parent.hod_Obplet = "object";
    }
    location.replace(createRelativePathName(tempURL,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() || isMozz())
      switcher += 1;
    else if (isIE())
      switcher += 2;

    switch (switcher) {
    case 0:    
    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
      var jd = getJavaDetectParm("forcejava2");
      if ((jd == "true") || (jd.substring(0,3) == 'sun') || (jd.substring(0,3) == 'ibm')) {
        parent.hod_JavaType = 'java2';
        parent.hod_Obplet = 'object';
      } else {
        parent.hod_Obplet = getSearchArgParam(parent.hod_SearchArg, "obplet");

		
		if ((tempDetectedType == 'AutoDetect') || (tempDetectedType == 'autodetect')) {
          //alert("in autoDetect. changing to detect");
		  parent.hod_Obplet = 'notfound';
        }

        if (parent.hod_Obplet == "detect") {
          runDetectApps('object');
        } else {
          runDetectApps('applet');
        }
      }
      break;
    case 20:   // Java2/Netscape 4
      // we asked for Java 2, but we won't get it with NS 4x
      parent.hod_JavaType = 'java1';
      parent.hod_Obplet = 'applet';
      break;
    }
  }
  // if we've already figured out what we want to do
  if ((parent.hod_Obplet != '') && (parent.hod_Obplet != 'notfound') && (parent.hod_Obplet != 'detect')) {
    // 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, parent.hod_Obplet);
    if (parent.hod_SearchArg.length != 0) {
      location.replace(createRelativePathName(tempURL,parent.hod_FinalFile + '?' + parent.hod_SearchArg));
    } else {
      location.replace(createRelativePathName(tempURL,parent.hod_FinalFile));
    }
  }

}


function setdetectandswitch(detect) {
   setdetectandswitch(detect, false);
}

// note: this function might also be called from HodJavaDetect.js
function setdetectandswitch(detect, need_lifecycle_parm) {
  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;
  // if APPLET tag, we may be running Java 1 or 2
  case 1:
  case 2:
    parent.hod_JavaType = 'java' + detect;
    parent.hod_Obplet = 'applet';
    parent.hod_SearchArg = splitSearchAndRebuild(parent.hod_SearchArg, parent.hod_JavaType, 'applet');

    if (need_lifecycle_parm) {
       parent.hod_SearchArg += '&legacy=true';
    }
    parent.location.replace(recreateURL(parent.hod_URL, parent.hod_SearchArg));
    break;
  // if OBJECT tag, then we're definitely Java 2
  case 3:
    parent.hod_JavaType = 'java2';
    parent.hod_Obplet = 'object';
    parent.hod_SearchArg = splitSearchAndRebuild(parent.hod_SearchArg, parent.hod_JavaType, 'object');
    if (need_lifecycle_parm) {
       parent.hod_SearchArg += '&legacy=true';
    }
    parent.location.replace(recreateURL(parent.hod_URL, parent.hod_SearchArg));
    break;
  }
}


function splitSearchAndRebuild(searchArg, javaType, obplet) {
  var idealt = 'JavaType=' + javaType;
  var idealo = 'Obplet=' + obplet;
  var results = '';
  if (searchArg == null || searchArg.length < 2) {
    results = idealt + '&' + idealo;
  } else {
    // split search argument up into constituent parts
    var searchArr = searchArg.split('&');
    var foundt = false;
    var foundo = 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 tt = searchArr[i];
      var j = tt.toLowerCase().indexOf('javatype');
      if (j != -1) {
        searchArr[i] = tt.substring(0, j) + idealt;
        foundt = true;

		var k = tt.toLowerCase().indexOf('autodetect');
		if ( k != -1) {
		   //javatype=autodetect
		   searchArr[i] += tt.substring(j+19);
		} else {
			if (tt.length> (j + 14)) {
			  if (tt.charAt(14) == 't') {
				searchArr[i] += tt.substring(j+15);
			  } else {
				searchArr[i] += tt.substring(j+14);
			  }
			}
		}
      } else {
        j = tt.toLowerCase().indexOf('obplet');
        if (j != -1) {
          searchArr[i] = tt.substring(0, j) + idealo;
          foundo = true;
          if (tt.length> (j + 13)) {
            searchArr[i] += tt.substring(j+13);
          }
        }
      }
      if (i != 0) {
        results += '&';
      }
      results += searchArr[i];
    }
    if (!foundt) {
      results += '&' + idealt;
    }
    if (!foundo) {
      results += '&' + idealo;
    }
  }
  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); //@d01c included '-' also (for defect 98301 on 25 may 06) 
  return outString[0];
}


function findValueOfAppletParm(parmArray, name)
{
  var nameStr = 'name="' + name + '"';
  var valStr  = 'value="';
  var parmValue = "notfound";
  for (var i = 0; i < parmArray.length; i++) {
    if (parmArray[i].toLowerCase().indexOf(nameStr.toLowerCase()) != -1) {
      // then we've found what we're looking for, so extract the value
      var k = parmArray[i].toLowerCase().indexOf(valStr);
      if (k != -1) {
        parmValue = parmArray[i].substring(k+valStr.length);
        parmValue = hod_Strip(parmValue);
      }
    }
  }
  return parmValue;
}


function addExtraArchives(parmArray, cabOrJar)
{
  if (!(parmArray.length > 0)) return "";
  var restOfString = findValueOfAppletParm(parmArray, "AdditionalArchives");
  if (restOfString == "notfound") return "";
  var archiveArray = restOfString.split(',');
  var extra = ',' + archiveArray[0] + '.' + cabOrJar;
  for (var j = 1; j < archiveArray.length; j++) {
     extra += ',' + archiveArray[j] + '.' + cabOrJar;
  }
  return extra;
}


function generateTags(tags) {
   document.write(tags);
}

