 // -------------------------------------------------------------------- //
// Website:	Marlowe Society
// Author:	Mark Abbott
// Filename: 	marsoc.js
// Filetype: 	Javascript
// Date: 		18 Jan 2007
// Version: 	1
// -------------------------------------------------------------------- //

// -------------------------------------------------------------------- //
// ** Pop-up Window for Help etc                                     ** //
// -------------------------------------------------------------------- //

// Usage example: <a href="javascript:popUp('./help.html',700,500,25,25,0)">link</a>
function popUp (URL, wide, high, xpos, ypos, scrollbar) {
	day = new Date();
	id = day.getTime();
	eval ("page" + id + " = window.open (URL, '" + id + "', 'toolbar=0,scrollbars=" + scrollbar + ",location=0,margin=0,statusbar=0,menubar=0,resizable=0,width=" + wide + ",height=" + high+ ",left=" + xpos + ",top=" + ypos + "');");
}

// -------------------------------------------------------------------- //
// ** Random Quotes Generator ** //
// -------------------------------------------------------------------- //

var qidxQuote  = 0;
var qidxSource  = 1;
var qidxRef = 2;
var numQuotes = 3;
var kitQuotes = new Array (numQuotes);
kitQuotes[0] = new Array ("Cut is the branch that might have grown full straight, / And burnèd is Apollo’s laurel bough, / That sometime grew within this learnèd man.", "Doctor Faustus", "Epilogue.2-4");
kitQuotes[1] = new Array ("Some quote or other [two].", "Edward the Second", "II.V.5");
kitQuotes[2] = new Array ("Some quote or other [three].", "The Jew of Malta", "III.II.98-115");

function writeRandomQuote () {
	// Draw a Marlowe quote at random
	var randomQuoteIdx=Math.round(Math.random()*(numQuotes-1)); 
	// document.write("["+randomQuoteIdx+"] ");
	document.write("<span class='quotetext'>"+kitQuotes[randomQuoteIdx][qidxQuote]+"</span>&nbsp;");
	document.write("<span class='workref'>"+kitQuotes[randomQuoteIdx][qidxSource]+"</span>&nbsp;");
	document.write("<span class='quoteref'>"+kitQuotes[randomQuoteIdx][qidxRef]+"</span>");
}

// -------------------------------------------------------------------- //
// ** Data ** //
// -------------------------------------------------------------------- //

var nullString = "";
var marSocDom = "marlowe-society.org";

// Contact data table //

var contactSociety = 0;
var contactSecretary = 1;
var contactChairman = 2;
var contactTreasurer = 3;
var contactMemSec = 4;
var contactEditor = 5;
var contactWebmaster = 6;
var contactAsstSec = 7;
var contactViceChair = 8;
var contactResearch = 9;
var contactOverseas = 10;
var contactEventsSec = 11;
var contactLibrarian = 12;
var contactIntOfficer = 13;
var contactMuchAdoDvd = 14;
var contactPayPal = 15;
var finalContact = 16;

var firstContact = contactSociety;
var lastContact = finalContact -1;
var numContacts = lastContact - firstContact + 1;

