// prompts if navigate away from incomplete form
// window.onunload = customerService;

function submitForm() {	
	isSubmit = true;	
	validateAll();

	// updated rich text data stores
	if (document.getElementsBySelector('iframe.rte').length > 0) {
		eval('submitRTE()');		
	}	

	// scroll screen to top to see message
	if (isValid == false) {
		window.scroll(0, 0);
	} else {
		// complete referral tracking
		// document.getElementById("referral-link").value = readCookie("page-referrer");
	}	

	return isValid;
}

function validateAll()
{
	// global validation
	var requiredString = "";
	var validationString = "";
	var combinedString;
	
	isValid = true;
	
	// error arrays
	var requiredFields = new Array();
	var errorFields = new Array();
	
	// check all required fields
	var elements = document.getElementsBySelector('.required input');
	for (j = 0; j < elements.length; j++) {
	    if (trimLeading(elements[j].value) == "") {
			requiredFields.push(elements[j].alt);
			isValid = false;		
		}
	}
	
	// extra textarea elements
	elements = document.getElementsBySelector('.required textarea');
	for (j = 0; j < elements.length; j++) {
	    if (trimLeading(elements[j].value) == "") {
			requiredFields.push(elements[j].title);
			isValid = false;		
		}
	}
	
	// selection boxes
	elements = document.getElementsBySelector('.required select');
	for (j = 0; j < elements.length; j++) {
	    if (elements[j].options[elements[j].selectedIndex].value == "null") {
			requiredFields.push(elements[j].title);
			isValid = false;		
		}
	}	
	
	// check email addresses, don't alert if blank
	elements = document.getElementsBySelector('.email input');
	var pattern = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/;
	
	for (j = 0; j < elements.length; j++) {
		if (pattern.exec(elements[j].value) == null && trimLeading(elements[j].value) != "") {
			errorFields.push(elements[j].alt);
			isValid = false;		
		}
	}	
	
	// custom validation
	customValidate();
		
	// display message
	if (isValid == false) {
		//if (requiredString != "") {
		//	requiredString = "Please provide the following fields:\n" + requiredString;
		//}
				
		isChecking = true;		
				
		// window.alert(requiredString + validationString);
		var strHTML = '';
		var strTemp = '';
		
		strHTML += '<div id=\"alert-content-container\">';
		strHTML += '<h2>Please check the following items</h2>';
		strHTML += '<ul>';
		
		// elements are in reverse order
		requiredFields.reverse();
		errorFields.reverse();
		
		if (requiredFields.length > 0) {
			requiredFields.reverse();
			strHTML += '<li class=\"warning\"><b>required:</b> ' + replace(requiredFields.toString(), ',', '&#44\; ') + '</li>';		
		}
		if (errorFields.length > 0) {
			errorFields.reverse();
			strHTML += '<li class=\"warning\"><b>check:</b> ' + replace(errorFields.toString(), ',', '&#44\; ') + '</li>';		
		}

		strHTML += '</ul>';
		strHTML += '</div>';
		
		domInner('alert-content', strHTML);
		
	} else {
		// divClear('alert-content');
		
		var strHTML = '';		
		
		// only show this message if has failed once
		if (isChecking == true) {
			strHTML += '<div id=\"alert-content-container\">';
			strHTML += '<h2>Thank you - your changes have been checked</h2>';
			strHTML += '<ul>';
			strHTML += '<li class=\"ok\"><b>submit:</b> <a href=\"javascript:document.forms[0].submit();\">click this link or the submit button at the bottom of the form</a></li>';
			strHTML += '</ul>';
			strHTML += '</div>';			
		}
		
		domInner('alert-content', strHTML);		
	}
}

function trimLeading(inputString) {
  inputString = inputString.replace( /^\s+/g, "" );// strip leading
  return inputString.replace( /\s+$/g, "" );// strip trailing
}

function customerService() {
	if (isSubmit == false && isChanged == true) {
		confirmExit = confirm("Customer service: you appear to have partly filled it out or changed fields on this form. Please call " + customerServicePhone + " or email " + customerServiceEmail + " if you need assistance. Click OK if you are sure you wish to leave this form?");
		
		// return false, to cancel unload is blocked by browsers
		// ie: auto return pages
		// mozilla: give alert
		
		if(!confirmExit)
		{
			if (checkIt('msie')) {
				location.href = "/resources/tools/return.html";			
			} else {
				window.alert("When the next page loads just click the Back button on your browser and you will be able to return to this form and finish filling it out. Alternatively please call " + customerServicePhone + " or email " + customerServiceEmail + ".");
			}
		}
	}
}

// **********************************
// Calendar: popup month
// **********************************

