var inCMS = new Object();

// Fce vrátí html prvek
// parametry: ID nebo prvek
inCMS.getObj = function (x) {
	if (typeof x != 'string') return x;
	else if (Boolean(document.getElementById)) return document.getElementById(x);
		else return null;
	}

// Fce vrátí pole všech html prvků v daném prvku, jejichž className obsahuje zadaný řetězec
// parametry: ID prvku ve kterém hledat, název prvku který hledat (možno použít *), podřetězec className
inCMS.getElementsByClass = function (p,t,c) {
	var o = inCMS.getObj(p);
	var tempField = new Array();
	var elements = o.getElementsByTagName(t);
	for (var i=0; i<elements.length; i++) {
		if (elements[i].className.indexOf(c) != -1) {
			tempField[tempField.length] = elements[i];
			}
		}
	return tempField;
	}

// Objekt na detekci prohlížeče
inCMS.browser = {
	IE : navigator.appName == 'Microsoft Internet Explorer',
	IE6 : navigator.userAgent.indexOf('MSIE 6') != -1,
	IE7 : navigator.userAgent.indexOf('MSIE 7') != -1,
	IE8 : navigator.userAgent.indexOf('MSIE 8') != -1,
	opera : navigator.userAgent.indexOf('Opera') != -1,
	gecko : navigator.userAgent.indexOf('Gecko') != -1,
	safari : navigator.userAgent.indexOf('Safari') != -1,
	chrome : navigator.userAgent.indexOf('Chrome') != -1
	}
// Opera se může tvářit i jako jiný prohlížeč, proto oprava:
if (inCMS.browser.opera) {
	for (var property in inCMS.browser) {
		if (property != 'opera') inCMS.browser[property] = false;
		}
	}	

// Fce přidá skript (před nebo za stávající funkce) navázaný na definovanou událost html prvku
// použití: addEvent(window,'onload','alert(o.id);');
// parametry: ID nebo prvek, název události, skript navázaný na událost (pravidla pro skript: na daný prvek neodkazovat přes this, ale přes o), příznak jestli má být nový skript vložen před/za stávající
inCMS.addEvent = function (obj,e,s,before) {
	var o = inCMS.getObj(obj);
	eval('var oldEvent = o.' + e + ';');
	if (!before) eval('o.' + e + ' = function (' + (inCMS.browser.IE ? '' : 'event') + ') { ' + (oldEvent ? 'oldEvent(' + (inCMS.browser.IE ? '' : 'event') + ');' : '') + s + ' };');
	else eval('o.' + e + ' = function (' + (inCMS.browser.IE ? '' : 'event') + ') { ' + s + (oldEvent ? 'oldEvent(' + (inCMS.browser.IE ? '' : 'event') + ');' : '') + ' };');
	}
	
// Fce odstraní zadanou hodnotu z pole
// parametry: pole; hodnota
inCMS.addValueToField = function (field,value) {
	field.length++;
	field[field.length-1] = value;
	}	

// Fce nastaví html prvku css styl
// parametry: ID nebo prvek, 'vlastnost', 'hodnota'
inCMS.setObjStyle = function (obj,prop,val) {
	var o = inCMS.getObj(obj);
	if (o && o.style) {
		eval ('o.style.'+prop+'="'+val+'"');
		return true;
		}
	else return false;
	}  	
	
inCMS.implode = function (glue, pieces) {
    // Joins array elements placing glue string between items and return one string  

    var i = '', retVal='', tGlue='';
    if (arguments.length === 1) {        
      pieces = glue;
      glue = '';
    }
    if (typeof(pieces) === 'object') {
        if (pieces instanceof Array) {            
          return pieces.join(glue);
        }
        else {
          for (i in pieces) {
            retVal += tGlue + pieces[i];                
            tGlue = glue;
          }
          return retVal;
        }
    }else{
      return pieces;
    }
}	

