/* popup.js manages a div used as a popup that stays centered in the browser window.
 * Call initPopup with name of div and callback function. Callback receives boolean
 * true = ok. false = cancel. Callback function returns boolean indicating the
 * div should be closed.
 */

var ns=(document.layers);
var ie = (navigator.appVersion.indexOf("MSIE")!=-1);
var w3=(document.getElementById && !ie);

var popupStyle;
var popupName;
var userDB = new Array();

function isIEOK()
{
    var ver=0;
    if(ie){
        temp=navigator.appVersion.split("MSIE");
        ver=parseFloat(temp[1]);
        return (ver>=6);
    }
    return false;
}
var firefox = (navigator.userAgent.indexOf("Firefox") >-1);
var netscape = (navigator.appName.indexOf("Netscape") >-1); //lies!!!, mozilla says this
var safari = (navigator.userAgent.indexOf("Safari") >-1);
var browserOK = (firefox || isIEOK() || netscape || safari);

function safeto(link,subject,addr,net,site)
{
  document.write('<a href=\"mai'+'lto:'
    +addr+ '&#64;' + site + '&#46;' + net + '?subject=' + subject +
	'\">' + link + '</a>');
}

function ieFilterHack(show)
{
    try {
    if (show) getObjStyle('vFilter').visibility = 'visible';
    else getObjStyle('vFilter').visibility = 'hidden';
    }
    catch(e) {}
}

function closeDetails() {enableLinks(true); hideObj('detailDiv'); ieFilterHack(true);}
function closeDetails2() 
{
    _enableLinks('adminList', true);
    _enableLinks('volunteerDetails', true);
    hideObj('detailDiv');
}
function showDetails(evt, type, id, home)
{
    popupName = 'detailDiv';
    popupStyle = getObjStyle(popupName);
	showPopup();

    frame = getObj("details");
    frame.src="details.jsp?w=details&id=" + id + "&evt=" + evt + "&etype="+type;

	document.Detail.close.focus();
    if (home){enableLinks(false, closeDetails);}
    else{
        _enableLinks('adminList', false, closeDetails2);
        _enableLinks('volunteerDetails', false, closeDetails2);
     	ieFilterHack(false);
    }
}

function closeHistory() {enableLinks(true); hideObj('historyDiv'); ieFilterHack(true);}
function closeHistory2() 
{
    _enableLinks('adminList', true);
    _enableLinks('volunteerDetails', true);
    hideObj('historyDiv');
}
function showHistory(evt, type, id, home)
{
    popupName = 'historyDiv';
    popupStyle = getObjStyle(popupName);
	showPopup();

    frame = getObj("history");
    frame.src="details.jsp?w=history&id=" + id + "&evt=" + evt + "&etype="+type;

	document.History.close.focus();
    if (home){enableLinks(false, closeHistory);}
    else{
        _enableLinks('adminList', false, closeHistory2);
        _enableLinks('volunteerDetails', false, closeHistory2);
     	ieFilterHack(false);
    }
}

