/**
 * Vraci hodnotu vlastnosti stylu v pixelech (pripadne vraci "auto"). Pro IE.
 * Pouziti: IE_computedStyle.get(elementNode, CSS-Style);
 * Priklad: IE_computedStyle.get(el, "width"); IE_computedStyle.get(el, "margin-top");
 */
var IE_computedStyle = function () {
    var isIE = /*@cc_on!@*/0;
    var borderRegex = /thin|medium|thick/i; /* Regex for css border width keywords */
    var styleEl;
    
    /* GET POS */
    var getPos = function (which) {
        var curStyle = styleEl.currentStyle[which];
        return (/auto/i.test(curStyle)) ? "auto" : grabLength(curStyle) + "px";
    };
    
    /* GET MARGIN */
    var getMargin = function (which) {
        var curStyle = styleEl.currentStyle["margin" + which];
        return (/auto/i.test(curStyle)) ? "0px" : grabLength(curStyle) + "px";
    };
    
    /* GET BORDER WIDTH */
    var getBorderWidth = function (which) {
        var borderWidth = styleEl.currentStyle["border" + which + "Width"];
        if (styleEl.currentStyle["border" + which + "Style"] !== "none" && 
                ((/Top|Bottom/i.test(which) && styleEl.offsetHeight > styleEl.clientHeight) || 
                (/Right|Left/i.test(which) && styleEl.offsetWidth > styleEl.clientWidth))) {
            if (!borderRegex.test(borderWidth)) {
                return grabLength(borderWidth) + "px";
            } else if (borderRegex.test(borderWidth)) {
                var temp = document.createElement("DIV");
                temp.style.width = "10px";
                temp.style.border = borderWidth + " " + styleEl.currentStyle["border" + which + "Style"] + " #000000";
                styleEl.parentNode.appendChild(temp);
                borderWidth = Math.round((temp.offsetWidth-10)/2);
                styleEl.parentNode.removeChild(temp);
                return borderWidth + "px";
            }
        } else {
            return "0px";
        }
    };
    
    /* GET PADDING */
    var getPadding = function (which) {
        return grabLength(styleEl.currentStyle["padding" + which]) + "px";
    };
    
    /* GET WIDTH */
    var getWidth = function () {
        var width = styleEl.offsetWidth; /* Currently the width including padding + border */
        width -= parseInt(getPadding("Right"));
        width -= parseInt(getPadding("Left"));
        width -= parseInt(getBorderWidth("Right"));
        width -= parseInt(getBorderWidth("Left"));
        return width + "px";
    };
    
    /* GET HEIGHT */    
    var getHeight = function () {
        var height = styleEl.offsetHeight; /* Currently the height including padding + border */
        height -= parseInt(getPadding("Top"));
        height -= parseInt(getPadding("Bottom"));
        height -= parseInt(getBorderWidth("Top"));
        height -= parseInt(getBorderWidth("Bottom"));
        return height + "px";
    };
    
    /* GRAB LENGTH */
    var grabLength = function (length) {
        var temp = document.createElement("DIV");
        temp.style.width = length;
        styleEl.parentNode.appendChild(temp);
        length = Math.round(temp.offsetWidth);
        styleEl.parentNode.removeChild(temp);
        return length;
    };
    
    return {
        /* GET */
        get : function (el, styleProp) {   
            var rValue;
            styleEl = (typeof(el) === "string") ? document.getElementById(el) : el;	
            var styleProp = (typeof(styleProp) === "string") ? styleProp.toLowerCase() : "";
            styleProp = styleProp.replace(/\-/g, "");
            
            if (!isIE || !/block/i.test(styleEl.currentStyle["display"]))
                return;
            
            switch (styleProp) { /* Run through the valid css properties, return undefined if none match */
                case "top": rValue = getPos("top"); break;
                case "right": rValue = getPos("right"); break;
                case "bottom": rValue = getPos("bottom"); break;
                case "left": rValue = getPos("left"); break;
                case "margintop": rValue = getMargin("Top"); break;
                case "marginright": rValue = getMargin("Right"); break;
                case "marginbottom": rValue = getMargin("Bottom"); break;
                case "marginleft": rValue = getMargin("Left"); break;
                case "bordertopwidth": rValue = getBorderWidth("Top"); break;
                case "borderrightwidth": rValue = getBorderWidth("Right"); break;
                case "borderbottomwidth": rValue = getBorderWidth("Bottom"); break;
                case "borderleftwidth": rValue = getBorderWidth("Left"); break;
                case "paddingtop": rValue = getPadding("Top"); break;
                case "paddingright": rValue = getPadding("Right"); break;
                case "paddingbottom": rValue = getPadding("Bottom"); break;
                case "paddingleft": rValue = getPadding("Left"); break;
                case "width": rValue = getWidth(); break;
                case "height": rValue = getHeight(); break;
            }
            
            return rValue;
        }
    };
}();

