git-svn-id: https://192.168.0.254/svn/Proyectos.IRFineArts_Web/trunk@1 88734cd7-4cec-0b49-a19b-cefba6b9d6f8
183 lines
7.5 KiB
JavaScript
183 lines
7.5 KiB
JavaScript
var cssdropdown={
|
|
|
|
disappeardelay: 250, // set delay in miliseconds before menu disappears onmouseout
|
|
|
|
enablereveal: [true, 5], // enable swipe effect? [true/false, steps (Number of animation steps. Integer between 1-20. Smaller=faster)]
|
|
|
|
enableiframeshim: 1, // enable "iframe shim" in IE5.5 to IE7? (1=yes, 0=no)
|
|
|
|
|
|
|
|
// No need to edit beyond here////////////////////////
|
|
|
|
|
|
|
|
dropmenuobj: null, asscmenuitem: null, domsupport: document.all || document.getElementById, standardbody: null, iframeshimadded: false, revealtimers: {},
|
|
|
|
|
|
|
|
getposOffset:function(what, offsettype){
|
|
|
|
var totaloffset=(offsettype=="left")? what.offsetLeft : what.offsetTop;
|
|
|
|
var parentEl=what.offsetParent;
|
|
|
|
while (parentEl!=null){
|
|
|
|
totaloffset=(offsettype=="left")? totaloffset+parentEl.offsetLeft : totaloffset+parentEl.offsetTop;
|
|
|
|
parentEl=parentEl.offsetParent;
|
|
|
|
}
|
|
|
|
return totaloffset;
|
|
|
|
},
|
|
|
|
|
|
|
|
css:function(el, targetclass, action){
|
|
|
|
var needle=new RegExp("(^|\\s+)"+targetclass+"($|\\s+)", "ig")
|
|
|
|
if (action=="check")
|
|
|
|
return needle.test(el.className)
|
|
|
|
else if (action=="remove")
|
|
|
|
el.className=el.className.replace(needle, "")
|
|
|
|
else if (action=="add" && !needle.test(el.className))
|
|
|
|
el.className+=" "+targetclass
|
|
|
|
},
|
|
|
|
|
|
|
|
showmenu:function(dropmenu, e){
|
|
|
|
if (this.enablereveal[0]){
|
|
|
|
if (!dropmenu._trueheight || dropmenu._trueheight<10)
|
|
|
|
dropmenu._trueheight=dropmenu.offsetHeight
|
|
|
|
clearTimeout(this.revealtimers[dropmenu.id])
|
|
|
|
dropmenu.style.height=dropmenu._curheight=0
|
|
|
|
dropmenu.style.overflow="hidden"
|
|
|
|
dropmenu.style.visibility="visible"
|
|
|
|
this.revealtimers[dropmenu.id]=setInterval(function(){cssdropdown.revealmenu(dropmenu)}, 10)
|
|
|
|
}
|
|
|
|
else{
|
|
|
|
dropmenu.style.visibility="visible"
|
|
|
|
}
|
|
|
|
this.css(this.asscmenuitem, "selected", "add")
|
|
|
|
},
|
|
|
|
|
|
|
|
revealmenu:function(dropmenu, dir){
|
|
|
|
var curH=dropmenu._curheight, maxH=dropmenu._trueheight, steps=this.enablereveal[1]
|
|
|
|
if (curH<maxH){
|
|
|
|
var newH=Math.min(curH, maxH)
|
|
|
|
dropmenu.style.height=newH+"px"
|
|
|
|
dropmenu._curheight= newH + Math.round((maxH-newH)/steps) + 1
|
|
|
|
}
|
|
|
|
else{ // if done revealing menu
|
|
|
|
dropmenu.style.height="auto"
|
|
|
|
dropmenu.style.overflow="hidden"
|
|
|
|
clearInterval(this.revealtimers[dropmenu.id])
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
clearbrowseredge:function(obj, whichedge){
|
|
|
|
var edgeoffset=0
|
|
|
|
if (whichedge=="rightedge"){
|
|
|
|
var windowedge=document.all && !window.opera? this.standardbody.scrollLeft+this.standardbody.clientWidth-15 : window.pageXOffset+window.innerWidth-15
|
|
|
|
var dropmenuW=this.dropmenuobj.offsetWidth
|
|
|
|
if (windowedge-this.dropmenuobj.x < dropmenuW) // move menu to the left?
|
|
|
|
edgeoffset=dropmenuW-obj.offsetWidth
|
|
|
|
}
|
|
|
|
else{
|
|
|
|
var topedge=document.all && !window.opera? this.standardbody.scrollTop : window.pageYOffset
|
|
|
|
var windowedge=document.all && !window.opera? this.standardbody.scrollTop+this.standardbody.clientHeight-15 : window.pageYOffset+window.innerHeight-18
|
|
|
|
var dropmenuH=this.dropmenuobj._trueheight
|
|
|
|
if (windowedge-this.dropmenuobj.y < dropmenuH){ // move up?
|
|
|
|
edgeoffset=dropmenuH+obj.offsetHeight
|
|
|
|
if ((this.dropmenuobj.y-topedge)<dropmenuH) // up no good either?
|
|
|
|
edgeoffset=this.dropmenuobj.y+obj.offsetHeight-topedge
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return edgeoffset
|
|
|
|
},
|
|
|
|
|
|
|
|
dropit:function(obj, e, dropmenuID){
|
|
|
|
if (this.dropmenuobj!=null) // hide previous menu
|
|
|
|
this.hidemenu() // hide menu
|
|
|
|
this.clearhidemenu()
|
|
|
|
this.dropmenuobj=document.getElementById(dropmenuID) // reference drop down menu
|
|
|
|
this.asscmenuitem=obj // reference associated menu item
|
|
|
|
this.showmenu(this.dropmenuobj, e)
|
|
|
|
this.dropmenuobj.x=this.getposOffset(obj, "left")
|
|
|
|
this.dropmenuobj.y=this.getposOffset(obj, "top")
|
|
|
|
this.dropmenuobj.style.left=this.dropmenuobj.x-this.clearbrowseredge(obj, "rightedge")+"px"
|
|
|
|
this.dropmenuobj.style.top=this.dropmenuobj.y-this.clearbrowseredge(obj, "bottomedge")+obj.offsetHeight+1+"px"
|
|
|
|
this.positionshim() // call iframe shim function
|
|
|
|
},
|
|
|
|
|
|
|
|
positionshim:function(){ // display iframe shim function
|
|
|
|
if (this.iframeshimadded){
|
|
|
|
if (this.dropmenuobj.style.visibility=="visible"){
|
|
|
|
this.shimobject.style.width=this.dropmenuobj.offsetWidth+"px"
|
|
|
|
this.shimobject.style.height=this.dropmenuobj._trueheight+"px"
|
|
|
|
this.shimobject.style.left=parseInt(this.dropmenuobj.style.left)+"px"
|
|
|
|
this.shimobject.style.top=parseInt(this.dropmenuobj.style.top)+"px"
|
|
|
|
this.shimobject.style.display="block"
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
hideshim:function(){
|
|
|
|
if (this.iframeshimadded)
|
|
|
|
this.shimobject.style.display='none'
|
|
|
|
},
|
|
|
|
|
|
|
|
isContained:function(m, e){
|
|
|
|
var e=window.event || e
|
|
|
|
var c=e.relatedTarget || ((e.type=="mouseover")? e.fromElement : e.toElement)
|
|
|
|
while (c && c!=m)try {c=c.parentNode} catch(e){c=m}
|
|
|
|
if (c==m)
|
|
|
|
return true
|
|
|
|
else
|
|
|
|
return false
|
|
|
|
},
|
|
|
|
|
|
|
|
dynamichide:function(m, e){
|
|
|
|
if (!this.isContained(m, e)){
|
|
|
|
this.delayhidemenu()
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
delayhidemenu:function(){
|
|
|
|
this.delayhide=setTimeout("cssdropdown.hidemenu()", this.disappeardelay) // hide menu
|
|
|
|
},
|
|
|
|
|
|
|
|
hidemenu:function(){
|
|
|
|
this.css(this.asscmenuitem, "selected", "remove")
|
|
|
|
this.dropmenuobj.style.visibility='hidden'
|
|
|
|
this.dropmenuobj.style.left=this.dropmenuobj.style.top="-1000px"
|
|
|
|
this.hideshim()
|
|
|
|
},
|
|
|
|
|
|
|
|
clearhidemenu:function(){
|
|
|
|
if (this.delayhide!="undefined")
|
|
|
|
clearTimeout(this.delayhide)
|
|
|
|
},
|
|
|
|
|
|
|
|
addEvent:function(target, functionref, tasktype){
|
|
|
|
if (target.addEventListener)
|
|
|
|
target.addEventListener(tasktype, functionref, false);
|
|
|
|
else if (target.attachEvent)
|
|
|
|
target.attachEvent('on'+tasktype, function(){return functionref.call(target, window.event)});
|
|
|
|
},
|
|
|
|
|
|
|
|
startchrome:function(){
|
|
|
|
if (!this.domsupport)
|
|
|
|
return
|
|
|
|
this.standardbody=(document.compatMode=="CSS1Compat")? document.documentElement : document.body
|
|
|
|
for (var ids=0; ids<arguments.length; ids++){
|
|
|
|
var menuitems=document.getElementById(arguments[ids]).getElementsByTagName("a")
|
|
|
|
for (var i=0; i<menuitems.length; i++){
|
|
|
|
if (menuitems[i].getAttribute("rel")){
|
|
|
|
var relvalue=menuitems[i].getAttribute("rel")
|
|
|
|
var asscdropdownmenu=document.getElementById(relvalue)
|
|
|
|
this.addEvent(asscdropdownmenu, function(){cssdropdown.clearhidemenu()}, "mouseover")
|
|
|
|
this.addEvent(asscdropdownmenu, function(e){cssdropdown.dynamichide(this, e)}, "mouseout")
|
|
|
|
this.addEvent(asscdropdownmenu, function(){cssdropdown.delayhidemenu()}, "click")
|
|
|
|
this.addEvent(menuitems[i], function(e){ // show drop down menu when main menu items are mouse over-ed
|
|
|
|
if (!cssdropdown.isContained(this, e)){
|
|
|
|
var evtobj=window.event || e
|
|
|
|
cssdropdown.dropit(this, evtobj, this.getAttribute("rel"))
|
|
|
|
}
|
|
|
|
}, "mouseover")
|
|
|
|
this.addEvent(menuitems[i], function(e){cssdropdown.dynamichide(this, e)}, "mouseout") // hide drop down menu when main menu items are mouse out
|
|
|
|
this.addEvent(menuitems[i], function(){cssdropdown.delayhidemenu()}, "click") // hide drop down menu when main menu items are clicked on
|
|
|
|
}
|
|
|
|
} // end inner for
|
|
|
|
} // end outer for
|
|
|
|
if (this.enableiframeshim && document.all && !window.XDomainRequest && !this.iframeshimadded){ // enable iframe shim in IE5.5 thru IE7?
|
|
|
|
document.write('<IFRAME id="iframeshim" src="about:blank" frameBorder="0" scrolling="no" style="left:0; top:0; position:absolute; display:none;z-index:90; background: transparent;"></IFRAME>')
|
|
|
|
this.shimobject=document.getElementById("iframeshim") // reference iframe object
|
|
|
|
this.shimobject.style.filter='progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)'
|
|
|
|
this.iframeshimadded=true
|
|
|
|
}
|
|
|
|
} // end startchrome
|
|
|
|
|
|
|
|
} |