inCMS.galleries = {
	// Pole obsahující jednotlivé galerie na stránce
	items : new Array()
	}	

inCMS.galleries.init = function (initObj) {
	this.items.length++;
	this.items[this.items.length-1] = new Object();
	var gallery = this.items[this.items.length-1];
	for (var property in initObj) {
		eval('gallery.' + property + ' = initObj.' + property + ';');
		}
	gallery.id = parseInt(gallery.mainBoxID.split('-')[1]);
	var mainBox = inCMS.getObj(gallery.mainBoxID);
	inCMS.setObjStyle(mainBox,"width",gallery.W);
	gallery.infozone = mainBox.parentNode.parentNode.id == 'infoContentBox';
	gallery.infozone = false;
	// v infozóně jsou souřadnice transponované (width <-> height, left <-> top) !!!
	gallery.middleViewBox = mainBox.getElementsByTagName('div')[0];
	inCMS.setObjStyle(gallery.middleViewBox,"width",gallery.W);
	gallery.leftControl = mainBox.getElementsByTagName('div')[1].getElementsByTagName('span')[0];
	gallery.rightControl = mainBox.getElementsByTagName('div')[1].getElementsByTagName('span')[mainBox.getElementsByTagName('div')[1].getElementsByTagName('span').length-2];
	gallery.limitBox = mainBox.getElementsByTagName('div')[1].getElementsByTagName('div')[0];
	inCMS.setObjStyle(gallery.limitBox,"width",gallery.W-(gallery.leftControl.offsetWidth+gallery.rightControl.offsetWidth));
	gallery.contentBox = gallery.limitBox.getElementsByTagName('div')[0];
	gallery.limitWidth = gallery.infozone ? gallery.limitBox.offsetHeight : gallery.limitBox.offsetWidth;
	gallery.contentWidth = -6;
	gallery.position = 0;
	gallery.allPictures = gallery.contentBox.getElementsByTagName('img');
	gallery.pictures = new Array();
	for (var i=0; i<gallery.allPictures.length; i++) {
		if (gallery.allPictures[i].className.indexOf('imageOverlay') == -1) {//imageOverlay - asi vrstva nad obrazkom (napr. zaoblenie rohov)
			inCMS.addValueToField(gallery.pictures,gallery.allPictures[i]);
			}
		}
	for (var i=0; i<gallery.pictures.length; i++) {
		inCMS.setObjStyle(gallery.pictures[i].parentNode,'width',gallery.pictures[i].offsetWidth + 'px');
		inCMS.setObjStyle(gallery.pictures[i].parentNode,'height',gallery.pictures[i].offsetHeight + 'px');
		if (!gallery.infozone) inCMS.setObjStyle(gallery.pictures[i].parentNode.parentNode,'width',gallery.pictures[i].offsetWidth + 'px'); // IE7 fix
		inCMS.addEvent(gallery.pictures[i].parentNode,'onclick','inCMS.galleries.showMiddle(inCMS.galleries.items[' + (this.items.length-1) + '].pictures[' + i + ']);');
		gallery.contentWidth += (gallery.infozone ? gallery.pictures[i].offsetHeight : gallery.pictures[i].offsetWidth) + 6;
		}
	inCMS.setObjStyle(gallery.contentBox,gallery.infozone ? 'height' : 'width',(gallery.contentWidth+6) + 'px');
	gallery.overflowWidth = gallery.contentWidth - gallery.limitWidth;
	if (gallery.overflowWidth > 0) {
		gallery.rightControl.className += ' rightControl-active';
		}
	if (inCMS.browser.IE6) {
		inCMS.addEvent(gallery.rightControl,'onmouseover','if (o.className.indexOf(\'rightControl-active\')!=-1) o.className += \' hover\';');
		inCMS.addEvent(gallery.rightControl,'onmouseout','o.className = o.className.replace(\' hover\',\'\');');
		inCMS.addEvent(gallery.leftControl,'onmouseover','if (o.className.indexOf(\'leftControl-active\')!=-1) o.className += \' hover\';');
		inCMS.addEvent(gallery.leftControl,'onmouseout','o.className = o.className.replace(\' hover\',\'\');');
		}
	inCMS.addEvent(gallery.rightControl,'onmouseover','inCMS.galleries.rightControlOnMouseOver(' + (this.items.length-1) + ');');
	inCMS.addEvent(gallery.rightControl,'onclick','inCMS.galleries.rightControlOnClick(' + (this.items.length-1) + ');');
	inCMS.addEvent(gallery.rightControl,'onmouseout','inCMS.galleries.stopMove();');
	inCMS.addEvent(gallery.leftControl,'onmouseover','inCMS.galleries.leftControlOnMouseOver(' + (this.items.length-1) + ');');
	inCMS.addEvent(gallery.leftControl,'onclick','inCMS.galleries.leftControlOnClick(' + (this.items.length-1) + ');');
	inCMS.addEvent(gallery.leftControl,'onmouseout','inCMS.galleries.stopMove();');
	if (gallery.pictures.length > 0) {
		}
	else {
		gallery.middleViewBox.innerHTML = '<p>' + inCMS.res.catGallery.noFoto + '</p>';
		var middleText = gallery.middleViewBox.getElementsByTagName('p')[0];
		inCMS.setObjStyle(gallery.middleViewBox,'marginTop',Math.floor((gallery.middleViewBox.offsetHeight - middleText.offsetHeight)/2) + 'px');
		}
	//inCMS.galleries.postInit();
	inCMS.galleries.preload(gallery.id);
	}

