/*
 * This file is soon to be deprecated.  (bug 393634)
 */
var gPlatform = PLATFORM_WINDOWS;

var PLATFORM_OTHER    = 0;
var PLATFORM_WINDOWS  = 1;
var PLATFORM_LINUX    = 2;
var PLATFORM_MACOSX   = 3;
var PLATFORM_MAC      = 4;

if (navigator.platform.indexOf("Win32") != -1) {
  gPlatform = PLATFORM_WINDOWS;
  gCssClass = 'os_windows';
} else if (navigator.platform.indexOf("Linux") != -1) {
  gPlatform = PLATFORM_LINUX;
  gCssClass = 'os_linux';
} else if (navigator.userAgent.indexOf("Mac OS X") != -1) {
  gPlatform = PLATFORM_MACOSX;
  gCssClass = 'os_osx';
} else if (navigator.userAgent.indexOf("MSIE 5.2") != -1) {
  gPlatform = PLATFORM_MACOSX;
  gCssClass = 'os_osx';
} else if (navigator.platform.indexOf("Mac") != -1) {
  gPlatform = PLATFORM_MAC;
  gCssClass = 'os_osx';
} else {
  gPlatform = PLATFORM_OTHER;
  gCssClass = '';
}

function getPlatformName(aPlatform)
{
  if (aPlatform == PLATFORM_WINDOWS)
    return "Windows";
  if (aPlatform == PLATFORM_LINUX)
    return "Linux i686";
  if (aPlatform == PLATFORM_MACOSX)
    return "Mac OS X";
  return "Unknown";
}

function getPlatformFileSize(aPlatform, aProduct)
{
  if (aProduct == "fx") {
    if (aPlatform == PLATFORM_WINDOWS)
      return "5.7MB";
    if (aPlatform == PLATFORM_LINUX)
      return "9.2MB";
    if (aPlatform == PLATFORM_MACOSX)
      return "17.0MB";
  } else if (aProduct == "fxold") {
    if (aPlatform == PLATFORM_WINDOWS)
      return "4.9MB";
    if (aPlatform == PLATFORM_LINUX)
      return "8.1MB";
    if (aPlatform == PLATFORM_MACOSX)
      return "16.2MB";
  } else if (aProduct == "tb") {
    if (aPlatform == PLATFORM_WINDOWS)
      return "6.4MB";
    if (aPlatform == PLATFORM_LINUX)
      return "11MB";
    if (aPlatform == PLATFORM_MACOSX)
      return "19MB";
  } else if (aProduct == "tbold") {
    if (aPlatform == PLATFORM_WINDOWS)
      return "6.1MB";
    if (aPlatform == PLATFORM_LINUX)
      return "10.2MB";
    if (aPlatform == PLATFORM_MACOSX)
      return "17.8MB";
  }
  return "Unknown";
}

function getProductName(aProduct)
{
  if (aProduct == "fx") {
    return "firefox";
  } else if (aProduct == "fxold") {
    return "firefox";
  } else if (aProduct == "tb") {
    return "thunderbird";
  } else if (aProduct == "tbold") {
    return "thunderbird";
  }
  return "Unknown";
}

function getDownloadURLForProduct(product, version)
{
  return "http://download.mozilla.org/?product=";
}

// Get a downloadURL given a locale and platform.
// The optional boolean is used when we want to get the download.mozilla.org
// link that points directly to Bouncer.
function getDownloadURLForLanguage(aLangID, aPlatform, directLink)
{
  var abCD = aLangID.abCD;
  var product = getProductName(aLangID.product);
  var version = aLangID[aLangID.product];

  // If we are testing the site locally, or if we explicitly asked for it,  
  // give the direct download URL.
  if (window.location.protocol == "file:" ||
      directLink == true) {
    var url = getDownloadURLForProduct(product, version);
  // Otherwise give the download page URL.
  } else {
    var url = "http://www.mozilla.com/products/download.html?product=";
  }

  url += product + "-" + version;

  if (typeof gDownloadFunnelCake != 'undefined') {
      url += gDownloadFunnelCake;
  }

  url +="&amp;os=";


  if (aPlatform == PLATFORM_WINDOWS) {
    url += "win";
  } else if (aPlatform == PLATFORM_LINUX) {
    url += "linux";
  } else if (aPlatform == PLATFORM_MACOSX) {
    url += "osx";
    if (abCD == "ja-JP")
      abCD = "ja-JPM";
    if (abCD == "ja")
      abCD = "ja-JP-mac";
  } else {
    return "http://www.mozilla.com/" + abCD + "/" + product + "/all.html";
  }

  return url + "&amp;lang=" + abCD;
}

