/*
  Glossator
  
  (c) 2006 VividVisions
  www.vividvisions.at
  URL: "/Glossary/tabid/87/language/de-DE/Default.aspx",
*/


var Glossator = {

  /*****************
   * Configuration *
   *****************/
  cssClass:"glossary",
  URL: "/Glossary/tabid/87/language/de-DE/Default.aspx",
  anchorPrefix:"",
  keyTag:"h3",
  descriptionTag:"p",
  defaultLanguage:"de",
  
  /*****************
   * Localizations *
   *****************/
  de : {
    BPM: "Business Process Management",
    EAM: "Enterprise Architecture Management",
    ERP: "Enterprise Resource Planning",
    PDF: "Portable Document Format (Deutsch)",
    ZIP: "Das ZIP-Dateiformat ist ein offenes Format zur komprimierten Archivierung von Dateien. Die Archivdateien tragen üblicherweise die Endung .zip.",
    MB:"Megabyte"
  },
  
  en: {
    BPM: "Business Process Management",
    EAM: "Enterprise Architecture Management",
    ERP: "Enterprise Resource Planning",
    PDF: "Portable Document Format (Englisch)",
    ZIP: "ZIP (Englisch)",
    MB:"Megabytes (Englisch)"
  },

  /*************
   * Functions *
   *************/
  write : function (language)
  {
    if (language == null)
      language = this.defaultLanguage;
      
    if (this[language] == null)
      return;

    // Sort the keys alphabetically
    var sortArray = new Array();  
    for (var key in this[language])
      sortArray.push(key);
    sortArray.sort();
    
    for (var i = 0; i < sortArray.length; i++)
    {
      var key = sortArray[i];

      document.write("<a name=\""+ this.anchorPrefix + key + "\"></a>");  

      if (this.keyTag != null)
        document.write("<" + this.keyTag + ">");

      document.write(key);
      
      if (this.keyTag != null)
        document.writeln("</" + this.keyTag + ">");
 
      if (this.descriptionTag != null)
        document.write("<" + this.descriptionTag + ">");

      document.write(this[language][key]);

      if (this.descriptionTag != null)
        document.writeln("</" + this.descriptionTag + ">");
    } 
  },
  
  load: function () {
    Glossator.require();

     // Add a DIV to BODY
    var glossary_div = document.createElement("div");
    glossary_div.setAttribute("id",Glossator.id);
    glossary_div.setAttribute("style","display:none;");

    var body = document.getElementsByTagName("body")[0];
    body.appendChild(glossary_div);
    
    // Apply event to all glossary items
    var elements = document.getElementsByClassName(Glossator.cssClass);
    
    for (var i = 0; i < elements.length; i++)
    {
      var el = elements[i];
      
      Event.observe(el, 'mouseover', function (e) {
        if (!Glossator.isActive)
        {
          var language = Event.element(e).getAttribute("lang");
          if (language == null || language == "")
            language = Glossator.defaultLanguage;
            
          var key = Event.element(e).innerHTML.replace(/\s/g,"");
          var str = "";

          if (Glossator[language] == null)
            str = "Language '"+ language + "' not found in glossary!";
          else
          {
            if (Glossator[language][key])
              str = Glossator[language][key];
            else if (Glossator.defaultLanguage != language && Glossator[Glossator.defaultLanguage][key])
              str = Glossator[Glossator.defaultLanguage][key];
            else 
              str = "No entry with key '" + key + "' not found in glossary!";
          }
          // Preset position for Firefox
          Element.setStyle(Glossator.id, {left:Event.pointerX(e) + 10 + "px"});
          Element.setStyle(Glossator.id, {top:Event.pointerY(e) + 10 + "px"});

          Element.update(Glossator.id, str);
          Element.show(Glossator.id);

          Glossator.isActive = true;
        }
      });
        
      Event.observe(el, 'mousemove', function (e) {
        var screenWidth = Element.getDimensions(document.getElementsByTagName("body")[0]).width;
        var divWidth = Element.getDimensions(Glossator.id).width;
        var x = Event.pointerX(e) + 10;
        
        if ((x + divWidth) > screenWidth)
          x = x - ((x+divWidth) - screenWidth) - 10;
        
        Element.setStyle(Glossator.id, {left:x + "px"});
        Element.setStyle(Glossator.id, {top:Event.pointerY(e) + 10 + "px"});
      });

      Event.observe(el, 'mouseout', function (e) {
        Glossator.isActive = false;
        Element.hide(Glossator.id);
      });

      if (Glossator.URL != null)
        Event.observe(el, 'click', function (e) {
          location.href = Glossator.URL + "#" + Glossator.anchorPrefix + Event.element(e).innerHTML;
        });
    }
  },
  
  require: function () {
    if((typeof Prototype == 'undefined') || 
         (typeof Element == 'undefined') || 
         (typeof Element.Methods == 'undefined') ||
         parseFloat(Prototype.Version.split(".")[0] + "." +
                    Prototype.Version.split(".")[1]) < 1.5)
                      throw("Glossator "+ Glossator.Version +" requires the Prototype JavaScript framework >= 1.5.0");
  },
  
  /******************************
   * Please do not change these *
   ******************************/
  Version:'1.2',
  isActive:false,
  id:"glossary"
};

Element.observe(window, "load", Glossator.load, false);
