//
// COMMUNITOR SiteWare 2.0 Site Server
// Copyright by COMMUNITOR Internetservice GmbH, 2001-2010
//

Element.addMethods({
  getMaxZIndex: function (element,elementIncluded) {
    element = $(element);
    var z,i;
    if (elementIncluded == true)
      i = parseInt(element.getStyle('z-index'));
    if (!i || isNaN(i))
      i = 0;
    element.descendants().each(function(el){
      z = parseInt(el.getStyle('z-index'));
      if (!isNaN(z) && i < z) i = z;
    });
    return i;
  }
});

/* prototype requires doctype to not use quirksmode which we do sometimes */
/* so wie overwrite getDimens... */
document.viewport.getDimensions = function() {
  var dimensions = { };
  var B = Prototype.Browser;
  $w('width height').each(function(d) {
    var D = d.capitalize();
    dimensions[d] = (B.WebKit && !document.evaluate) ? self['inner' + D] :
      (B.Opera && !(window.opera.version && parseFloat(window.opera.version()) >= 9.5)) ?
      document.body['client' + D] : (document.documentElement['client' + D] || document.body['client' + D]);
  });
  return dimensions;
}

Object.extend(String.prototype, {
  htmlEntityDecode: function() {
    var source = this,el = new Element('TEXTAREA');
    el.innerHTML = this.replace(/</g,"&lt;").replace(/>/g,"&gt;");
    return el.value;
  },
  applyBaseHref: function(baseHref) {
    var source = this, match, proto, fileName, domainPath, domain;
    // if string has proto or no base href was given then just return a copy of string
    if (!baseHref || (source.indexOf('://') > -1))
      return source.substr(0);
    // analyzing base href
    // strip proto part
    match = baseHref.match(/([^:]+:\/\/)(.*)/);
    if (match) {
      proto = match[1];
      baseHref = match[2];
    }
    // strip file name
    if ((match = baseHref.lastIndexOf('/')) > -1) {
      domainPath = baseHref.substr(0,match+1);
      fileName = baseHref.substr(match+1);
    } else {
      if (proto) {
        domainPath = baseHref + '/';
        fileName = '';
      } else {
        domainPath = '';
        fileName = baseHref ;
      }
    }
    // strip domain
    if (proto) {
      // apply base href to string
      if (source.indexOf('/') == 0) {
        match = domainPath.indexOf('/');
        return proto + domainPath.substr(0, match) + source;
      }
      return proto + domainPath + source;
    }
    
    if (source.indexOf('/') == 0)
      return source.substr(0);
      
    return domainPath + source;
  }
});

var SWdimensions = Class.create();
Object.extend(SWdimensions.prototype, {
  initialize: function() {
    var myself = this;
    if (Object.isElement(arguments[0])) {
      this.setFromElement(arguments[0]);
    } else if (Object.isString(arguments[0]) || Object.isNumber(arguments[0])) {
      ['top','left','width','height'].each(function(s,pos){
        myself[s] = parseInt(arguments[pos]);
        if (isNaN(myself[s]))
          myself[s] = 0;
      });
    } else if (!Object.isUndefined(arguments[0])) {
      var obj = arguments[0];
      ['top','left','width','height'].each(function(s){
        if (obj[s]) {
          if (Object.isString(obj[s]))
            myself[s] = parseInt(obj[s]);
          else if (Object.isNumber(obj[s]))
            myself[s] = obj[s];
        }
      });
    }
  },
  setFromElement: function(element) {
    var object = this;
    ['top','left','width','height'].each(function(s){object[s] = parseInt(element.getStyle(s));});
  },
  getStyle: function() {
    return {top: this.top + 'px', left: this.left + 'px', width: this.width + 'px', height: this.height + 'px'};
  },
  toJSON: function() {
    var results = [], object = this;
    ['top','left','width','height'].each(function(property){
      var value = Object.toJSON(object[property]);
      if (!Object.isUndefined(value))
        results.push(property.toJSON() + ': ' + value);
    });
    return '{' + results.join(', ') + '}';
  },
  toString: this.toJSON,
  top:    0,
  left:   0,
  width:  0,
  height: 0
});

Object.extend(Effect.Transitions, {
  round: function(pos) {
    return Math.round(pos);
  },
  twenty: function(pos) {
    return (pos < 0.16) ? 0 : 1
  },
  eighty: function(pos) {
    return (pos > 0.84) ? 1 : 0
  }
});