// "" for a version means it should be "Not Yet Available" on all.html,
// null means it should not be listed
// A region code of "-" means that no region code should be used.
var gLanguages = {
"af": { 	"-": { fx: "2.0.0.11",	fxold: null,	tb: null,	tbold: null,	name: "Afrikaans",	localName: "Afrikaans" } },
"ast": { 	"es": { fx: null,	fxold: null,	tb: null,	tbold: null,	name: "Asturian",	localName: "Asturianu" } },
"ar": { 	"-": { fx: "2.0.0.11",	fxold: null,	tb: null,	tbold: null,	name: "Arabic",	localName: "عربي" } },
"be": { 	"-": { fx: "2.0.0.11",	fxold: "3.0b1",	tb: "2.0.0.9",	tbold: null,	name: "Belarusian",	localName: "Беларуская" } },
"bg": { 	"-": { fx: "2.0.0.11",	fxold: null,	tb: "2.0.0.9",	tbold: "1.5.0.13",	name: "Bulgarian",	localName: "Български" } },
"bn": { 	"in": { fx: null,	fxold: null,	tb: null,	tbold: null,	name: "Bengali",	localName: "বাংলা" } },
"br": { 	"fr": { fx: null,	fxold: null,	tb: null,	tbold: null,	name: "Breton",	localName: "Brezhoneg" } },
"ca": { 	"-": { fx: "2.0.0.11",	fxold: null,	tb: "2.0.0.9",	tbold: "1.5.0.13",	name: "Catalan",	localName: "català-valencià" } },
"cs": { 	"-": { fx: "2.0.0.11",	fxold: "3.0b1",	tb: "2.0.0.9",	tbold: "1.5.0.13",	name: "Czech",	localName: "Čeština" } },
"cy": { 	"gb": { fx: null,	fxold: null,	tb: null,	tbold: null,	name: "Welsh",	localName: "Cymraeg" } },
"da": { 	"-": { fx: "2.0.0.11",	fxold: null,	tb: "2.0.0.9",	tbold: "1.5.0.13",	name: "Danish",	localName: "Dansk" } },
"de": { 	"-": { fx: "2.0.0.11",	fxold: "3.0b1",	tb: "2.0.0.9",	tbold: "1.5.0.13",	name: "German",	localName: "Deutsch" } },
"el": { 	"-": { fx: "2.0.0.11",	fxold: "3.0b1",	tb: "2.0.0.9",	tbold: "1.5.0.13",	name: "Greek",	localName: "Ελληνικά" } },
"en": { 	"au": { fx: null,	fxold: null,	tb: null,	tbold: null,	name: "English (Australian)",	localName: "English (Australian)" },
 	"ca": { fx: null,	fxold: null,	tb: null,	tbold: null,	name: "English (Canadian)",	localName: "English (Canadian)" },
 	"gb": { fx: "2.0.0.11",	fxold: null,	tb: "2.0.0.9",	tbold: "1.5.0.13",	name: "English (British)",	localName: "English (British)" },
 	"nz": { fx: null,	fxold: null,	tb: null,	tbold: null,	name: "English (New Zealand)",	localName: "English (New Zealand)" },
 	"us": { fx: "2.0.0.11",	fxold: "3.0b1",	tb: "2.0.0.9",	tbold: "1.5.0.13",	name: "English",	localName: "English" },
 	"za": { fx: null,	fxold: null,	tb: null,	tbold: null,	name: "English (South African)",	localName: "English (South African)" } },
"eo": { 	"-": { fx: null,	fxold: null,	tb: null,	tbold: null,	name: "Esperanto",	localName: "Esperanto" } },
"es": { 	"ar": { fx: "2.0.0.11",	fxold: null,	tb: "2.0.0.9",	tbold: "1.5.0.13",	name: "Spanish (Argentina)",	localName: "Español (Argentina)" },
 	"es": { fx: "2.0.0.11",	fxold: "3.0b1",	tb: "2.0.0.9",	tbold: "1.5.0.13",	name: "Spanish (Spain)",	localName: "Español (de España)" } },
"eu": { 	"-": { fx: "2.0.0.11",	fxold: null,	tb: "2.0.0.9",	tbold: "1.5.0.13",	name: "Basque",	localName: "Euskara" } },
"fa": { 	"-": { fx: null,	fxold: null,	tb: null,	tbold: null,	name: "Persian",	localName: "پارسی" } },
"fi": { 	"-": { fx: "2.0.0.11",	fxold: "3.0b1",	tb: "2.0.0.9",	tbold: "1.5.0.13",	name: "Finnish",	localName: "suomi" } },
"fr": { 	"-": { fx: "2.0.0.11",	fxold: "3.0b1",	tb: "2.0.0.9",	tbold: "1.5.0.13",	name: "French",	localName: "Français" } },
"fy": { 	"nl": { fx: "2.0.0.11",	fxold: "3.0b1",	tb: null,	tbold: null,	name: "Frisian",	localName: "Frysk" } },
"ga": { 	"ie": { fx: "2.0.0.11",	fxold: null,	tb: "2.0.0.9",	tbold: "1.5.0.13",	name: "Irish",	localName: "Gaeilge" } },
"gu": { 	"in": { fx: "2.0.0.11",	fxold: "3.0b1",	tb: "1.5.0.13",	tbold: null,	name: "Gujarati",	localName: "ગુજરાતી" } },
"he": { 	"-": { fx: "2.0.0.11",	fxold: null,	tb: "2.0.0.9",	tbold: "1.5.0.13",	name: "Hebrew",	localName: "עברית" } },
"hr": { 	"-": { fx: null,	fxold: null,	tb: null,	tbold: null,	name: "Croatian",	localName: "Hrvatski" } },
"hu": { 	"-": { fx: "2.0.0.11",	fxold: null,	tb: "2.0.0.9",	tbold: "1.5.0.13",	name: "Hungarian",	localName: "Magyar" } },
"hy": { 	"am": { fx: null,	fxold: null,	tb: null,	tbold: null,	name: "Armenian",	localName: "Հայերեն" } },
"is": { 	"-": { fx: null,	fxold: null,	tb: null,	tbold: null,	name: "Icelandic",	localName: "íslenska" } },
"it": { 	"-": { fx: "2.0.0.11",	fxold: null,	tb: "2.0.0.9",	tbold: "1.5.0.13",	name: "Italian",	localName: "Italiano" } },
"ja": { 	"-": { fx: "2.0.0.11",	fxold: "3.0b1",	tb: "2.0.0.9",	tbold: "1.5.0.13",	name: "Japanese",	localName: "日本語" } },
"ka": { 	"-": { fx: "2.0.0.11",	fxold: "3.0b1",	tb: null,	tbold: null,	name: "Georgian",	localName: "ქართული" } },
"ko": { 	"-": { fx: "2.0.0.11",	fxold: "3.0b1",	tb: "2.0.0.9",	tbold: "1.5.0.13",	name: "Korean",	localName: "한국어" } },
"ku": { 	"-": { fx: "2.0.0.11",	fxold: null,	tb: null,	tbold: null,	name: "Kurdish",	localName: "Kurdî" } },
"lt": { 	"-": { fx: "2.0.0.11",	fxold: "3.0b1",	tb: "2.0.0.9",	tbold: "1.5.0.13",	name: "Lithuanian",	localName: "lietuviškai" } },
"lv": { 	"-": { fx: null,	fxold: null,	tb: null,	tbold: null,	name: "Latvian",	localName: "Latviešu" } },
"mk": { 	"-": { fx: "2.0.0.11",	fxold: null,	tb: "2.0.0.9",	tbold: "1.5.0.13",	name: "Macedonian",	localName: "Македонски" } },
"ml": { 	"-": { fx: null,	fxold: null,	tb: null,	tbold: null,	name: "Malayalam",	localName: "മലയാളം" } },
"mn": { 	"-": { fx: "2.0.0.11",	fxold: null,	tb: null,	tbold: null,	name: "Mongolian",	localName: "Монгол" } },
"nb": { 	"no": { fx: "2.0.0.11",	fxold: null,	tb: "2.0.0.9",	tbold: "1.5.0.13",	name: "Norwegian (Bokmål)",	localName: "Norsk bokmål" } },
"ne": { 	"np": { fx: null,	fxold: null,	tb: null,	tbold: null,	name: "Nepali",	localName: "नेपाली" } },
"nn": { 	"no": { fx: "2.0.0.11",	fxold: null,	tb: "2.0.0.9",	tbold: null,	name: "Norwegian (Nynorsk)",	localName: "Norsk nynorsk" } },
"nl": { 	"-": { fx: "2.0.0.11",	fxold: "3.0b1",	tb: "2.0.0.9",	tbold: "1.5.0.13",	name: "Dutch",	localName: "Nederlands" } },
"nr": { 	"-": { fx: null,	fxold: null,	tb: null,	tbold: null,	name: "Ndebele, South",	localName: "isiNdebele Sepumalanga" } },
"nso": { 	"-": { fx: null,	fxold: null,	tb: null,	tbold: null,	name: "Northern Sotho",	localName: "Sepedi" } },
"pa": { 	"in": { fx: "2.0.0.11",	fxold: null,	tb: "2.0.0.9",	tbold: "1.5.0.13",	name: "Punjabi",	localName: "ਪੰਜਾਬੀ" } },
"pl": { 	"-": { fx: "2.0.0.11",	fxold: "3.0b1",	tb: "2.0.0.9",	tbold: "1.5.0.13",	name: "Polish",	localName: "polski" } },
"pt": { 	"br": { fx: "2.0.0.11",	fxold: null,	tb: "2.0.0.9",	tbold: "1.5.0.13",	name: "Portuguese (Brazilian)",	localName: "Português (do Brasil)" },
 	"pt": { fx: "2.0.0.11",	fxold: null,	tb: "2.0.0.9",	tbold: null,	name: "Portuguese (Portugal)",	localName: "Português (Europeu)" } },
"ro": { 	"-": { fx: "2.0.0.11",	fxold: null,	tb: null,	tbold: null,	name: "Romanian",	localName: "română" } },
"ru": { 	"-": { fx: "2.0.0.11",	fxold: "3.0b1",	tb: "2.0.0.9",	tbold: "1.5.0.13",	name: "Russian",	localName: "Русский" } },
"sk": { 	"-": { fx: "2.0.0.11",	fxold: "3.0b1",	tb: "2.0.0.9",	tbold: "1.5.0.13",	name: "Slovak",	localName: "slovenčina" } },
"sl": { 	"-": { fx: "2.0.0.11",	fxold: null,	tb: "2.0.0.9",	tbold: "1.5.0.13",	name: "Slovenian",	localName: "Slovensko" } },
"sq": { 	"-": { fx: null,	fxold: null,	tb: null,	tbold: null,	name: "Albanian",	localName: "Shqip" } },
"sr": { 	"-": { fx: null,	fxold: null,	tb: null,	tbold: null,	name: "Serbian",	localName: "српски" } },
"ss": { 	"-": { fx: null,	fxold: null,	tb: null,	tbold: null,	name: "Siswati",	localName: "Siswati" } },
"st": { 	"-": { fx: null,	fxold: null,	tb: null,	tbold: null,	name: "Southern Sotho",	localName: "Sesotho" } },
"sv": { 	"se": { fx: "2.0.0.11",	fxold: "3.0b1",	tb: "2.0.0.9",	tbold: "1.5.0.13",	name: "Swedish",	localName: "Svenska" } },
"tn": { 	"-": { fx: null,	fxold: null,	tb: null,	tbold: null,	name: "Tswana",	localName: "Setswana" } },
"tr": { 	"-": { fx: "2.0.0.11",	fxold: null,	tb: "2.0.0.9",	tbold: "1.5.0.13",	name: "Turkish",	localName: "Türkçe" } },
"ts": { 	"-": { fx: null,	fxold: null,	tb: null,	tbold: null,	name: "Tsonga",	localName: "Mutsonga" } },
"uk": { 	"-": { fx: "2.0.0.11",	fxold: "3.0b1",	tb: null,	tbold: null,	name: "Ukrainian",	localName: "Українська мова" } },
"ve": { 	"-": { fx: null,	fxold: null,	tb: null,	tbold: null,	name: "Venda",	localName: "Tshivenḓa" } },
"xh": { 	"-": { fx: null,	fxold: null,	tb: null,	tbold: null,	name: "Xhosa",	localName: "isiXhosa" } },
"zh": { 	"cn": { fx: "2.0.0.11",	fxold: "3.0b1",	tb: "2.0.0.9",	tbold: "1.5.0.13",	name: "Chinese (Simplified)",	localName: "中文 (简体)" },
 	"tw": { fx: "2.0.0.11",	fxold: null,	tb: "2.0.0.9",	tbold: null,	name: "Chinese (Traditional)",	localName: "正體中文 (繁體)" } },
"zu": { 	"-": { fx: null,	fxold: null,	tb: null,	tbold: null,	name: "Zulu",	localName: "isiZulu" } }
};
function LanguageID(aAB, aCD, aProduct, aBuild)
{
  if (aCD == "-")
    this.abCD = aAB;
  else
    this.abCD = aAB + "-" + aCD.toUpperCase();
  this.product = aProduct;
  for (var prop in aBuild)
    this[prop] = aBuild[prop];
}

