| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- var jsmenu = new Array();
- var ctrlobjclassName;
- jsmenu['active'] = new Array();
- jsmenu['timer'] = new Array();
- jsmenu['iframe'] = new Array();
- function initCtrl(ctrlobj, click, duration, timeout, layer) {
- if(ctrlobj && !ctrlobj.initialized) {
- ctrlobj.initialized = true;
- ctrlobj.unselectable = true;
- ctrlobj.outfunc = typeof ctrlobj.onmouseout == 'function' ? ctrlobj.onmouseout : null;
- ctrlobj.onmouseout = function() {
- if(this.outfunc) this.outfunc();
- if(duration < 3) jsmenu['timer'][ctrlobj.id] = setTimeout('hideMenu(' + layer + ')', timeout);
- }
- if(click && duration) {
- ctrlobj.clickfunc = typeof ctrlobj.onclick == 'function' ? ctrlobj.onclick : null;
- ctrlobj.onclick = function (e) {
- doane(e);
- if(jsmenu['active'][layer] == null || jsmenu['active'][layer].ctrlkey != this.id) {
- if(this.clickfunc) this.clickfunc();
- else showMenu(this.id, true);
- } else {
- hideMenu(layer);
- }
- }
- }
- ctrlobj.overfunc = typeof ctrlobj.onmouseover == 'function' ? ctrlobj.onmouseover : null;
- ctrlobj.onmouseover = function(e) {
- doane(e);
- if(this.overfunc) this.overfunc();
- if(click) {
- clearTimeout(jsmenu['timer'][this.id]);
- } else {
- for(var id in jsmenu['timer']) {
- if(jsmenu['timer'][id]) clearTimeout(jsmenu['timer'][id]);
- }
- }
- }
- }
- }
- function initMenu(ctrlid, menuobj, duration, timeout, layer) {
- if(menuobj && !menuobj.initialized) {
- menuobj.initialized = true;
- menuobj.ctrlkey = ctrlid;
- menuobj.onclick = ebygum;
- menuobj.style.position = 'absolute';
- if(duration < 3) {
- if(duration > 1) {
- menuobj.onmouseover = function() {
- clearTimeout(jsmenu['timer'][ctrlid]);
- }
- }
- if(duration != 1) {
- menuobj.onmouseout = function() {
- jsmenu['timer'][ctrlid] = setTimeout('hideMenu(' + layer + ')', timeout);
- }
- }
- }
- menuobj.style.zIndex = 50;
- if(is_ie) {
- menuobj.style.filter += "progid:DXImageTransform.Microsoft.shadow(direction=135,color=#CCCCCC,strength=2)";
- }
- }
- }
- function showMenu(ctrlid, click, offset, duration, timeout, layer, showid, maxh) {
- e = window.event ? window.event : showMenu.caller.arguments[0];
- var ctrlobj = $(ctrlid);
- if(!ctrlobj) return;
- if(isUndefined(click)) click = false;
- if(isUndefined(offset)) offset = 0;
- if(isUndefined(duration)) duration = 2;
- if(isUndefined(timeout)) timeout = 500;
- if(isUndefined(layer)) layer = 0;
- if(isUndefined(showid)) showid = ctrlid;
- var showobj = $(showid);
- var menuobj = $(showid + '_menu');
- if(!showobj|| !menuobj) return;
- if(isUndefined(maxh)) maxh = 400;
- hideMenu(layer);
- for(var id in jsmenu['timer']) {
- if(jsmenu['timer'][id]) clearTimeout(jsmenu['timer'][id]);
- }
- initCtrl(ctrlobj, click, duration, timeout, layer);
- ctrlobjclassName = ctrlobj.className;
- ctrlobj.className += ' hover';
- initMenu(ctrlid, menuobj, duration, timeout, layer);
- menuobj.style.display = '';
- if(!is_opera) {
- menuobj.style.clip = 'rect(auto, auto, auto, auto)';
- }
- setMenuPosition(showid, offset);
- if(is_ie && is_ie < 7) {
- if(!jsmenu['iframe'][layer]) {
- var iframe = document.createElement('iframe');
- iframe.style.display = 'none';
- iframe.style.position = 'absolute';
- iframe.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)';
- $('append_parent') ? $('append_parent').appendChild(iframe) : menuobj.parentNode.appendChild(iframe);
- jsmenu['iframe'][layer] = iframe;
- }
- jsmenu['iframe'][layer].style.top = menuobj.style.top;
- jsmenu['iframe'][layer].style.left = menuobj.style.left;
- jsmenu['iframe'][layer].style.width = menuobj.w;
- jsmenu['iframe'][layer].style.height = menuobj.h;
- jsmenu['iframe'][layer].style.display = 'block';
- }
- if(maxh && menuobj.scrollHeight > maxh) {
- menuobj.style.height = maxh + 'px';
- if(is_opera) {
- menuobj.style.overflow = 'auto';
- } else {
- menuobj.style.overflowY = 'auto';
- }
- }
- if(!duration) {
- setTimeout('hideMenu(' + layer + ')', timeout);
- }
- jsmenu['active'][layer] = menuobj;
- }
- function setMenuPosition(showid, offset) {
- var showobj = $(showid);
- var menuobj = $(showid + '_menu');
- if(isUndefined(offset)) offset = 0;
- if(showobj) {
- showobj.pos = fetchOffset(showobj);
- showobj.X = showobj.pos['left'];
- showobj.Y = showobj.pos['top'];
- showobj.w = showobj.offsetWidth;
- showobj.h = showobj.offsetHeight;
- menuobj.w = menuobj.offsetWidth;
- menuobj.h = menuobj.offsetHeight;
- menuobj.style.left = (showobj.X + menuobj.w > document.body.clientWidth) && (showobj.X + showobj.w - menuobj.w >= 0) ? showobj.X + showobj.w - menuobj.w + 'px' : showobj.X + 'px';
- menuobj.style.top = offset == 1 ? showobj.Y + 'px' : (offset == 2 || ((showobj.Y + showobj.h + menuobj.h > document.documentElement.scrollTop + document.documentElement.clientHeight) && (showobj.Y - menuobj.h >= 0)) ? (showobj.Y - menuobj.h) + 'px' : showobj.Y + showobj.h + 'px');
- if(menuobj.style.clip && !is_opera) {
- menuobj.style.clip = 'rect(auto, auto, auto, auto)';
- }
- }
- }
- function hideMenu(layer) {
- if(isUndefined(layer)) layer = 0;
- if(jsmenu['active'][layer]) {
- try {
- $(jsmenu['active'][layer].ctrlkey).className = ctrlobjclassName;
- } catch(e) {}
- clearTimeout(jsmenu['timer'][jsmenu['active'][layer].ctrlkey]);
- jsmenu['active'][layer].style.display = 'none';
- if(is_ie && is_ie < 7 && jsmenu['iframe'][layer]) {
- jsmenu['iframe'][layer].style.display = 'none';
- }
- jsmenu['active'][layer] = null;
- }
- }
- function fetchOffset(obj) {
- var left_offset = obj.offsetLeft;
- var top_offset = obj.offsetTop;
- while((obj = obj.offsetParent) != null) {
- left_offset += obj.offsetLeft;
- top_offset += obj.offsetTop;
- }
- return { 'left' : left_offset, 'top' : top_offset };
- }
- function ebygum(eventobj) {
- if(!eventobj || is_ie) {
- window.event.cancelBubble = true;
- return window.event;
- } else {
- if(eventobj.target.type == 'submit') {
- eventobj.target.form.submit();
- }
- eventobj.stopPropagation();
- return eventobj;
- }
- }
- function menuoption_onclick_function(e) {
- this.clickfunc();
- hideMenu();
- }
- function menuoption_onclick_link(e) {
- choose(e, this);
- }
- function menuoption_onmouseover(e) {
- this.className = 'popupmenu_highlight';
- }
- function menuoption_onmouseout(e) {
- this.className = 'popupmenu_option';
- }
- function choose(e, obj) {
- var links = obj.getElementsByTagName('a');
- if(links[0]) {
- if(is_ie) {
- links[0].click();
- window.event.cancelBubble = true;
- } else {
- if(e.shiftKey) {
- window.open(links[0].href);
- e.stopPropagation();
- e.preventDefault();
- } else {
- window.location = links[0].href;
- e.stopPropagation();
- e.preventDefault();
- }
- }
- hideMenu();
- }
- }
|