/* [Discuz!] (C)2001-2009 Comsenz Inc. This is NOT a freeware, use is subject to license terms $RCSfile: common.js,v $ $Revision: 1.103 $ $Date: 2007/07/30 09:16:52 $ */ var lang = new Array(); var userAgent = navigator.userAgent.toLowerCase(); var is_opera = userAgent.indexOf('opera') != -1 && opera.version(); var is_moz = (navigator.product == 'Gecko') && userAgent.substr(userAgent.indexOf('firefox') + 8, 3); var is_ie = (userAgent.indexOf('msie') != -1 && !is_opera) && userAgent.substr(userAgent.indexOf('msie') + 5, 3); var is_mac = userAgent.indexOf('mac') != -1; var ajaxdebug = 0; var InFloat; var discuz_uid = isUndefined(discuz_uid) ? 0 : discuz_uid; var creditnotice = isUndefined(creditnotice) ? '' : creditnotice; var cookiedomain = isUndefined(cookiedomain) ? '' : cookiedomain; var cookiepath = isUndefined(cookiepath) ? '' : cookiepath; var jsmenu = new Array(); var ctrlobjclassName; jsmenu['active'] = new Array(); jsmenu['timer'] = new Array(); jsmenu['iframe'] = new Array(); var menudragstart = new Array(); //FixPrototypeForGecko if(is_moz && window.HTMLElement) { HTMLElement.prototype.__defineSetter__('outerHTML', function(sHTML) { var r = this.ownerDocument.createRange(); r.setStartBefore(this); var df = r.createContextualFragment(sHTML); this.parentNode.replaceChild(df,this); return sHTML; }); HTMLElement.prototype.__defineGetter__('outerHTML', function() { var attr; var attrs = this.attributes; var str = '<' + this.tagName.toLowerCase(); for(var i = 0;i < attrs.length;i++){ attr = attrs[i]; if(attr.specified) str += ' ' + attr.name + '="' + attr.value + '"'; } if(!this.canHaveChildren) { return str + '>'; } return str + '>' + this.innerHTML + ''; }); HTMLElement.prototype.__defineGetter__('canHaveChildren', function() { switch(this.tagName.toLowerCase()) { case 'area':case 'base':case 'basefont':case 'col':case 'frame':case 'hr':case 'img':case 'br':case 'input':case 'isindex':case 'link':case 'meta':case 'param': return false; } return true; }); HTMLElement.prototype.click = function(){ var evt = this.ownerDocument.createEvent('MouseEvents'); evt.initMouseEvent('click', true, true, this.ownerDocument.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null); this.dispatchEvent(evt); } } function $(id) { return document.getElementById(id); } function isUndefined(variable) { return typeof variable == 'undefined' ? true : false; } function showMenu(ctrlid, click, offset, duration, timeout, layer, showid, maxh, drag) { 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 = 250; 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; if(isUndefined(drag)) drag = false; if(click && jsmenu['active'][layer] == menuobj) { hideMenu(layer); return; } else { hideMenu(layer); } var len = jsmenu['timer'].length; if(len > 0) { for(var i=0; i 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 sidebar_collapse(lang) { if(lang[0]) { toggle_collapse('sidebar', null, null, lang); $('wrap').className = $('wrap').className == 'wrap with_side s_clear' ? 'wrap s_clear' : 'wrap with_side s_clear'; } else { var collapsed = getcookie('discuz_collapse'); collapsed = updatestring(collapsed, 'sidebar', 1); setcookie('discuz_collapse', collapsed, (collapsed ? 2592000 : -2592000)); location.reload(); } } function toggle_collapse(objname, noimg, complex, lang) { var obj = $(objname); if(obj) { obj.style.display = obj.style.display == '' ? 'none' : ''; var collapsed = getcookie('discuz_collapse'); collapsed = updatestring(collapsed, objname, !obj.style.display); setcookie('discuz_collapse', collapsed, (collapsed ? 2592000 : -2592000)); } if(!noimg) { var img = $(objname + '_img'); if(img.tagName != 'IMG') { if(img.className.indexOf('_yes') == -1) { img.className = img.className.replace(/_no/, '_yes'); if(lang) { img.innerHTML = lang[0]; } } else { img.className = img.className.replace(/_yes/, '_no'); if(lang) { img.innerHTML = lang[1]; } } } else { img.src = img.src.indexOf('_yes.gif') == -1 ? img.src.replace(/_no\.gif/, '_yes\.gif') : img.src.replace(/_yes\.gif/, '_no\.gif'); } img.blur(); } if(complex) { var objc = $(objname + '_c'); objc.className = objc.className == 'c_header' ? 'c_header closenode' : 'c_header'; } } function getcookie(name) { var cookie_start = document.cookie.indexOf(name); var cookie_end = document.cookie.indexOf(";", cookie_start); return cookie_start == -1 ? '' : unescape(document.cookie.substring(cookie_start + name.length + 1, (cookie_end > cookie_start ? cookie_end : document.cookie.length))); } function updatestring(str1, str2, clear) { str2 = '_' + str2 + '_'; return clear ? str1.replace(str2, '') : (str1.indexOf(str2) == -1 ? str1 + str2 : str1); } 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 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); } 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 menudrag(menuobj, e, op) { if(op == 1) { if(in_array(is_ie ? event.srcElement.tagName : e.target.tagName, ['TEXTAREA', 'INPUT', 'BUTTON', 'SELECT'])) { return; } menudragstart = is_ie ? [event.clientX, event.clientY] : [e.clientX, e.clientY]; menudragstart[2] = parseInt(menuobj.style.left); menudragstart[3] = parseInt(menuobj.style.top); doane(e); } else if(op == 2 && menudragstart[0]) { var menudragnow = is_ie ? [event.clientX, event.clientY] : [e.clientX, e.clientY]; menuobj.style.left = (menudragstart[2] + menudragnow[0] - menudragstart[0]) + 'px'; menuobj.style.top = (menudragstart[3] + menudragnow[1] - menudragstart[1]) + 'px'; doane(e); } else if(op == 3) { menudragstart = []; doane(e); } } function initMenu(ctrlid, menuobj, duration, timeout, layer, drag) { 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 = 999 + layer; if(drag) { menuobj.onmousedown = function(event) {try{menudrag(menuobj, event, 1);}catch(e){}}; menuobj.onmousemove = function(event) {try{menudrag(menuobj, event, 2);}catch(e){}}; menuobj.onmouseup = function(event) {try{menudrag(menuobj, event, 3);}catch(e){}}; } } } 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 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']; if($(InFloat) != null) { var InFloate = InFloat.split('_'); if(!floatwinhandle[InFloate[1] + '_1']) { floatwinnojspos = fetchOffset($('floatwinnojs')); floatwinhandle[InFloate[1] + '_1'] = floatwinnojspos['left']; floatwinhandle[InFloate[1] + '_2'] = floatwinnojspos['top']; } showobj.X = showobj.X - $(InFloat).scrollLeft - parseInt(floatwinhandle[InFloate[1] + '_1']); showobj.Y = showobj.Y - $(InFloat).scrollTop - parseInt(floatwinhandle[InFloate[1] + '_2']); InFloat = ''; } showobj.w = showobj.offsetWidth; showobj.h = showobj.offsetHeight; menuobj.w = menuobj.offsetWidth; menuobj.h = menuobj.offsetHeight; if(offset < 3) { 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'); } else if(offset == 3) { menuobj.style.left = (document.body.clientWidth - menuobj.clientWidth) / 2 + document.body.scrollLeft + 'px'; menuobj.style.top = (document.body.clientHeight - menuobj.clientHeight) / 2 + document.body.scrollTop + 'px'; } if(menuobj.style.clip && !is_opera) { menuobj.style.clip = 'rect(auto, auto, auto, auto)'; } } } 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 doane(event) { e = event ? event : window.event; if(is_ie) { e.returnValue = false; e.cancelBubble = true; } else if(e) { e.stopPropagation(); e.preventDefault(); } } function setcookie(cookieName, cookieValue, seconds, path, domain, secure) { var expires = new Date(); expires.setTime(expires.getTime() + seconds * 1000); domain = !domain ? cookiedomain : domain; path = !path ? cookiepath : path; document.cookie = escape(cookieName) + '=' + escape(cookieValue) + (expires ? '; expires=' + expires.toGMTString() : '') + (path ? '; path=' + path : '/') + (domain ? '; domain=' + domain : '') + (secure ? '; secure' : ''); }