var expanded_icon = '▾'; var collapsed_icon = '▸'; /* M I N I M A L J A V A S C R I P T L I B R A R Y */ var http_request = false; function ajax(url, func) { if(http_request) http_request.abort(); http_request = (window.ActiveXObject) ? new ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest(); if(http_request == null) return alert("Your browser does not support the functionality this website requires."); http_request.onreadystatechange = function() { if(!http_request || http_request.readyState != 4 || !http_request.responseText) return; if(http_request.status != 200) return alert('Whoops, error! :('); func(http_request); }; url += (url.indexOf('?')>=0 ? ';' : '?')+(Math.floor(Math.random()*999)+1); http_request.open('GET', url, true); http_request.send(null); } function setCookie(n,v) { var date = new Date(); date.setTime(date.getTime()+(365*24*60*60*1000)); document.cookie = n+'='+v+'; expires='+date.toGMTString()+'; path=/'; } function getCookie(n) { var l = document.cookie.split(';'); for(var i=0; i createTextNode * tag('tagname', tag(), 'string', ..) -> createElement(), appendChild(), .. * tag('tagname', { class: 'meh', title: 'Title' }) -> createElement(), setAttribute().. * tag('tagname', { }, ) -> create, setattr, append */ function tag() { if(arguments.length == 1) return typeof arguments[0] != 'object' ? document.createTextNode(arguments[0]) : arguments[0]; var el = typeof document.createElementNS != 'undefined' ? document.createElementNS('http://www.w3.org/1999/xhtml', arguments[0]) : document.createElement(arguments[0]); for(var i=1; i l ? v.substr(0, l-3)+'...' : v); } /* I M A G E V I E W E R */ function ivInit() { var init = 0; var l = byName('a'); for(var i=0;i 4 && !hasClass(l[i], 'hidden') && ol[i].id != 'ivprev' && ol[i].id != 'ivnext') l[l.length] = ol[i]; for(i=0;i ww || h+70 > wh) { full.href = u; setText(full, w+'x'+h); full.style.visibility = 'visible'; if(w/h > ww/wh) { // width++ h *= (ww-100)/w; w = ww-100; } else { // height++ w *= (wh-70)/h; h = wh-70; } } else full.style.visibility = 'hidden'; var dw = w; var dh = h+20; dw = dw < 200 ? 200 : dw; // update document view.style.display = 'block'; setContent(x('ivimg'), tag('img', {src:u, onclick:ivClose, onload: function() { byId('ivimgload').style.top='-400px'; }, style: 'width: '+w+'px; height: '+h+'px' })); view.style.width = dw+'px'; view.style.height = dh+'px'; view.style.left = ((ww - dw) / 2 - 10)+'px'; view.style.top = ((wh - dh) / 2 + st - 20)+'px'; byId('ivimgload').style.left = ((ww - 100) / 2 - 10)+'px'; byId('ivimgload').style.top = ((wh - 20) / 2 + st)+'px'; return false; } function ivClose() { byId('iv_view').style.display = 'none'; byId('iv_view').style.top = '-5000px'; byId('ivimgload').style.top = '-400px'; setText(byId('ivimg'), ''); return false; } ivInit(); /* D R O P D O W N */ function ddInit(obj, align, contents) { obj.dd_align = align; // only 'left' and 'bottom' supported at the moment obj.dd_contents = contents; document.onmousemove = ddMouseMove; if(!byId('dd_box')) addBody(tag('div', {id:'dd_box', dd_used: false})); } function ddHide() { var box = byId('dd_box'); setText(box, ''); box.style.left = '-500px'; box.dd_used = false; } function ddMouseMove(e) { e = e || window.event; var lnk = e.target || e.srcElement; while(lnk && (lnk.nodeType == 3 || !lnk.dd_align)) lnk = lnk.parentNode; var box = byId('dd_box'); if(!box.dd_used && !lnk) return; if(box.dd_used) { var mouseX = e.pageX || (e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft); var mouseY = e.pageY || (e.clientY + document.body.scrollTop + document.documentElement.scrollTop); if((mouseX < ddx-10 || mouseX > ddx+box.offsetWidth+10 || mouseY < ddy-10 || mouseY > ddy+box.offsetHeight+10) || (lnk && lnk.id == box.dd_id)) ddHide(); } if(!box.dd_used && lnk) { var content = lnk.dd_contents(lnk, box); if(content == null) return; setContent(box, content); box.dd_id = lnk.id; box.dd_used = true; var o = lnk; ddx = ddy = 0; do { ddx += o.offsetLeft; ddy += o.offsetTop; } while(o = o.offsetParent); if(lnk.dd_align == 'left') ddx -= box.offsetWidth; if(lnk.dd_align == 'bottom') ddy += lnk.offsetHeight; box.style.left = ddx+'px'; box.style.top = ddy+'px'; } } // release list dropdown on VN pages var rstat = [ 'Unknown', 'Pending', 'Obtained', 'On loan', 'Deleted' ]; var vstat = [ 'Unknown', 'Playing', 'Finished', 'Stalled', 'Dropped' ]; function rlDropDown(lnk) { var relid = lnk.id.substr(6); var st = getText(lnk).split(' / '); if(st[0].indexOf('loading') >= 0) return null; var rs = tag('ul', tag('li', tag('b', 'Release status'))); var vs = tag('ul', tag('li', tag('b', 'Play status'))); for(var i=0;i= 0) rs.appendChild(tag('li', tag('i', rstat[i]))); else rs.appendChild(tag('li', tag('a', {href:'#', rl_rid:relid, rl_act:'r'+i, onclick:rlMod}, rstat[i]))); } for(var i=0;i= 0) vs.appendChild(tag('li', tag('i', vstat[i]))); else vs.appendChild(tag('li', tag('a', {href:'#', rl_rid:relid, rl_act:'v'+i, onclick:rlMod}, vstat[i]))); } return tag('div', {class:'vrdd'}, rs, vs, st[0] == '--' ? null : tag('ul', {class:'full'}, tag('li', tag('a', {href:'#', rl_rid: relid, rl_act:'del', onclick:rlMod}, 'Remove from VN List'))) ); } function rlMod() { var lnk = byId('rlsel_'+this.rl_rid); ddHide(); setContent(lnk, tag('b', {class: 'patch'}, 'loading...')); ajax('/xml/rlist.xml?id='+this.rl_rid+';e='+this.rl_act, function(hr) { // TODO: get rid of innerHTML here... lnk.innerHTML = hr.responseXML.getElementsByTagName('rlist')[0].firstChild.nodeValue; }); return false; } { var l = byClass('a', 'vnrlsel'); for(var i=0;i0 ? l[i-1] : l[l.length-1]; else sel = l[i+1] ? l[i+1] : l[0]; } obj.ds_selectedId = sel.id.substr(7); } // set selected class for(var i=0; i