function pageLoad() {
	addNavEventHandlers();
	setPage("home");
	//detectBrowser();
	personaTimer(); // ** call only when page w/personas loads ** 
	calcPrice();
}

function detectBrowser() {
	var browser_name=navigator.appName;
	var browser_version=navigator.appVersion;
	var browser_version=parseFloat(browser_version);
	if (browser_name == "Microsoft Internet Explorer" && browser_version < 7) {
		var update=confirm("This site is best viewed with Internet Explorer version 7.0 or higher. Would you like to update your browser now?");
		if (update==true) {
			window.open("http://www.microsoft.com/windows/internet-explorer/default.aspx");
		}
		else{
			// do nothing
		}
	}
	else {
		// do nothing
	}
}

function addNavEventHandlers() {  // set event handlers on nav elements (buttons & links)
	var anchors = document.getElementsByTagName("a");
	for (var i=0; i<anchors.length; i++) {
		switch (anchors[i].parentNode.className) {
			case "rollover_nav_button": // nav button with rollover behavior
				anchors[i].onmouseover = buttonMouseOver;		
				anchors[i].onmouseout = buttonMouseOut;		
				anchors[i].onclick = navClick;
				break;						
			case "nav_element": // can be either a link or button used for navigation, without rollover behavior
				anchors[i].onclick = navClick;
				break;
			case "details_link":
				anchors[i].onclick = toggleDetails;
				break;
			case "rollover_download_button": case "rollover_socnw_button": // download and social networking buttons, not used for nav, with rollover behavior
				anchors[i].onmouseover = buttonMouseOver;		
				anchors[i].onmouseout = buttonMouseOut;
				break;
			 case "rollover_socnw_link":
				anchors[i].onmouseover = linkMouseOver;		
				anchors[i].onmouseout = linkMouseOut;
			 	break;
			case "persona_heading":
				anchors[i].onclick = selectPersona;	
				break;
			case "persona_details_button":
				anchors[i].onclick = viewPersonaDetails;	
				break;
			case "persona_list_button":
				anchors[i].onclick = viewPersonaList;
				break;
			case "question":
				anchors[i].onclick = toggleAnswer;	
				break;
			default:
				// do nothing										
		}
	}
}

// ************************** BEGIN FAQS ************************** //

function toggleAnswer() {
	var qid = this.parentNode.id;
	var qid_substr = qid.split("_");
	var faq_id = qid_substr[qid_substr.length-1];
	var answer = document.getElementById("answer_"+faq_id);
		if (answer.style.display == "block") {
		answer.style.display = "none";
	} else {
		answer.style.display = "block";	
	}
}

// ************************** END FAQS ************************** //

// ************************** BEGIN PERSONAS ************************** //

var selectedPersona = 1; // ** select initial persona programmatically ** 

var t;
function personaTimer() {
	t=setTimeout("rotatePersona()",12000);
}

function rotatePersona() {
	Effect.BlindUp("persona_"+selectedPersona+"_blurb", { duration: 1.8 });
	if (selectedPersona<5) { // ** count number of personas programatically ** 
		selectedPersona++;
	} else {
		selectedPersona = 1;
	}
	Effect.BlindDown("persona_"+selectedPersona+"_blurb", { duration: 1.8 });
	personaTimer();
}

function selectPersona() {
	clearTimeout(t);
	Effect.BlindUp("persona_"+selectedPersona+"_blurb", { duration: 1.8 });
	selectedPersona = extractSelectedPersona(this.parentNode.id);
	Effect.BlindDown("persona_"+selectedPersona+"_blurb", { duration: 1.8 });
	personaTimer();
}

function extractSelectedPersona(id) {
	var clicked_substr = id.split("_");
	return clicked_substr[1];
}