/*************************************/
/*  Mouse-Rollover-Klasse SWrollover */
/*************************************/
var SWrollover = Class.create();
Object.extend(SWrollover.prototype, {
  // container containing roll over links
  initialize: function(container) {
    this.container = $(container);
    this.options = Object.extend({
      selector: ['a[rel]','area[rel]','input[type="image"]']
    }, arguments[1] || { });
    // selector is rel
    var links = this.container.select(this.options.selector);
    var rel;
    for (var i=0,l=links.length;i<l;++i) {
      rel = links[i].readAttribute('rel');
      if (!rel) continue;
        rel = rel.replace('http://','http_//').split(':');
      if (rel[0] == 'SWrollover') {
        this.setupRollover(links[i],rel[1].replace('http_//','http://').split(','));
      } else if (rel[2] == 'SWrollover') {
        this.setupRollover(links[i],rel[3].replace('http_//','http://').split(','));
      }
    }
  },
  setupRollover: function(link,data) {
    // first is rollover, second is selected
    image = $(data[0]);
    if (!image)
      return;
    link.rolloverRepository = {
      state: null,
      element: image,
      src: image.src,
      over: null,
      click: null,
      getImage: function() {return this.src},
      setImage: function(src) {
        this.src = src.applyBaseHref(this.src);
        // preload rollover image
        (new Image()).src = this.src;
        if (!this.state)
          this.element.src = this.src;
      },
      getOverImage: function() {return this.over},
      setOverImage: function(src) {
        this.over = src.applyBaseHref(this.src);
        // preload rollover image
        (new Image()).src = this.over;
        if (this.state == 'over')
          this.element.src = this.over;
      },
      getClickImage: function() {return this.click},
      setClickImage: function(src) {
        this.click = src.applyBaseHref(this.src);
        // preload rollover image
        (new Image()).src = this.click;
        if (this.state == 'clicked')
          this.element.src = this.click;
      }
    };
    // backlink from image
    if (!image.rolloverHandlers)
      image.rolloverHandlers = new Array();
    image.rolloverHandlers[image.rolloverHandlers.length] = link.rolloverRepository;
    if (data[1] && data[1] != "") {
      this.setupOverHandler(link);
      link.rolloverRepository.setOverImage(data[1]);
    }
    if (data[2] && data[2] != "") {
      this.setupClickHandler(link);
      link.rolloverRepository.setClickImage(data[2]);
    }
  },
  getImage:      function(item)     {return item.getImage();},
  setImage:      function(item,src) {return item.setImage(src);},
  getOverImage:  function(item)     {return item.getOverImage();},
  setOverImage:  function(item,src) {return item.setOverImage(src);},
  getClickImage: function(item)     {return item.getClickImage();},
  setClickImage: function(item,src) {return item.setClickImage(src);},
  setupOverHandler: function(link) {
    link.observe('mouseover', this.overImage);
    link.observe('mouseout', this.restoreImage);
  },
  setupClickHandler: function(link) {
    link.observe('mousedown', this.clickImage);
  },
  overImage: function(e) {
    var item = this.rolloverRepository;
    if (!item || item.state == 'over')
      return;
    item.element.src = item.over;
    item.state = 'over';
  },
  clickImage: function(e) {
    var item = this.rolloverRepository;
    if (!item || item.state == 'clicked')
      return;
    item.element.src = item.click;
    item.state = 'clicked';
  },
  restoreImage: function(e) {
    var item = this.rolloverRepository;
    if (!item || !item.state)
      return;
    item.element.src = item.src;
    item.state = null;
  }
});


/*************************************/
/*  Ajax-Klassen                     */
/*************************************/
var SWGetObjectHandler = function(t) {
  var xmlDoc = t.responseXML.documentElement;
  var target, tagName;
  var nodes=xmlDoc.childNodes;
  for (var i=0,l=nodes.length;i<l;++i) {
    if (nodes[i].nodeName) {
      tagName = nodes[i].nodeName.split(":");
      if (tagName[0] == "siteware") {
        try {
          if (tagName[1] == "objectID") {
            $("idObjectID").value = nodes[i].firstChild.nodeValue;
          } else {
            target = $(nodes[i].getAttribute("for"));
            if (target) {
              target.update(nodes[i].firstChild.nodeValue.replace(/\]\]->/g, "]]"+">"));
              SWwindowInit(target);
            }
          }
        } catch (e) {
          alert("Update failed with message: "+e);
        }
      }
    }
  }
  return;
}
var SWErrorHandler = function(t) {
    alert('Error ' + t.status + ' -- ' + t.statusText);
}