// Inicializační metoda, spuštěná až po načtení stránky
/*
inCMS.galleries.postInit = function () {
	var body = document.getElementsByTagName('body')[0];
	if (!inCMS.getObj('overlay')) {
		var overlay = document.createElement('div');
		overlay.id = 'overlay';
		body.appendChild(overlay);
		}
	if (!inCMS.getObj('lightbox')) {
		var lightbox = document.createElement('div');
		lightbox.id = 'lightbox';
		body.appendChild(lightbox);
		}
	inCMS.galleries.preload();
	}
*/

inCMS.galleries.preload = function (galleryID) {
	var images = inCMS.getElementsByClass('page','img','galleryPreload');
	this.preloadImages = new Array();
	for (var i=0; i<images.length; i++) {
	  var src = images[i].src.split('?')[0];
	  var caption = images[i].title;
	  var get_params = (images[i].src.split('?')[1]).split('&');
      //[0] - width     //[2] - picid   //[4] - section
      //[1] - height    //[3] - type
    
    get_params[0] = "width="+this.items[galleryID].W; get_params[1] = "height=0"; 
		this.preloadImages[i] = new Object();
		this.preloadImages[i].middleView = new Image();		
		this.preloadImages[i].middleView.src = src+'?'+inCMS.implode('&',get_params);
		this.preloadImages[i].middleView.className = 'cachedImage';
		document.body.appendChild(this.preloadImages[i].middleView);
		
		get_params[0] = "width=800"; get_params[1] = "height=0";
		this.preloadImages[i].lightBoxRel = document.createElement('a');
    this.preloadImages[i].lightBoxRel.href = src+'?'+inCMS.implode('&',get_params);
    this.preloadImages[i].lightBoxRel.className += 'fancyIMG';
    this.preloadImages[i].lightBoxRel.title = caption;
    this.preloadImages[i].lightBoxRel.rel =	"lightbox["+galleryID+"]";
    this.preloadImages[i].lightBoxRel.id = "lightboxRel-"+galleryID+"-"+get_params[2];
    document.body.appendChild(this.preloadImages[i].lightBoxRel);
		/*
		get_params[0] = "width=0"; get_params[1] = "height=0"; 
		this.preloadImages[i].fullView = new Image();
		this.preloadImages[i].fullView.src = src+'?'+inCMS.implode('&',get_params);
		this.preloadImages[i].fullView.className = 'cachedImage';
		document.body.appendChild(this.preloadImages[i].fullView);
		*/
		}
	if (images.length > 0)
		inCMS.addEvent(this.preloadImages[0].middleView,'onload','inCMS.galleries.start();');
	}