function submitVolunteer()
{
	var form = document.SwapRecord;

	if (! (form.Anything.checked || form.SetUp.checked || form.CleanUp.checked 
        || form.Traffic.checked || form.Unloading.checked || form.Sorting.checked 
        || form.Holding.checked || form.Electronics.checked || form.Morning.checked
        || form.NextTime.checked) )
	{
        alert("Please select an area.");
        return false;
    }

    if (generalValidate(form, false))
    {
        //form.submit(); NO will submit twice
        return true;
    }
    return false;
}
function closeEdit(save)
{
    _enableLinks('adminList', true);
    _enableLinks('volunteerDetails', true);
    hideObj('volunteerEdit');
    ieFilterHack(true);
}
function addNewRecord() {editARecord(-1, 'AdminAddNew');}
function swapAddRecord() {editARecord(-1, 'SwapAddNew');}
function editRecord(id) {editARecord(id, "Edit");}
function editARecord(id, verb)
{
    popupName = 'volunteerEdit';
    popupStyle = getObjStyle(popupName);

	var popupForm = document.EditRecord;
    popupForm.ok.disabled = false;

    popupBody = getObj('editBody');
    enableLinks(false, clickOKCancel);
	showPopup();
	popupForm.firstname.focus();
    fillinUserList(id, getObj('EditRecord'));

    popupForm.cmd.value=verb;
    if (verb=='AdminAddNew' || verb=="SwapAddNew"){popupForm.userid.value="-2";}

    ieFilterHack(false);

    _enableLinks('adminList', false, closeEdit);
    _enableLinks('volunteerDetails', false, closeEdit);
}
function showRecord(e, t, id, allowEdit)
{
    if (id < 0 && id != -1) {id =-1}
    var p = userDB[id];
    var inActive=' &nbsp;<span class="mediumwarning">(Inactive)</span>';
    var div = getObj('volunteerDetails');

    if (div){
        var text="<table border='0' width='100%'>";
        text += "<tr><td align='left' valign='top' width='65%'>" 
            + '<a href="javascript:showDetails(' + "'" + e + "','" + t + "'," + id + ',false)">'
            + '<span class="mediumtitle">'
            + p.first + " " + p.last + "</span></a> &nbsp;"
            /*+ (p.hidden==true ? inActive: "")*/
            + '  <a href="javascript:showHistory(' + "'" + e + "','" + t + "'," + id + ',false)">'
            + '<span class="mediumtitle">'
            + " ? </span></a>"
            + (p.hidden==true ? inActive: "");

            if (allowEdit){
                text += '&nbsp;&nbsp;&nbsp;<a href="javascript:editRecord(' + id + ')">'
                    + '<b>EDIT</b></a>';
            }

            text += "</td><td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"
            + "</td><td align='left' rowspan='2' valign='top'>";
            text += "Enrolled:" + p.enrolled + "</br>";
            text += "Flexible on time:" + (p.time ? "yes" : "no") + "<br/>";
            text += "Flexible on station:" + (p.place ? "yes" : "no") + "<br/>";
            //text += "Swapoff volunteer:" + (p.swapoff ? "yes" : "no") + "<br/>";
            text += "Student:" + (p.student ? ("graduates 20" + p.year) : "no") + "<br/>";
            
            text+="</td></tr><tr><td align='left'>";
            if (p.address!="?" && p.town!="?"){text += p.address + "<br/>" + p.town 
                    + " " + p.zip +"<br/>";}
            if (p.phone && p.phone!="?"){text += p.phone + "<br/>";}
            if (p.email && p.email!="?"){text += p.email + "<br/>";}
            text += "</td></tr><tr><td align='left' rowspan='2'><br/>";
            text+= "User: " + p.comments + "<br/><br/>Admin: " 
                + p.adminComments + "</td><td colspan='2' align='right'>";
            text += '</td></tr></table>';
            
            div.innerHTML=text;
    }
}
function showPopup(){
    showObj(popupName);
    popupStyle.left = "50%";
    popupStyle.top = "60";
    popup = getObj(popupName);
    var left = popup.offsetLeft;
    popupStyle.left = left - popup.offsetLeft/2;
}

function initSignup(text, slot, admin)
{
    popupName = 'signupDiv';
    popupStyle = getObjStyle(popupName);
    msg = getObj('popupText');
    if (msg) msg.innerHTML = text;

	var popupForm = document.Signup;
    popupForm.ok.disabled = false;
	popupForm.slot.value = slot;

    popupBody = getObj('signupBody');
    if (admin)
    {
        popupBody.className="adminPopupBody";

        var x = document.getElementById("existingUsers");
        x.selectedIndex=0;
        fillinUserOnSignup(x);

        // Because Firefox on Mac shows scrollbar when visibility is false
        selectStyle = getObjStyle('existingUsers');
        selectStyle.display = "inline";
    }

    enableLinks(false, clickOKCancel);
	showPopup();
	popupForm.firstname.focus();
}
function generalValidate(form,admin)
{
    if (form.firstname.value <= 0)
    {
        alert("Please enter a first name.");
        return false;
    }
    else if (form.lastname.value <= 0)
    {
        alert("Please enter a last name.");
        return false;
    }
    else if (!admin && !validateEmail(form.email.value))
    {
        alert("The email address must be valid (eg. myname@myisp.net)");
        return false;
    }
    else if (!admin && !validatePhone(form.phone.value))
    {
        alert("The phone number must be in the form: xxx-xxx-xxxx (i.e. 978-555-1212)");
        return false;
    }
    return true;
}
function closeSignup(ok, admin)
{
	var popupForm = document.Signup;

	if (ok)
	{
		var submit = generalValidate(popupForm,admin);

        if (submit)
        {
            if (!admin && (popupForm.student.checked && !validateYear(popupForm.year.value)))
            {
                alert("Please enter your graduation year.");
                submit = false;
            }
        }
		if (submit)
		{
            popupForm.ok.disabled = true;
			popupForm.submit();
            return true;
		}
	}
	else
	{
        enableLinks(true);
		hideObj('signupDiv');
	}

    return false;
}