Ajax.Responders.register({
  onCreate: function(f) {
    if (f.options.btn)
      f.options.btn.invoke('setStyle',{visibility:'visible'});
    else if (Ajax.activeRequestCount > 0) {
      var s = $("idAjaxStatus");
      if (s) s.setStyle({visibility:'visible'});
    }
  },
  onComplete: function(f) {
    if (f.options.btn)
      f.options.btn.invoke('setStyle',{visibility:'hidden'});
    else if (Ajax.activeRequestCount == 0) {
      var s = $("idAjaxStatus");
      if (s) s.setStyle({visibility:'hidden'});
    }
  }
});
/*************************************/
/*  Highlight-Klassen                */
/*************************************/
var SWre = {
  on:        /-(armed|off)\.(gif|jpg|png)$/,
  off:       /-(armed|on)\.(gif|jpg|png)$/,
  armed:     /-(off|on)\.(gif|jpg|png)$/,
  trMatch:   /(redir|Redirect\.asp)\?link=/,
  trReplace: /.+(redir|Redirect\.asp)\?link=([^;]+);.*/
}
var SWbase = window.location.href.split('/').slice(0,3).join('/') + '/';
var SWblur = function(){if(this.blur)this.blur();}
var SWtrackLink = function(ev,url){pageTracker._trackEvent('Link','Click',url,1);}
var SWhighlight = function() {
  if (!SWclickedItem || this != SWclickedItem) {
    this.addClassName('rowHover');
    if (arguments[1] && arguments[1].length > 0)
      arguments[1].each(SWhighlightBtn);
    if (arguments[2] && arguments[2].length > 0)
      arguments[2].invoke('setStyle',{visibility:'visible'});
  }
}
var SWunHighlight = function() {
  if (!SWclickedItem || this != SWclickedItem) {
    this.removeClassName('rowHover');
    if (arguments[1] && arguments[1].length > 0)
      arguments[1].each(SWunHighlightBtn);
    if (arguments[2] && arguments[2].length > 0)
      arguments[2].invoke('setStyle',{visibility:'hidden'});
  }
}
var SWhighlightBtn = function(el) {
  if (el.src) el.src = el.src.replace(SWre.on,'-on.$2');
}
var SWunHighlightBtn = function(el) {
  if (el.src) el.src = el.src.replace(SWre.off,'-off.$2');
}
var SWarmBtn = function(el) {
  if (el.src) el.src = el.src.replace(SWre.armed,'-armed.$2');
}
var SWclick = function(msg) {
  if (SWclickedItem && this != SWclickedItem) {
    SWclickedItem.removeClassName('rowActive');
    if (SWclickedBtnHl && SWclickedBtnHl.length > 0)
      SWclickedBtnHl.each(SWunHighlightBtn);
    if (SWclickedBtnVs && SWclickedBtnVs.length > 0)
      SWclickedBtnVs.invoke('setStyle',{visibility:'hidden'});
  }
  if (!SWclickedItem || this != SWclickedItem || msg == 'clicked') {
    SWclickedItem = this;
    this.addClassName('rowActive').removeClassName('rowHover');
    if (arguments[1] && arguments[1].length > 0) {
      SWclickedBtnHl = arguments[1];
      SWclickedBtnHl.each(SWarmBtn);
    }
    if (arguments[2] && arguments[2].length > 0) {
      SWclickedBtnVs = arguments[2];
      SWclickedBtnVs.invoke('setStyle',{visibility:'visible'});
    }
  }
}
var SWregisterHighlightHandler = function(el) {
  if (el.SWoverHandler)
    Event.stopObserving(el,'mouseover',el.SWoverHandler);
  if (el.SWoutHandler)
    Event.stopObserving(el,'mouseout',el.SWoutHandler);
  el.SWoverHandler = SWhighlight.bindAsEventListener(el,el.select('[class~="SW_BTN_HL"]'),el.select('[class~="SW_BTN_HD"]'));
  el.SWoutHandler = SWunHighlight.bindAsEventListener(el,el.select('[class~="SW_BTN_HL"]'),el.select('[class~="SW_BTN_HD"]'));
  Event.observe(el,'mouseover',el.SWoverHandler);
  Event.observe(el,'mouseout',el.SWoutHandler);
  return {'el':el,'mouseover':el.SWoverHandler,'mouseout':el.SWoutHandler};
}
var SWregisterClickHandler = function(el) {
  if (el.SWclickHandler)
    Event.stopObserving(el,'click',el.SWclickHandler);
  el.SWclickHandler = SWclick.bindAsEventListener(el,el.select('[class~="SW_BTN_HL"]'),el.select('[class~="SW_BTN_HD"]'));
  Event.observe(el,'click',el.SWclickHandler);
  return {'el':el,'click':el.SWclickHandler};
}
var SWmakeFocusHidable = function(el) {
  if (el.tagName.toLowerCase() == "area")
    el.observe('click',SWblur.bindAsEventListener(el));
  else
    el.observe('focus',SWblur.bindAsEventListener(el));
}
var SWregisterClickTracker = function(el) {
  if (el.href.startsWith('http:') && !el.href.startsWith(SWbase))
    el.observe('click',SWtrackLink.bindAsEventListener(el,el.href));
  else if (el.href.match(SWre.trMatch))
    el.observe('click',SWtrackLink.bindAsEventListener(el,unescape(el.href.replace(SWre.trReplace,"$2"))));
}
var SWaddFavorite = function(clickTag,url,title) {
  url=(typeof(url)=='undefined')?self.location.href:url;
  title=(typeof(title)=='undefined')?window.title:title;
  if (Prototype.Browser.IE) {
    window.external.AddFavorite(url, title);
  } else if (Prototype.Browser.Opera) {
    clickTag.setAttribute('href',url);
    clickTag.setAttribute('title',title);
    clickTag.setAttribute('rel','sidebar');
    clickTag.click();
  } else if (window.sidebar) {
    window.sidebar.addPanel(title, url, "");
  } else {
    var msg = 'Bitte dr'+unescape('%FC')+'cken Sie ';
    msg += (navigator.userAgent.toLowerCase().indexOf('mac')!=-1)?'Command/Cmd':'STRG';
    msg += ' + D,\num diese Seite als Lesezeichen zu speichern!'
    alert(msg);
  }
}

