/**
 * @author Nathaniel Robinson
 */
var isNN = (navigator.appName.indexOf("Netscape")!=-1);

function autotab(input,len, e) {
  var keyCode = (isNN) ? e.which : e.keyCode; 
  var filter = (isNN) ? [0,8,9] : [0,8,9,16,17,18,37,38,39,40,46];
  if(input.value.length >= len && !containsElement(filter,keyCode)) {
    input.value = input.value.slice(0, len);
    input.form[(getIndex(input)+1) % input.form.length].focus();
  }

  function containsElement(arr, ele) {
    var found = false, index = 0;
    while(!found && index < arr.length)
    if(arr[index] == ele)
    found = true;
    else
    index++;
    return found;
  }

  function getIndex(input) {
    var index = -1, i = 0, found = false;
    while (i < input.form.length && index == -1)
    if (input.form[i] == input)index = i;
    else i++;
    return index;
  }
  return true;
}

function doFormValidation()
{
	this.mergeQuestions();
}

function validatefields()
{
	var test = doRequirements();
	if (test) { } else { return false; }

	try
	{
		hideBranch('firstNameError');
		hideBranch('lastNameError');
		hideBranch('cityError');
		hideBranch('stateError');
		hideBranch('locationZipcodeError');
		hideBranch('phoneError');
		hideBranch('altPhoneError');
		hideBranch('noContactError');
		hideBranch('noEmailError');
		hideBranch('noCaseDescription');
		hideBranch('confirmationError');
		
			// name
		if(document.forms.genericform.firstname.value=="")
		{showBranch('firstNameError');	return false;}
		else if(document.forms.genericform.lastname.value=="")
		{  showBranch('lastNameError'); return false;}
		
			// location
		if(document.forms.genericform.city.value=="")
		{showBranch('cityError');	return false;}
		
		if(document.forms.genericform.statename.value=="0")
		{showBranch('stateError');	return false;}
		
		if( document.forms.genericform.zipcode.value=="")
		{
			showBranch('locationZipcodeError'); return false;
		}
		else if (document.forms.genericform.zipcode.value.length<5)
		{
			showBranch('locationZipcodeError'); return false;
		}
		else if (document.forms.genericform.zipcode.value.length>5)
		{
			showBranch('locationZipcodeError'); return false;
		}
		
		// is there contact info?
		if ( document.forms.genericform.email.value=="" && 
				   (document.forms.genericform.phone1.value=="" && 
					document.forms.genericform.phone2.value=="" && 
					document.forms.genericform.phone3.value=="")
				)
		{
			showBranch('noContactError'); return false;
		}
		
		
		
		if (!document.forms.genericform.phone1.value=="")
		{
			if (document.forms.genericform.phone1.value.length<3)
			{
				showBranch('phoneError'); 
				return false;
			}
		}
		else 
		{
			showBranch('phoneError'); 
			return false;
		}
		
		if (!document.forms.genericform.phone2.value=="")
		{
			if (document.forms.genericform.phone2.value.length<3)
			{
				showBranch('phoneError'); 
				return false;
			}
		}
		else 
		{
			showBranch('phoneError'); 
			return false;
		}
		
		if (!document.forms.genericform.phone3.value=="")
		{
			if (document.forms.genericform.phone3.value.length<4)
			{
				showBranch('phoneError'); 
				return false;
			}
		}
		else 
		{
			showBranch('phoneError'); 
			return false;
		}

/*		
		if (!document.forms.genericform.altphone1.value=="")
		{
			if (document.forms.genericform.altphone1.value.length<3)
			{
				showBranch('altPhoneError'); 
				return false;
			}
		}
		else 
		{
			showBranch('altPhoneError'); 
			return false;
		}
		
		if (!document.forms.genericform.altphone2.value=="")
		{
			if (document.forms.genericform.altphone2.value.length<3)
			{
				showBranch('altPhoneError'); 
				return false;
			}
		}
		else 
		{
			showBranch('altPhoneError'); 
			return false;
		}
		
		if (!document.forms.genericform.altphone3.value=="")
		{
			if (document.forms.genericform.altphone3.value.length<4)
			{
				showBranch('altPhoneError'); 
				return false;
			}
		}
		else 
		{
			showBranch('altPhoneError'); 
			return false;
		}
		*/
		
		if (!document.forms.genericform.email.value=="")
		{
			if (document.forms.genericform.email.value.indexOf('@')<0)
			{
				showBranch('noEmailError'); 
				return false;
			}		
		}
			
		if(document.forms.genericform.casedescription.value=="")
		{ showBranch('noCaseDescription'); return false;}
	}	
	catch (E) 
	{
		alert(E);
		return false;
	}

	return doFormValidation();
}

