function qq(v) { return v.replace(/&/g,"&").replace(//,">").replace(/"/g,'"'); } function shorten(v, l) { return qq(v.length > l ? v.substr(0, l-3)+'...' : v); } /*****************************\ * V N R E L A T I O N S * \*****************************/ var relTypes = []; function relLoad() { var i;var l;var o; // fetch the relation types from the add new relation selectbox l = x('relation_new').getElementsByTagName('select')[0].options; for(i=0;i'+shorten(title, 40)+''; o.appendChild(t); var options = ''; for(var i in relTypes) options += ''; t = document.createElement('td'); t.className = 'tc2'; t.innerHTML = 'is a of'; o.appendChild(t); t = document.createElement('td'); t.className = 'tc3'; t.innerHTML = shorten(x('title').value, 40); o.appendChild(t); t = document.createElement('td'); t.className = 'tc4'; t.innerHTML = 'del'; o.appendChild(t); x('relation_tbl').appendChild(o); relEmpty(); } function relEmpty() { if(x('relation_tbl').getElementsByTagName('tr').length > 0) { if(x('relation_tr_none')) x('relation_tbl').removeChild(x('relation_tr_none')); return; } var o = document.createElement('tr'); o.setAttribute('id', 'relation_tr_none'); var t = document.createElement('td'); t.colspan = 4; t.innerHTML = 'No relations selected.'; o.appendChild(t); x('relation_tbl').appendChild(o); } function relSerialize() { var r=''; var i; var l = x('relation_tbl').getElementsByTagName('tr'); for(i=0;i 2) { var r = l[i].split(','); scrAdd(r[0], r[1], r[2]); } scrLast(); scrCheckStatus(); scrSetSubmit(); } // give an error when submitting the form while still uploading an image function scrSetSubmit() { var o=x('screenshots'); while(o.nodeName.toLowerCase() != 'form') o = o.parentNode; oldfunc = o.onsubmit; o.onsubmit = function() { var c=0;var r=0; var l = x('scr_table').getElementsByTagName('tr'); for(var i=0;i 0) c=1; else if(l[i].getElementsByTagName('select')[0].selectedIndex == 0) r=1; } if(c) { alert('Please wait for the screenshots to be uploaded before submitting the form.'); return false; } else if(r) { alert('Please select the appropriate release for every screenshot'); return false; } else if(oldfunc) return oldfunc(); }; } function scrURL(id, t) { return scrStaticURL+'/s'+t+'/'+(id%100<10?'0':'')+(id%100)+'/'+id+'.jpg'; } function scrAdd(id, nsfw, rel) { var tr = document.createElement('tr'); tr.scrId = id; tr.scrStatus = id ? 2 : 1; // 0: done, 1: uploading, 2: waiting for thumbnail tr.scrRel = rel; tr.scrNSFW = nsfw; var td = document.createElement('td'); td.className = 'thumb'; td.innerHTML = 'loading...'; tr.appendChild(td); td = document.createElement('td'); if(id) td.innerHTML = '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.'; else td.innerHTML = 'Uploading screenshot...
' +'This can take a while, depending on the file size and your upload speed.
' +'cancel'; tr.appendChild(td); x('scr_table').appendChild(tr); scrStripe(); return tr; } function scrLast() { if(x('scr_last')) x('scr_table').removeChild(x('scr_last')); var full = x('scr_table').getElementsByTagName('tr').length >= 10; var tr = document.createElement('tr'); tr.setAttribute('id', 'scr_last'); var td = document.createElement('td'); td.className = 'thumb'; tr.appendChild(td); var td = document.createElement('td'); if(full) td.innerHTML = '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 td.innerHTML = 'Add screenshot
' +'Image must be smaller than 5MB and in PNG or JPEG format.
' +'
' +''; tr.appendChild(td); x('scr_table').appendChild(tr); scrStripe(); } function scrStripe() { var l = x('scr_table').getElementsByTagName('tr'); for(var i=0;i' +''; var opt=''; for(var o=0;o'+scrRel[o][1]+''; tr.getElementsByTagName('td')[1].innerHTML = 'Screenshot #'+tr.scrId+'' +' (remove)
' +'Full size: '+ls[s].getAttribute('width')+'x'+ls[s].getAttribute('height')+'

' +' 0 ? 'checked = "checked"' : '')+' />' +'
' +''; } scrSerialize(); ivInit(); clearTimeout(ti); setTimeout(scrCheckStatus, 1000); }); } function scrDel(what) { while(what.nodeName.toLowerCase() != 'tr') what = what.parentNode; what.scrStatus = 3; x('scr_table').removeChild(what); scrSerialize(); scrLast(); return false; } var scrUplNr=0; function scrUpload() { scrUplNr++; // create temporary form var d = document.createElement('div'); d.style.cssText = 'visibility: hidden; overflow: hidden; width: 1px; height: 1px; position: absolute; left: -500px; top: -500px'; d.innerHTML = '' +'
'; document.body.appendChild(d); // submit form and delete it d = x('scr_frm_'+scrUplNr); d.appendChild(x('scr_upload')); d.submit(); d.parentNode.removeChild(d); d = scrAdd(0, 0, 0); x('scr_upl_'+scrUplNr).theTR = d; scrLast(); return false; } function scrUploadComplete(what) { var f = window.frames[what.id]; if(f.location.href.indexOf('screenshots') < 0) return; var tr = what.theTR; if(!tr || tr.scrStatus == 3) return; try { tr.scrId = f.window.document.getElementsByTagName('image')[0].getAttribute('id'); } catch(e) { tr.scrId = -10; } if(tr.scrId < 0) { alert( tr.scrId == -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.' : tr.scrId == -1 ? 'Upload failed!\nOnly JPEG or PNG images are accepted.' : 'Upload failed!\nNo file selected, or an empty file?' ); return scrDel(tr); } tr.scrStatus = 2; tr.getElementsByTagName('td')[1].innerHTML = '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.'; // remove the
in a timeout, otherwise some browsers think the page is still loading setTimeout(function() { document.body.removeChild(what.parentNode) }, 100); } function scrSerialize() { var r = ''; var l = x('scr_table').getElementsByTagName('tr'); for(var i=0;i 2) medAddNew(l[i].split(' ')[0], Math.floor(l[i].split(' ')[1])); medAddNew('', 0); medSetSubmit(); } function medSetSubmit() { var o=x('media'); while(o.nodeName.toLowerCase() != 'form') o = o.parentNode; oldfunc = o.onsubmit; o.onsubmit = function() { var l = x('media_div').getElementsByTagName('span'); for(var i=0;i'+i+''; r += ''; if(med != '') r += ''; o.innerHTML = r; x('media_div').appendChild(o); } function medDel(what) { what = what.nodeName ? what : this; while(what.nodeName.toLowerCase() != 'span') what = what.parentNode; x('media_div').removeChild(what); medSerialize(); return false; } function medCheckNew() { // check for non-new items and add remove buttons var l = x('media_div').getElementsByTagName('span'); var createnew=1; for(var i=0;i 2) vnpAdd(type, l[i].split(',',2)[0], l[i].split(',',2)[1]); vnpCheckEmpty(type); // dropdown var n = x('jt_box_'+(type == 'vn' ? 'rel_vn' : 'rel_prod')).getElementsByTagName('div')[1]; dsInit(n.getElementsByTagName('input')[0], '/xml/'+type+'.xml?q=', function(item, tr) { var td = document.createElement('td'); td.innerHTML = type.substr(0,1)+item.getAttribute('id'); td.style.textAlign = 'right'; td.style.paddingRight = '5px'; tr.appendChild(td); td = document.createElement('td'); td.innerHTML = shorten(item.firstChild.nodeValue, 40); tr.appendChild(td); }, function(item) { return type.substr(0,1)+item.getAttribute('id')+':'+item.firstChild.nodeValue; }, function() { vnpFormAdd(type) }); n.getElementsByTagName('a')[0].onclick = function() { vnpFormAdd(type); return false }; } function vnpAdd(type, id, title) { var o = document.createElement('span'); o.innerHTML = ''+type.substr(0,1)+id+':'+shorten(title, 40)+'' +'remove'; x(type+'sel').appendChild(o); vnpStripe(type); vnpCheckEmpty(type); } function vnpDel(what, type) { what = what.nodeName ? what : this; while(what.nodeName.toLowerCase() != 'span') what = what.parentNode; x(type+'sel').removeChild(what); vnpCheckEmpty(type); vnpSerialize(type); return false; } function vnpCheckEmpty(type) { var o = x(type+'sel'); if(o.getElementsByTagName('span').length < 1) { if(o.getElementsByTagName('b').length < 1) o.innerHTML = 'Nothing selected...'; } else if(o.getElementsByTagName('b').length == 1) o.removeChild(o.getElementsByTagName('b')[0]); } function vnpStripe(type) { var l = x(type+'sel').getElementsByTagName('span'); for(var i=0;i' +(i == -1 ? 'neutral' : i == 0 ? 'no spoiler' : i == 1 ? 'minor spoiler' : 'major spoiler') +' '; obj.innerHTML = r+''; } function tglVoteBar(obj, vote) { var r = ''; for(var i=-3;i<=3;i++) r += ' '; obj.innerHTML = r; tglVoteBarSel(obj, vote); tglSerialize(); return false; } function tglVoteBarSel(obj, vote) { if(obj.className.indexOf('taglvl') >= 0) obj = obj.parentNode; var l = obj.getElementsByTagName('a'); var num; for(var i=0; i0&&vote>=num) { if(l[i].className.indexOf('taglvlsel') < 0) l[i].className += ' taglvlsel'; } else if(l[i].className.indexOf('taglvlsel') >= 0) l[i].className = l[i].className.replace(/taglvlsel/, ''); } } function tglAdd() { var n = x('tagtable').getElementsByTagName('tfoot')[0].getElementsByTagName('input'); n[1].disabled = n[2].disabled = true; n[2].value = 'loading...'; ajax('/xml/tags.xml?q=name:'+encodeURIComponent(n[1].value), function(hr) { n[1].disabled = n[1].disabled = false; n[2].value = 'Add tag'; n[1].value = ''; var items = hr.responseXML.getElementsByTagName('item'); if(items.length < 1) return alert('Item not found!'); if(items[0].getAttribute('meta') == 'yes') return alert('Can\'t use meta tags here!'); var name = items[0].firstChild.nodeValue; var l = x('tagtable').getElementsByTagName('a'); for(var i=0; i'+qq(name)+''; td.className = 'tc1'; tr.appendChild(td); td = document.createElement('td'); tglVoteBar(td, 2); td.className = 'tc2'; tr.appendChild(td); td = document.createElement('td'); tglSpoiler(td, -1); td.className = 'tc3'; tr.appendChild(td); td = document.createElement('td'); td.className = 'tc4'; td.innerHTML = '-'; tr.appendChild(td); td = document.createElement('td'); td.innerHTML = '-'; td.className = 'tc5'; tr.appendChild(td); x('tagtable').getElementsByTagName('tbody')[0].appendChild(tr); tglStripe(); tglSerialize(); }); } function tglStripe() { var l = x('tagtable').getElementsByTagName('tbody')[0].getElementsByTagName('tr'); for(var i=0;i 3 && vt[3].innerHTML != '-') r += (r?' ':'')+id+','+vt[3].innerHTML+','+(l[i].getElementsByTagName('select')[0].selectedIndex-1); } x('taglinks').value = r; } // load if(x('relations')) relLoad(); if(x('jt_box_vn_scr')) scrLoad(); if(x('media')) medLoad(); if(x('jt_box_rel_vn')) vnpLoad('vn'); if(x('jt_box_rel_prod')) vnpLoad('producers'); if(x('taglinks')) tglLoad();