var eidxName  = 0;
var eidxDom  = 1;
var emParts = new Array (numContacts);
emParts[contactSociety] = new Array ("marsocpt", "aol.com");
//emParts[contactSecretary] = new Array ("ValerieColin-Russ", "ukgateway.net");
emParts[contactSecretary] = new Array ("valerie.colin-russ", "marlowe-society.org");
emParts[contactChairman] = new Array ("valerie.colin-russ", "marlowe-society.org");
//emParts[contactTreasurer] = new Array ("info", "young-uk.com");
emParts[contactTreasurer] = new Array ("bruce.young", "marlowe-society.org");
//emParts[contactMemSec] = new Array ("PDbaker057", "aol.com");
emParts[contactMemSec] = new Array ("frieda.barker", "marlowe-society.org");
//emParts[contactEditor] = new Array ("rogerhards", "parkhyde.go-plus.net");
emParts[contactEditor] = new Array ("roger.hards", "marlowe-society.org");
//emParts[contactWebmaster] = new Array ("mark", "if-selected.demon.co.uk");
emParts[contactWebmaster] = new Array ("mark.abbott", "marlowe-society.org");
emParts[contactAsstSec] = new Array ("james.clune", "marlowe-society.org");
emParts[contactViceChair] = new Array ("john.hunt", "marlowe-society.org");
emParts[contactResearch] = new Array ("mike.frohnsdorff", "marlowe-society.org");
emParts[contactOverseas] = new Array ("isabel.gortazar", "marlowe-society.org");
//emParts[contactEventsSec] = new Array ("barbara.wooding", "marlowe-society.org");
emParts[contactEventsSec] = new Array ("bar2a", "pipex.com");
emParts[contactLibrarian] = new Array ("colin.parry", "marlowe-society.org");
emParts[contactIntOfficer] = new Array ("isabel.gortazar", "marlowe-society.org");
emParts[contactMuchAdoDvd] = new Array ("mike", "mikerubbo.com");
emParts[contactPayPal] = new Array ("byoungco", "btinternet.com");

var cidxFName  = 0;
var cidxLName  = 1;
var cidxRole  = 2;
var cidxAddress  = 3;
var cidxTelNo = 4;
var cidxFaxNo = 5;
var ctctTable = new Array (numContacts);
ctctTable[contactSociety] = new Array ("General", "Enquiries", "Marlowe Society", nullString, nullString, nullString);
ctctTable[contactSecretary] = new Array ("Valerie", "Colin-Russ", "Society Secretary", nullString, nullString, nullString);
ctctTable[contactChairman] = new Array ("Valerie", "Colin-Russ", "Chairman", "27, Melbourne Court, Randolph Avenue, London, W9 1BJ.", nullString, nullString);
ctctTable[contactTreasurer] = new Array ("Bruce", "Young", "Treasurer", "10 Lindum Road, Teddington, Middlesex, TW11 9DR.", "+44 (0)20 8977 9706", "+44 (0)20 8943 4171");
ctctTable[contactMemSec] = new Array ("Frieda", "Barker", "Membership Secretary", "9, Middlefield Gardens, Hurst Green Road, Halesowen, W.Midlands, B62 9QH", nullString, nullString);
ctctTable[contactEditor] = new Array ("Roger", "Hards", "Editor", "Parkhyde, 70a, Park Rd, Congresbury, North Somerset, BS49 5HH.", nullString, nullString);
ctctTable[contactWebmaster] = new Array ("Mark", "Abbott", "Webmaster", nullString, nullString, nullString);
ctctTable[contactAsstSec] = new Array ("James", "Clune", "Assistant Secretary", nullString, nullString, nullString);
ctctTable[contactViceChair] = new Array ("John", "Hunt", "Vice-Chairman", nullString, nullString, nullString);
ctctTable[contactResearch] = new Array ("Mike", "Frohnsdorff", "Research Officer", nullString, nullString, nullString);
ctctTable[contactOverseas] = new Array ("Isabel", "Gortazar", "Overseas Officer", nullString, nullString, nullString);
ctctTable[contactEventsSec] = new Array ("Barbara", "Wooding", "Events Secretary", nullString, nullString, nullString);
ctctTable[contactLibrarian] = new Array ("Colin", "Parry", "Society Librarian", nullString, nullString, nullString);
ctctTable[contactIntOfficer] = new Array ("Isabel", "Gortazar", "European &amp; Overseas Representative", nullString, nullString, nullString);
ctctTable[contactMuchAdoDvd] = new Array ("Mike", "Rubbo", nullString, nullString, nullString, nullString);
ctctTable[contactPayPal] = new Array ("Bruce", "Young", nullString, nullString, nullString, nullString);

// Isabel Gort&aacute;zar

