// $Id: spatyper.js 312 2009-01-01 06:59:57Z maj $
window.onload = Setup;

function Setup () {
    var basedir = '/spaTyper';
    ImgLoad(basedir);
    var flipBtns = document.getElementsByName('flipBtn');
    var helpBtns = new Array();
    for (var i=0; i<flipBtns.length; i++) {
	flipBtns[i].onmousedown=pushMe;
	flipBtns[i].onmouseout=pushMe;
	flipBtns[i].onmouseup=pushMe;
	if (/lock[0-9]/.test(flipBtns[i].id)) {
	    flipBtns[i].onclick=flipCellLock;
	}
	if (/help/.test(flipBtns[i].id)) {
	    var basename = flipBtns[i].id.match(/_([^_]+)_/)[1];
	    flipBtns[i].onclick = closeHelp(basename, basedir);
	}
    }
    var checkall = document.getElementsByName('alls')[0];
    if (checkall) {
	checkall.onchange = doCheckAll;
    }
    var inputs = document.getElementsByTagName('input');
    for (var i=0; i<inputs.length; i++) {
	if (/^s[0-9]/.test(inputs[i].name)) {
	    inputs[i].onchange=uncheckAlls;
	}
    }
    document.getElementById('adv_span').onclick = displayAdv;
    document.getElementById('advTri').onclick = displayAdv;
    document.getElementById('btn_cancel').onclick = displayAdv;
    document.getElementById('adv_status').onclick = eraseMe;
}

function ImgLoad (base) {
    imgUpTri = new Image();
    imgUpTri.src = base+'/blue_tri_up.png';
    imgDnTri = new Image();
    imgDnTri.src = base+'/blue_tri_dn.png';
    imgQUp = new Image();
    imgQUp.src = base+'/help_up.png';
    imgQDn = new Image();
    imgQDn.src = base+'/help_dn.png';
}    
function pushMe(nsEvent) {
    var evt = nsEvent ? nsEvent : window.event;
    var tgt = evt.target ? evt.target : evt.srcElement;
    var toggle = tgt.getAttribute('toggle');
     if (/mousedown/.test(evt.type)) {
	if (/_up/.test(tgt.src)) {
	    tgt.src = tgt.src.replace(/_up/,'_dn');
	    return false;
	}
	if (toggle) {
	    if (/_dn/.test(tgt.src)) {
		tgt.src = tgt.src.replace(/_dn/,'_up');
		return false;
	    }
	}
    }
     else if (!toggle & (/mouseout/.test(evt.type) || /mouseup/.test(evt.type))) {
	if (/_dn/.test(tgt.src)) {
	    tgt.src = tgt.src.replace(/_dn/,'_up');
	    return false;
	}
     }

    return false;
}

function displayHelp( basename, basedir ) {
    if (/Explorer/.test(navigator.appName)) {
	open(basedir+'/html/'+basename+'.html');
    }
    else {
	open(basedir+'/html/'+basename+'.html','Help','width=460,scrollbars=yes,menubar=false');
    }
    return false;
}

function statusVanish () {
    var stat = document.getElementById('status_div');
    stat.parentNode.removeChild(stat);
    return false;
}

function doCheckAll () {
    var inputs = document.getElementsByTagName('input');
    var seq_ck = new Array();
    for (var i=0; i < inputs.length; i++) {
	if ( /s[0-9]/.test(inputs[i].name) ) {
	    seq_ck.push(inputs[i]);
	}
    }
    for (var i=0; i < seq_ck.length; i++) {
	seq_ck[i].checked = this.checked;
    }
    return false;
}

function uncheckAlls () {
    var alls = document.getElementsByName('alls')[0];
    if (alls.checked) {
	alls.checked = false;
    }
    return false;
}

function displayAdv (nsEvent) {
    var evt = nsEvent ? nsEvent : window.event;
    var tgt = evt.target ? evt.target : evt.srcElement;
    var adv_row = document.getElementById('adv_row');
    var advTri = document.getElementById('advTri');
    if (/display: ?table-row/.test(adv_row.getAttribute('style'))) {
	adv_row.setAttribute('style','display:none');
	advTri.src = imgUpTri.src;
	if (tgt.name == 'btn_cancel') {
	    //indicate cancel action (no parameters reset)
	    document.getElementById('adv_status').innerHTML='cancelled';
	}
	else {
	    //clear status
	    document.getElementById('adv_status').innerHTML='';
	}
    }
    else if (/display: ?none/.test(adv_row.getAttribute('style'))) {
	var inputs = document.getElementsByTagName('input');
	var status = document.getElementById('adv_status');    
	var adv_inputs = new Array();
	// clear status
	document.getElementById('adv_status').innerHTML='';

	for (var i=0; i < inputs.length; i++) {
	    if (/_[ns]$/.test(inputs[i].name)) {
		adv_inputs.push(inputs[i]);
	    }
	}
	// need to handle select/option parameters...
	
	// set the displayed parms to the functional values
	for (var i=0; i < adv_inputs.length; i++) {
	    var re = /(.*)_[ns]$/;
	    var parmname = adv_inputs[i].name.match(re)[1];
	    var disp_parm = document.getElementsByName(parmname+'_D')[0];
	    if (!disp_parm) {
		alert('Page missing parameter '+parmname+'_D');
		return false;
	    }
	    disp_parm.value = adv_inputs[i].value;
	}
	adv_row.setAttribute('style','display:table-row');
	advTri.src = imgDnTri.src;
    }
}

//update the advanced settings
function updateAdv () {
    var inputs = document.getElementsByTagName('input');
    var status = document.getElementById('adv_status');    
    var adv_inputs = new Array();

    for (var i=0; i < inputs.length; i++) {
	if (/_[ns]$/.test(inputs[i].name)) {
	    adv_inputs.push(inputs[i]);
	}
    }
    // need to handle select/option parameters...

    // set the functional parameters from the displayed ones
    for (var i=0; i < adv_inputs.length; i++) {
	var re = /(.*)_[ns]$/;
	var parmname = adv_inputs[i].name.match(re)[1];
	var disp_parm = document.getElementsByName(parmname+'_D')[0];
	if (!disp_parm) {
	    alert('Page missing parameter '+parmname+'_D');
	    return false;
	}
	adv_inputs[i].value = disp_parm.value;
    }
    status.innerHTML = "parameters updated";
    return false;
}

function eraseMe (nsEvent) {
    var evt = nsEvent ? nsEvent : window.event;
    var tgt = evt.target ? evt.target : evt.srcElement;
    tgt.innerHTML = '';
}

function closeHelp (basename, basedir) {
    var fn = function () {
	displayHelp(basename, basedir);
    }
    return fn;
}
