// country array

var countries = new Array('United States','Canada','','International');
var states = new Array(new Array(2), new Array(2));
states[0][0] = new Array('','Alabama','Alaska','Arizona','Arkansas','California','Colorado','Connecticut','Delaware','District of Columbia','Florida','Georgia','Hawaii','Idaho','Illinois','Indiana','Iowa','Kansas','Kentucky','Louisiana','Maine','Maryland','Massachusetts','Michigan','Minnesota','Mississippi','Missouri','Montana','Nebraska','Nevada','New Hampshire','New Jersey','New Mexico','New York','North Carolina','North Dakota','Ohio','Oklahoma','Oregon','Pennsylvania','Rhode Island','South Carolina','South Dakota','Tennessee','Texas','Utah','Vermont','Virginia','Washington','West Virginia','Wisconsin','Wyoming')
states[0][1] = new Array('null','AL','AK','AZ','AR','CA','CO','CT','DE','DC','FL','GA','HI','ID','IL','IN','IA','KS','KY','LA','ME','MD','MA','MI','MN','MS','MO','MT','NE','NV','NH','NJ','NM','NY','NC','ND','OH','OK','OR','PA','RI','SC','SD','TN','TX','UT','VT','VA','WA','WV','WI','WY');
states[1][0] = new Array('','Alberta','British Columbia','Manitoba','New Brunswick','Newfoundland','Nova Scotia','Ontario','Prince Edward Island','Quebec','Saskatchewan','Northwest Territories','Nunavut','Yukon');
states[1][1] = new Array('null','AB','BC','MB','NB','NL','NS','ON','PE','QC','SK','NT','NU','YT');

var inquiry = new Array('','Support Related','Account Information','Sales','Media');
var product = new Array('','ActiveNet','Class','Safari','Thriva','Blue Bear','GeN','Fairways','ACR','ACM','SPORG','LibOnline','Jencess','PreEnroll','BookIt','Reg Center Endurance Sports','Reg Center Team Sports','LeagueOne','eTeamz','ActiveGiving');
var productEmails = new Array('','activenetsupport@active.com','classsupport@active.com','safarisupport@active.com','support@thriva.com','support@bluebearsoft.com','golfsupport@active.com','golfsupport@active.com','acrsupport@active.com','acmsupport@active.com','support@sporg.com','libonlinesupport@active.com','support@jencess.com','preenrollsupport@active.com','bookitsupport@active.com','clientsupport@active.com','leaguesupport@active.com','leagueonesupport@active.com','websupport@eteamz.com','clientsupport@active.com');
var market = new Array('','Events','Governments','Recreation','Camps','Endurance','Sports','Golf','Schools','Giving');

// ids
var form_countries = 'form_countries';
var form_states = 'form_states';
var form_inquiry = 'form_inquiry';
var form_product = 'form_product';
var form_market = 'form_market';
var state_identifier = 'state_identifier';
var button_submit = 'button_submit';
var button_reset = 'button_reset';

// images

var form_img_count = 2;
var form_over_images;
var form_out_images;

// ajax form submission
var contact_handler = 'http://www.activenetwork.com/cs/an_contact_handler.aspx';

function contactConst() {
	// Populate initial
	populateSelect(form_countries, countries);
	populateSelect(form_states, states[0][0]);
	populateSelect(form_inquiry, inquiry, inquiry);
	populateSelect(form_product, product, product);
	populateSelect(form_market, market, market);

	attachDropdownListeners();

	// preload images
	form_over_images = new Array(form_img_count);
	form_out_images = new Array(form_img_count);
	for (var i=0; i<form_img_count; i++) {
		form_over_images[i] = new Image();
		form_out_images[i] = new Image();
	}
	
	form_out_images[0].src = img_basedir+'images/forms/submit.gif';
	form_out_images[1].src = img_basedir+'images/forms/reset.gif';
	form_over_images[0].src = img_basedir+'images/forms/submit_hover.gif';
	form_over_images[1].src = img_basedir+'images/forms/reset_hover.gif';
	
	// set attributes
	ge(button_submit).setAttribute(offset,0);
	ge(button_reset).setAttribute(offset,1);

	attachFormMouseoverListeners();

	// check contact 
	var arrUrl = location.href.split('#');
	if (arrUrl.length > 1) {
		if (arrUrl[1] == 'contact') {
			activateTab(1);
		}
	}
}