var maasDvdEmBodyText = "%0A%0D%0A%0D%0A%0D" +
	"[This%20enquiry%20was%20generated%20via%20the%20Marlowe%20Society%20website.%20" +
	"Please%20do%20not%20remove%20this%20mention%20as%20the%20Society%20earns%20" +
	"a%20small%20commission%20from%20any%20purchase%20initiated%20from%20our%20site.%20Thank you.]";

// ---------------- //
// ** Functions ** //
// --------------- //

// Contact Table Functions //

function writeAddress (contactId) {document.write(ctctTable[contactId][cidxAddress]);}
function writeTelNo (contactId) {document.write(ctctTable[contactId][cidxTelNo]);}
function writeFaxNo (contactId) {document.write(ctctTable[contactId][cidxFaxNo]);}

function getFullName (contactId) {
	var fullName = ctctTable[contactId][cidxFName] + " " + ctctTable[contactId][cidxLName];
	return (fullName);
}
function writeFullName (contactId) {
	document.write("<span class='personref'>"+getFullName(contactId)+"</span>");
}
function getFullNameRole (contactId) {
	var fullNameRole = ctctTable[contactId][cidxFName] + " " + ctctTable[contactId][cidxLName] + " (" + ctctTable[contactId][cidxRole] + ")";
	return (fullNameRole);
}
function writeFullNameRole (contactId) {
	document.write("<span class='personref'>"+getFullNameRole(contactId)+"</span>");
}

function getMarSocEmAddr (contactId) {
	var addr = ctctTable[contactId][cidxFName].toLowerCase() + "." + 
		ctctTable[contactId][cidxLName].toLowerCase() + 
		"\u0040" + marSocDom;
	return (addr);
}
function genMarSocEmLink (contactId) {
	document.write("<a href=\"mail" + "to:" + getMarSocEmAddr (contactId) + "\">" + 
		"Send an e-mail to the " + ctctTable[contactId][cidxRole] + "</a>");
}
function genMarSocEmNameLink (contactId) {
	document.write("<a href=\"mail" + "to:" + getMarSocEmAddr(contactId) + "\">" + getFullName(contactId) + "</a>");
}
function genMarSocEmNameRoleLink (contactId) {
	document.write("<a href=\"mail" + "to:" + getMarSocEmAddr (contactId) + "\">" + getFullNameRole(contactId) + "</a>");
}

function gen2MarSocEmNameRoleLinks (contactId1, contactId2) {
	document.write("<a href=\"mail" + "to:" + 
		getMarSocEmAddr (contactId1) + "; " + 
		getMarSocEmAddr (contactId2) + "\">" + 
		getFullNameRole(contactId1) + " and " + 
		getFullNameRole(contactId2) + 
		"</a>");
}

function genEmLink (contactId) {
	document.write("<a href=\"mail" + "to:" + emParts[contactId][eidxName] + "\u0040" + emParts[contactId][eidxDom] + "\">" + "Send an e-mail to the " + ctctTable[contactId][cidxRole] + "</a>");
}
function genEmLinkSpecifyText (contactId, text) {
	document.write("<a href=\"mail" + "to:" + emParts[contactId][eidxName] + "\u0040" + emParts[contactId][eidxDom] + "\">" + text + "</a>");
}

function genRawEm (contactId) {
	document.write("<span class='emailaddress'>" + emParts[contactId][eidxName] + "\u0040" + emParts[contactId][eidxDom] + "</span>");
}
function getEmTxt (contactId) {
	var emTxt = "" + emParts[contactId][eidxName] + "\u0040" + emParts[contactId][eidxDom];
	return (emTxt);
}
function genRawEmLink (contactId) {
	document.write("<a href=\"mail" + "to:" + emParts[contactId][eidxName] + "\u0040" + emParts[contactId][eidxDom] + "\">" + emParts[contactId][eidxName] + "\u0040" + emParts[contactId][eidxDom] + "</a>");
}
function genSuppEmLink (ename, edom) {
	document.write("<a href=\"mail" + "to:" + ename + "\u0040" + edom + "\">" + ename + "\u0040" + edom + "</a>");
}

