var med = { cd: 'CD', dvd: 'DVD', gdr: 'GD-ROM', blr: 'Blu-Ray disk', 'in':'Internet download', pa: 'Patch', otc: 'Other (console)' }; var vrel = [ 'Sequel', 'Prequel', 'Same setting', 'Alternative setting', 'Alternative version', 'Same characters', 'Side story', 'Parent story', 'Summary', 'Full story', 'Other' ]; var md;var pd;var rl;var vn;var ct; function dInit() { md = x('md_select'); if(md) { md.onclick = mdChangeSel; mdLoad(); md.selectedIndex = 0; mdChangeSel(); } pd = x('pd_select'); if(pd) { pd.onclick = pdChangeSel; pdLoad(); pd.selectedIndex = 0; pdChangeSel(); } rl = x('rl_select'); if(rl) { rl.onclick = rlChangeSel; rlLoad(); rl.selectedIndex = 0; rlChangeSel(); } vn = x('vn_select'); if(vn) { vn.onclick = vnChangeSel; vnLoad(); vn.selectedIndex = 0; vnChangeSel(); } ct = x('categories'); if(ct) catLoad(); /* scrLoad() is called by the form sub functions in def.js if(x('scrfrm')) scrLoad();*/ } function qq(v) { return v.replace(/&/g,"&").replace(//,">").replace(/'/g,/*'*/ "\\'").replace(/"/g,/*"*/'"'); } // small AJAX wapper var hr = false; function ajax(url, func) { if(hr) hr.abort(); hr = (window.ActiveXObject) ? new ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest(); if(hr == null) { alert("Your browse does not support the functionality this website requires."); return; } hr.onreadystatechange = func; hr.open('GET', url, true); hr.send(null); } /************************\ * M E D I A * \************************/ function mdChangeSel() { var sel = md.options[md.selectedIndex || 0]; var o = x('md_conts'); var i; if(sel.value == '0_new') { var l = ''; var q = ''; for(i in med) l += ''; for(i=1;i<10;i++) q += ''; o.innerHTML = '' + '' + '
' + '' + '
Qty is only required for CD & DVD'; } else { o.innerHTML = 'Selected "' + sel.text + '"
' + ''; } } function mdAddRem(id) { var i; var d = 0; var o = id ? null : x('md_S').options[x('md_S').selectedIndex]; var qty = id ? null : x('md_Q').options[x('md_Q').selectedIndex].value; var v = id ? id : (o.value != 'cd' && o.value != 'dvd' && o.value != 'gdr' && o.value != 'blr' ? o.value : (o.value + '_' + qty)); for(i=0;i= 0 && qty == 0) { alert('Please specify the quantity'); return; } md.options[md.options.length] = new Option(mdString(qty, o.value), v); } else if(id) { md.options[0].selected = true; mdChangeSel(); } mdSerialize(); } function mdSerialize() { var dest = x('media'); var str = ''; var i; for(i=0;i0 ? ',' : '') + md.options[i].value); dest.value = str; } function mdLoad() { var me = x('media').value.split(','); var i, j; for(i=0;i 1 ? 's' : ''); } /************************\ * P R O D U C E R S * \************************/ function pdChangeSel() { var sel = pd.options[pd.selectedIndex || 0]; var o = x('pd_conts'); var i; if(sel.value == '0_new') { o.innerHTML = '' + '
' + '' + 'Add new producer'; pdDoSearch(''); } else { o.innerHTML = 'Selected "' + sel.text + '"
' + ''; } } function pdEnter(ev) { var c = document.layers ? ev.which : document.all ? event.keyCode : ev.keyCode; if(c == 13) { pdDoSearch(0); return false; } return true; } function pdDoSearch(f) { var v = x('pd_S').value; var d = x('pd_R'); if(v.length < 1) d.innerHTML = 'Hint: type pX if you know the producer id.'; else { if(f) d.innerHTML = '...searching...'; ajax('/xml/producers.xml?q='+escape(v)+'&r='+(Math.floor(Math.random()*999)+1), function () { if(!hr || hr.readyState != 4 || !hr.responseText) return; if(hr.status != 200) return alert('Whoops, error! :('); var items = hr.responseXML.getElementsByTagName('item'); if(!items || items.length < 1) { d.innerHTML = 'No results'; return false; } var res = ''; var i,j; for(i=0; i' + '
'; } d.innerHTML = res; }); } } function pdAddRem(id, name) { var i; var d = 0; for(i=0;i0 ? '|||' : '') + pd.options[i].value); dest.value = str; } function pdLoad() { var pds = x('producers').value.split('|||'); if(!pds[0]) return; var i; for(i=0;i'+vrel[i]+''; if(sel.value == '0_new') { o.innerHTML = '' + '
' + '' + ''; rlDoSearch(''); } else { o.innerHTML = sel.value.split(',', 3)[2] + '
' + ''; } } function rlEnter(ev) { var c = document.layers ? ev.which : document.all ? event.keyCode : ev.keyCode; if(c == 13) { rlDoSearch(0); return false; } return true; } function rlDoSearch(f) { var v = x('rl_S').value; var d = x('rl_R'); if(v.length < 1) d.innerHTML = 'Search for a visual novel to add a relation.

' + 'Hint: type vX if you know the VN id.'; else { if(f) d.innerHTML = '...searching...'; ajax('/xml/vn.xml?q='+escape(v)+'&r='+(Math.floor(Math.random()*999)+1), function () { if(!hr || hr.readyState != 4 || !hr.responseText) return; if(hr.status != 200) return alert('Whoops, error! :('); rlsel = ''; var items = hr.responseXML.getElementsByTagName('item'); if(!items || items.length < 1) { d.innerHTML = 'No results'; return false; } var res = ''; var i,j; for(i=0; i' + '
'; } d.innerHTML = res; }); } } function rlAddRem(id, name) { var i; var rs = x('rl_L').selectedIndex; if(id && name) { rlsel = id; rlname = name; } else if(id) { if(!rs) return; if(rs == x('rl_L').options.length-1) { // remove for(i=0;i0 ? '|||' : '') + rl.options[i].value); dest.value = str; } function rlLoad() { var rls = x('relations').value.split('|||'); if(!rls[0]) return; var i; for(i=0;i'+vrel[i]+''; if(sel.value == '0_new') { o.innerHTML = '' + '
' + ''; vnDoSearch(''); } else { o.innerHTML = 'Selected "' + sel.text + '"
' + ''; } } function vnEnter(ev) { var c = document.layers ? ev.which : document.all ? event.keyCode : ev.keyCode; if(c == 13) { vnDoSearch(0); return false; } return true; } function vnDoSearch(f) { var v = x('vn_S').value; var d = x('vn_R'); if(v.length < 1) d.innerHTML = 'Hint: type vX if you know the visual novel id.'; else { if(f) d.innerHTML = '...searching...'; ajax('/xml/vn.xml?q='+escape(v)+'&r='+(Math.floor(Math.random()*999)+1), function () { if(!hr || hr.readyState != 4 || !hr.responseText) return; if(hr.status != 200) return alert('Whoops, error! :('); var items = hr.responseXML.getElementsByTagName('item'); if(!items || items.length < 1) { d.innerHTML = 'No results'; return false; } var res = ''; var i,j; for(i=0; i' + '
'; } d.innerHTML = res; }); } } function vnAddRem(id, title) { var i; var d = 0; for(i=0;i0 ? '|||' : '') + vn.options[i].value + ',' + vn.options[i].text); dest.value = str; } function vnLoad() { var vns = x('vn').value.split('|||'); if(!vns[0]) return; var i; for(i=0;i 0) r+=(r?',':'')+l[i]+cats[l[i]]; ct.value = r; return false; }; } } function catSet(id, rnk) { var c = rnk == 0 ? '#000' : rnk == 1 ? '#090' : rnk == 2 ? '#990' : '#900'; x('b_'+id).style.color = c; x('cat_'+id).style.color = c; x('b_'+id).innerHTML = rnk; } /***************************\ * S C R E E N S H O T S * \***************************/ var scrL = []; // id, load, nsfw, obj function scrLoad() { // 'screenshots' format: id,nsfw id,nsfw .. var l=x('screenshots').value.split(' '); for(var i=0;i 2) scrL[i] = { load: 2, id: l[i].split(',')[0], nsfw: l[i].split(',')[1]>0?1:0 }; // because IE can't operate on x('scrfrm').innerHTML = '
'; for(i=0;i= 10) r += 'Enough screenshots' +'The limit of 10 screenshots per visual novel has been reached. ' +'If you want to add a new screenshot, please remove an existing one first.'; else r += 'Add screenshot' +'' +'
' +'Image must be smaller than 5MB and in PNG or JPEG format.'; } if(scrL[i].load && scrL[i].load == 1) r += 'Uploading...This could take a while, depending on the file size and your upload speed.
' +'cancel'; if(scrL[i].load && scrL[i].load == 2) r += 'Generating thumbnail...Note: if this takes longer than 30 seconds, there\'s probably something wrong on our side.' +'Please try again later or report a bug if that is the case.'; if(scrL[i].id && !scrL[i].load) r += 'Screenshot #'+scrL[i].id+'' +' ' +'' +'' +'

Full size: '+scrL[i].width+'x'+scrL[i].height+'px'; if(scrL[i].obj) { x('scrTr'+i).getElementsByTagName('td')[1].innerHTML = r; return; } // the slow and tedious way, because we need to use DOM functions to manipulate the table contents... var o = document.createElement('tr'); o.setAttribute('id', 'scrTr'+i); o.style.cssText = 'border-top: 1px solid #ccc'; var d = document.createElement('td'); d.style.cssText = 'width: 141px; height: 102px; padding: 0;'; d.innerHTML = scrL[i].id && !scrL[i].load ? '' : ' '; var e = document.createElement('td'); e.innerHTML = r; o.appendChild(d); o.appendChild(e); x('scrTbl').appendChild(o); scrL[i].obj = o; scrStripe(); } function scrUpload(i) { scrL[i].load = 1; // move the file selection box into a temporary form and post it into a temporary iframe var d = document.createElement('div'); d.id = 'scrUpl'+i; d.style.cssText = 'visibility: hidden; overflow: hidden; width: 1px; height: 1px; position: absolute; left: -500px; top: -500px'; d.innerHTML = '' +'
' +'' +'
'; document.body.appendChild(d); x('scrUplFrm'+i).appendChild(x('scrAddFile'+i)); x('scrUplFrm'+i).submit(); scrGenerateTR(i); scrGenerateTR(i+1); return false; } function scrStripe() { var l = x('scrTbl').getElementsByTagName('tr'); for(var j=0; j 0) { try { scrL[i].id = window.frames['scrIframe'+i].window.document.getElementsByTagName('image')[0].getAttribute('id'); } catch(e) { scrL[i].id = -10; } if(scrL[i].id < 0) { alert( scrL[i].id == -10 ? 'Oops! Seems like something went wrong...\n' +'Make sure the file you\'re uploading doesn\'t exceed 5MB in size.\n' +'If that isn\'t the problem, then please report a bug.' : scrL[i].id == -1 ? 'Upload failed!\nOnly JPEG or PNG images are accepted.' : 'Upload failed!\nNo file selected, or an empty file?'); return scrDel(i); } scrL[i].load = 2; scrGenerateTR(i); scrImageFail(i); } } function scrCheckStatus() { var ids=''; for(var i=0;i 0) { scrL[i].load = 0; scrL[i].width = l[s].getAttribute('width'); scrL[i].height = l[s].getAttribute('height'); x('scrTr'+i).getElementsByTagName('td')[0].innerHTML = '' +''; scrGenerateTR(i); scrSer(); } } clearTimeout(ti); setTimeout(scrCheckStatus, 1000); }); } function scrDel(i) { x('scrTbl').removeChild(x('scrTr'+i)); if(scrL[i].load) document.body.removeChild(x('scrUpl'+i)); scrL[i]=null; scrGenerateTR(scrL.length-1); scrSer(); scrStripe(); } function scrSer() { var r=''; for(var i=0;i