inCMS.galleries.start = function () {
	var gallery = this.items[0];
	inCMS.galleries.showMiddle(gallery.pictures[0]);
	}

inCMS.galleries.showMiddle = function (image) {
	var number = parseInt(image.id.split('-')[1]);
	var gallery = this.items[number];
	var index = parseInt(image.id.split('-')[3]);
	var caption = image.title;
	var src = image.src.split('?')[0];
	var get_params = (image.src.split('?')[1]).split('&');
      //[0] - width     //[2] - picid   //[4] - section
      //[1] - height    //[3] - type
	
	//create link
	get_params[0] = "width=800"; get_params[1] = "height=0";
	newlink = document.createElement('a');
	newlink.className += 'fancyIMG';
  newlink.setAttribute('rel', 'lightbox['+number+']');
  newlink.setAttribute('title', caption);
  newlink.setAttribute('href', src+'?'+inCMS.implode('&',get_params));
  
  //odstranit rel z linku obrazku ktory je aj v middle view, alebo sa v lightbox-e zobrazi2x
  var middle_image_actual = inCMS.getObj('gallery-' + number + '-middleItem');
  if(middle_image_actual){
   var mid_img_ID_actual = (middle_image_actual.src.split('?')[1]).split('&')[2];
   var lb_rel_actual = inCMS.getObj("lightboxRel-"+number+"-"+mid_img_ID_actual);
   lb_rel_actual.rel="lightbox["+number+"]";
  }
  var lb_rel = inCMS.getObj("lightboxRel-"+number+"-"+get_params[2]);
  lb_rel.rel = "";
	
	this.preloadImages[index].middleView.id = 'gallery-' + number + '-middleItem';
	this.preloadImages[index].middleView.className = this.preloadImages[index].middleView.className.replace('cachedImage','');
	this.preloadImages[index].middleView.alt = this.preloadImages[index].middleView.title = caption;
	gallery.middleViewBox.innerHTML = '';
	var imageContainer = document.createElement('span');
	imageContainer.className = 'imageContainer';
	imageContainer.appendChild(this.preloadImages[index].middleView);
	newlink.appendChild(imageContainer);
	gallery.middleViewBox.appendChild(newlink);
	//gallery.middleViewBox.appendChild(imageContainer);
	/*
	if (inCMS.getObj('sign-news')) {
		var sign = document.createElement('p');
		sign.className = 'sign-news';
		sign.innerHTML = inCMS.getObj('sign-news').innerHTML;
		gallery.middleViewBox.getElementsByTagName('span')[0].appendChild(sign);
		}
	if (inCMS.getObj('sign-reserved')) {
		var sign = document.createElement('p');
		sign.className = 'sign-reserved';
		sign.innerHTML = inCMS.getObj('sign-reserved').innerHTML;
		gallery.middleViewBox.getElementsByTagName('span')[0].appendChild(sign);
		}
	if (inCMS.getObj('sign-realized')) {
		var sign = document.createElement('p');
		sign.className = 'sign-realized';
		sign.innerHTML = inCMS.getObj('sign-realized').innerHTML;
		gallery.middleViewBox.getElementsByTagName('span')[0].appendChild(sign);
		}*/
	var middleImage = inCMS.getObj('gallery-' + number + '-middleItem');
	inCMS.setObjStyle(middleImage.parentNode,'width',middleImage.offsetWidth + 'px');
	inCMS.setObjStyle(middleImage.parentNode,'marginTop',Math.floor((gallery.middleViewBox.offsetHeight - middleImage.offsetHeight)/2) + 'px');
	//imageContainer.innerHTML += '<span class="roundedCorner roundedCorner-8-ne"></span><span class="roundedCorner roundedCorner-8-se"></span><span class="roundedCorner roundedCorner-8-sw"></span><span class="roundedCorner roundedCorner-8-nw"></span>';
	}

