
<!--
function externalLinks() {
if (!document.getElementsByTagName) return; 
var anchors = document.getElementsByTagName("a"); 
for (var i=0; i<anchors.length; i++) { 
var anchor = anchors[i]; 
if (anchor.getAttribute("href") && 
anchor.getAttribute("rel") == "external") 
anchor.target = "_blank";
} 
} 
window.onload = externalLinks;
sfHover = function() {      var sfEls = document.getElementById("navbar").getElementsByTagName("LI");      for (var i=0; i<sfEls.length; i++) {            sfEls[i].onmouseover=function() {                  this.className+=" sfhover";            }            sfEls[i].onmouseout=function() {                  this.className=this.className.replace(new RegExp(" sfhover\\b"), "");            }      }}if (window.attachEvent) window.attachEvent("onload", sfHover);* * Functions to generate OBJECT and EMBED tags for Flash content. * Resource: http://blog.deconcept.com/swfobject/ * * SWFObject is (c) 2006 Geoff Stearns and is released under the MIT License: * http://www.opensource.org/licenses/mit-license.php */if(typeof deconcept == "undefined") var deconcept = new Object();if(typeof deconcept.util == "undefined") deconcept.util = new Object();if(typeof deconcept.SWFObjectUtil == "undefined") deconcept.SWFObjectUtil = new Object();deconcept.SWFObject = function(swf, id, w, h, ver, c, useExpressInstall, quality, xiRedirectUrl, redirectUrl, detectKey){      if (!document.createElement || !document.getElementById) { return; }      this.DETECT_KEY = detectKey ? detectKey : 'detectflash';      this.skipDetect = deconcept.util.getRequestParameter(this.DETECT_KEY);      this.params = new Object();      this.variables = new Object();      this.attributes = new Array();      if(swf) { this.setAttribute('swf', swf); }      if(id) { this.setAttribute('id', id); }      if(w) { this.setAttribute('width', w); }      if(h) { this.setAttribute('height', h); }      if(ver) { this.setAttribute('version', new deconcept.PlayerVersion(ver.toString().split("."))); }      this.installedVer = deconcept.SWFObjectUtil.getPlayerVersion(this.getAttribute('version'), useExpressInstall);      if(c) { this.addParam('bgcolor', c); }      var q = quality ? quality : 'high';      this.addParam('quality', q);      this.setAttribute('useExpressInstall', useExpressInstall);      this.setAttribute('doExpressInstall', false);      var xir = (xiRedirectUrl) ? xiRedirectUrl : window.location;      this.setAttribute('xiRedirectUrl', xir);      this.setAttribute('redirectUrl', '');      if(redirectUrl) { this.setAttribute('redirectUrl', redirectUrl); }}deconcept.SWFObject.prototype = {      setAttribute: function(name, value){            this.attributes[name] = value;      },      getAttribute: function(name){            return this.attributes[name];      },      addParam: function(name, value){            this.params[name] = value;      },      getParams: function(){            return this.params;      },      addVariable: function(name, value){            this.variables[name] = value;      },      getVariable: function(name){            return this.variables[name];      },      getVariables: function(){            return this.variables;      },      getVariablePairs: function(){            var variablePairs = new Array();            var key;            var variables = this.getVariables();            for(key in variables){                  variablePairs.push(key +"="+ variables[key]);            }            return variablePairs;      },      getSWFHTML: function() {            var swfNode = "";            if (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length) { // netscape plugin architecture                  if (this.getAttribute("doExpressInstall")) this.addVariable("MMplayerType", "PlugIn");                  swfNode = '<embed type="application/x-shockwave-flash" src="'+ this.getAttribute('swf') +'" width="'+ this.getAttribute('width') +'" height="'+ this.getAttribute('height') +'"';                  swfNode += ' id="'+ this.getAttribute('id') +'" name="'+ this.getAttribute('id') +'" ';                  var params = this.getParams();                   for(var key in params){ swfNode += [key] +'="'+ params[key] +'" '; }                  var pairs = this.getVariablePairs().join("&");                   if (pairs.length > 0){ swfNode += 'flashvars="'+ pairs +'"'; }                  swfNode += '/>';            } else { // PC IE                  if (this.getAttribute("doExpressInstall")) this.addVariable("MMplayerType", "ActiveX");                  swfNode = '<object id="'+ this.getAttribute('id') +'" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+ this.getAttribute('width') +'" height="'+ this.getAttribute('height') +'">';                  swfNode += '<param name="movie" value="'+ this.getAttribute('swf') +'" />';                  var params = this.getParams();                  for(var key in params) {                   swfNode += '<param name="'+ key +'" value="'+ params[key] +'" />';                  }                  var pairs = this.getVariablePairs().join("&");                  if(pairs.length > 0) {swfNode += '<param name="flashvars" value="'+ pairs +'" />';}                  swfNode += "</object>";            }            return swfNode;      },      write: function(elementId){            if(this.getAttribute('useExpressInstall')) {                  // check to see if we need to do an express install                  var expressInstallReqVer = new deconcept.PlayerVersion([6,0,65]);                  if (this.installedVer.versionIsValid(expressInstallReqVer) && !this.installedVer.versionIsValid(this.getAttribute('version'))) {                        this.setAttribute('doExpressInstall', true);                        this.addVariable("MMredirectURL", escape(this.getAttribute('xiRedirectUrl')));                        document.title = document.title.slice(0, 47) + " - Flash Player Installation";                        this.addVariable("MMdoctitle", document.title);                  }            }            if(this.skipDetect || this.getAttribute('doExpressInstall') || this.installedVer.versionIsValid(this.getAttribute('version'))){                  var n = (typeof elementId == 'string') ? document.getElementById(elementId) : elementId;                  n.innerHTML = this.getSWFHTML();                  return true;            }else{                  if(this.getAttribute('redirectUrl') != "") {                        document.location.replace(this.getAttribute('redirectUrl'));                  }            }            return false;      }}/* ---- detection functions ---- */deconcept.SWFObjectUtil.getPlayerVersion = function(reqVer, xiInstall){      var PlayerVersion = new deconcept.PlayerVersion([0,0,0]);      if(navigator.plugins && navigator.mimeTypes.length){            var x = navigator.plugins["Shockwave Flash"];            if(x && x.description) {                  PlayerVersion = new deconcept.PlayerVersion(x.description.replace(/([a-z]|[A-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".").split("."));            }      }else{            try{                  var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");                  for (var i=3; axo!=null; i++) {                        axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+i);                        PlayerVersion = new deconcept.PlayerVersion([i,0,0]);                  }            }catch(e){}            if (reqVer && PlayerVersion.major > reqVer.major) return PlayerVersion; // version is ok, skip minor detection            // this only does the minor rev lookup if the user's major version             // is not 6 or we are checking for a specific minor or revision number            // see http://blog.deconcept.com/2006/01/11/getvariable-setvariable-crash-internet-explorer-flash-6/            if (!reqVer || ((reqVer.minor != 0 || reqVer.rev != 0) && PlayerVersion.major == reqVer.major) || PlayerVersion.major != 6 || xiInstall) {                  try{                        PlayerVersion = new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","));                  }catch(e){}            }      }      return PlayerVersion;}deconcept.PlayerVersion = function(arrVersion){      this.major = parseInt(arrVersion[0]) != null ? parseInt(arrVersion[0]) : 0;      this.minor = parseInt(arrVersion[1]) || 0;      this.rev = parseInt(arrVersion[2]) || 0;}deconcept.PlayerVersion.prototype.versionIsValid = function(fv){      if(this.major < fv.major) return false;      if(this.major > fv.major) return true;      if(this.minor < fv.minor) return false;      if(this.minor > fv.minor) return true;      if(this.rev < fv.rev) return false;      return true;}/* ---- get value of query string param ---- */deconcept.util = {      getRequestParameter: function(param){            var q = document.location.search || document.location.hash;            if(q){                  var startIndex = q.indexOf(param +"=");                  var endIndex = (q.indexOf("&", startIndex) > -1) ? q.indexOf("&", startIndex) : q.length;                  if (q.length > 1 && startIndex > -1) {                        return q.substring(q.indexOf("=", startIndex)+1, endIndex);                  }            }            return "";      }}/* fix for video streaming bug */deconcept.SWFObjectUtil.cleanupSWFs = function() {      var objects = document.getElementsByTagName("OBJECT");      for (var i=0; i < objects.length; i++) {            for (var x in objects[i]) {                  if (typeof objects[i][x] == 'function') {                        objects[i][x] = null;                  }            }      }}if (typeof window.onunload == 'function') {      var oldunload = window.onunload;            window.onunload = function() {            deconcept.SWFObjectUtil.cleanupSWFs();            oldunload();      }} else {      window.onunload = deconcept.SWFObjectUtil.cleanupSWFs;}/* add Array.push if needed (ie5) */if (Array.prototype.push == null) { Array.prototype.push = function(item) { this[this.length] = item; return this.length; }}/* add some aliases for ease of use/backwards compatibility */var getQueryParamValue = deconcept.util.getRequestParameter;var FlashObject = deconcept.SWFObject; // for legacy supportvar SWFObject = deconcept.SWFObject;/* * Functions to generate OBJECT and EMBED tags for QuickTime content. * Resource: http://developer.apple.com/internet/ieembedfix.html *//************** LOCALIZABLE GLOBAL VARIABLES ****************/var gArgCountErr =      'The "%%" function requires an even number of arguments.'                        +      '\nArguments should be in the form "atttributeName", "attributeValue", ...';/******************** END LOCALIZABLE **********************/var gTagAttrs                        = null;var gQTGeneratorVersion            = 1.0;function AC_QuickTimeVersion()      { return gQTGeneratorVersion; }function _QTComplain(callingFcnName, errMsg){    errMsg = errMsg.replace("%%", callingFcnName);      alert(errMsg);}function _QTAddAttribute(prefix, slotName, tagName){      var            value;      value = gTagAttrs[prefix + slotName];      if ( null == value )            value = gTagAttrs[slotName];      if ( null != value )      {            if ( 0 == slotName.indexOf(prefix) && (null == tagName) )                  tagName = slotName.substring(prefix.length);             if ( null == tagName )                   tagName = slotName;            return tagName + '="' + value + '" ';      }      else            return "";}function _QTAddObjectAttr(slotName, tagName){      // don't bother if it is only for the embed tag      if ( 0 == slotName.indexOf("emb#") )            return "";      if ( 0 == slotName.indexOf("obj#") && (null == tagName) )            tagName = slotName.substring(4);       return _QTAddAttribute("obj#", slotName, tagName);}function _QTAddEmbedAttr(slotName, tagName){      // don't bother if it is only for the object tag      if ( 0 == slotName.indexOf("obj#") )            return "";      if ( 0 == slotName.indexOf("emb#") && (null == tagName) )            tagName = slotName.substring(4);       return _QTAddAttribute("emb#", slotName, tagName);}function _QTAddObjectParam(slotName, generateXHTML){      var            paramValue;      var            paramStr = "";      var            endTagChar = (generateXHTML) ? ' />' : '>';      if ( -1 == slotName.indexOf("emb#") )      {            // look for the OBJECT-only param first. if there is none, look for a generic one            paramValue = gTagAttrs["obj#" + slotName];            if ( null == paramValue )                  paramValue = gTagAttrs[slotName];            if ( 0 == slotName.indexOf("obj#") )                  slotName = slotName.substring(4);                   if ( null != paramValue )                  paramStr = '  <param name="' + slotName + '" value="' + paramValue + '"' + endTagChar + '\n';      }      return paramStr;}function _QTDeleteTagAttrs(){      for ( var ndx = 0; ndx < arguments.length; ndx++ )      {            var attrName = arguments[ndx];            delete gTagAttrs[attrName];            delete gTagAttrs["emb#" + attrName];            delete gTagAttrs["obj#" + attrName];      }}            // generate an embed and object tag, return as a stringfunction _QTGenerate(callingFcnName, generateXHTML, args){      // is the number of optional arguments even?      if ( args.length < 4 || (0 != (args.length % 2)) )      {            _QTComplain(callingFcnName, gArgCountErr);            return "";      }            // allocate an array, fill in the required attributes with fixed place params and defaults      gTagAttrs = new Array();      gTagAttrs["src"] = args[0];      gTagAttrs["width"] = args[1];      gTagAttrs["height"] = args[2];      gTagAttrs["classid"] = "clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B";      gTagAttrs["pluginspage"] = "http://www.apple.com/quicktime/download/";      // set up codebase attribute with specified or default version before parsing args so      //  anything passed in will override      var activexVers = args[3]      if ( (null == activexVers) || ("" == activexVers) )            activexVers = "6,0,2,0";      gTagAttrs["codebase"] = "http://www.apple.com/qtactivex/qtplugin.cab#version=" + activexVers;      var      attrName,            attrValue;      // add all of the optional attributes to the array      for ( var ndx = 4; ndx < args.length; ndx += 2)      {            attrName = args[ndx].toLowerCase();            attrValue = args[ndx + 1];            // "name" and "id" should have the same value, the former goes in the embed and the later goes in            //  the object. use one array slot             if ( "name" == attrName || "id" == attrName )                  gTagAttrs["name"] = attrValue;            else                   gTagAttrs[attrName] = attrValue;      }      // init both tags with the required and "special" attributes      var objTag =  '<object '                              + _QTAddObjectAttr("classid")                              + _QTAddObjectAttr("width")                              + _QTAddObjectAttr("height")                              + _QTAddObjectAttr("codebase")                              + _QTAddObjectAttr("name", "id")                              + _QTAddObjectAttr("tabindex")                              + _QTAddObjectAttr("hspace")                              + _QTAddObjectAttr("vspace")                              + _QTAddObjectAttr("border")                              + _QTAddObjectAttr("align")                              + _QTAddObjectAttr("class")                              + _QTAddObjectAttr("title")                              + _QTAddObjectAttr("accesskey")                              + _QTAddObjectAttr("noexternaldata")                              + '>\n'                              + _QTAddObjectParam("src", generateXHTML);      var embedTag = '  <embed '                              + _QTAddEmbedAttr("src")                              + _QTAddEmbedAttr("width")                              + _QTAddEmbedAttr("height")                              + _QTAddEmbedAttr("pluginspage")                              + _QTAddEmbedAttr("name")                              + _QTAddEmbedAttr("align")                              + _QTAddEmbedAttr("tabindex");      // delete the attributes/params we have already added      _QTDeleteTagAttrs("src","width","height","pluginspage","classid","codebase","name","tabindex",                              "hspace","vspace","border","align","noexternaldata","class","title","accesskey");      // and finally, add all of the remaining attributes to the embed and object      for ( var attrName in gTagAttrs )      {            attrValue = gTagAttrs[attrName];            if ( null != attrValue )            {                  embedTag += _QTAddEmbedAttr(attrName);                  objTag += _QTAddObjectParam(attrName, generateXHTML);            }      }       // end both tags, we're done      return objTag + embedTag + '> </em' + 'bed>\n</ob' + 'ject' + '>';}// return the object/embed as a stringfunction QT_GenerateOBJECTText(){      return _QTGenerate("QT_GenerateOBJECTText", false, arguments);}function QT_GenerateOBJECTText_XHTML(){      return _QTGenerate("QT_GenerateOBJECTText_XHTML", true, arguments);}function QT_WriteOBJECT(){      document.writeln(_QTGenerate("QT_WriteOBJECT", false, arguments));}function QT_WriteOBJECT_XHTML(){      document.writeln(_QTGenerate("QT_WriteOBJECT_XHTML", true, arguments));}-->