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(/>/,">").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