function ziskejVlastnost(element,vlastnost)
{
  var hodnota = 0;

	if (window.getComputedStyle) //firefox, opera...
    var hodnota = document.defaultView.getComputedStyle(element,null).getPropertyValue(vlastnost);
	else if (element.currentStyle) //ie
		//var hodnota = element.currentStyle[vlastnost];
		hodnota = IE_computedStyle.get(element,vlastnost);
	
  reg=new RegExp("((px)$)");
	if (hodnota && hodnota.search(reg)>0) return Math.round(parseFloat(hodnota));
	return false;
}

function vyhledejStyl(styl,test) {
  
  var rozmery=new Array();
  
  for (var i=0; i<document.styleSheets.length; i++) {
    if (document.all) {
      var pravidla=document.styleSheets[i].rules;
    } else {
      var pravidla=document.styleSheets[i].cssRules;
    }
    reg=new RegExp("(("+styl+")$)");
 
    for (var j=0; j<pravidla.length; j++) {
      if (pravidla[j].selectorText && pravidla[j].selectorText.toLowerCase().search(reg)>-1) {
        //if (pravidla[j].style.left) rozmery.left=parseInt(pravidla[j].style.left);
        //if (pravidla[j].style.top) rozmery.top=parseInt(pravidla[j].style.top);
        if (pravidla[j].style.width) rozmery.width=parseInt(pravidla[j].style.width);
        if (pravidla[j].style.height) rozmery.height=parseInt(pravidla[j].style.height);
        if (pravidla[j].style.paddingLeft) rozmery.paddingLeft=parseInt(pravidla[j].style.paddingLeft);
        if (pravidla[j].style.paddingTop) rozmery.paddingTop=parseInt(pravidla[j].style.paddingTop);
        if (pravidla[j].style.paddingRight) rozmery.paddingRight=parseInt(pravidla[j].style.paddingRight);
        if (pravidla[j].style.paddingBottom) rozmery.paddingBottom=parseInt(pravidla[j].style.paddingBottom);
        if (pravidla[j].style.marginLeft) rozmery.marginLeft=parseInt(pravidla[j].style.marginLeft);
        if (pravidla[j].style.marginTop) rozmery.marginTop=parseInt(pravidla[j].style.marginTop);
        if (pravidla[j].style.marginRight) rozmery.marginRight=parseInt(pravidla[j].style.marginRight);
        if (pravidla[j].style.marginBottom) rozmery.marginBottom=parseInt(pravidla[j].style.marginBottom);
      }
    }
  }
  return rozmery;
}