function validateFieldNotEmpty(field, name) {

    if(field.value == "") 
	{
        // alert("Please fill out the " + name + " field.");
        // field.focus();
        return false;
    }
    else {
        return true;
    }
} // end validateFieldNotEmpty

function showBranch(branch){
	var objBranch = document.getElementById(branch).style;
	if(objBranch.display=="block") {
		objBranch.display="none";
	}
	else
	{
		objBranch.display="block";
	}
}

function hideBranch(branch)
{
	var objBranch = document.getElementById(branch).style;
		objBranch.display="none";
}

function setFocus(branch)
{
	var objBranch = document.getElementById(branch);
	objBranch.focus();
}

// Handles jumping state menu.
function MM_jumpMenu(targ,selObj,restore){ //v3.0
  eval(targ+".location='"+selObj.options[selObj.selectedIndex].value+"'");
  if (restore) selObj.selectedIndex=0;
}

function doFormValidation()
{
	this.mergeQuestions();
}

function mergeQuestions()
{
	var theForm = document.genericform;
	var combinedQuestions = "";
	var question = "";
	var answer = "";
	
try
{
   for(i=0; i<theForm.elements.length; i++)
   {  
	
	   var alertText = "";
	   
	   var elementName = theForm.elements[i].name;
	   var elementType = theForm.elements[i].type;
	   var questionCheck = elementName.indexOf("question");
	   var answerCheck   = elementName.indexOf("answer");
  
	   if (questionCheck>-1)
	   {
		question = theForm.elements[i].value;	
		combinedQuestions  += question + "<br>";
		//alert (question);		
	   }
	   else if (answerCheck>-1)
	   {
		  // alert(elementName + " " +  elementType );
		  if(elementType == "text" || 
			 elementType == "textarea")
		  {
				answer = theForm.elements[i].value;
				combinedQuestions  += answer + "<br><br>";
				answer = "";
		  }
		  else if(elementType == "checkbox")
		  {
			  var cbAnswer = "";
			  if ( theForm.elements[i].checked ) 
			  {
				cbAnswer = theForm.elements[i].value;
 			  }
			
			  // if the next element is a checkbox then there are more possible answers.
			  if  ( theForm.elements[i+1].name.indexOf("answer") > -1  )
			  {
				answer += cbAnswer + " ";
			  }
			  else
			  {
			     answer += cbAnswer;
			     combinedQuestions  += answer + "<br><br>";
			     answer = "";
			  }

		  }
		  else if(elementType == "select-one")
		  {
			  var soAnswer = "";
			  soAnswer = theForm.elements[i].options[theForm.elements[i].selectedIndex].text;
			  
			  // if the next element is select-one then is the second part (e.g. Mon Year)..
			  if  ( theForm.elements[i+1].name.indexOf("answer") > -1  )
			  {
				answer += soAnswer + " ";
			  }
			  else
			  {
			     answer += soAnswer;
			     combinedQuestions  += answer + "<br><br>";
			     answer = "";
			  }
		  }
		  else if (elementType == "radio")
		  {
			  radioObject = theForm[theForm.elements[i].name];
			  for (var x=0; x < radioObject.length; x++)
			  {
					if (radioObject[x].checked)
					{
						answer = radioObject[x].value;		
						combinedQuestions += answer + "<br><br>";
						answer = "";
					}

			  }
		  
			  i = i + radioObject.length - 1;
		  }

		//alert( combinedQuestions );
	   }

	
   }
 	
	if (combinedQuestions.length>0) {
		var casedetails = theForm["casedescription"].value;
		casedetails += "<br><br> \n\r <B>Questionnaire Answers:</b><br> \r\n" +  combinedQuestions; 
		theForm["casedescription"].value = casedetails;
	}
} catch (E) 
{
	alert(E);
	return false;
}
	return true;
}

// return the value of the radio button that is checked
// return an empty string if none are checked, or
// there are no radio buttons
function getCheckedValue(radioObj) {

	if(!radioObj)
		return "";
	var radioLength = radioObj.length;
	if(radioLength == undefined)
		if(radioObj.checked)
			return radioObj.value;
		else
			return "";
	for(var i = 0; i < radioLength; i++) {
		if(radioObj[i].checked) {
			return radioObj[i].value;
		}
	}
	return "";
}