function initStatus(div)
{
    popupName = div;
    popupStyle = getObjStyle(popupName);
    enableLinks(false, closeStatus);
    showPopup();
    if (!ie) getObj('ok').focus();
}

function closeStatus()
{
    enableLinks(true);
    hideObj(popupName);
}

function initRemove(text, slot, id, admin)
{
    popupName = 'removeDiv';
    popupStyle = getObjStyle(popupName);

    msg = getObj('removeText');
    if (msg) msg.innerHTML = text;

	var popupForm = document.Remove;
	popupForm.slot.value = slot;
	popupForm.id.value = id;
    popupForm.ok.disabled = false;

    enableLinks(false, clickOKCancel);
	showPopup();
	if (admin){popupForm.cancel.focus();} else { popupForm.phone.focus();}
}

function closeRemove(ok, admin)
{
	var popupForm = document.Remove;

	if (ok)
	{
		var submit = true;

		if (!admin && popupForm.phone.value.length <= 0)
		{
			alert("Please enter the last 4 digits of your phone #.");
			submit = false;
		}

		if (submit)
		{
            popupForm.ok.disabled = true;
			popupForm.submit();
            return true;
		}

	}
	else
	{
        enableLinks(true);
        hideObj(popupName);
	}

    return false;
}
function truebody(){
    return ((document.compatMode && document.compatMode!="BackCompat") 
            ? document.documentElement : document.body);
}

function initDelete()
{
    popupName = 'deleteDiv';
    popupStyle = getObjStyle(popupName);
    var form = document.VolCmd;
    var vList = form.volList;
    var text = "";
    var count = 0;

    if (vList.checked)
    {
        id = vList.value;
        text += userDB[id].first + " " + userDB[id].last + "<br>" + 
            '<input type="hidden" name="deleteList" value="' + userDB[id].uid + '")>';
        count = 1;
    }
    else {
        for (var i=0; i < vList.length; i++)
        {
            if (vList[i].checked == true)
            {
                count++;
                id = vList[i].value;
                text += userDB[id].first + " " + userDB[id].last + "<br>" + 
                    '<input type="hidden" name="deleteList" value="' + userDB[id].uid + '")>';
            }
        }
    }

    if (count < 1) 
    {
        alert("Select at least 1 volunteer from the list to delete.");
    }
    else
    {    
        msg = getObj('deleteText');
        if (msg) msg.innerHTML = text;
        ieFilterHack(false);
	    showPopup();
    }
}