function attachFormMouseoverListeners() {
	// form buttons
	var objSubmit = ge(button_submit);
	var objReset = ge(button_reset);

	if (window.addEventListener) { // moz
		objSubmit.addEventListener('click', btnSubmit, false);
		objSubmit.addEventListener('mouseover', btnOver, false);
		objSubmit.addEventListener('mouseout', btnOut, false);
		objReset.addEventListener('click', btnReset, false);
		objReset.addEventListener('mouseover', btnOver, false);
		objReset.addEventListener('mouseout', btnOut, false);
	}
	else {
		objSubmit.attachEvent('onclick', btnSubmit);
		objSubmit.attachEvent('onmouseover', btnOver);
		objSubmit.attachEvent('onmouseout', btnOut);
		objReset.attachEvent('onclick', btnReset);
		objReset.attachEvent('onmouseover', btnOver);
		objReset.attachEvent('onmouseout', btnOut);
	}
}
function addValue(fieldname,val) {
	//var newval = val.replace(/&/g,'%26').replace(/=/g,'%3d').replace(/</,'&lt;');
	return fieldname+'='+encodeURI(val).replace(/&/g,'%26').replace(/=/g,'%3d').replace(/ /,'%20')+'&';
}
function btnSubmit(e) {


	// validate required information
	var arrRequired = new Array('form_firstname','form_lastname','form_organization','form_email');
	var arrRex = new Array('first name','last name','organization name','email address');
	var valueError = false;

	for (var i=0; i<arrRequired.length; i++) {
		if (ge(arrRequired[i]).value.length == 0) {
			alert('Please provide your '+arrRex[i]);
			ge(arrRequired[i]).focus();
			valueError = true;
			break;
		}
	}

	if (!valueError) {
		
		var formContents = '';


		// dropdown
		var objCountry = ge(form_countries);
		ge('conf_countries').innerHTML = objCountry.options[objCountry.selectedIndex].text;
		formContents = addValue('country',ge('conf_countries').innerHTML);

		var objState = ge(form_states);
		ge('conf_states').innerHTML = objState.options[objState.selectedIndex].text;
		formContents += addValue('state',ge('conf_states').innerHTML);

		objCountry.selectedIndex == 1 ? ge('label_conf_states').innerHTML = 'Province' : ge('label_conf_states').innerHTML = 'State';
		
		// inq type
		var objInquiry = ge(form_inquiry);
		ge('conf_inquiry').innerHTML = objInquiry.options[objInquiry.selectedIndex].text;
		formContents += addValue('inquiry',ge('conf_inquiry').innerHTML);

		// if support related show product
		if (objInquiry.selectedIndex == 1) {
			var objProduct = ge(form_product);
			ge('conf_product').innerHTML = objProduct.options[objProduct.selectedIndex].text;
			formContents += addValue('prodemail', productEmails[objProduct.selectedIndex]);
			formContents += addValue('product', ge('conf_product').innerHTML);
		}
		else {
			var objProductContainer = ge('conf_product_container');
			objProductContainer.style.display = 'none';
		}

		// if market is selected
		if (objInquiry.selectedIndex == 2 || objInquiry.selectedIndex == 3) {
			var objMarket = ge(form_market);
			objMarket.selectedIndex > 0 ? ge('conf_market').innerHTML = objMarket.options[objMarket.selectedIndex].text : ge('conf_market').innerHTML = '<em>None selected</em>';
			formContents += addValue('market',ge('conf_market').innerHTML);
		}
		else {
			var objMarketContainer = ge('conf_market_container');
			objMarketContainer.style.display = 'none';
		}

		// update contact information display
		var contacts = new Array('firstname','lastname','organization','title','email','phone','inquiry_text');
		var conf_name;
		var input_name;
		for (var i=0; i<contacts.length; i++) {
			conf_name = 'conf_'+contacts[i];
			input_name = 'form_'+contacts[i];
			ge(conf_name).innerHTML = ge(input_name).value;
			formContents += addValue(contacts[i],ge(input_name).value);
		}

		// submit form
		sendReq(contact_handler,formContents);
	}
}

