// JavaScript Document

//globals and constants

var owlname = 0;
var titles = 1;
var files = 2;
var entries = 3;

//~*~*~*~*~*~*~*~*~*~
//topNav(index)
//(index) is directory level:
// 0 outwardlink.net/index.html
// 1 documents in main level folders
//2 documents in features/namekey folders

//
function topNav(index) {
	var dirlevel; //used to determine levels down in directory structure based on index value
    
	//sets values for dirlevel variable based on document type
	switch (index) {
		case 0: //outwardlink.net/index.html
			dirlevel="";
			break;
		case 1: //documents in main level folders
			dirlevel="../";
			break;
		case 2: //documents in features/namekey folders
			dirlevel="../../";
			break;
	}

	document.write('<br />');

	stdMenu(dirlevel);

	document.write('<img class="topstrip" src="' + dirlevel + 'shared/graphics/topstrip.gif" /><br />');
}

//~*~*~*~*~*~*~*~*~*~
//topLogo(index)
//(index) is directory level:
// 0 paulann.net/index.html
// 1 documents subfolders
//
function topLogo(index) {
	var dirlevel; //used to determine levels down in directory structure based on index value
    
	//sets values for dirlevel variable based on document type
	switch (index) {
		case 0: //outwardlink.net/index.html
			dirlevel="";
			break;
		case 1: //documents in subfolders
			dirlevel="../";
			break;
		case 2: //documents in features/namekey folders
			dirlevel="../../";
			break;
	}

	document.write('<a href="' + dirlevel + 'index.html"><img src="' + dirlevel + 'shared/graphics/owl_halfsingle.gif" style="float:right;margin:15px;" border="0" /></a><br clear="all" /><br />');
}

//~*~*~*~*~*~*~*~*~*~
//bottomNav(index)
//(index) is directory level:
// 0 paulann.net/index.html
// 1 documents subfolders
//
function bottomNav(index) {
	var dirlevel; //used to determine levels down in directory structure based on index value
    
	//sets values for dirlevel variable based on document type
	switch (index) {
		case 0: //outwardlink.net/index.html
			dirlevel="";
			break;
		case 1: //documents in subfolders
			dirlevel="../";
			break;
		case 2: //documents in features/namekey folders
			dirlevel="../../";
			break;
	}

	document.write('<div style="font-size:7.5pt;padding-top:15px;padding-bottom:5px;">&copy; 2009-2010 Edie Lungreen all content exclusive of authors\' works, which are copyrighted by the individual authors. All rights reserved. The contents of this website may not be copied or reprinted, either physically or electronically, without permission. For more information, contact the <a href="../../contact_us/index.html?recip=webmaster">Webmaster</a>.</div>');
	document.write('<img class="bottomstrip" src="' + dirlevel + 'shared/graphics/bottomstrip.gif" /><br />');

	stdMenu(dirlevel);
	
	document.write('<br />');
}

//~*~*~*~*~*~*~*~*~*~
//stdMenu(dirlvl)
//(dirlvl) is directory level:
// "" paulann.net/index.html
// "../" documents subfolders
//
function stdMenu(dirlvl) {
	var dirlvl; //levels down in directory structure based on index value
    
	document.write('<table class="nav">');
	document.write('<tr>');
	document.write('<td style="text-align:center;"><a class="nav" href="' + dirlvl + 'index.html">Home</a></td>');
	document.write('<td style="text-align:center;"><a class="nav" href="' + dirlvl + 'features/index.html">Features</a></td>');
	document.write('<td style="text-align:center;"><a class="nav" href="' + dirlvl + 'links/index.html">Links</a></td>');
	document.write('<td style="text-align:center;"><a class="nav" href="' + dirlvl + 'our_community/index.html">Our Community</a></td>');
	document.write('<td style="text-align:center;"><a class="nav" href="' + dirlvl + 'submissions/index.html">Submissions</a></td>');
	document.write('<td style="text-align:center;"><a class="nav" href="' + dirlvl + 'contact_us/index.html">Contact Us</a></td>');
	document.write('</tr>');
	document.write('</table>');	
}

//~*~*~*~*~*~*~*~*~*~
//playIntro()
//plays the animated outwardlink.net gif
//
function playIntro() {
	var owlgif=document.getElementById("owl");

	owlgif.innerHTML='<img src="shared/graphics/owl_intro.gif" />';
}

//******** SIDE NAV SECTION STARTS HERE ********

//~*~*~*~*~*~*~*~*~*~
//sideNav(arrayname) - builds nav items down left side of page
//arrayname = specifies which array set to plug into the nav writer
//
function sideNav(arrayname) {
	var currentpage=location.pathname;
	var currentpath=currentpage.split("/");
	var docpos = currentpath.length - 1;
	
	var navtitles = new Array();
	var navdocs = new Array();
	var navnames = new Array();

	var indexa;
	
	var activeclass;
	
	//uses the getArrayName function to build the appropriate arrays
	getArrayName(arrayname,navtitles,navdocs,navnames);
	
	//write HTML for side navs
	for (indexa = 0; indexa < navdocs.length; indexa++) {
		lastpos = navdocs.length - 1;

		if (currentpath[docpos]==navdocs[indexa]) {
			activeclass="active";
		}
		else {
			activeclass="norm";
		}
		
		document.write('<a class="' + activeclass + '" href="' + navdocs[indexa] + '">' + navnames[indexa] + '&nbsp;&#9658;</a> \n');
	}
}

