// függőségek if ("undefined" == typeof AITIA) { alert("AITIA include missing!"); } else if ("undefined" == typeof AITIA_BROWSER) { alert("AITIA_BROWSER include missing!"); } else if ("undefined" == typeof AITIA_STYLE) { alert("AITIA_STYLE include missing!"); } // többszörös include if ("undefined" != typeof AITIA_POSITION) { alert("AITIA_POSITION multiple insert!"); } AITIA_POSITION = 1; Aitia.Position = {}; /* //ez megadja a bal felso sarok helyet function getPos_old(node){ var pos={top: 0, left:0}; var node=node; while(node != null) { pos.left+=node.offsetLeft; pos.top+=node.offsetTop; node=node.offsetParent; } return pos; } */ Aitia.Position.getPositionContent = function(el,scroll) { var pos = this.getPositionPadding(el,scroll); pos.top += Aitia.Style.getStyle(el,"padding-top",true); pos.left += Aitia.Style.getStyle(el,"padding-left",true); return pos; } // getPositionContent Aitia.Position.getPositionPadding = function(el,scroll) { var pos = this.getPositionBorder(el,scroll); pos.top += Aitia.Style.getStyle(el,"border-top-width",true); pos.left += Aitia.Style.getStyle(el,"border-left-width",true); return pos; } //scroll: //0 nem veszi figyelembe //1 hozzaadja //2 kivonja NS getEventRelativePos-hoz ez kell Aitia.Position.getPositionBorder = function(oriEl,scroll) { var pos = {top: 0, left:0}; var el = oriEl; var absolute = false; var i = 0; var borderTopWidthSum = 0; var borderLeftWidthSum = 0; if (el) { while(null != el) { ++i; if (1 != i) { //nem az eredeti node-nal vagyunk mar borderTopWidthSum += Aitia.Style.getStyle(el,"border-top-width",true); borderLeftWidthSum += Aitia.Style.getStyle(el,"border-left-width",true); } pos.top += el.offsetTop; pos.left += el.offsetLeft; if (Aitia.Browser.nsDom && el != oriEl && "auto" == Aitia.Style.getStyle(el,"overflow")) { pos.left = pos.left + 2 * Aitia.Style.getStyle(el,"border-left-width",true); pos.top = pos.top + 2 * Aitia.Style.getStyle(el,"border-top-width",true); } if (1 == scroll) { if (el.scrollLeft) { pos.left += el.scrollLeft; } if (el.scrollTop) { pos.top += el.scrollTop; } } else if (2 == scroll) { if (el.scrollLeft) { pos.left -= el.scrollLeft; } if (el.scrollTop) { pos.top -= el.scrollTop; } } //ha div-ben van absolute, akkor a div pozicioja lesz neki az origo, tehat nem kene absolute-nal megallni // most ez disable if (false && Aitia.Style.getStyle(el,"position") == "absolute") { //itt lehetne offset ertekek helyett top es left getStyle is, de akkor meg a margint is hozza kellene adni //szoval ez igy gyorsabb es jobb szerintem absolute = true; el = null; } else { el = el.offsetParent; } } if (Aitia.Browser.ieDom || absolute) { pos.left = pos.left + borderLeftWidthSum; pos.top = pos.top + borderTopWidthSum; //IE a max(parent.padding-top,el.margin-top) tavolsagot renderel fuggolegesen (vizszintesnel osszeadodnak) //ezzel nem torodunk, ugy vesszuk, hogy megkapta a el.margin-top tavolsagot } else if (Aitia.Browser.nsDom) { //negativ, ha van border, egyszer lejott ezert ketszer hozza kell adni pos.left = pos.left - 2 * document.body.offsetLeft; pos.top = pos.top - 2 * document.body.offsetTop; } else if (Aitia.Browser.operaDom) { pos.left = pos.left + Aitia.Style.getStyle(document.body,"border-left-width",true); pos.top = pos.top + Aitia.Style.getStyle(document.body,"border-top-width",true); if ("textarea" == oriEl.tagName.toLowerCase() && Aitia.Style.getStyle(oriEl,"position") != "absolute") { pos.left += 3; pos.top += 3; //2 table-ben levo textarea-ra meg mindig nem franko teljesen } } } return pos; } // getPositionBorder Aitia.Position.getPositionMargin = function(el,scroll,relative,scroll) { var pos = this.getPositionBorder(el,scroll); pos.top -= Aitia.Style.getStyle(el,"margin-top",true); pos.left -= Aitia.Style.getStyle(el,"margin-left",true); return pos; } // getPositionMargin //content poziciojat adja meg pos Aitia.Position.setPositionContent = function(el,pos,relative,scroll) { pos.top -= Aitia.Style.getStyle(el,"padding-top",true); pos.left -= Aitia.Style.getStyle(el,"padding-left",true); return this.setPositionBorder(el,pos,relative,scroll); } // setPositionContent //padding poziciojat adja meg pos Aitia.Position.setPositionPadding = function(el,pos,relative,scroll) { pos.top -= Aitia.Style.getStyle(el,"border-top-width",true); pos.left -= Aitia.Style.getStyle(el,"border-left-width",true); return this.setPositionBorder(el,pos,relative,scroll); } // setPositionPadding //border poziciojat adja meg pos Aitia.Position.setPositionBorder = function(el,pos,relative,scroll) { pos.top -= Aitia.Style.getStyle(el,"margin-top",true); pos.left -= Aitia.Style.getStyle(el,"margin-left",true); return this.setPositionMargin(el,pos,relative,scroll); } // setPositionBorder //box poziciojat adja meg pos //ez a box-modelt mozgatja //mozgatas //ha relative=true, akkor szimplan egyenlove teszi a pozicioval //ha relative=false, akkor ugy veszi, hogy document 0,0-hoz szamit a pozicio (csak absolute eseten van ertelme) //scroll: // 0 nem veszi figyelembe // 1 kivonja // 2 hozzaadja Aitia.Position.setPositionMargin = function(el,pos,relative,scroll) { relative = (relative == null ) ? false : relative; //nem body-hoz adom meg a pos-t, hanem absolute parent-hez //position:relative eseten is hasznos scroll = (scroll == null) ? 0 : scroll; var left = pos.left; var top = pos.top; var moved = true; if (relative == false && Aitia.Style.getStyle(el,"position") == "absolute") { var parent = el.offsetParent; //elso absolute szulo poziciojat le kell vonni, mert absolute szulo bal felso sarka lesz az origo while(parent) { //scroll alapbol hozzaadodik if (1 == scroll) { if (parent.scrollLeft) { left -= parent.scrollLeft; } if (parent.scrollTop) { top -= parent.scrollTop; } } else if (2 == scroll) { if (parent.scrollLeft) { left += parent.scrollLeft; } if (parent.scrollTop) { top += parent.scrollTop; } } if (Aitia.Style.getStyle(parent,"position") == "absolute") { var parentPos = this.getPositionContent(parent); left -= parentPos.left; top -= parentPos.top; parent = null; } else { parent = parent.offsetParent; } } } el.style.left = left + "px"; el.style.top = top + "px"; return moved; } // setPositionMargin //aktualis scroll pozicio // parameter nelkul: aktualis ablak // parameterrel: adott element Aitia.Position.getScrollPosition = function(el) { var pos={top: 0, left: 0}; if (null == el) { // ablak if (document.documentElement && (document.documentElement.scrollTop || document.documentElement.scrollLeft)) { // Explorer 6 Strict and mozilla strict pos.left = document.documentElement.scrollLeft; pos.top = document.documentElement.scrollTop; } else if (self.pageYOffset) {// all except Explorer pos.left = self.pageXOffset; pos.top = self.pageYOffset; } else if (document.body) { // all other Explorers pos.left = document.body.scrollLeft; pos.top = document.body.scrollTop; } } else { // element pos.left = el.scrollLeft; pos.top = el.scrollTop; } return pos; } // getScrollPosition // a böngészőablak renderelési területének magasságát adja vissza Aitia.Position.getInnerHeight = function() { var myHeight = 0; if (typeof(window.innerWidth) == 'number') { //Non-IE myHeight = window.innerHeight; } else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) { //IE 6+ in 'standards compliant mode' myHeight = document.documentElement.clientHeight; } else if (document.body && (document.body.clientWidth || document.body.clientHeight)) { //IE 4 compatible myHeight = document.body.clientHeight; } return myHeight; } // a böngészőablak renderelési területének szélességét adja vissza Aitia.Position.getInnerWidth = function() { var myWidth = 0; if (typeof(window.innerWidth) == 'number') { //Non-IE myWidth = window.innerWidth; } else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) { //IE 6+ in 'standards compliant mode' myWidth = document.documentElement.clientWidth; } else if (document.body && (document.body.clientWidth || document.body.clientHeight)) { //IE 4 compatible myWidth = document.body.clientWidth; } return myWidth; } // getScrollPosition