function genBespokeEmLink (ename, edom, linktext) {
	document.write("<a href=\"mail" + "to:" + ename + "\u0040" + edom + "\">");
	if (linktext=="") {
		document.write(ename + "\u0040" + edom);
	}
	else {
		document.write(linktext);
	}
	document.write("</a>");
}

function genMaasDvdEmLink (linkText) { 
	document.write("<a href=\"mail" + "to:");
	document.write(getEmTxt(contactMuchAdoDvd));
	document.write("?subject=Much%20Ado%20DVD%20Enquiry%20(via%20Marlowe%20Society)");
	//document.write("&amp;bcc=");
	//document.write(getEmTxt(contactTreasurer));
	document.write("&amp;body="+maasDvdEmBodyText);
	document.write("\">" + linkText + "</a>");
}

// Write out email recipients for online Membership Application Form //
function writeAppFormEmRxs () {
	document.write("<input type='hidden' name='recipient' value='");
	//document.write(getEmTxt(contactTreasurer)+",");
	//document.write(getEmTxt(contactMemSec)+",");
	document.write(getMarSocEmAddr(contactTreasurer)+",");
	document.write(getMarSocEmAddr(contactMemSec)+",");
	// Use as Test Address: //
	//document.write(getEmTxt(contactWebmaster));
	document.write(getMarSocEmAddr(contactWebmaster));
	document.write("'>");
}

// Write out email recipients for online Back Issues Order Form //
function writePubsFormEmRxs () {
	document.write("<input type='hidden' name='recipient' value='");
	//document.write(getEmTxt(contactMemSec)+",");
	//document.write(getEmTxt(contactEditor)+",");
	//document.write(getEmTxt(contactTreasurer)+",");
	document.write(getMarSocEmAddr(contactMemSec)+",");
	document.write(getMarSocEmAddr(contactEditor)+",");
	document.write(getMarSocEmAddr(contactTreasurer)+",");
	// Use as Test Address: //
	//document.write(getEmTxt(contactWebmaster));
	document.write(getMarSocEmAddr(contactWebmaster));
	document.write("'>");
}

// -------------------------------------------------------------------- //

// Subscription Data //
var bidxBank  = 0;
var bidxBranch  = 1;
var bidxSortCode  = 2;
var bidxAccNo  = 3;
var bidxIban  = 4;
var bidxSwiftBic  = 5;
var numBkFields = 6;
var bkDetails = new Array (numBkFields);

bkDetails[bidxBank] = "Barclays";
bkDetails[bidxBranch] = "Teddington";
bkDetails[bidxSortCode] = "20-46-76";
bkDetails[bidxAccNo] = "10139971";
bkDetails[bidxIban] = "GB50BARC2046 7610 1399 71";
bkDetails[bidxSwiftBic] = "BARBG22";

// ---------------- //
// ** Functions ** //
// ---------------- //

function writeBkDetail (bidx) {document.write(bkDetails[bidx]);}
function writeBkBnk () {writeBkDetail(bidxBank);}
function writeBkBrch () {writeBkDetail(bidxBranch);}
function writeBkStCd () {writeBkDetail(bidxSortCode);}
function writeBkAcNo () {writeBkDetail(bidxAccNo);}
function writeBkIban () {writeBkDetail(bidxIban);}
function writeBkSwBc () {writeBkDetail(bidxSwiftBic);}

// -------------------------------------------------------------------- //

// Membership Types Data //
var memTyStrd  = 0;
var memTyConc  = 1;
var memTyLife  = 2;
var memTyAffil  = 3;
var firstMemTy = memTyStrd;
var lastMemTy = memTyAffil;
var defaultMemTy = memTyStrd;
var numMemTypes = 4;
var memTypeData = new Array (numMemTypes);
var midxTitle  = 0;
var midxCost  = 1;
var MEMCOSTTBA = -1;
// ** Update Membership Rates in following table (GBP): ** //
memTypeData[memTyStrd] = new Array ("Annual", 15);
memTypeData[memTyConc] = new Array ("Concessionary", 10);
memTypeData[memTyLife] = new Array ("Life", 300);
memTypeData[memTyAffil] = new Array ("Affiliated", MEMCOSTTBA);