function buildValidForPlatform(aLangID, aPlatform)
{
  var product = getProductName(aLangID.product);
  var version = aLangID[aLangID.product];
  if ((aLangID.abCD == "gu-IN" ||
       (aLangID.abCD == "pa-IN" &&
        ((product == "firefox" && version < "2.0.0.1") ||
         (product == "thunderbird" && version < "2.0.0.0")))) &&
      (aPlatform == PLATFORM_MACOSX))
    return false;

  return true;
}

function getLanguageIDs(aProduct)
{
  var language = "";
  if (navigator.language)
    language = navigator.language;
  else if (navigator.userLanguage)
    language = navigator.userLanguage;
  else if (navigator.systemLanguage)
    language = navigator.systemLanguage;
  
  // Convert "en" to "en-US" as well since en-US build is the canonical
  // translation, and thus better tested.
  if (language == "" || language == "en")
    language = "en-US";

  // Konqueror uses '_' where other browsers use '-'.
  if (language.indexOf("_") != -1)
    language = language.split("_").join("-");

  language = language.toLowerCase();
  var languageCode = language.split("-")[0];
  var regionCode = language.split("-")[1];

  // String comparison actually works for version numbers.
  var currentVersion = gLanguages["en"]["us"][aProduct];
  var bestVersion = "";
  var ids = [];

  if (gLanguages[languageCode]) {
    var region;
    var build;
    var langid;

    for (region in gLanguages[languageCode]) {
      build = gLanguages[languageCode][region];
      if (build[aProduct] && regionCode == region) {
        langid = new LanguageID(languageCode, regionCode, aProduct, build);
        if (buildValidForPlatform(langid, gPlatform)) {
          ids[ids.length] = langid;
          bestVersion = build[aProduct];
        }
      }
    }

    // We have a localized build for this language, but not this region. 
    // Show all available regions and let the user pick. 

    if (bestVersion != currentVersion) {
      var bestRegionVersion = "";
      for (region in gLanguages[languageCode]) {
        build = gLanguages[languageCode][region];
        if (build[aProduct] > bestVersion) {
          langid = new LanguageID(languageCode, region, aProduct, build);
          if (buildValidForPlatform(langid, gPlatform)) {
            ids[ids.length] = langid;
            if (build[aProduct] > bestRegionVersion)
              bestRegionVersion = build[aProduct];
          }
        }
      }
      if (bestRegionVersion > bestVersion)
        bestVersion = bestRegionVersion;
    }
  }

  // Bug 373796 -- Norwegian users need to be offered both nb-NO and nn-NO
  if (regionCode == "no") {
    if (languageCode == "nb") {
      ids[ids.length] = new LanguageID("nn", regionCode, aProduct, gLanguages["nn"][regionCode]);
    }
    if (languageCode == "nn") {
      ids[ids.length] = new LanguageID("nb", regionCode, aProduct, gLanguages["nb"][regionCode]);
    }
  }

  // Offer the en-US version if it has a higher version than the locale
  if (bestVersion != currentVersion) {
    ids[ids.length] = new LanguageID("en", "us", aProduct, gLanguages["en"]["us"]);
  }

  return ids;
}