function rolloverNactiRozmery(trida) {

  if (this.rozmery.paddingLeft==undefined || this.rozmery.paddingRight==undefined || this.rozmery.paddingTop==undefined || this.rozmery.paddingBottom==undefined || this.rozmery.width==undefined || this.rozmery.height==undefined) {
    r=ziskejVlastnost(this.odkaz,"padding-left");
    if (r) this.rozmery.paddingLeft=r;
    r=ziskejVlastnost(this.odkaz,"padding-right");
    if (r) this.rozmery.paddingRight=r;
    r=ziskejVlastnost(this.odkaz,"padding-top");
    if (r) this.rozmery.paddingTop=r;
    r=ziskejVlastnost(this.odkaz,"padding-bottom");
    if (r) this.rozmery.paddingBottom=r;
    r=ziskejVlastnost(this.odkaz,"width");
    if (r) this.rozmery.width=r;
    r=ziskejVlastnost(this.odkaz,"height");
    if (r) this.rozmery.height=r;
  } else return;

  if (this.rozmery.paddingLeft==undefined || this.rozmery.paddingRight==undefined || this.rozmery.paddingTop==undefined || this.rozmery.paddingBottom==undefined || this.rozmery.width==undefined || this.rozmery.height==undefined) {
    r=ziskejVlastnost(this.obrazek,"margin-left");
    if (r) this.rozmery.paddingLeft=r;
    r=ziskejVlastnost(this.obrazek,"margin-right");
    if (r) this.rozmery.paddingRight=r;
    r=ziskejVlastnost(this.obrazek,"margin-top");
    if (r) this.rozmery.paddingTop=r;
    r=ziskejVlastnost(this.obrazek,"margin-bottom");
    if (r) this.rozmery.paddingBottom=r;
    r=ziskejVlastnost(this.obrazek,"width");
    if (r) this.rozmery.width=r;
    r=ziskejVlastnost(this.obrazek,"height");
    if (r) this.rozmery.height=r;
  } else return;

  //padding nenastaven - 0
  if (this.rozmery.paddingLeft==undefined) this.rozmery.paddingLeft=0;
  if (this.rozmery.paddingRight==undefined) this.rozmery.paddingRight=0;
  if (this.rozmery.paddingTop==undefined) this.rozmery.paddingTop=0;
  if (this.rozmery.paddingBottom==undefined) this.rozmery.paddingBottom=0;
  //nacteni rozmeru ze samotneho obrazku
  if (this.rozmery.width==undefined || this.rozmery.height==undefined) {
    //preload, pokud jiz neni
    if (!this.obr) {
      this.obr=new Image();
      this.obr.src=this.obrazek.src;
    }
    if (this.rozmery.width==undefined && this.obr.complete) this.rozmery.width=this.obr.width;
    if (this.rozmery.height==undefined && this.obr.complete) this.rozmery.height=this.obr.height;
  }
}

function rolloverNastavPreloady() {
  
  for (var i in rollovery) {
    if (!rollovery[i].cesta) rollovery[i].cesta="";
    rollovery[i].preloadyImg = new Array();
    
    for (var j in rollovery[i].preloady) {
      rollovery[i].preloadyImg[j] = new Image();
      rollovery[i].preloadyImg[j].src=rollovery[i].cesta+rollovery[i].preloady[j];
    }
  }
}


function rolloverRizeni() {
  
  var nezpracovanychOdkazu=0;

  for (var i in rollovery) {

    var preskocit=false;

    //otestuje se nacteni obrazku
    for (var j in rollovery[i].preloadyImg) {
      if (!rollovery[i].preloadyImg[j].complete) {
        preskocit=true;
        break;
      }
    }

    if (preskocit) continue;

    for (var j in rollovery[i].odkazy) {

      if (!rollovery[i].nenacitatStyl) rollovery[i].odkazy[j].nactiRozmery(rollovery[i].nazev); //nacteni rozmeru

      if (rollovery[i].nenacitatStyl || (rollovery[i].odkazy[j].rozmery.paddingLeft!=undefined && rollovery[i].odkazy[j].rozmery.paddingRight!=undefined && rollovery[i].odkazy[j].rozmery.paddingTop!=undefined && rollovery[i].odkazy[j].rozmery.paddingBottom!=undefined && rollovery[i].odkazy[j].rozmery.width!=undefined && rollovery[i].odkazy[j].rozmery.height!=undefined)) {
        if (!rollovery[i].nenacitatStyl) { //prirazeni zjistenych rozmeru do odkazu
          rollovery[i].odkazy[j].odkaz.style.paddingLeft=rollovery[i].odkazy[j].rozmery.paddingLeft+"px";
          rollovery[i].odkazy[j].odkaz.style.paddingRight=rollovery[i].odkazy[j].rozmery.paddingRight+"px";
          rollovery[i].odkazy[j].odkaz.style.paddingTop=rollovery[i].odkazy[j].rozmery.paddingTop+"px";
          rollovery[i].odkazy[j].odkaz.style.paddingBottom=rollovery[i].odkazy[j].rozmery.paddingBottom+"px";
          rollovery[i].odkazy[j].odkaz.style.width=rollovery[i].odkazy[j].rozmery.width+"px";
          rollovery[i].odkazy[j].odkaz.style.height=rollovery[i].odkazy[j].rozmery.height+"px";
        }
        for (var k in rollovery[i].divy) { //vytvareni jednotlivych divu s pozadim
          var div=document.createElement("div");
          div.className=rollovery[i].divy[k];
          if (!rollovery[i].nenacitatStyl) {
            var rozmery=vyhledejStyl(rollovery[i].divy[k]); //nacteni rozmeru divu a prirazeni chybejiciho rozmeru divu, pokud chybi
            if (rozmery.width==undefined) div.style.width=(rollovery[i].odkazy[j].rozmery.paddingLeft+rollovery[i].odkazy[j].rozmery.width+rollovery[i].odkazy[j].rozmery.paddingRight)+"px";
            if (rozmery.height==undefined) div.style.height=(rollovery[i].odkazy[j].rozmery.paddingTop+rollovery[i].odkazy[j].rozmery.height+rollovery[i].odkazy[j].rozmery.paddingBottom)+"px";
          }
          rollovery[i].odkazy[j].odkaz.appendChild(div); //vlozeni divu
        }
        rollovery[i].odkazy[j]=undefined; //zruseni odkazu z objektu, aby se div nevytvoril znovu
      } else { //rozmery stale nebyly nacteny, odkaz nemuze byt zpracovan
        nezpracovanychOdkazu++; 
      }
    }
  }
  
  if (!rolNacteno || nezpracovanychOdkazu>0) {
    if (rolCas2>40000) return false; //ukonceni po 40s bez ohledu 
    if (rolCas2>1000) var koef=1.2; else var koef=2;
    rolCas2=parseInt(rolCas2*koef);
    setTimeout("rolloverRizeni()", rolCas2); //znovuzavolani
  }
}

