
var undefined;

//##########################################################
//##########################################################
//  BGZoom
//  Author: df
//  13.01.2009
//##########################################################
//##########################################################

function BGZoom(id) {
  this.id = undefined;
  this.item = undefined;
  
  this._setID(id);
}

//##########################################################

BGZoom.prototype._setID = function (str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("BGZoom->_setID: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("BGZoom->_setID: Argument str ist nicht vom Typ String!");
  }
  this.id = str;
}          

//##########################################################

BGZoom.prototype.setItem = function (obj) {
  if (arguments.length != 1) {
    focus();
    throw new Error("BGZoom->setItem: Falsche Anzahl von Argumenten!");
  }
  if (! (obj instanceof BGZoomImage)) {
    focus();
    throw new Error('BGZoom->setItem: Argument obj ist keine Instance von BGZoomImage!');
  }
  this.item = obj;
}                    

//##########################################################

BGZoom.prototype.resize = function (idx) {
  var rw = BGZoom.getScreenWidth();
  var rh = BGZoom.getScreenHeight();
  if ((rw * this.item.raster) > rh) {
       this.item.img.style.width = '100%'; 
       this.item.img.style.height = 'auto'; 
       return;
  }
   this.item.img.style.height = '100%'; 
   this.item.img.style.width = 'auto'; 
}          

//##########################################################

BGZoom.prototype.run = function () {
  var id = this.id;
  var onresizeFunc = function () {
    BGZoom.getInstance(id).resize();
  }
  BGZoom.addEvent('load', window, onresizeFunc);
  BGZoom.addEvent('resize', window, onresizeFunc);
}    

//##########################################################

BGZoom._increment = [];
BGZoom._registerInstance = {};
BGZoom._registerInstanceLength = [];

//##########################################################

BGZoom.getInstance = function(id) {
  if (arguments.length!=1) {
    focus();
    throw new Error("BGZoom.getInstance: Falsche Anzahl von Argumenten!");
  }
  if (! (BGZoom._registerInstance[id])){
    focus();
    throw new Error("BGZoom.getInstance: Es ist keine BGZoom.Instance mit id=" + id + " registriert!");
  }
  return BGZoom._registerInstance[id];
}

//##########################################################

BGZoom.createInstance = function(id) {
  if (!arguments.length) {
    id = 'BGZoom' + BGZoom._increment.length;
    BGZoom._increment.push(1);
  }
  if (! (BGZoom._registerInstance[id])){
    BGZoom._registerInstance[id] = new BGZoom(id);
    BGZoom._registerInstanceLength.push(id);
  } else {
    focus();
    throw new Error("BGZoom.createInstance: id schon vorhanden!");
  }
  return BGZoom.getInstance(id);
}                    

//##########################################################

BGZoom.getScreenWidth = function () {
    var x = document['body'].offsetWidth;
    return x;
}                       

//##########################################################

BGZoom.getScreenHeight = function () {
    var y = document['body'].offsetHeight;
    return y;
}           

// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

BGZoom.addEvent = function(oneEvent, obj, handler, bol, ieWindow){
  if (arguments.length < 3) {
    focus();
    throw new Error('BGZoom.addEvent: Falsche Anzahl von Argumenten!');
  }
  if(window.addEventListener){
    // Other
    obj.addEventListener(oneEvent, handler, bol);
  } else if(obj.attachEvent){
    // IE
    var win = window;
    if (ieWindow) {
      win = ieWindow;
    }
    obj['e' + oneEvent + handler] = handler;
    obj[oneEvent + handler] = function() { obj['e' + oneEvent + handler] ( win.event ); win.event.cancelBubble = true;};
    obj.attachEvent('on' + oneEvent, obj[oneEvent + handler]);
  }
  return true;
}

// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

BGZoom.removeEvent = function(oneEvent, obj, handler, bol){
  if (arguments.length < 3) {
    focus();
    throw new Error('BGZoom.removeEvent: Falsche Anzahl von Argumenten!');
  }
  if(window.removeEventListener){
    // Other
    obj.removeEventListener(oneEvent, handler, bol);
  } else if(obj.detachEvent){
    // IE
    obj.detachEvent( "on"+ oneEvent, obj[oneEvent + handler] );
    obj[oneEvent + handler] = undefined;
    obj["e" + oneEvent + handler] = undefined;
  }
  return true;
}                     