function closeDelete(ok)
{
	if (ok)
	{
        var form = document.deleteVol;
        form.ok.disabled = true;
        form.submit();
        return true;
    }
	else
	{
        ieFilterHack(true);
        hideObj(popupName);
	}

    return false;
}
function fillinUserList(index, theForm)
{
    f = theForm;//getObj(theForm);
    p = userDB[index];
    f.firstname.value=p.first; f.lastname.value=p.last;f.enrolled.value=p.enrolled;
    f.email.value=p.email; f.phone.value=p.phone;f.comments.value=p.comments;
    f.adminComments.value=p.adminComments;
    f.userid.value=p.uid;f.zip.value=p.zip;f.address.value=p.address;
    f.town.value=p.town;f.state.value=p.state;f.year.value=p.year;f.swapoff.checked=p.swapoff;
    f.time.checked=p.time;f.place.checked=p.place;f.student.checked=p.student;
    f.ishidden.checked=p.hidden;
}
function fillinUserOnSignup(list){
    var i = list.options[list.selectedIndex].value;
    fillinUserList(i, getObj('Signup'));
}
function fillinUserOnCombine(list){
    var i = list.options[list.selectedIndex].value;
    fillinUserList(i, document.Combine);
}
function initCombine()
{
    popupName = 'combineDiv';
    popupStyle = getObjStyle(popupName);
    // Get selected volunteers
    var form = document.VolCmd;
    var vList = form.volList;
    var text = "";
    var count = 0;

    text='<select multiple name="combineList" size="3" onChange="fillinUserOnCombine(this)">';

    for (var i=0; i < vList.length; i++)
    {
        if (vList[i].checked == true)
        {
           count++;
           id = vList[i].value;
           text += '<option style="width:10em" value="' + userDB[id].uid + '">';
           text += userDB[id].last + ',' + userDB[id].first;
           text += '</option>\n';
        }
    }
    text += '</select>';

    if (count < 2) 
    {
        alert("Select at least 2 volunteers from the list to combine.");
    }
    else
    {    
        // Fill-in popup form
        voldiv = getObj('combineVols');
        if (voldiv) {voldiv.innerHTML = text;}
        ieFilterHack(false);
	    showPopup();
    }
}

function closeCombine(ok)
{
	if (ok)
	{
        var form = document.Combine;

        ok = false;
        for (i = 0; i < form.combineList.options.length;i++){
            if (form.combineList.options[i].selected){
                ok = true;
                break;
            }
        }
        if (!ok){
            alert('You must select a volunteer.');
            return false;
        }
        for (i = 0; i < form.combineList.options.length;i++){
            form.combineList.options[i].selected=true;
        }

        form.ok.disabled = true;
        form.submit();

        //for (i = 0; i < form.combineList.options.length;i++){
        //    form.combineList.options[i].selected=false;
        //}
        return true;
    }
	else
	{
        ieFilterHack(true);
        hideObj(popupName);
	}

    return false;
}

function reportError(div)
{
    popupName = div;
    popupStyle = getObjStyle(popupName);
    enableLinks(false, closeStatus);
    showPopup();
    if (!ie) getObj('ok').focus();
}

var prevClick = new Array();;
function clickOKCancel() {alert('Please click OK or Cancel.'); return false;}
function clickClose() {alert('Please click Close.'); return false;}
function enableLinks(enable, func)
{
    _enableLinks('resultsView', enable, func);
}
function _enableLinks(ele, enable, func)
{
    div = document.getElementById(ele);
    if (div){
        objLinks = div.getElementsByTagName("a");
        for(i=0;i<objLinks.length;i++){
            if (enable) {
                objLinks[i].onclick = prevClick[i];
            }
            else {
                prevClick[i] = objLinks[i].onclick;
                objLinks[i].onclick = func;
            }
        }
    }
}

function switchEvent(list) {
    var e = list.options[list.selectedIndex].value; 
    window.location = "manage.jsp?" + toEvent(e, "_drop");
    alert("Set admin review event date to: " + e);
}
function toEvent(e, t) {return ("ntype=" + t + "&nevt=" + e);}

function submitEmail()
{
	var form = document.Sendmail;
    var to = form.to;

    if (form.subject.value.length < 1 )
    {
        alert("Please enter a subject.");
        return false;
    }
    else if (form.message.value.length < 1 )
    {
        alert("Please enter a message.");
        return false;
    }

	if (to[0].checked )
	{
        return confirm("You are about to send mail to all email addresses in the database.\nSend mail now?");
    }
	if (to[1].checked )
	{
        return confirm("You are about to send mail to all volunteers who are signed up." +
                        ".\n\nSend mail now?");
    }
	if (to[2].checked )
	{
        return confirm("You are about to send mail to all volunteers who have NOT signed up.\n Send mail now?");
    }

    alert("Oops! You did not specify who you are sending mail to.\n Choose one of the To: options and click Send.");
    return false;
}

function goswap() {location.replace("swap.jsp");}
function godrop() {location.replace("drop.jsp");}
function goschedule(arg) {location.replace("schedule.jsp?"+arg);}