var SWsetHomePage = function(clickTag) {
  if (Prototype.Browser.IE) {
    clickTag.style.behavior='url(#default#homepage)';
    clickTag.setHomePage(clickTag.href);
  } else {
    var msg = 'Bitte ziehen Sie das Haus-Icon, auf das Sie gerade geklickt haben,\nauf das Homepage Icon Ihres Browsers!';
    msg += '\n\nSie werden dann gefragt, ob Sie '+clickTag.href+' als Startseite einrichten m'+unescape('%F6')+'chten.';
    alert(msg);
  }
  return false;
}

var SWwindowInit = function(target) {
  target = $(target);
  // first unregister old handlers that have the same target bound to
  if (SWhandlerCache[target.id]) {
    var myCache = SWhandlerCache[target.id],el;
    for (var i=0,len=myCache.length;i<len;++i) {
      el = myCache[i];
      if (el.click)     Event.stopObserving(el.el,'click',el.click);
      if (el.mouseover) Event.stopObserving(el.el,'mouseover',el.mouseover);
      if (el.mouseout)  Event.stopObserving(el.el,'mouseout',el.mouseout);
    }
  }
  SWhandlerCache[target.id] = [];
  // initialize highlightables and clickables
  if (target.hasClassName('SW_CL')) {
    SWhandlerCache[target.id].push(SWregisterClickHandler(target));
    // tell children that they just have been clicked...
    target.SWclickHandler('clicked');
  } else {
    target.select('[class~="SW_CL"]').collect(SWregisterClickHandler).each(function(el) {SWhandlerCache[target.id].push(el)});
  }
  
  if (target.hasClassName('SW_HL'))
    SWhandlerCache[target.id].push(SWregisterHighlightHandler(target));
  else
    target.select('[class~="SW_HL"]').collect(SWregisterHighlightHandler).each(function(el) {SWhandlerCache[target.id].push(el)});
  // initialize rollover images
  new SWrollover(target);
  // initialize dropdown menus
  if (!Object.isUndefined(window.SWmenu)) new SWmenu(target);
  // initialize popup windows
  if (!Object.isUndefined(window.SWpopupCollection)) new SWpopupCollection(target);
  // remove focus boxes from links
  target.select(['a','input[type="image"]','area']).each(SWmakeFocusHidable);
  // add click tracking
  if (typeof pageTracker != 'undefined')
    target.select('a').each(SWregisterClickTracker);
}

var SWclickedItem  = null;
var SWclickedBtnHl = null;
var SWclickedBtnVs = null;
var SWhandlerCache = {};

var __windowInit = function() {
  SWwindowInit(document.getElementsByTagName("body")[0]);
  if (Prototype.Browser.IE) {
    try {
      document.execCommand("BackgroundImageCache", false, true);
    } catch(err) {}
  }
}

Event.observe(window,"load",__windowInit);
// bei Nägele&Strubell wegen Iframe deaktivieren
if(top!=self)top.location.href=self.location.href;