function viewPersonaDetails() {
	clearTimeout(t);
	var persona_detail_divs = document.getElementById("persona_details").getElementsByTagName("div");
	for (i=0; i<persona_detail_divs.length; i++) {
		if (persona_detail_divs[i].className == "persona_details") {
				persona_detail_divs[i].style.display = "none";
		}
	}
	selectedPersona = extractSelectedPersona(this.parentNode.id);
	document.getElementById("persona_"+selectedPersona+"_details").style.display = "block";
	new Effect.Move('personas', { x: -370, y: 0, mode: 'relative' });
}

function viewPersonaList() {
	new Effect.Move('personas', { x: 370, y: 0, mode: 'relative' });
	personaTimer();
}

// ************************** END PERSONAS ************************** //


// ************************** BEGIN ROLLOVERS ************************** //

function buttonMouseOver() {
	if (this.parentNode.className == "rollover_socnw_button") {
		this.firstChild.src = "images/over/"+this.className+".png";
	} else {
		this.firstChild.src = "images/over/"+this.className+".gif";
	}
}

function buttonMouseOut() {
	if (this.parentNode.className == "rollover_socnw_button") {
		this.firstChild.src = "images/up/"+this.className+".png";
	} else {
		this.firstChild.src = "images/up/"+this.className+".gif";
	}
}

function linkMouseOver() {
	images = document.getElementById("social_networking").getElementsByTagName("img");
	for (i=0; i<images.length; i++) {
		if (images[i].parentNode.className == this.className) {
			images[i].src = "images/over/"+this.className+".png";
		}
	}	
}

function linkMouseOut() {
	images = document.getElementById("social_networking").getElementsByTagName("img");
	for (i=0; i<images.length; i++) {
		if (images[i].parentNode.className == this.className) {
			images[i].src = "images/up/"+this.className+".png";
		}
	}	
}

// ************************** END ROLLOVERS ************************** //

// ************************** BEGIN NAV ************************** //

function navClick() {
	setPage(this.className);
}

var current_selected_btn;

function setPage(selected) {
	
	// hide all content divs
	var content_divs = document.getElementsByTagName("div");
	for (var i=0; i<content_divs.length; i++) {
		if (content_divs[i].className == "content") {
			content_divs[i].style.display = "none";
		}
	}
	
	// then get the new content div
	var selected_content = document.getElementById(selected+"_content");
	
	// and display it
	selected_content.style.display = "block";
	
	if (current_selected_btn != null) { // de-select previously-selected button, if any
		
		// reset previously-selected button image to default
		current_selected_btn.firstChild.firstChild.src = "images/up/"+current_selected_btn.firstChild.className+".gif";
		
		// restore its event handlers
		current_selected_btn.firstChild.onmouseover = buttonMouseOver;
		current_selected_btn.firstChild.onmouseout = buttonMouseOut;
		current_selected_btn.firstChild.onclick = navClick;
		
		current_selected_btn.firstChild.style.cursor = "pointer";
	}
	
	if (selected == "uc" || selected == "benefits" || selected == "faqs" || selected == "resources") {
		
		// get the newly-selected button
		var new_selected_btn = document.getElementById(selected+"_button");
		
		// set its image to "selected" version
		new_selected_btn.firstChild.firstChild.src = "images/sel/"+selected+".gif";
		
		// clear its event handlers
		new_selected_btn.firstChild.onmouseover = null;
		new_selected_btn.firstChild.onmouseout = null;
		new_selected_btn.firstChild.onclick = null;
		
		new_selected_btn.firstChild.style.cursor = "default";

	// remember the newly-selected button
	current_selected_btn = new_selected_btn;
	
	}
}

// ************************** END NAV ************************** //

// ************************** BEGIN CALC ************************** //