//~*~*~*~*~*~*~*~*~*~
//getArrayName(arrayname,navdocs,navnames) - fetches the appropriate path and title arrays based on arrayname
//
function getArrayName(arrayname,navtitles,navdocs,navnames) {
	switch (arrayname) {
		case "submissions":
			navtitles[0] = "Submissions";
			navdocs[0] = "index.html";					navnames[0] = "Submissions";
			navdocs[1] = "subject_matter.html";			navnames[1] = "Subject Matter";
			navdocs[2] = "specifications.html";			navnames[2] = "Specifications";
			navdocs[3] = "accepted_formats.html";		navnames[3] = "Accepted Formats";
			navdocs[4] = "rights_restrictions.html";	navnames[4] = "Rights and Restrictions";
			navdocs[5] = "facebook_posts.html";			navnames[5] = "Facebook Posts";
			navdocs[6] = "privacy.html";				navnames[6] = "Privacy";
			navdocs[7] = "how_to_submit.html";			navnames[7] = "How to Submit Your Work";
			break;
		case "our_community":
			navtitles[0] = "Our Community";
			navdocs[0] = "index.html";					navnames[0] = "Our Community";
			navdocs[1] = "facebook.html";				navnames[1] = "News on Facebook";
			navdocs[2] = "twitter.html";				navnames[2] = "Twitter Updates";
			navdocs[3] = "our_contributors.html";		navnames[3] = "Our Contributors";
			break;
	}
} 

//******** FEATURES SCRIPTS SECTION STARTS HERE ********

//~*~*~*~*~*~*~*~*~*~
//owlnamesList()
//lists the contributors, from which visitors can click to see items for each
//
function owlnamesList() {
	var owlitem = new Object;
	owlItems(owlitem);
	
	var owlarray = new Array;
	var index = 0;
	
	for (var name in owlitem) {
		if (name!='webmaster') {
			owlarray[index] = name;
		}
		index++;
	}
	
	owlarray.sort();
	
	for (index = 0; index < owlarray.length; index++) {
		document.write('<li  style="padding-bottom:5px;">');
		document.write('<a href="javascript:owlFeatures(\'' + owlarray[index] + '\')">');
		document.write(owlitem[owlarray[index]][owlname]);
		document.write('</a></li>');
	}
}

//~*~*~*~*~*~*~*~*~*~
//owlFeatures(namekey)
//creates links to items for the selected contributor
//namekey=key value in owlitem object
//
function owlFeatures(namekey) {
	var owlitem = new Object;
	owlItems(owlitem);
	
	var featuresHTML = '<h1 style="margin-top:40px;">' + owlitem[namekey][owlname] + '</h1>';

	featuresHTML += '<blockquote>';
	featuresHTML += '<ul style="list-style-type:square;">';
	
	var index = 0;
	
	while (owlitem[namekey][titles][index]) {
		featuresHTML += '<li style="font-size:13pt;"><a href="' + namekey + '/' + owlitem[namekey][files][index] + '">';
		featuresHTML += owlitem[namekey][titles][index] + '</a></li>';
		index ++;
	}
	
	featuresHTML += '</ul>';
	featuresHTML += '</blockquote>';
	featuresHTML += '<p>&nbsp;</p>';
	featuresHTML += '<p>&nbsp;</p>';

	var features = document.getElementById('features');
	features.innerHTML = featuresHTML;
	
}

//******** FORM SECTION STARTS HERE ********

//~*~*~*~*~*~*~*~*~*~
//contactH1()
//Modifies the h1 on "Contact Us" if coming from a specific contact request
//
function contactH1(chg) {
	var recipstr;

	if (chg) {
		var recipient = document.getElementById('recipient');
		recipstr = recipient.value;
	} else {
		recipstr = location.search.substring(location.search.indexOf("=")+1);
	}
	
	if (recipstr) { 
		var owlitem = new Object;
		owlItems(owlitem);

		var contacth1 = document.getElementById('contacth1');
		
		if (owlitem[recipstr][owlname]) {
			contacth1.innerHTML = 'Contact ' + owlitem[recipstr][owlname];
			var introtext = document.getElementById('introtext');
			introtext.style.display='none';
		}
	}
}

//~*~*~*~*~*~*~*~*~*~
//nameList()
//creates the recipient selection list in the "Contact Us" form
//
function nameList() {
	var owlitem = new Object;
	owlItems(owlitem);
	
	for (var name in owlitem) {
		document.write('<option value="' + name + '" id="' + name + '">' + owlitem[name][owlname] + '</option>');
	}
}
	
