function searchClear(target, searchText)
{
  if (target.value == searchText)
  {
    target.value = '';
  }
}

function searchRestore(target, searchText)
{
  if (target.value == '')
  {
    target.value = searchText;
  }
}

function submitOnChange() {
  document.getElementById('hledej_dotace').submit();
}

function bar(url, title) {
	wasOpen = false;
	win     = window.open(url, title);    
	return (typeof(win) == 'object') ? true : false;
}

function myPopImage(imageURL,imageTitle,imageWidth,imageHeight) {

  PositionX = 30;
  PositionY = 30;
  
  ratio = imageWidth/imageHeight;
  maxHeight = screen.height - 105;
  maxWidth = maxHeight*ratio;
  if (maxWidth > screen.width-30) {
    maxWidth = screen.width - 80;
    maxHeight = maxWidth/ratio;
  }
    
  var opt='width=320,height=240,left='+PositionX+',top='+PositionY+',status=0,toolbar=0,menubar=0,location=0';
  imgWin=window.open('about:blank','null',opt);
  with (imgWin.document) {
    writeln('<html><head><title>Loading...</title><style>body{margin:0px;}</style>');
    writeln('<sc'+'ript>');
    writeln('function reSizeToImage(){');
    writeln('if (document.images[0].height > '+maxHeight+' || document.images[0].width > '+maxWidth+'){');
    writeln('height = '+maxHeight+';');
    writeln('width = '+maxWidth+';');
    writeln('document.images[0].width = '+maxWidth+';');
    writeln('document.images[0].height = '+maxHeight+';');
    writeln('window.resizeTo(width+40,height+100);}');
    writeln('else {');
    writeln('height = document.images[0].height;');
    writeln('width = document.images[0].width;');
    writeln('window.resizeTo(width+40,height+100);}}');
    writeln('function doTitle(){document.title="'+imageTitle+'";}');
    writeln('</sc'+'ript>');
    writeln('</head><body bgcolor="FFFFFF" onload="reSizeToImage();doTitle();self.focus()">');
    writeln('<img alt="'+imageTitle+'" title="'+imageTitle+'" src="'+imageURL+'" style="display:block; margin:0 auto;" /></body></html>');
    close();
  }
}

function myPopWindow(windowURL, windowName, windowFeatures) {
  var defaultFeatures = {"status": 0, "toolbar": 0, "location": 0, "menubar": 0,
                         "directories": 0, "resizeable": 1, "scrollbars": 1,
                         "width": 640, "height": 480};
  var features = '';

  for (i in windowFeatures) { defaultFeatures[i] = windowFeatures[i]; }
  for (i in defaultFeatures) { features += i + '=' + defaultFeatures[i] + ','; }

  window.open(windowURL, windowName, features);
  return false;
}

function switchBmk(n, css) {
  if (document.getElementById('bmk_header')) {
    var num = document.getElementById('bmk_header').getElementsByTagName('div').length;
    for (var i=1;i<=num;i++) {
      var elt = document.getElementById('bmk_title_' + i);
      var elc = document.getElementById('bmk_content_' + i);
      if (i == n) {
        elt.className = css + '_title active';
        elc.className = css + '_content visible';
      }
      else {
        elt.className = css + '_title';
        elc.className = css + '_content invisible';
      }
    }
  }
}

// adding method getPageSize to prototype's Position method
// returns [width, height] and {width, height}
//
// usage:
// Position.getPageSize().width/height OR
// var pageSize = Position.getPageSize()
Position.getPageSize = function() {
  var array = [];
  var pageW, pageH;

  if (window.innerHeight && window.scrollMaxY) {
		pageW = document.body.scrollWidth;
		pageH = window.innerHeight + window.scrollMaxY;
  } else {
		pageW = document.body.scrollWidth || document.body.offsetWidth;
		pageH = document.body.scrollHeight || document.body.offsetHeight;
  }

	if(pageH < document.viewport.getHeight()) {
		pageH = document.viewport.getHeight();
	}

	if(pageW < document.viewport.getWidth()) {	
		pageW = document.viewport.getWidth();
	}

  array.width = array[0] = pageW;
  array.height = array[1] = pageH;

  return array;
}