// Membership Postage Supplements Data //
var memPostUk  = 0;
var memPostEurope  = 1;
var memPostWorld  = 2;
var memPostAirmail  = 3;
var firstMemPost = memPostUk;
var lastMemPost = memPostAirmail;
var defaultMemPost = memPostUk;
var numMemPosts = 4;
var memPostData = new Array (numMemPosts);
var midxPostLoc  = 0;
var midxPostSupp  = 1;
// ** Update Membership Postage Supplements in following table (GBP): ** //
memPostData[memPostUk] = new Array ("UK", 0);
memPostData[memPostEurope] = new Array ("Europe", 3);
memPostData[memPostWorld] = new Array ("Outside Europe", 6);
memPostData[memPostAirmail] = new Array ("Airmail", 10);

// Record Costs based on selections //
// Initialise with default display values //
var memRate = memTypeData[defaultMemTy][midxCost];
var postRate = memPostData[defaultMemPost][midxPostSupp];
var totalCost = memRate + postRate;

// ---------------- //
// ** Functions ** //
// ---------------- //

function writeMemCost (idxMemTy) {
	if (memTypeData[idxMemTy][midxCost] == MEMCOSTTBA) document.write("TBA");
	else document.write(memTypeData[idxMemTy][midxCost]);
}
function writeMemPostCost (idxPostTy) {
	document.write(memPostData[idxPostTy][midxPostSupp]);
}
function writeMemType (idxMemTy) {
	document.write(memTypeData[idxMemTy][midxTitle]);
}
function writeMemTypeDropDownOptions () {
	var i=0;
	document.write('<label for="MembershipType" class="requiredfieldlabel">Membership:</label>');
    document.write('<select name="MembershipType" id="MembershipType" onChange="displayMemRate();" >');
	for (i=firstMemTy; i<=lastMemTy; i++) {
		document.write('<option value="');
		document.write(memTypeData[i][midxTitle]);
		document.write('"');
		if (i==defaultMemTy) document.write(' selected="selected"');
		document.write('>');
		document.write(memTypeData[i][midxTitle]);
		document.write('</option>');
	}
	document.write('</select>');
}
function displayMemRate() {
	var selMtIndex = document.msMemAppForm.MembershipType.selectedIndex;
	var selMtTitle = document.msMemAppForm.MembershipType.options[selMtIndex].value;
	var i=firstMemTy;
	memRate = memTypeData[defaultMemTy][midxCost];
	var found=false;
	while ((!found) && (i<=lastMemTy)) {
		if (memTypeData[i][midxTitle]==selMtTitle) {
			if (memTypeData[i][midxCost] == MEMCOSTTBA) {
				memRate = MEMCOSTTBA;
				totalCost = memRate + postRate;
				document.msMemAppForm.MembershipRate.value="To Be Agreed";
				document.msMemAppForm.TotalMemCost.value="To Be Agreed";
			}
			else {
				memRate = memTypeData[i][midxCost];
				totalCost = memRate + postRate;
				document.msMemAppForm.MembershipRate.value="£"+memRate;
				document.msMemAppForm.TotalMemCost.value="£"+totalCost;
			}
			found = true;
		}
		i++
	}
   }

function writeMemLocDropDownOptions () {
	var i=0;
	document.write('<label for="MemberLocation" class="requiredfieldlabel">Location:</label>');
    document.write('<select name="MemberLocation" id="MemberLocation" onChange="displayMemPost();" >');
	for (i=firstMemPost; i<=lastMemPost; i++) {
		document.write('<option value="');
		document.write(memPostData[i][midxPostLoc]);
		document.write('"');
		if (i==defaultMemPost) document.write(' selected="selected"');
		document.write('>');
		document.write(memPostData[i][midxPostLoc]);
		document.write('</option>');
	}
	document.write('</select>');
}