//##########################################################

BGZoom.refresh = function () {
  location.reload();
}                

//##########################################################
//##########################################################
//  BGZoomImage
//##########################################################
//##########################################################

function BGZoomImage(id) {
  this.id = undefined;
  this.img = undefined;    
  this.raster = 0.75; // 0.75 = 4:3
  this.bgcolor = undefined;
  
  this._setID(id);
}

//##########################################################

BGZoomImage.prototype._setID = function (str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("BGZoomImage->_setID: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("BGZoomImage->_setID: Argument str ist nicht vom Typ String!");
  }
  this.id = str;
}             

//##########################################################

BGZoomImage.prototype.setImg = function (str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("BGZoomImage->setImg: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("BGZoomImage->setImg: Argument str ist nicht vom Typ String!");
  }
  var img = document.getElementById(str);
  if (! img) {
    focus();
    throw new Error("BGZoomImage->setImg: Es existiert kein HTML-Element vom Typ img mit id="+ str +"!");
  }
  this.img = img;
}                     

//##########################################################

BGZoomImage.prototype.setBgcolor = function (str) {
  if (arguments.length != 1) {
    focus();
    throw new Error("BGZoomImage->setBgcolor: Falsche Anzahl von Argumenten!");
  }
  if (typeof str != "string") {
    focus();
    throw new Error("BGZoomImage->setBgcolor: Argument str ist nicht vom Typ String!");
  }
  this.bgcolor = str;
}                     

//##########################################################

BGZoomImage.prototype.setRaster = function (n) {
  if (arguments.length != 1) {
    focus();
    throw new Error("BGZoomImage->setRaster: Falsche Anzahl von Argumenten!");
  }
  if (typeof n != 'number') {
    focus();
    throw new Error('BGZoomImage->setRaster: Argument n ist nicht vom Typ number!');
  }
  this.raster = n;
}             

//##########################################################

BGZoomImage._increment = [];
BGZoomImage._registerInstance = {};
BGZoomImage._registerInstanceLength = [];

//##########################################################

BGZoomImage.getInstance = function(id) {
  if (arguments.length!=1) {
    focus();
    throw new Error("BGZoomImage.getInstance: Falsche Anzahl von Argumenten!");
  }
  if (! (BGZoomImage._registerInstance[id])){
    focus();
    throw new Error("BGZoomImage.getInstance: Es ist keine BGZoomImage.Instance mit id=" + id + " registriert!");
  }
  return BGZoomImage._registerInstance[id];
}

//##########################################################

BGZoomImage.createInstance = function(id) {
  if (!arguments.length) {
    id = 'BGZoomImage' + BGZoomImage._increment.length;
    BGZoomImage._increment.push(1);
  }
  if (! (BGZoomImage._registerInstance[id])){
    BGZoomImage._registerInstance[id] = new BGZoomImage(id);
    BGZoomImage._registerInstanceLength.push(id);
  } else {
    focus();
    throw new Error("BGZoomImage.createInstance: id schon vorhanden!");
  }
  return BGZoomImage.getInstance(id);
}

//##########################################################

BGZoomImage.validateURL = function(url){
  if (arguments.length!=1){
    focus();
    throw new Error("BGZoomImage:validateURL: Falsche Anzahl von Argumenten!");
  }
  if (typeof url != 'string') {
    focus();
    throw new Error('BGZoomImage.validateURL: Argument url ist nicht vom Typ String!');
  }
  if (url.match(/^https?:\/\//)){
    return true;
  }
  if (url.match(/^\//)){
    return true;
  }
  return false;
}

//##########################################################

BGZoomImage.validateImageExtension = function(src){
  if (arguments.length!=1){
    focus();
    throw new Error("BGZoomImage:validateImageExtension: Falsche Anzahl von Argumenten!");
  }
  if (typeof src != 'string') {
    focus();
    throw new Error('BGZoomImage.validateImageExtension: Argument src ist nicht vom Typ String!');
  }
  if (src.match(/\.gif$/)){
    return true;
  }
  if (src.match(/\.jpg$/)){
    return true;
  }
  if (src.match(/\.jpeg$/)){
    return true;
  }
  if (src.match(/\.png$/)){
    return true;
  }
  return false;
}