function calcPrice () {
		
	// clear any previous error messaging/highlighting
	var cost_input_spans = document.getElementById("cost_inputs").getElementsByTagName("span");
	for (x=0; x<cost_input_spans.length; x++) {
		if (cost_input_spans[x].className == "error") {
			cost_input_spans[x].innerHTML = "&nbsp;";
		}
	}
	var cost_inputs = document.getElementById("cost_inputs").getElementsByTagName("input");
	for (y=0; y<cost_inputs.length; y++) {
		cost_inputs[y].style.backgroundColor = "";
	}
	
	//  get user input
	
	var empl = document.getElementById("empl").value;
	var ITmngr_costperhr = document.getElementById("ITmngr_costperhr").value;
	var servers = document.getElementById("servers").value;
	
	// clean & validate user input
	
	var error_codes = new Array();
	
	empl = empl.replace(/^\s+|\s+$/g, ""); // remove any leading and/or trailing whitespace
	empl = empl.replace(/,/g, ""); // remove any commas (ideally, should only be commas followed by 3 digits, followed by either another comma, period, or the end of the string)
	document.getElementById("empl").value = empl;
	if (empl.match(/\D/)) {  // confirm that only digits remain (no decimals or negative numbers - only positive whole numbers allowed)
		error_codes.push(100);
	}
	if (empl > 2000 || empl < 1) { // upper limit based on Small Business Administration's size standards
		error_codes.push(150);
	}
	
	ITmngr_costperhr = ITmngr_costperhr.replace(/^\s+|\s+$/g, ""); // remove any leading and/or trailing whitespace
	ITmngr_costperhr = ITmngr_costperhr.replace(/^\$/, ""); // remove any leading $ sign
	document.getElementById("ITmngr_costperhr").value = ITmngr_costperhr;
	//ITmngr_costperhr = ITmngr_costperhr.replace(/,/g, ""); // remove any commas (ideally, should only be commas followed by 3 digits, followed by either another comma, period, or the end of the string)
	if (isNaN(ITmngr_costperhr)) { // decimals ok
		error_codes.push(200);
	}
	if (ITmngr_costperhr >= 1000 || ITmngr_costperhr < 0) {
		error_codes.push(250);
	}

	if (!servers.match(/^[1-3]$/)) { // only 1, 2, or 3 permitted
		error_codes.push(300);
	}

	//empl = empl.match(/,\d{3}($|,|\.)/g, "").replace(/,/g, ""); // remove any commas	
	// what if . occurs more than once in string that allows one?*/
	
	if (error_codes.length > 0) {
		for (i=0; i<error_codes.length; i++) {
			switch (error_codes[i]) {
				case 100:
					document.getElementById("empl").style.backgroundColor = "#FFC8DE";
					document.getElementById("empl_error").innerHTML = "Please enter a valid number of employees.";
					break;
				case 150:
					document.getElementById("empl").style.backgroundColor = "#FFC8DE";
					document.getElementById("empl_error").innerHTML = "Please enter a number from 1 to 2000.";
					break;
				case 200:
					document.getElementById("ITmngr_costperhr").style.backgroundColor = "#FFC8DE";
					document.getElementById("ITmngr_costperhr_error").innerHTML = "Please enter a valid dollar amount.";
					break;
				case 250:
					document.getElementById("ITmngr_costperhr").style.backgroundColor = "#FFC8DE";
					document.getElementById("ITmngr_costperhr_error").innerHTML = "Please enter a valid hourly rate.";
					break;
				case 300:
					document.getElementById("servers").style.backgroundColor = "#FFC8DE";
					document.getElementById("servers_error").innerHTML = "Please enter 1, 2, or 3.";
					break;
				default:
					
			}
		}
		var dollar_values = document.getElementsByTagName("td");
		for (j=0; j<dollar_values.length; j++) {
			if (dollar_values[j].className == "variable") {
				dollar_values[j].innerHTML = "";
			}
		}
		document.getElementById("yearly_savings").innerHTML = "&nbsp;";	
		document.getElementById("co2_yearly_reduction").innerHTML = "&nbsp;";
	} else {
	
		// upfront costs: hoolipot
		
		var hool_servers = 0;
		var hool_exchg = 0;
		var hool_msoffice = 0;
		var hool_quickbooks = 0;
		var hool_oe_config = 21.69*ITmngr_costperhr;
		var hool_q_config = 2400;
		var hool_total_upfront = hool_servers + hool_exchg + hool_msoffice + hool_quickbooks + hool_oe_config + hool_q_config;
		
		// upfront costs: traditional
		
		var trad_servers = servers*5000;
		var trad_exchg = (67*empl)+699;
		var trad_msoffice = 399.95*empl;
		var trad_quickbooks = 439.95;
		var trad_oe_config = 107.27*ITmngr_costperhr;
		var trad_q_config = 4000;
		var trad_total_upfront = trad_servers + trad_exchg + trad_msoffice + trad_quickbooks + trad_oe_config + trad_q_config;
		
		// annual costs hoolipot
		
		var hool_hool_basic = 75*empl;
		var hool_hool_enhanced = 52.43*12;
		var hool_infrastr_maint = 0;
		var hool_admin = 0;
		var hool_total_annual = hool_hool_basic + hool_hool_enhanced + hool_infrastr_maint + hool_admin;
		
		// annual costs traditional
		
		var trad_hool_basic = 0;
		var trad_hool_enhanced = 0;
		var trad_infrastr_maint = (24*(empl-1))+(1040*servers);
		var trad_admin = (456+(0.5*empl))*ITmngr_costperhr;
		var trad_total_annual = trad_hool_basic + trad_hool_enhanced + trad_infrastr_maint + trad_admin;
		
		// totals over 3 years
		
		var hool_total_3year = hool_total_upfront+(3*hool_total_annual);
		var trad_total_3year = trad_total_upfront+(3*trad_total_annual);
		
		var yearly_savings = (trad_total_3year-hool_total_3year)/3;
		var co2_yearly_reduction = 2328*servers;
		
		// put table values in an array (to be iterated through for easier batch operations later)
		
		var dollar_values = new Object();
	
		dollar_values["hool_servers"] = hool_servers;
		dollar_values["hool_exchg"] = hool_exchg;
		dollar_values["hool_msoffice"] = hool_msoffice;
		dollar_values["hool_quickbooks"] = hool_quickbooks;
		dollar_values["hool_q_config"] = hool_q_config;
		dollar_values["hool_oe_config"] = hool_oe_config;
		dollar_values["hool_total_upfront"] = hool_total_upfront;
	
		dollar_values["trad_servers"] = trad_servers;
		dollar_values["trad_exchg"] = trad_exchg;
		dollar_values["trad_msoffice"] = trad_msoffice;
		dollar_values["trad_quickbooks"] = trad_quickbooks;
		dollar_values["trad_q_config"] = trad_q_config;
		dollar_values["trad_oe_config"] = trad_oe_config;		
		dollar_values["trad_total_upfront"] = trad_total_upfront;
	
		dollar_values["hool_hool_basic"] = hool_hool_basic;
		dollar_values["hool_hool_enhanced"] = hool_hool_enhanced;
		dollar_values["hool_infrastr_maint"] = hool_infrastr_maint;
		dollar_values["hool_admin"] = hool_admin;
		dollar_values["hool_total_annual"] = hool_total_annual;
		
		dollar_values["trad_hool_basic"] = trad_hool_basic;
		dollar_values["trad_hool_enhanced"] = trad_hool_enhanced;
		dollar_values["trad_infrastr_maint"] = trad_infrastr_maint;
		dollar_values["trad_admin"] = trad_admin;
		dollar_values["trad_total_annual"] = trad_total_annual;
	
		dollar_values["hool_total_3year"] = hool_total_3year;
		dollar_values["trad_total_3year"] = trad_total_3year;
		
		dollar_values["yearly_savings"] = yearly_savings;
	
		// update page w/new values
		for (index_name in dollar_values) {
			document.getElementById(index_name).innerHTML = "$"+Math.round(dollar_values[index_name]);
		}
		document.getElementById("co2_yearly_reduction").innerHTML = Math.round(co2_yearly_reduction)+" lbs";
	}	
}

// ************************** END CALC ************************** //