function rolloverNajdiObrazky() {
  
  //cekani na nacteni html
  if (!document.getElementById("zapati_kontejner")) {
    rolCas=rolCas*2;
    setTimeout("rolloverNajdiObrazky()", rolCas);
    return;
  }
  
  var odkazy=document.getElementsByTagName('a'); //vsechny odkazy

  //pruchod pres vsechny odkazy
  for (var i in odkazy) {
    if (odkazy[i].nodeName!="A" || odkazy[i].className.length==0) continue; //nenastavena trida -  pokracovat

    var tridy=odkazy[i].className.split(" "); //rozdeleni trid do pole
    
    //pruchod pres tridy odkazu
    for (var j in tridy) {

      //pruchod pres nastaveni jednotlivych rolloveru
      for (var k in rollovery) {
      
        if (!rollovery[k].odkazy) rollovery[k].odkazy = new Array();
        
        if (rollovery[k].nazev!=tridy[j]) continue; //nesouhlasi-li nazvy, pokracovat v dalsi iteraci
        
        var obrazky=odkazy[i].getElementsByTagName("img"); //obrazky v odkazu (pracuje se s prvnim)
        if (obrazky.length==0) continue; //v odkazu neni obrazek

        var rol = new Object({
          odkaz : odkazy[i],
          obrazek : obrazky[0],
          rozmery : new Object({}),
          nactiRozmery : rolloverNactiRozmery
        });
        rollovery[k].odkazy=rollovery[k].odkazy.concat(new Array(rol)); //pridani odkazu k danemu rolloveru
      }
    }
  }
  rolNacteno=true;
}
rolCas=2;
rolCas2=2;
rolNacteno=false;
//provest kontrolu objektu
rollovery = new Array(
	new Object({
  	nazev : "rollover_kolekce",
  	divy : new Array("rollover_kolekce_hover"),
    cesta : "fileadmin/template/term/img/rollovery/",
    nenacitatStyl : 1, //v pripade pevnych rozmeru nastavit width, height a padding primo do odkazu
    preloady: new Array("kolekce_hover.gif")
  }),
  
	new Object({
  	nazev : "rollover_znacky",
  	divy : new Array("rollover_znacky_hover"),
  	nenacitatStyl : 1,
    preloady: new Array("fileadmin/template/term/img/rollovery/znacky_hover.gif")
  }),
	new Object({
  	nazev : "rollover_prodejni_mista",
  	divy : new Array("rollover_prodejni_mista_hover"),
  	nenacitatStyl : 1,
    preloady: new Array("fileadmin/template/term/img/rollovery/prodejni_mista_hover.gif")
  }),
	new Object({
  	nazev : "rollover_velikosti_symboly",
  	divy : new Array("rollover_velikosti_symboly_hover"),
  	nenacitatStyl : 1,
    preloady: new Array("fileadmin/template/term/img/rollovery/velikosti_symboly_hover.gif")
  }),
	new Object({
  	nazev : "rollover_velikosti_symboly2",
  	divy : new Array("rollover_velikosti_symboly2_hover"),
  	nenacitatStyl : 1,
    preloady: new Array("fileadmin/template/term/img/rollovery/velikosti_symboly2_hover.gif")
  })
);

rolloverNastavPreloady();
rolloverNajdiObrazky();
rolloverRizeni();