function writeDownloadItem(aLanguageID)
{
  var item = gDownloadItemTemplate;
  item = item.replace(/%DOWNLOAD_URL%/g,  getDownloadURLForLanguage(aLanguageID, gPlatform));
  item = item.replace(/%BOUNCER_URL%/g,   getDownloadURLForLanguage(aLanguageID, gPlatform, true));
  item = item.replace(/%VERSION%/g,       aLanguageID[aLanguageID.product]);
  item = item.replace(/%PLATFORM_NAME%/g, getPlatformName(gPlatform));
  item = item.replace(/%LANGUAGE_NAME%/g, aLanguageID.name);
  item = item.replace(/%FILE_SIZE%/g,     getPlatformFileSize(gPlatform, aLanguageID.product));
  item = item.replace(/%CSS_CLASS%/g,     gCssClass);
  document.writeln(item);
}

function writeDownloadItems(aProduct)
{
  // Show the dynamic links
  if (gPlatform == PLATFORM_MAC) {
    document.writeln(gDownloadItemMacOS9);
  } else if (gPlatform == PLATFORM_OTHER) {
    document.writeln(gDownloadItemOtherPlatform);
  } else {
    var languageIDs = getLanguageIDs(aProduct);
    for (var i = 0; i < languageIDs.length; ++i)
      writeDownloadItem(languageIDs[i]);
  }
}

function do_download(link)
{
  // If we have IE, use a new window to push the download.
  // We have to do this because other methods did not work in IE.
  if (navigator.appVersion.indexOf('MSIE') != -1) {
    window.open(link, 'download_window', 'toolbar=0,location=no,directories=0,status=0,scrollbars=0,resizeable=0,width=1,height=1,top=0,left=0');
    window.focus();
  }
}