/* ajax functions */

function sendReq(url,form_contents) {
	http_request = false;
	if (window.XMLHttpRequest) { // Mozilla, Safari,...
		http_request = new XMLHttpRequest();
		if (http_request.overrideMimeType) {
			http_request.overrideMimeType('text/xml');
		}
	} 
	else if (window.ActiveXObject) { // IE
		try {
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		} 
		catch (e) {
			try {
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
			} 
			catch (e) {
				alert ('Error connecting!');
			}
		}
	}
	if (!http_request) {
		alert('Error: Cannot create an XMLHTTP instance');
		return false;
	}
	http_request.onreadystatechange = alertSubmission;
	// uncache

	var dt = new Date();
	var timestamp = dt.getTime();
	var newur = url + '?time=' + timestamp;
	http_request.open('POST', newur, true);
	http_request.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	http_request.send(form_contents);
}

function alertSubmission() {
	if (http_request.readyState == 4) {
		if (http_request.status == 200) {
			var objForm = ge('contact_form');
			var objConf = ge('contact_form_contents');

			if (http_request.responseText == 'sent') {
				// display sent data
				objForm.style.display = 'none';
				objConf.style.display = '';
			}
			else {
				alert('There was an error sending your request! Please send an email to '+http_request.responseText+' with your inquiry.');
			}
		} 
		else {
			alert('Error: There was a problem with the request.'+http_request.status);
		}
	}

}
function btnReset(e) {
	alert('reset the form');
}

// change image on mouse over
function btnOver(e) {
	// if mozilla use getAttribute, else use array
	e[e_moz] ? e[e_moz].src = form_over_images[e[e_moz].getAttribute(offset)].src : e[e_ie].src = form_over_images[e[e_ie][offset]].src;
}

// change image on mouse out
function btnOut(e) {
	// if mozilla use getAttribute, else use array
	e[e_moz] ? e[e_moz].src = form_out_images[e[e_moz].getAttribute(offset)].src : e[e_ie].src = form_out_images[e[e_ie][offset]].src;
}

// load a select object with values
function populateSelect(sel_id, name_array) {
	var objSelect = ge(sel_id);
	var option_count = objSelect.options.length;

	// remove previous values
	for (var j=0; j<option_count; j++) {
		objSelect.options[0] = null;
	}

	if (arguments.length > 2) {
		// value array is included
		var value_array = arguments[2];
		for (var i=0; i<name_array.length; i++) {
			objSelect.options[i] = new Option(name_array[i], value_array[i]);
		}
	}
	else {
		// no value array included, default by id
		for (var i=0; i<name_array.length; i++)	{
			objSelect.options[i] = new Option(name_array[i], i);
		}
	}
}