//~*~*~*~*~*~*~*~*~*~
//nameSelect()
//preselects a recipient if coming from a specific contact request or preselects Webmaster
//
function nameSelect() {
	var recipstr = location.search.substring(location.search.indexOf("=")+1);

	var owlitem = new Object;
	owlItems(owlitem);

	if (recipstr && owlitem[recipstr][owlname]) { 
		var nameselect = document.getElementById(recipstr);
		nameselect.selected=true;
	} else {
		var nameselect = document.getElementById('webmaster');
		nameselect.selected=true;
	}
}

//~*~*~*~*~*~*~*~*~*~
//function for submitting the Contact Us form
function submitform() {
	//initialize the form status to true
	formok = true;
	
	//collect form elements for validation
	var formrecip = document.getElementById('recipient');
	var formfname = document.getElementById('firstname');
	var formlname = document.getElementById('lastname');
	var formemail = document.getElementById('email');
	var formtext = document.getElementById('text');
	
	//collect error elements for display
	var errrecip1 = document.getElementById('recip_err1');
	var errrecip2 = document.getElementById('recip_err2');
	var errfname1 = document.getElementById('fname_err1');
	var errfname2 = document.getElementById('fname_err2');
	var errlname1 = document.getElementById('lname_err1');
	var errlname2 = document.getElementById('lname_err2');
	var erremail1 = document.getElementById('email_err1');
	var erremail3 = document.getElementById('email_err3');
	var errtext1 = document.getElementById('text_err1');
	var errtext3 = document.getElementById('text_err3');

	//elements for local and domain e-mail portions and message
	var formlocal = document.getElementById('email_local');
	var formdomain = document.getElementById('email_domain');
	var formmessage = document.getElementById('message');
	
	//recipient test
	formemptytest(errrecip1,formrecip); 
	forminvaltest(errrecip2,formrecip); 
	//first name tests
	formemptytest(errfname1,formfname); 
	forminvaltest(errfname2,formfname);
	//last name tests
	formemptytest(errlname1,formlname); 
	forminvaltest(errlname2,formlname);
	//e-mail address tests
	formemptytest(erremail1,formemail); 
	formemailtest(erremail3,formemail);
	//message text tests
	formemptytest(errtext1,formtext); 
	formtexttest(errtext3,formtext);
	
	if (formok) {
		//split e-mail address into local and domain pieces
		formlocal.value = formemail.value.substring(0,formemail.value.lastIndexOf('@'));
		formdomain.value = formemail.value.substring(formemail.value.lastIndexOf('@')+1);
		formemail.value = "";

		//move textarea contents to message field
		formmessage.value = formtext.value;
		formtext.value = "";

		//replace " and ' with escape sequences for transport
		formrecip.value = formrecip.value.replace(/\"/g, "~@q~"); formrecip.value = formrecip.value.replace(/\'/g, "~@a~");
		formfname.value = formfname.value.replace(/\"/g, "~@q~"); formfname.value = formfname.value.replace(/\'/g, "~@a~");
		formlname.value = formlname.value.replace(/\"/g, "~@q~"); formlname.value = formlname.value.replace(/\'/g, "~@a~");
		formlocal.value = formlocal.value.replace(/\"/g, "~@q~"); formlocal.value = formlocal.value.replace(/\'/g, "~@a~");
		formdomain.value = formdomain.value.replace(/\"/g, "~@q~"); formdomain.value = formdomain.value.replace(/\'/g, "~@a~");
		formmessage.value = formmessage.value.replace(/\"/g, "~@q~"); formmessage.value = formmessage.value.replace(/\'/g, "~@a~");

		contactform = document.getElementById('contact');
		alert("Request submitted. Thank you!");
		contactform.submit();
	} else {
		alert("Form contains missing or invalid entries. Please correct and resubmit.");
	}
}
function formemptytest(error,field) {
	error.style.display=(field.value==null||field.value=="")?"block":"none"; 
	if (error.style.display=="block") {formok=false}
}
function forminvaltest(error,field) {
	var regex1 = /[\(%:<`\|]/; //regex for potentially unsafe characters
	var regex2 = /\\/; //regex for backslash
	error.style.display=(field.value.match(regex1)||field.value.match(regex2))?"block":"none";
	if (error.style.display=="block") {formok=false}
}
function formemailtest(error,field) {
	var regex1 = /.@./; //regex for general e-mail pattern
	var regex2 = /[\(%;:,<`\|\s]/; //regex for potentially unsafe characters
	var regex3 = /\\/; //regex for backslash
	error.style.display=((!field.value.match(regex1)||field.value.match(regex2)||field.value.match(regex3))&&field.value!=null&&field.value!="")?"block":"none";
	if (error.style.display=="block") {formok=false}
}
function formtexttest(error,field) {
	var regex1 = /\\/; //regex for backslash
	var regex2 = /[<`]/; //regex for potentially unsafe characters
	error.style.display=((field.value.match(regex1)||field.value.match(regex2))&&field.value!=null&&field.value!="")?"block":"none";
	if (error.style.display=="block") {formok=false}
}

