/* Unobtrusive Flash Objects (UFO) v3.02
   <http://www.bobbyvandersluis.com/ufo/>
   Copyright 2005, 2006 Bobby van der Sluis
   This software is licensed under the CC-GNU LGPL
   <http://creativecommons.org/licenses/LGPL/2.1/>
*/

var UFO =
{
  requiredAttrParams: ["movie", "width", "height", "majorversion", "build"],
  optionalAttrEmb: ["name", "swliveconnect", "align"],
  optionalAttrObj: ["id", "align"],
  optionalAttrParams: [ "play", "loop", "menu", "quality", "scale", "salign",
    "wmode", "bgcolor", "base", "flashvars", "devicefont", "allowscriptaccess"
  ],
  ximovie: "ufo.swf",
  xiwidth: "215",
  xiheight: "138",

  is_w3cdom: ( typeof document.getElementById != "undefined" &&
    typeof document.getElementsByTagName != "undefined" &&
    ( typeof document.createElement != "undefined" ||
    typeof document.createElementNS != "undefined" ) ),

  is_ie: ( navigator.userAgent.toLowerCase().indexOf("msie") != -1 &&
    navigator.userAgent.toLowerCase().indexOf("opera") == -1 ),

  is_safari: (navigator.userAgent.toLowerCase().indexOf("safari") != -1),

  is_win: (navigator.userAgent.toLowerCase().indexOf("win") != -1),

  is_mac: (navigator.userAgent.toLowerCase().indexOf("mac") != -1),

  is_XML: ( typeof document.contentType != "undefined" &&
    document.contentType.indexOf("xml") > -1 ),

  foList: [],

  create: function(FO, id)
  {
    if (!UFO.is_w3cdom) return;
    UFO.foList[id] = UFO.updateFO(FO);
    UFO.createStyleRule("#" + id, "visibility:hidden;");
    UFO.domLoad(id);
  },

  updateFO: function(FO)
  {
    if (typeof FO.xi != "undefined" && FO.xi == "true")
    {
      if (typeof FO.ximovie == "undefined") FO.ximovie = UFO.ximovie;
      if (typeof FO.xiwidth == "undefined") FO.xiwidth = UFO.xiwidth;
      if (typeof FO.xiheight == "undefined") FO.xiheight = UFO.xiheight;
    }
    else
    {
      FO.xi = false;
    }
    FO.domLoaded = false;
    return FO;
  },

  domLoad: function(id)
  {
    var timer = setInterval(function() { // doesn't work in IE/Mac
      if ( ( document.getElementsByTagName("body")[0] != null ||
        document.body != null ) &&  document.getElementById(id) != null )
      {
        UFO.main(id);
        clearInterval(timer);
      }
    }, 250);
    if (typeof document.addEventListener != "undefined")
    {
      document.addEventListener("DOMContentLoaded", function() { UFO.main(id);
        clearInterval(timer); } , null); // Mozilla only
    }
  },

  main: function(id)
  {
    var FO = UFO.foList[id];
    if (FO.domLoaded) return; // for Mozilla, only execute once
    UFO.foList[id].domLoaded = true;
    document.getElementById(id).style.visibility = "hidden";
    if (UFO.hasRequiredAttrParams(id))
    {
      if (UFO.hasFlashVersion(FO.majorversion, FO.build))
      {
        UFO.writeFlashObject(id);
      }
      else if (FO.xi && UFO.hasFlashVersion("6", "65"))
      {
        UFO.createModalDialog(id);
      }
    }
    document.getElementById(id).style.visibility = "visible";
  },

  createStyleRule: function(selector, declaration)
  {
    if (UFO.is_ie && UFO.is_mac) return; // bugs in IE/Mac
    var head = document.getElementsByTagName("head")[0];
    var style = UFO.createElement("style");
    if (!(UFO.is_ie && UFO.is_win))
    {
      var styleRule = document.createTextNode(selector + " {" + declaration
        + "}");
      style.appendChild(styleRule); // bugs in IE/Win
    }
    style.setAttribute("type", "text/css");
    style.setAttribute("media", "screen");
    head.appendChild(style);
    // force Safari repaint for MIME type application/xhtml+xml
    if (UFO.is_safari && UFO.is_XML) { head.innerHTML += ""; }
    if (UFO.is_ie && UFO.is_win && document.styleSheets &&
      document.styleSheets.length > 0)
    {
      var lastStyle = document.styleSheets[document.styleSheets.length - 1];
      if (typeof lastStyle.addRule == "object")
      {
        lastStyle.addRule(selector, declaration);
      }
    }
  },

  createElement: function(el)
  {
    return (typeof document.createElementNS != "undefined") ?
      document.createElementNS("http://www.w3.org/1999/xhtml", el) :
      document.createElement(el);
  },

  hasRequiredAttrParams: function(id)
  {
    var FO = UFO.foList[id];
    for (var i = 0; i < UFO.requiredAttrParams.length; i++)
    {
      if (typeof FO[UFO.requiredAttrParams[i]] == "undefined") return false;
    }
    return true;
  },

  hasFlashVersion: function(majorVersion, buildVersion)
  {
    var reqVersion = parseFloat(majorVersion + "." + buildVersion);
    if ( navigator.plugins && typeof navigator.plugins["Shockwave Flash"] ==
      "object" )
    {
      var desc = navigator.plugins["Shockwave Flash"].description;
      if (desc)
      {
        var versionStr = desc.replace(/^.*\s+(\S+\s+\S+$)/, "$1");
        var major = parseInt(versionStr.replace(/^(.*)\..*$/, "$1"));
        var build = parseInt(versionStr.replace(/^.*r(.*)$/, "$1"));
        var flashVersion = parseFloat(major + "." + build);
      }
    }
    else if (window.ActiveXObject)
    {
      try
      {
        var flashObj = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
        var desc = flashObj.GetVariable("$version");
        if (desc)
        {
          var versionArr = desc.replace(/^\S+\s+(.*)$/, "$1").split(",");
          var major = parseInt(versionArr[0]);
          var build = parseInt(versionArr[2]);
          var flashVersion = parseFloat(major + "." + build);
        }
      }
      catch(e) {}
    }
    if (typeof flashVersion != "undefined"){
      return (flashVersion >= reqVersion ? true : false);
    }
    return false;
  },

  writeFlashObject: function(id)
  {
    var el = document.getElementById(id);
    if (typeof el.innerHTML == "undefined") return;
    var FO = UFO.foList[id];
    if ( navigator.plugins && typeof navigator.plugins["Shockwave Flash"] ==
      "object" )
    {
      // older versions of Gecko only support innerHTML get and not set
      try { el.innerHTML = "ufo-test"; }
      catch (e) {}
      if (el.innerHTML != "ufo-test")
      {
        while(el.hasChildNodes())
        {
          el.removeChild(el.firstChild);
        }
        var embed = UFO.createElement("embed");
        embed.setAttribute("type", "application/x-shockwave-flash");
        embed.setAttribute( "pluginspage", "http://www.macromedia.com/go/"+
          "getflashplayer" );
        embed.setAttribute("src", FO.movie);
        embed.setAttribute("width", FO.width);
        embed.setAttribute("height", FO.height);
        for (var i = 0; i < UFO.optionalAttrEmb.length; i++)
        {
          if (typeof FO[UFO.optionalAttrEmb[i]] != "undefined")
          {
            embed.setAttribute( UFO.optionalAttrEmb[i],
              FO[UFO.optionalAttrEmb[i]] );
          }
        }
        for (var i = 0; i < UFO.optionalAttrParams.length; i++)
        {
          if (typeof FO[UFO.optionalAttrParams[i]] != "undefined")
          {
            embed.setAttribute( UFO.optionalAttrParams[i],
              FO[UFO.optionalAttrParams[i]] );
          }
        }
        el.appendChild(embed);
      }
      else
      {
        var embHTML = "";
        for (var i = 0; i < UFO.optionalAttrEmb.length; i++)
        {
          if (typeof FO[UFO.optionalAttrEmb[i]] != "undefined")
          {
            embHTML += ' ' + UFO.optionalAttrEmb[i] + '="' +
              FO[UFO.optionalAttrEmb[i]] + '"';
          }
        }
        for (var i = 0; i < UFO.optionalAttrParams.length; i++)
        {
          if (typeof FO[UFO.optionalAttrParams[i]] != "undefined")
          {
            embHTML += ' ' + UFO.optionalAttrParams[i] + '="' +
              FO[UFO.optionalAttrParams[i]] + '"';
          }
        }
        var html = '<embed type="application/x-shockwave-flash" src="' +
          FO.movie + '" width="' + FO.width + '" height="' + FO.height +
          '" pluginspage="http://www.macromedia.com/go/getflashplayer"' +
          embHTML + '></embed>';
        //alert("UFO:"+html);
        el.innerHTML = html;
      }
    }
    else
    {
      var objAttrHTML = "";
      for (var i = 0; i < UFO.optionalAttrObj.length; i++)
      {
        if (typeof FO[UFO.optionalAttrObj[i]] != "undefined")
        {
          objAttrHTML += ' ' + UFO.optionalAttrObj[i] + '="' +
            FO[UFO.optionalAttrObj[i]] + '"';
        }
      }
      var objParamHTML = "";
      for (var i = 0; i < UFO.optionalAttrParams.length; i++)
      {
        if (typeof FO[UFO.optionalAttrParams[i]] != "undefined")
        {
          objParamHTML += '<param name="' + UFO.optionalAttrParams[i] +
            '" value="' + FO[UFO.optionalAttrParams[i]] + '" />';
        }
      }
      var protocol = (window.location.protocol == "https:"?"https:":"http:");
      var html = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-'+
        '444553540000"' + objAttrHTML + ' width="' + FO.width + '" height="' +
        FO.height + '" codebase="' + protocol + '//download.macromedia.com/'+
        'pub/shockwave/cabs/flash/swflash.cab#version=' + FO.majorversion +
        ',0,' + FO.build + ',0"><param name="movie" value="' + FO.movie +
        '" />' + objParamHTML + '</object>';
      //alert("UFO:"+html);
      el.innerHTML = html;
    }
  },

  createModalDialog: function(id)
  {
    var FO = UFO.foList[id];
    UFO.createStyleRule("html", "height:100%; overflow:hidden;");
    UFO.createStyleRule("body", "height:100%; overflow:hidden;");
    UFO.createStyleRule("#xi-con", "position:absolute; left:0; top:0; "+
      "z-index:1000; width:100%; height:100%; background-color:#333; "+
      "filter:alpha(opacity:50); -khtml-opacity:0.5; -moz-opacity:0.5; "+
      "opacity:0.5;");
    UFO.createStyleRule("#xi-mod", "position:absolute; left:50%; top:50%; "+
      "margin-left: -" + (parseInt(FO.xiwidth)/2) + "px; margin-top: -" +
      (parseInt(FO.xiheight)/2) + "px; width:" + FO.xiwidth + "px; height:" +
      FO.xiheight + "px;");
    var body = document.getElementsByTagName("body")[0];
    var container = UFO.createElement("div");
    container.setAttribute("id", "xi-con");
    var dialog = UFO.createElement("div");
    dialog.setAttribute("id", "xi-mod");
    container.appendChild(dialog);
    body.appendChild(container);
    var MMredirectURL = window.location; // MM code
    document.title = document.title.slice(0, 47) + " - Flash Player "+
      "Installation"; // MM code
    var MMdoctitle = document.title; // MM code
    if (UFO.is_ie && UFO.is_win)
    {
      var xiFO = { movie:FO.ximovie, width:FO.xiwidth, height:FO.xiheight,
        majorversion:"6", build:"65", flashvars:"MMredirectURL=" +
        MMredirectURL + "&amp;MMplayerType=ActiveX&amp;MMdoctitle=" +
        MMdoctitle };
    }
    else
    {
      var xiFO = { movie:FO.ximovie, width:FO.xiwidth, height:FO.xiheight,
        majorversion:"6", build:"65", flashvars:"MMredirectURL=" +
        MMredirectURL + "&amp;MMplayerType=PlugIn&amp;MMdoctitle=" +
        MMdoctitle };
    }
    UFO.foList["xi-mod"] = xiFO;
    UFO.writeFlashObject("xi-mod");
  },

  expressInstallCallback: function()
  {
    var body = document.getElementsByTagName("body")[0];
    var dialog = document.getElementById("xi-con");
    body.removeChild(dialog);
    UFO.createStyleRule("body", "height:auto; overflow:auto;");
    UFO.createStyleRule("html", "height:auto; overflow:auto;");
  }
};