function attachDropdownListeners() {
	// drop downs
	var objCountrySelect = ge(form_countries);	
	var objStateSelect = ge(form_states);
	var objInquirySelect = ge(form_inquiry);
	var objMarketSelect = ge(form_market);
	var objProductSelect = ge(form_product);

	if (window.addEventListener) { // moz
		objCountrySelect.addEventListener('change', updateStates, false);
		objStateSelect.addEventListener('change', updateTypes, false);
		objInquirySelect.addEventListener('change', filterByInquiry, false);
		objMarketSelect.addEventListener('change', updateContacts, false);
		objProductSelect.addEventListener('change', updateContacts, false);
	}
	else { // ie
		objCountrySelect.attachEvent('onchange', updateStates);
		objStateSelect.attachEvent('onchange', updateTypes);
		objInquirySelect.attachEvent('onchange', filterByInquiry);
		objMarketSelect.attachEvent('onchange', updateContacts);
		objProductSelect.attachEvent('onchange', updateContacts);
	}
}
function updateStates(e) {
	var sel;
	var objTypesContainer = ge('inquiry_select_container');
	var objStateContainer = ge('state_select_container');
	var objTypes = ge(form_inquiry);
	var objProducts = ge(form_product);
	e[e_moz] ? cur_selected = e[e_moz].selectedIndex : cur_selected = e[e_ie].selectedIndex;

	var objProduct = ge('product_select_container');
	var objMarket = ge('market_select_container');
	var objContact = ge('contact_info_container');
	hideContainers(objProduct, objMarket, objContact);

	if (cur_selected <= 1) { 
		populateSelect(form_states, states[cur_selected][0], states[cur_selected][1]);
		objStateContainer.style.display = '';
		objTypesContainer.style.display = 'none';
		objTypes.options[0].selected = true;
	}
	else if (cur_selected > 2) {
		// remove the state selection
		objStateContainer.style.display = 'none';
		objTypesContainer.style.display = '';
	}
	else {
		objStateContainer.style.display = 'none';
		objTypesContainer.style.display = 'none';
		objTypes.options[0].selected = true;
	}
	// update children form elements

	objProducts.options[0].selected = true;
	// update state/prov text
	cur_selected == 1 ? ge(state_identifier).innerHTML = 'province' : ge(state_identifier).innerHTML = 'state';
}

function updateTypes(e) {
	var cur_selected;
	var objTypesContainer = ge('inquiry_select_container');
	var objTypes = ge(form_inquiry);
	e[e_moz] ? cur_selected = e[e_moz].selectedIndex : cur_selected = e[e_ie].selectedIndex;

	// chosen a state
	if (cur_selected > 0) {
		objTypesContainer.style.display = '';
	}
	else {
		hideContainers();
		objTypesContainer.style.display = 'none';
		objTypes.options[0].selected = true;
	}
}

function filterByInquiry(e) {
	
	var cur_selected;
	e[e_moz] ? cur_selected = e[e_moz].selectedIndex : cur_selected = e[e_ie].selectedIndex;

	
	var objProduct = ge('product_select_container');
	var objMarket = ge('market_select_container');
	var objContact = ge('contact_info_container');
	var objProducts = ge(form_product);
	objProducts.options[0].selected = true;

	hideContainers(objProduct, objMarket, objContact);

	if (cur_selected == 1) { // support related
		objProduct.style.display = '';
	}
	else if (cur_selected == 2) { // account information
		objMarket.style.display = '';
	}
	else if (cur_selected == 3) { // sales
		objMarket.style.display = '';
		objContact.style.display = '';
	}
	else if (cur_selected == 4) { // media
		var objContact = ge('contact_info_container');
		objContact.style.display = '';
	}
/*
	if support related
		display product dropdown
		if product is listed
			forward to support site
		else
			display contact form
	else if account information 
		display market dropdown
		on market select
			display contact form
	else if sales
		display market dropdown
		display contact form
	else if media
		display contact form
	else if human resources
		display contact form
*/
}
function updateContacts() {
	// first check that account information is selected
	var objInquiryType = ge(form_inquiry);
	var objContact = ge('contact_info_container');
	if (objInquiryType.selectedIndex == 2) {
		// check that market is selected

		var objMarketType = ge(form_market);
		if (objMarketType.selectedIndex > 0) {
			// display contact
			objContact.style.display = '';
			return;
		}
		else {
			objContact.style.display = 'none';
			return;
		}
	}

	// check to see if it is support related
	if (objInquiryType.selectedIndex == 1) {
		var objProductType = ge(form_product);
		if (objProductType.selectedIndex > 0) {
			objContact.style.display = '';
		}
		else {
			objContact.style.display = 'none';
		}
	}

}
function hideContainers() {

	if (arguments.length > 0) {
		for (var i=0; i<arguments.length; i++) {
			arguments[i].style.display = 'none';
		}
	}
}