// JavaScript Document


//  imageLigthBox (2009-11-25)
//  picture window object


function imageLigthBox(boxType) {
  var self = this;
  this.lightBoxContainer = new lightBoxContainer(this,'archivelightbox',null);
  this.transformElements = new transformElements();
  this.innerElem = null;
  this.sideElem = null; // not allways exist
  this.tableElem = null;
  this.imgElem = null;
  this.images = Array();
  this.position = 0;
  this.boxType = boxType;
  //
  this.init = function() {
    self.innerElem = self.lightBoxContainer.innerElem;
    self.tableElem = dojo.byId('archivetable');
    if (!self.innerElem || !self.tableElem) return false;
    dojo.query('a[rel^="lightbox"]',self.tableElem).forEach(self.transform);
    self.findOpen();
  };
  //
  this.checkArrows = function() {
    var linkR = dojo.query('a.lightbox-arrow-right',self.innerElem)[0];
    var linkL = dojo.query('a.lightbox-arrow-left',self.innerElem)[0];
    if (self.position>=(self.images.length-1)) {
      dojo.addClass(linkR,'invisible');
    } else {
      dojo.removeClass(linkR,'invisible');
    }
    if (self.position<=0) {
      dojo.addClass(linkL,'invisible');
    } else {
      dojo.removeClass(linkL,'invisible');
    }
  };
	//
	this.findOpen = function() {
    var openElement = dojo.query('a.open',self.tableElem)[0];
    if (openElement) openElement.click();
  };
  //
  this.transform = function(node,index) {
    var spans = node.getElementsByTagName('span');
    if (spans.length>0) {
      var titles = Array();
      for (var i=0; i<spans.length; i++) {
        titles.push(spans[i].innerHTML);
      }
      var img = node.getElementsByTagName('img')[0];
      self.images.push({src:img.alt,titles:titles,href:node.href});
      node.imageLigthBoxPosition = self.images.length-1;
      dojo.connect(node,'onclick',self.click);
    }
  };
  //
  this.click = function(evt) {
    self.position = this.imageLigthBoxPosition;
    self.lightBoxContainer.show();
    self.show();
    self.lightBoxContainer.centering();
    self.transformElements.init(self.innerElem);
    self.checkArrows();
    self.preload();
		if (evt) dojo.stopEvent(evt);
  };
  //
  this.show = function() {
    self.sideElem = dojo.query('div.lightbox-side',self.innerElem)[0];
    dojo.connect(dojo.query('a.lightbox-arrow-right',self.innerElem)[0],'onclick',self.changePosition);
    dojo.connect(dojo.query('a.lightbox-arrow-left',self.innerElem)[0],'onclick',self.changePosition);
    self.imgElem = dojo.query('img',self.innerElem)[0];
    self.imgElem.className = 'hidden';
    if (self.boxType=='box') {
      dojo.connect(self.imgElem,'onmouseover',self.imgMouseOver);
      dojo.connect(self.imgElem,'onmouseout',self.imgMouseOut);
    }
  };
  //
  this.changePosition = function(evt,thisElem) {
    if (!thisElem) thisElem = this;
    if (thisElem.className.indexOf('left')>0) {
      self.position--;
    }
    if (thisElem.className.indexOf('right')>0) {
      self.position++;
    }
    thisElem.blur();
    self.checkArrows();
    self.preload();
    dojo.stopEvent(evt);
  };
  //
	this.preload = function() {
    var titles = self.images[self.position].titles;
    var titleText = titles[1];
    while (titleText.indexOf('~lt~')>=0) {
      titleText = titleText.replace('~lt~','<');
    }
    while (titleText.indexOf('~gt~')>=0) {
      titleText = titleText.replace('~gt~','>');
    }
    switch (self.boxType) {
      case 'box':
        dojo.query('div.lightbox-heading span',self.innerElem)[0].innerHTML = titles[0]+' - '+titleText;
      break;
      case 'shop':
        dojo.query('span.name',self.innerElem)[0].innerHTML = titles[0];
        dojo.query('span.title',self.innerElem)[0].innerHTML = titleText;
        dojo.query('span.price b',self.innerElem)[0].innerHTML = titles[2];
        self.makeOptionsFromText(dojo.query('select',self.innerElem)[0],titles[4]);
        dojo.query('input.hidden',self.innerElem)[0].value = titles[5];
        dojo.connect(dojo.query('form',self.innerElem)[0],'onsubmit',self.submitToBasket);
        self.transformElements.init(self.innerElem);
      break;
      case 'servis':
        dojo.query('span.name',self.innerElem)[0].innerHTML = titles[0];
        dojo.query('span.title',self.innerElem)[0].innerHTML = titleText;
        dojo.query('span.infotext',self.innerElem)[0].innerHTML = titles[2];
        dojo.query('span.author',self.innerElem)[0].innerHTML = titles[3];
        self.transformElements.init(self.innerElem);
      break;
    }
		self.hideImageRefresh();
		var tempImage = new Image();
		tempImage.onload = self.imgOnLoad;
		tempImage.src = self.images[self.position].src;
	};
	//
	this.hideImageRefresh = function() {
		dojo.addClass(self.innerElem,'lightbox-preloading');
		dojo.addClass(self.imgElem.parentNode,'hidden');
		self.imgElem.className = 'hidden';
		dojo.animateProperty({node:self.imgElem,properties:{opacity:0}}).play();
	};
	//
	this.showImageRefresh = function() {
    dojo.removeClass(self.innerElem,'lightbox-preloading');
    dojo.removeClass(self.imgElem.parentNode,'hidden');
    self.imgElem.className = self.boxType;
    dojo.animateProperty({node:self.imgElem,properties:{opacity:1}}).play();
	};
	//
	this.submitToBasket = function(evt) {
    self.postFormContent();
    if (evt) dojo.stopEvent(evt);
	}
	//
  this.postFormContent = function() {
    var xhrArgs = {
      form: dojo.query('form',self.innerElem)[0],
      handleAs: 'text',
      load: function(data) {
        self.showImageRefresh();
        if (data.length>3) {
          dojo.query('div.error',self.innerElem)[0].innerHTML = data;
        } else {
          dojo.query('div.error',self.innerElem)[0].innerHTML = '';
          self.lightBoxContainer.close(null);
        }
        if (basketPreview1 && self.boxType=='shop') {
          basketPreview1.postFormContent();
        }
      },
      error: function(error) {
        self.showImageRefresh();
        dojo.query('div.error',self.innerElem)[0].innerHTML = 'An unexpected error occurred: ' + error;
      }
    }
    var deferred = dojo.xhrPost(xhrArgs);
    self.hideImageRefresh();
  };
  //
  this.imgMouseOver = function() {
    dojo.query('div.lightbox-heading span',self.innerElem)[0].className = 'active';
  };
  //
  this.imgMouseOut = function() {
    dojo.query('div.lightbox-heading span',self.innerElem)[0].className = '';
  };
	//
	this.imgOnClick = function() {
    location.href = self.images[self.position].href;
	};
	//
	this.downloadOnClick = function() {
    location.href = self.images[self.position].href;
	};
  //
	this.imgOnLoad = function() {
  	var imgWidth = 0;
  	var imgHeight = 0;
  	switch (self.boxType) {
      case 'box':
    		self.imgElem.onclick = self.imgOnClick;
      	imgWidth = this.width;
      	imgHeight = this.height;
      break;
      case 'shop':
    		self.imgElem.onclick = null;
      	imgWidth = this.width+self.sideElem.offsetWidth+1;
      	imgHeight = this.height;
      break;
      case 'servis':
        var downloadfoto = dojo.query('a.downloadfoto',self.sideElem)[0];
        if (downloadfoto) {
          downloadfoto.onclick = self.downloadOnClick;
        }
      	imgWidth = this.width+self.sideElem.offsetWidth+1;
      	imgHeight = this.height;
      break;
    }
  	var outWidth = (imgWidth<350?350:imgWidth);
  	var outHeight = (imgHeight<350?350:imgHeight);
  	dojo.animateProperty(
      {
        node:self.innerElem,
        properties:{width:outWidth,height:outHeight},
        duration: 500,
        onAnimate:function(values){
          self.lightBoxContainer.iframeResize(values);
          self.lightBoxContainer.centering();
        },
        onEnd:function(){
          self.showImageRefresh();
        }
      }
    ).play();
  	self.imgElem.src = this.src;
	};
	//
  this.makeOptionsFromText = function(elemSelect,text) {
    for (var i=0; i<elemSelect.options.length; i++) {
      elemSelect.options[i] = null;
    }
    var paramArr = text.split(';');
    for (var i=0; i<paramArr.length; i++) {
      var dataArr = paramArr[i].split('|');
      var opt = new Option(dataArr[1],dataArr[0],false,false);
      elemSelect.options[i] = opt;
    }
  };
	//
  this.close = function() {
  };
  //
  return self.init();
}


// end of document

