// Author: Evelyn Richter
// Date: Spring 2008
// Javascript for submission01.cfm
// checks form entries & formats the input from the text areas and select fields

// Modifications:
// Author: Evelyn Richter
// Date: 07/16/2008
// What: Regexp in image checking (see comment on line 139/140)

// GLOBAL VARIABLES
var numButtonClicks = 0; 	// counts how often button to add ingredients was clicked

// function to check the entire form
function checkForm(form){
	errors = new Array(); 		// array for error messages
	errors[0] = "Please enter or select the following information:\n";
	var i = 1;					// counter for array elements to be added
	
	// LASTNAME
	if (!form.elements['lastname'].value.match(/^\w+/g)){
		document.getElementById("lastname").style.color = "red";
		errors[i] = "\t- your last name";
		i++;
	}
	else {
	 	document.getElementById("lastname").style.color = "#000000";
	}
	
	// EMAILID: checks whether entered AND valid
	if (!form.elements['email'].value.match(/^\S+@\S+\.\w{2,4}$/g)){
		document.getElementById("email").style.color = "red";
		errors[i] = "\t- a valid email address";
		i++;
	}
	else {
		document.getElementById("email").style.color = "#000000";
	}
	
	// RECIPE TITLE
	if (!form.elements['title'].value.match(/^\w+/g)){
		document.getElementById("title").style.color = "red";
		errors[i] = "\t- a title for your recipe";
		i++;
	}
	else {
		document.getElementById("title").style.color = "#000000";
	}
	
	// SERVING SIZE
	if (!form.elements['serving_size'].value.match(/^\w+/g)){
		document.getElementById("serving_size").style.color = "red";
		errors[i] = "\t- the number of servings";
		i++;
	}
	else {
		document.getElementById("serving_size").style.color = "#000000";
	}
	
	// CATEGORY: whether selected
	if (form.elements['categories'].value == "none"){
		document.getElementById("categories").style.color = "red";
		errors[i] = "\t- a recipe category";
		i++;
	}
	else {
		document.getElementById("categories").style.color = "#000000";
	}

	// MEASURING UNITS: whether one checked
	if (!form.elements['measurement'][0].checked && !form.elements['measurement'][1].checked){
		document.getElementById("measurement").style.color = "red";
		errors[i] = "\t- the measurement system";
		i++;
	}
	else {
		document.getElementById("measurement").style.color = "#000000";
	}
	
	// INGREDIENTS: there has to be at least 1
	if (!form.elements['ingred1'].value.match(/^\w+/g)){
		document.getElementById("ingredient").style.color = "red";
		errors[i] = "\t- at least one ingredient";
		i++;
	}
	else {
		document.getElementById("ingredient").style.color = "#000000";
	}
	
	// COOKING INSTRUCTIONS
	if (!form.elements['instructions'].value.match(/^\w+/g)){
		document.getElementById("instructions").style.color = "red";
		errors[i] = "\t- cooking instructions";
		i++;
	}
	else {
		document.getElementById("instructions").style.color = "#000000";
	}
	
	// LENGTH OF COOKING INSTRUCTIONS
	if(form.elements['instructions'].value.length >= 3999){
		document.getElementById("instructions").style.color = "red";
		errors[i] = "\t- cooking instructions with less than 4000 characters";
		i++;
	}
	else {
		document.getElementById("instructions").style.color = "#000000";
	}
	
	// LENGTH OF FUN STORY
	if(form.elements['fun_story'].value.length >= 3999){
		document.getElementById("fun_story").style.color = "red";
		errors[i] = "\t- a story with less than 4000 characters";
		i++;
	}
	else {
		document.getElementById("fun_story").style.color = "#000000";
	}
	
	// CAPTCHA: checks whether captcha has value, not whether captcha value is correct!	
	if (!form.elements['capvar'].value.match(/^\w+$/g)){
		document.getElementById("capvar").style.color = "red";
		errors[i] = "\t- the verification code";
		i++;
	}
	else {
		document.getElementById("capvar").style.color = "#000000";
	}
	
	// IMAGE: check extension
	if (form.elements['image'].value.match(/^\w+/g) && !form.elements['image'].value.match(/.gif$|.jpg$/i)){ 
		document.getElementById("image").style.color = "red";
		errors[i] = "\t- a .jpg or .gif image file";
		i++;
	}
	else {
		var image = form.elements['image'].value;
		var img_ending	= "";
		if (form.elements['image'].value.match(/\w+/g)){
			// Evelyn Richter changed regexp above because file path begins with a /, 07/16/2008
			if (image.match(/.jpg$/gi)){
				img_ending = "jpg";
			}
			else {
				img_ending = "gif";
			}
		}
		form.elements['img_ending'].value = img_ending;

		document.getElementById("image").style.color = "#000000";
	}
	
	if (errors.length != 1){
		var message = errors.join("\n");
		alert(message);
		window.scroll(0,0);
		return false;
	}
	else {
		instructions_lb(form);
		joinIngred(form);
		fun_story(form);
		additions(form);
		return true;
	}

}


// expand ingredients section by 6 fields twice, after second time disabled the button
function expandIngred(button){
	numButtonClicks++;
	if (numButtonClicks == 2){
		button.disabled = true;
		var div02 = document.getElementById("extra_ingred02");
		div02.style.display = "block";
	}
	else {
		var div01 = document.getElementById("extra_ingred01");
		div01.style.display = "block";
	}
}

// function to join amounts and ingredients
function joinIngred(form){
	// set k according to how many amount fields are actually displayed
	var k = 4;
	if (numButtonClicks == 1){
		k = 12;
	}
	else if (numButtonClicks == 2){
		k = 20;
	}
	
	// save all amounts & ingredients in an array
	ingred_array = new Array();
	for (var i = 0; i < k; i++){
		var m = i + 1;
		if (form.elements['ingred' + m].value.match(/^\w+/g)){
			var ingred = form.elements['ingred' + m].value;
			if (form.elements['amount' + m].value.match(/^\w+/g)){
				var amount = form.elements['amount' + m].value;
				ingred_array[i] =  amount + " " + ingred;
			}
			else {
				ingred_array[i] = ingred;
			}
		}
	}
	
	// join array and save value in hidden field
	var ingred_string = ingred_array.join("/l/");
	document.getElementById('ingred_string').value = ingred_string;
	return true;
}

// function to send instructions with line breaks
function instructions_lb(form){
	var instr = form.elements['instructions'].value;
	if (instr.match(/\n/gi)){
		var result = instr.replace(/\n/gi, "/l/");
		document.getElementById('instructions_lb').value = result;
	}
	else {
		document.getElementById('instructions_lb').value = instr;
	}	
	return true;
}			

// function to send fun story with line breaks
function fun_story(form){
	var story = form.elements['fun_story'].value;
	if (story.match(/\n/gi)){
		var res = story.replace(/\n/gi, "/l/");
		document.getElementById('fun_story_lb').value = res;
	}
	else {
		document.getElementById('fun_story_lb').value = story;
	}	
	return true;
}	

// function to additions with whitespace and commas
function additions(form){
	add = new Array();
	var n = 0;
	for (var l = 1; l < 8; l++){
		if (form.elements['addition'][l].selected){
			add[n] = form.elements['addition'][l].value;
			if (add[n].match(/_/gi)){
				add[n] = add[n].replace(/_/gi, " ");
			}
			n++;
		}
	}
	var addition_str = add.join(", ");
	document.getElementById('addition_str').value = addition_str;
	return true;
}	