// Metoda spuštěná při najetí myši na pravou šipku
// parametry: pořadí galerie na stránce
inCMS.galleries.rightControlOnMouseOver = function (number) {
	var gallery = this.items[number];
	if (gallery.rightControl.className.indexOf('rightControl-active') == -1) return;
	if (gallery.leftControl.className.indexOf('leftControl-active') == -1) 
		gallery.leftControl.className += ' leftControl-active';
	inCMS.galleries.rightMove(number);
	clearInterval(this.timer);
	this.timer = setInterval('inCMS.galleries.rightMove(' + number + ')',10);
	}

// Metoda volaná cyklicky, posouvá galerii doleva
// parametry: pořadí galerie na stránce
inCMS.galleries.rightMove = function (number) {
	var gallery = this.items[number];
	var rightRemaining = gallery.overflowWidth + gallery.position;
	if (rightRemaining < 3) {
		gallery.position -= rightRemaining;
		this.stopMove();
		gallery.rightControl.className = 'rightControl';
		}
	else gallery.position -= 3;
	inCMS.setObjStyle(gallery.contentBox,gallery.infozone ? 'top' : 'left',(gallery.position) + 'px');
	}

// Metoda spuštěná při kliknutí na pravou šipku
// parametry: pořadí galerie na stránce
inCMS.galleries.rightControlOnClick = function (number) {
	var gallery = this.items[number];
	if (gallery.rightControl.className.indexOf('rightControl-active') == -1) return;
	var rightRemaining = gallery.overflowWidth + gallery.position;
	gallery.position -= rightRemaining;
	this.stopMove();
	gallery.rightControl.className = 'rightControl';
	inCMS.setObjStyle(gallery.contentBox,gallery.infozone ? 'top' : 'left',(gallery.position) + 'px');
	}

// Metoda spuštěná při najetí myši na levou šipku
// parametry: pořadí galerie na stránce
inCMS.galleries.leftControlOnMouseOver = function (number) {
	var gallery = this.items[number];
	if (gallery.leftControl.className.indexOf('leftControl-active') == -1) return;
	if (gallery.rightControl.className.indexOf('rightControl-active') == -1) 
		gallery.rightControl.className += ' rightControl-active';
	inCMS.galleries.leftMove(number);
	clearInterval(this.timer);
	this.timer = setInterval('inCMS.galleries.leftMove(' + number + ')',10);
	}

// Metoda volaná cyklicky, posouvá galerii doprava
// parametry: pořadí galerie na stránce
inCMS.galleries.leftMove = function (number) {
	var gallery = this.items[number];
	if (gallery.position > -3) {
		gallery.position = 0;
		this.stopMove();
		gallery.leftControl.className = 'leftControl';
		}
	else gallery.position += 3;
	inCMS.setObjStyle(gallery.contentBox,gallery.infozone ? 'top' : 'left',(gallery.position) + 'px');
	}

// Metoda spuštěná při kliknutí na levou šipku
// parametry: pořadí galerie na stránce
inCMS.galleries.leftControlOnClick = function (number) {
	var gallery = this.items[number];
	if (gallery.leftControl.className.indexOf('leftControl-active') == -1) return;
	gallery.position = 0;
	this.stopMove();
	gallery.leftControl.className = 'leftControl';
	inCMS.setObjStyle(gallery.contentBox,gallery.infozone ? 'top' : 'left',(gallery.position) + 'px');
	}

// Metoda zastaví posouvání (vynuluje časovač)
inCMS.galleries.stopMove = function () {
	clearInterval(this.timer);
}