var inlineGallery = {

  cssRule: 'a[rel="ig"]',
  cssRuleAjax: 'a[rel^="ig["]',
  contentBefore: '',
  contentAfter: '',
  galleryArr: new Array(),
  galleryArrAjax: new Array(),
  ajaxURL: '',
  ajaxLimit: 10,
  ajaxOffset: 0,
  ajaxLimitName: 'limit',
  ajaxOffsetName: 'offset',
  ajaxGalleryIdName: 'filter[id_albums][0]',
  ajaxAlbumId: null,
  imgKey: 0,
  
  init: function(varNames, ajaxURL, contentBefore, contentAfter) {
    if (typeof varNames.limitName != 'undefined') {
      inlineGallery.ajaxLimitName = varNames.limitName;
      inlineGallery.ajaxOffsetName = varNames.offsetName;
      inlineGallery.ajaxGalleryIdName = varNames.galleryIdName;
    }
    if (typeof ajaxURL != 'undefined' && ajaxURL != '') {
      inlineGallery.ajaxURL = ajaxURL;
    }
    if (typeof contentBefore != 'undefined' && contentBefore != '') {
      inlineGallery.contentBefore = contentBefore;
    }
    if (typeof contentAfter != 'undefined' && contentAfter != '') {
      inlineGallery.contentAfter = contentAfter;
    }
    if ($$(inlineGallery.cssRuleAjax).size() > 0) {
      $$(inlineGallery.cssRuleAjax).each(function(s, key) {
        var albumId = s.rel.slice(s.rel.indexOf('[')+1, s.rel.lastIndexOf(']'));
        if (albumId != '') {
          var ajaxParams = {};
          ajaxParams[inlineGallery.ajaxGalleryIdName] = albumId;
          ajaxParams[inlineGallery.ajaxLimitName] = inlineGallery.ajaxLimit;
          ajaxParams[inlineGallery.ajaxOffsetName] = inlineGallery.ajaxOffset;
          new Ajax.Request(inlineGallery.ajaxURL, {
            method: 'get',
            parameters: ajaxParams,
            onSuccess: function(transport) {
              inlineGallery.galleryArrAjax[albumId] = transport.responseText.evalJSON(true);
              s.observe('click', inlineGallery.openAjaxGallery.bind(albumId));
            }
          });
        }
      });
    }
    var gKey = 0;
    $$(inlineGallery.cssRule).each(function(s, key) {
      s = $(s);
      if (s.down('img') != null) {
        if (typeof s.firstDescendant().src != 'undefined') {
          var imgSrc = s.down('img').src.replace(/gallery\/([a-z]*)\//, 'gallery/full/');
          imgSrc = imgSrc.replace(/\.thumb/, '');
          inlineGallery.galleryArr.push({link: imgSrc, name: s.title});
          s.observe('click', inlineGallery.openGallery.bind(gKey));
          gKey++;
        }
      }
    }); // set onclick on each image which matches cssRule
    $('prevImg').setOpacity(0.6);
    $('nextImg').setOpacity(0.6);
    $('inlineGallery').observe('click', inlineGallery.close); // set close observing
    $('inlineGalleryBg').observe('click', inlineGallery.close); // set close observing
  },
  
  openAjaxGallery: function(event) {
    inlineGallery.ajaxAlbumId = parseInt(this);
    $$('select,object').each(function(s){s.hide();});
    $('imgInfoBox').hide();
    $('customContentBefore').hide();
    $('customContentAfter').hide();
    $('inlineGalleryBg').setOpacity(0.8);
    $('inlineGalleryBg').style.height = Position.getPageSize().height + 'px';
    $('inlineGalleryBg').style.width = Position.getPageSize().width + 'px';
    $('inlineGalleryBg').show();
    var galleryOffset = document.viewport.getScrollOffsets().top + document.viewport.getHeight()/20;
    $('inlineGallery').style.top = galleryOffset + 'px';
    $('inlineGallery').show();
    inlineGallery.loadImage(0, true, inlineGallery.galleryArrAjax[inlineGallery.ajaxAlbumId]);
    Event.stop(event);
  },
  
  openGallery: function(event) {
    var key = this;
    $$('select,object').each(function(s){s.hide();});
    $('imgInfoBox').hide();
    $('customContentBefore').hide();
    $('customContentAfter').hide();
    $('inlineGalleryBg').setOpacity(0.8);
    $('inlineGalleryBg').style.height = Position.getPageSize().height + 'px';
    $('inlineGalleryBg').style.width = Position.getPageSize().width + 'px';
    $('inlineGalleryBg').show();
    var galleryOffset = document.viewport.getScrollOffsets().top + document.viewport.getHeight()/20;
    $('inlineGallery').style.top = galleryOffset + 'px';
    $('inlineGallery').show();
    inlineGallery.loadImage(key, true, inlineGallery.galleryArr);
    Event.stop(event);
  },
  
  loadImage: function(key, opened, imgArr) {
    inlineGallery.imgKey = key;

    if (key == 0 && inlineGallery.ajaxOffset == 0) {
      $('prevImg').hide();
    } else {
      if (!$('prevImg').visible()) {
        $('prevImg').show();
      }
    }

    if (inlineGallery.ajaxOffset > 0) {
      var pos = key+1+inlineGallery.ajaxOffset;
    } else {
      var pos = key+1;
    }
    if (typeof imgArr[key].count != 'undefined') {
      var count = imgArr[key].count;
    } else {
      var count = imgArr.length;
    }

    if (pos == count) {
      $('nextImg').hide();
    } else {
      if (!$('nextImg').visible()) {
        $('nextImg').show();
      }
    }
    inlineGallery.updateNav(key, imgArr);
    $('galleryImg').hide();
    $('imgLoading').show();
    if (typeof imgArr[key].name != 'undefined') {
      $('galleryImg').alt = imgArr[key].name;
      $('galleryImg').title = imgArr[key].name;
      if ($('galleryImg').title != '') {
        $('imgTitle').innerHTML = $('galleryImg').title;
      }
    }

    $('imgPos').innerHTML = pos + ' z ' + count;

		$('galleryImg').src = imgArr[key].link;
    
    imgPreloader = new Image();
		imgPreloader.onload = function() {
      $('imgLoading').hide();
      $('imgInfoBox').hide();
      var boxHeight = imgPreloader.height + $('imgInfoBox').getHeight();
      $('galleryImg').src = imgArr[key].link;
      /*if (opened) {*/
        $('customContentBefore').morph('width:'+imgPreloader.width+'px;', {duration: 0.4});
        $('customContentAfter').morph('width:'+imgPreloader.width+'px;', {duration: 0.4});
        $('imgOuterBox').morph('height:'+boxHeight+'px;width:'+imgPreloader.width+'px;', {duration: 0.4});
        setTimeout("inlineGallery.showImage(imgPreloader.width, imgPreloader.height)", 400);
      /*} else {
        $('imgOuterBox').style.width = imgPreloader.width + 'px';
        $('imgOuterBox').style.height = boxHeight + 'px';
        inlineGallery.showImage(imgPreloader.width, imgPreloader.height);
      }*/ // uncomment if you want faster move between photos
		}
    imgPreloader.src = imgArr[key].link;
    inlineGallery.preloadImages(key, imgArr);
  },
  
  showImage: function(w, h) {
    $('imgInnerBox').style.width = w + 'px';
    $('imgInnerBox').style.height = h + 'px';
    var navHeight = h + 10;
    $('galleryNav').style.height = navHeight + 'px';
    $('galleryImg').appear({ duration: 0.3 });
    $('imgInfoBox').appear({ duration: 0.3 });
    if (inlineGallery.contentBefore != '') {
      $('customContentBefore').innerHTML = inlineGallery.contentBefore;
      $('customContentBefore').appear({ duration: 0.3 });
    }
    if (inlineGallery.contentAfter != '') {
      $('customContentAfter').innerHTML = inlineGallery.contentAfter;
      $('customContentAfter').appear({ duration: 0.3 });
    }
  },
  
  updateNav: function(key, imgArr) {
    if (typeof imgArr[key].count != 'undefined') {
      if (key+inlineGallery.ajaxOffset > 0) {
        $('prevImg').onclick = function(event) {
          if (key == 0 && inlineGallery.ajaxOffset > 0) {
            inlineGallery.imgKey = inlineGallery.ajaxLimit-1;
            inlineGallery.getImagesFromServer(-10);
          } else {
            inlineGallery.imgKey--;
            inlineGallery.loadImage(inlineGallery.imgKey, false, inlineGallery.galleryArrAjax[inlineGallery.ajaxAlbumId]);
          }
          return false;
        }
      }
      if (key+1+inlineGallery.ajaxOffset < imgArr[key].count) {
        $('nextImg').onclick = function(event) {
          if (key == inlineGallery.ajaxLimit-1) {
            inlineGallery.imgKey = 0;
            inlineGallery.getImagesFromServer(10);
          } else {
            inlineGallery.imgKey++;
            inlineGallery.loadImage(inlineGallery.imgKey, false, inlineGallery.galleryArrAjax[inlineGallery.ajaxAlbumId]);
          }
          return false;
        }
      }
    } else {
      if (key > 0) {
        $('prevImg').onclick = function(event) {
          inlineGallery.imgKey--;
          inlineGallery.loadImage(inlineGallery.imgKey, false, imgArr);
          return false;
        }
      }
      if (key < imgArr.length-1) {
        $('nextImg').onclick = function(event) {
          inlineGallery.imgKey++;
          inlineGallery.loadImage(inlineGallery.imgKey, false, imgArr);
          return false;
        }
      }
    }
  },
  
  preloadImages: function(key, imgArr) {
    if((imgArr.length - 1) > key){
      var preloadNextImage = new Image();
      preloadNextImage.src = imgArr[key + 1][0];
    }
    if(key > 0){
      var preloadPrevImage = new Image();
      preloadPrevImage.src = imgArr[key - 1][0];
    }
  },
  
  getImagesFromServer: function(offsetChange) {
    inlineGallery.ajaxOffset += offsetChange;
    var ajaxParams = {};
    ajaxParams[inlineGallery.ajaxGalleryIdName] = inlineGallery.ajaxAlbumId;
    ajaxParams[inlineGallery.ajaxLimitName] = inlineGallery.ajaxLimit;
    ajaxParams[inlineGallery.ajaxOffsetName] = inlineGallery.ajaxOffset;
    new Ajax.Request(inlineGallery.ajaxURL, {
      method: 'get',
      parameters: ajaxParams,
      onSuccess: function(transport) {
        inlineGallery.galleryArrAjax[inlineGallery.ajaxAlbumId] = transport.responseText.evalJSON(true);
        inlineGallery.loadImage(inlineGallery.imgKey, false, inlineGallery.galleryArrAjax[inlineGallery.ajaxAlbumId]);
      }
    });
  },
  
  close: function(event) {
    if (Event.element(event).id == 'inlineGallery' || Event.element(event).id == 'closeImg' || Event.element(event).id == 'inlineGalleryBg') {
      $('inlineGallery').fade({ duration: 0.3 });
      $('inlineGalleryBg').fade({ duration: 0.3 });
      setTimeout("$('imgOuterBox').style.width = '32px'", 300);
      setTimeout("$('imgOuterBox').style.height = '32px'", 300);
      setTimeout("$('imgInnerBox').style.width = 'auto'", 300);
      setTimeout("$('imgInnerBox').style.height = 'auto'", 300);
      inlineGallery.ajaxOffset = 0;
      inlineGallery.ajaxAlbumId = null;
      $$('select,object').each(function(s){s.show();});
    }
  }
}

QCM.Carousel = function() {
  this.options = {
    formats: {
      detail: 'detail',
      thumb: 'thumbnail'
    },
    showThumbs: true,
    infinite: true,
    autoStart: true,
    duration: 5,
    selected: 0,
    photos: []
  },
  this.page = 1,
  this.redirect = '',
  this.thumbsPerPage = 1,
  this.totalImages = 0,
  this.loop = null,
  this.isFading = false,
  this.isMoving = false
}
QCM.Carousel.prototype = {
  init: function(options) {
    var t = this;
    t.options = Object.extend(t.options, options);
    if (typeof t.options.photos == 'string') {
      new Ajax.Request(t.options.photos, {
        method: 'post',
        onSuccess: function(transport) {
          var photos = transport.responseText.evalJSON();
          if (typeof photos == 'object' && photos.each) {
            t.options.photos = [];
            photos.each(function(photo) {
              t.options.photos.push({
                detail: '/uploads/gallery/'+t.options.formats.detail+'/'+photo.id+'.jpg',
                thumb: '/uploads/gallery/'+t.options.formats.thumb+'/'+photo.id+'.jpg',
                link: photo.link,
                name: photo.name,
                desc: photo.desc,
                redirect: photo.redirect
              });
            });
            t.build();
          }
        }
      });
    } else {
      t.build();
    } // if
  },
  
  build: function() {
    var t = this;
    if (!$(t.options.container)) {
      throw('No container defined!');
      return;
    } else {
      var carousel = new Element('div', {'class': 'carousel_cnt'});
      carousel.insert(new Element('div', {'class': 'carousel_detail'})
                      .insert(new Element('div', {'class': 'carousel_detail_cnt'})
                              .insert(new Element('img', {'class': 'carousel_img'}))
                              .insert(new Element('img', {'class': 'carousel_img'}).hide()))
                      .insert(new Element('div', {'class': 'img_name'}))
                      .insert(new Element('div', {'class': 'img_desc'}))
                      .insert(new Element('img', {'class': 'carousel_preload'})))
              .insert(new Element('div', {'class': 'carousel_thumbs'})
                      .insert(new Element('div', {'class': 'arr_left disabled'}))
                      .insert(new Element('div', {'class': 'slider'})
                              .insert(new Element('div', {'class': 'visor'})))
                      .insert(new Element('div', {'class': 'arr_right disabled'}))
                      .insert(new Element('div', {'class': 'cleaner'})));
      $(t.options.container).update(carousel);
      t.activate();
    }
  },
  
  activate: function() {
    var t = this;
    var actual = t.options.photos[t.options.selected];
    var detail = $(t.options.container).down('.carousel_detail');
    var img = $(t.options.container).down('.carousel_img');
    var img_name = $(t.options.container).down('.img_name');
    var img_desc = $(t.options.container).down('.img_desc');
    var preload = $(t.options.container).down('.carousel_preload');
    
    t.redirect = actual.redirect || actual.link;
    if (!t.redirect.blank()){
      detail.addClassName('redirect');
    } else {
      detail.removeClassName('redirect');
    }
    detail.observe('click', function(e){
      Event.stop(e);
      if (!t.redirect.blank()){
        myPopImage(t.redirect, actual.name);
      }
    });
    img_name.update(actual.name).setOpacity(0.7);
    img_desc.update(actual.desc);
    if (actual.name.blank()) {
      img_name.hide();
    }
    if (actual.desc.blank()) {
      img_desc.hide();
    }
    img.src = actual.detail;
    
    preload.observe('load', t.preLoader.bind(t, detail, preload, img_name, img_desc));
    preload.hide();
    
    t.options.photos.each(t.thumbsObserve.bind(t));
    
    var imgThumb = $(t.options.container).down('.visor').select('img').first();
    if (Prototype.Browser.IE) {
      t.prevNextObserve();
    } else {
      imgThumb.observe('load', t.prevNextObserve.bind(t));
    }
    
    if (t.options.autoStart) {
      t.loop = t.imgLoop.delay(t.options.duration, t);
    }
  },
  
  preLoader: function(detail, preload, img_name, img_desc) {
    var t = this;
    if (!t.isFading) {
      t.isFading = true;
      var selected = t.options.photos[t.options.selected];
      var images = detail.select('img.carousel_img');
      images.each(function(img) {
        if (img.visible()) {
          img.fade({duration: 0.5});
        } else {
          img.src = preload.src;
          img.appear({duration: 0.5, afterFinish: function(){t.isFading = false}});
          img_name.update(selected.name);
          if (selected.name.blank()) {
            img_name.hide();
          } else {
            img_name.show();
          }
          img_desc.update(selected.desc);
          if (selected.desc.blank()) {
            img_desc.hide();
          } else {
            img_desc.show();
          }
        }
      }); // each      
    }
  },
  
  changeImg: function(key) {
    var t = this;
    var actualPage = (Math.ceil((key+1)/t.thumbsPerPage));
    if (t.page != actualPage) {
      if (key > 0) {
        t.moveSlider(-1);
      } else {
        t.moveSlider(0);
      }
    }
    var preload = $(t.options.container).down('.carousel_preload');
    var detail = $(t.options.container).down('.carousel_detail');
    var thumbs = $(t.options.container).select('img.thumb');
    t.options.selected = key;
    thumbs.invoke('removeClassName', 'selected');
    thumbs[key].addClassName('selected');
    t.redirect = t.options.photos[key].redirect || t.options.photos[key].link;
    if (!t.redirect.blank()){
      detail.addClassName('redirect');
    } else {
      detail.removeClassName('redirect');
    }
    preload.src = t.options.photos[key].detail;
  },
  
  moveSlider: function(dir) {
    var t = this;
    if (!t.isMoving) {
      t.isMoving = true;
      var prev = $(t.options.container).down('.arr_left');
      var next = $(t.options.container).down('.arr_right');
      var slider = $(t.options.container).down('.slider');
      var visor = $(t.options.container).down('.visor');
      var moveX = 0;
      t.page = t.page - (dir);
      if (dir != 0) {
        moveX = dir * slider.getWidth();
      } else {
        moveX = slider.getWidth() * (t.page - 1);
        t.page = 1;
      }
      if (t.page < (t.totalImages/t.thumbsPerPage)) {
        next.removeClassName('disabled');
      } else {
        next.addClassName('disabled');
      }
      if (t.page > 1) {
        prev.removeClassName('disabled');
      } else {
        prev.addClassName('disabled');
      }
      new Effect.Move(visor, {x: moveX, y: 0, afterFinish: function(){t.isMoving = false}});
    }
  },
  
  imgLoop: function(t) {
    if (t.options.photos[t.options.selected + 1]) {
      t.changeImg(t.options.selected + 1);
      t.loop = t.imgLoop.delay(t.options.duration, t);
    } else if (!t.options.photos[t.options.selected + 1] && t.options.infinite) {
      t.changeImg(0);
      t.loop = t.imgLoop.delay(t.options.duration, t);
    }
  },
  
  thumbsObserve: function(photo, i) {
    var t = this;
    var thumb = new Element('img', {'src': photo.thumb, 'class': 'thumb'});
    $(t.options.container).down('.visor').insert(thumb);
    thumb.observe('click', function(key, e){
      Event.stop(e);
      window.clearTimeout(t.loop);
      if (key != t.options.selected) {
        t.changeImg(key, thumb);
      }
    }.curry(i));
    if (t.options.selected == i) {
      $(t.options.container).down('.visor').select('img').last().addClassName('selected');
    }
  },
  
  prevNextObserve: function() {
    var t = this;
    var prev = $(t.options.container).down('.arr_left');
    var next = $(t.options.container).down('.arr_right');
    var sliderWidth = $(t.options.container).down('.slider').getWidth();
    var imgThumb = $(t.options.container).down('.visor').select('img').first();
    var thumbWidth = imgThumb.getWidth();
    t.totalImages = $(t.options.container).down('.visor').select('img').length;
    t.thumbsPerPage = Math.floor(sliderWidth/thumbWidth);
    if (t.options.photos.length > t.thumbsPerPage) {
      next.removeClassName('disabled');
      next.observe('click', function(e){
        Event.stop(e);
        if (t.page < (t.totalImages/t.thumbsPerPage)) {
          window.clearTimeout(t.loop);
          t.moveSlider(-1);
        }
      });
      prev.observe('click', function(e){
        Event.stop(e);
        if (t.page > 1) {
          window.clearTimeout(t.loop);
          t.moveSlider(1);
        }
      });
    }
  }
}