function displayMemPost() {
	var selLocIndex = document.msMemAppForm.MemberLocation.selectedIndex;
	var selLocTitle = document.msMemAppForm.MemberLocation.options[selLocIndex].value;
	var i=firstMemPost;
	var found=false;
	while ((!found) && (i<=lastMemPost)) {
		if (memPostData[i][midxPostLoc]==selLocTitle) {
			postRate = memPostData[i][midxPostSupp];
			found = true;
		}
		i++
	}
	if (memRate == MEMCOSTTBA) {
		totalCost = postRate;
		document.msMemAppForm.PostageRate.value="£"+postRate;
		document.msMemAppForm.TotalMemCost.value="To Be Agreed";
	}
	else {
		totalCost = memRate + postRate;
		document.msMemAppForm.PostageRate.value="£"+postRate;
		document.msMemAppForm.TotalMemCost.value="£"+totalCost;
	}
   }

// -------------------------------------------------------------------- //

// Application Form Validation functions //

// Error Codes //
var numErrorCodes = 2;
var errorCodes = new Array (numErrorCodes+1);
var EC_SUCCESS=0;
errorCodes[EC_SUCCESS] = "&nbsp;";
var EC_REQFLDMISS=1;
errorCodes[EC_REQFLDMISS] = "One or more <strong>required fields</strong> are missing.";
var EC_ORDERTOTZERO=2;
errorCodes[EC_ORDERTOTZERO] = "No items have been ordered.";

function genErrorMessage (errorCode) {
	errStr = errorCodes[errorCode];
	if (errorCode>EC_SUCCESS) errStr = "<strong>Warning:</strong> " + errStr;
	var errPanelElt = document.getElementById("errorbox");
	errPanelElt.innerHTML = errStr;
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_showHideLayers() { //v6.0
  var i,p,v,obj,args=MM_showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v=='hide')?'hidden':v; }
    obj.visibility=v; }
}

function displayFormError (errorCode) {
	genErrorMessage (errorCode);
	MM_showHideLayers('errorbox','','show');
}
function clearFormError () {
	genErrorMessage (EC_SUCCESS);
	MM_showHideLayers('errorbox','','hide');
}

function validateReqFieldPresent (field) {
	if (field.value==null||field.value=="") {
		displayFormError(EC_REQFLDMISS);
		field.focus();
		return false;
	}
	else {
		clearFormError();
		return true;
	}
}

function validateOrderTotal (field) {
	if (field.value<=0||field.value=="") {
		displayFormError(EC_ORDERTOTZERO);
		field.focus();
		return false;
	}
	else {
		clearFormError();
		return true;
	}
}

function validateAppForm (thisform) {
	// Check each required field has data specified //
	if (!validateReqFieldPresent(thisform.Name)) return(false);
	if (!validateReqFieldPresent(thisform.Email)) return(false);
	if (!validateReqFieldPresent(thisform.Address_1)) return(false);
	if (!validateReqFieldPresent(thisform.Zip)) return(false);
	if (!validateReqFieldPresent(thisform.Country)) return(false);
	if (!validateReqFieldPresent(thisform.Phone_number)) return(false);
	if (!validateReqFieldPresent(thisform.MembershipType)) return(false);
	return(true);
}

function validatePubForm (thisform) {
	// Check each required field has data specified //
	if (!validateReqFieldPresent(thisform.Name)) return(false);
	if (!validateReqFieldPresent(thisform.Email)) return(false);
	if (!validateReqFieldPresent(thisform.Address_1)) return(false);
	if (!validateReqFieldPresent(thisform.Zip)) return(false);
	if (!validateReqFieldPresent(thisform.Country)) return(false);
	// Check that Order is non-zero //
	if (!validateOrderTotal(thisform.OrderTotal_Qty)) return(false);
	return(true);
}

// -------------------------------------------------------------------- //