function calendarPopup(fieldId) {
	var inputDate = document.getElementById(fieldId).value;
	
	document.getElementById('ca-' + fieldId).innerHTML = '<div class="select"><h3>Loading...</h3></div>'
	
	document.getElementById('ca-' + fieldId).innerHTML = document.getElementById('calendarMonth').innerHTML;
	
	calendarRender(fieldId, inputDate);
}

function calendarRender(fieldId, inputDate) {
	// add options and behavious
	var arrayMonth = new Array('January','February','March','April','May','June','July','August','September','October','November','December');			
	var arrayDay = new Array('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
	
	var date;
	var inputYear, inputMonth, inputDay;
	var calendarYear, calendarMonth, calendarDay;

	var pattern = /^([0-9]{4})-([0-9]{2})-([0-9]{2})$/;
	
	// get selection date via query string or today
	if (inputDate == null) {
		date = new Date();		
	} else {
		if (inputDate.match(pattern)) {
			var matchGroups = inputDate.match(pattern);
			
			inputYear = parseFloat(matchGroups[1]);
			inputMonth = parseFloat(matchGroups[2]) - 1;
			inputDay = parseFloat(matchGroups[3]);
			
			date = new Date(inputYear,inputMonth,inputDay);
		} else {
			date = new Date();
		}					
	}
	
	calendarYear = date.getFullYear();
	calendarMonth = date.getMonth();
	calendarDay = date.getDate();
	
	// set titles
	calendarSelector(fieldId, 'calendarMonth').innerHTML = arrayMonth[calendarMonth];
	calendarSelector(fieldId, 'calendarYear').innerHTML = calendarYear;
	
	// set next and previous links
	var previousYear, previousMonth;
	var nextYear, nextMonth;
	
	nextYear = calendarYear;
	previousYear = calendarYear;
	nextMonth = calendarMonth + 1;
	previousMonth = calendarMonth - 1;			
	
	if (previousMonth == -1) {
		previousMonth = 11;
		previousYear = calendarYear - 1;	
	}
	
	if (nextMonth == 12) {
		nextMonth = 0;
		nextYear = calendarYear + 1;	
	}			
	
	calendarSelector(fieldId, 'calendarPrevious').innerHTML = '<a href="javascript:;" onclick="calendarSkip(\'' + fieldId + '\',\'' + previousYear + '-' + integerPad(previousMonth + 1, 2) + '-01\')" class="previous"><span>previous</span></a>';
	calendarSelector(fieldId, 'calendarNext').innerHTML = '<a href="javascript:;" onclick="calendarSkip(\'' + fieldId + '\',\'' + nextYear + '-' + integerPad(nextMonth + 1, 2) + '-01\')" class="next"><span>next</span></a>';
	calendarSelector(fieldId, 'calendarClose').innerHTML = '<a href="javascript:;" onclick="calendarClose(\'' + fieldId + '\')" class="close"><span>close</span></a>';
	
	var calendarStart, calendarTotal;
	
	// how many days in month
	switch (calendarMonth) {
		case 8, 3, 5, 10:
			calendarTotal = 30;					
			break;
		case 1:
			calendarTotal = 28;
			break;
		default:
			calendarTotal = 31;					
	}
	
	// what is day of first day of month
	var startMonth = new Date(calendarYear,calendarMonth,1);
	
	calendarStart = startMonth.getDay() + 1;
	
	var i;

	// clear current days
	for (i = 1; i <= 42; i++) {
		var cellId = 'd' + i;

		calendarSelector(fieldId, cellId).innerHTML = '';
	}				
	
	// insert days into boxes
	for (i = 1; i <= calendarTotal; i++) {
		var cellId = 'd' + (i + calendarStart);
		
		calendarSelector(fieldId, cellId).innerHTML = '<a href="javascript:;" onclick="calendarSelect(\'' + fieldId + '\',\'' + calendarYear + '-' + integerPad(calendarMonth + 1, 2) + '-' + integerPad(i,2) + '\')">' + i + '</a>';

		// highlight today, not yet activated
		if (1 == 2) {
			calendarSelector(fieldId, cellId).innerHTML = '<b>' + calendarSelector(fieldId, cellId).innerHTML + '</b>';
		}
	}		
}

function calendarSelector(fieldId, className) {
	// selector setup
	var selector = '#ca-' + fieldId + ' .' + className;	

	return document.getElementsBySelector(selector)[0]
}

function calendarSkip(fieldId, selection) {
	calendarRender(fieldId, selection);
}	

function calendarClear(fieldId) {
	document.getElementById('ca-' + fieldId).innerHTML = '';
}

function calendarClose(fieldId) {
	calendarClear(fieldId);
}	

function calendarSelect(fieldId, selection) {
	document.getElementById(fieldId).value = selection;
	calendarClear(fieldId);
}



