function validate_required(field,alerttxt)
{
  with (field)
  {
     if (value==null||value=="")
       {alert(alerttxt);return false}
     else {return true}
  }
}

function scrollToElement(element){

  var elementX = 0;
  var elementY = 0;
              
  while(element != null){
    elementX += element.offsetLeft;
    elementY += element.offsetTop;
    element = element.offsetParent;
  }
                        		      
 window.scrollTo(elementX,elementY);
}

function scrollToContactInfo()  {
   scrollToElement(document.getElementById('contact-info-section'));
}

function scrollToComputerServices()  {
   scrollToElement(document.getElementById('computer-services-section'));
}

function scrollToConversionServices()  {
   scrollToElement(document.getElementById('digital-conversion-services-section'));
}

function scrollToMiscServices()  {
   scrollToElement(document.getElementById('misc-services-section'));
}

function showErrorBorder(element) {
	if (element == null) {
		return false;
	}
	
	element.style.border='2px solid red';
}

function hideErrorBorder(element) {
	if (element == null) {
		return false;
	}
	
	element.style.border='none';
}

/* Validate the contact information */
function validateContactInfo(thisform) {
with (thisform)
{

if (validate_required(realname,"Name must be specified!")==false) {
   realname.focus();
   showErrorBorder(realname);
   scrollToContactInfo();
   return false;
} else {
	hideErrorBorder(realname);
}

if (validate_required(email,"E-mail address must be specified!")==false) {
   email.focus();
   showErrorBorder(email);   
   scrollToContactInfo();
   return false;
} else {
	hideErrorBorder(email);
}

if (contact[0].checked != true && contact[1].checked != true) {
   alert("Please indicate your preferred method of contacting you!");
   contact[0].focus();
   showErrorBorder(document.getElementById('phonePref'));
   scrollToContactInfo();   
   return false;
} else {
	hideErrorBorder(document.getElementById('phonePref'));
}   

if (contact[0].checked == true) {
   if (validate_required(phone,"Please specify your phone number!")==false) {
      phone.focus();
      showErrorBorder(phone);
      scrollToContactInfo(); 
      return false;
   } else {
   	hideErrorBorder(phone);
   }
   
	if (phonePreference[0].checked == false &&
   	 phonePreference[1].checked == false &&
	    phonePreference[2].checked == false) {
	    alert("Please indicate when you would prefer us to call!");
	    element = document.getElementById('callPref');
	    element.focus();
       showErrorBorder(element);
	    scrollToContactInfo();
   	 return false;
	} else {
		 hideErrorBorder(document.getElementById('callPref'));
	}
}

if (phonePreference[0].checked == true ||
    phonePreference[1].checked == true ||
    phonePreference[2].checked == true) {
   if (validate_required(phone,"Please specify your phone number!")==false) {
      phone.focus();
      showErrorBorder(phone);
      scrollToContactInfo();
      return false;
   } else {
   	hideErrorBorder(phone);
   }
}

if (computer.checked == false && 
    conversion.checked == false && 
    miscServices.checked == false) {
   alert("Please chose one or more services offered!");
   showErrorBorder(document.getElementById('services-list'));
   computer.focus();
   scrollToContactInfo();   
   return false;
} else {
	hideErrorBorder(document.getElementById('services-list'));
}

} /* End of "with" statement */
} /* End of contact info validation */

/* Validate the computer services info */
function validateComputerServices(thisform) {
	with (thisform) {
		if (computer.checked==false) {
			return true;
		}
		
		if (validate_required(OS,"Operating System must be specified!")==false) {
   		OS.focus();
   		showErrorBorder(OS);
   		scrollToComputerServices();
   		return false;
		} else {
			hideErrorBorder(OS);
		}
		
		if (repairType[0].checked == false && repairType[1].checked == false) {
			alert("Please indicate the type of repair service needed!");
			element = document.getElementById('repairType');
			element.focus();
			showErrorBorder(element);
	      scrollToComputerServices();
	      return false;
		} else {
			hideErrorBorder(document.getElementById('repairType'));
		}
		
		if (validate_required(problemDescription,"Problem description must be specified!")==false) {
   		problemDescription.focus();
   		showErrorBorder(problemDescription);
   		scrollToComputerServices();
   		return false;
		} else {
			hideErrorBorder(problemDescription);
		}
				
	}
	
	return true;
} /* End of computer services info validation */

/* Validate the digital conversion services info */
function validateDigitalConversionServices(thisform) {
	with (thisform) {
		if (conversion.checked==false) {
			return true;
		}
		
		if (analogAudio.checked == false && scanPhoto.checked == false &&
			 slideScan.checked == false && documentScan.checked == false &&
			 digitalAudioConvert.checked == false && anyMediaConversion.checked == false) {
			 alert('Please choose at least one conversion service!');
			 scrollToConversionServices();
			 return false;
		}
		
		if (analogAudio.checked == true) {
		   if (audioConversion[0].checked == false && audioConversion[1].checked == false) {
		      alert('Please indicate if restoration is needed as well!');
		      showErrorBorder(document.getElementById('audioConversion'));
		      audioConversion[0].focus();
		      scrollToConversionServices();
		      return false;
		   } else {
		   	hideErrorBorder(document.getElementById('audioConversion'));
		   }
		   
			if (validate_required(numOfLPs,"Please specify the number of LPs or tapes to convert!")==false) {
				numOfLPs.focus();
				showErrorBorder(numOfLPs);
		      scrollToConversionServices();				
				return false;
			} else {
				hideErrorBorder(numOfLPs);
			}
		}
		
		if (scanPhoto.checked == true) {
			   if (photoScan[0].checked == false && photoScan[1].checked == false) {
			      alert('Please indicate if restoration is needed as well!');
		   	   showErrorBorder(document.getElementById('photoScan'));
		      	photoScan[0].focus();
			      scrollToConversionServices();
			      return false;
			   } else {
		   		hideErrorBorder(document.getElementById('photoScan'));
		   	}
		   
			if (validate_required(numOfPhotos,"Please specify the number of photos to scan!")==false) {
				numOfPhotos.focus();
				showErrorBorder(numOfPhotos);
		      scrollToConversionServices();				
				return false;
			} else {
				hideErrorBorder(numOfPhotos);
			} 			 
		}
		
		if (slideScan.checked == true) {
			if (validate_required(numOfScans,"Please specify the number of slides to scan!")==false) {
				numOfScans.focus();
				showErrorBorder(numOfScans);
		      scrollToConversionServices();				
				return false;
			} else {
				hideErrorBorder(numOfScans);
			} 			 
		}
		
		if (documentScan.checked == true) {
			if (validate_required(numOfDocuments,"Please specify the number of documents to scan!")==false) {
				numOfDocuments.focus();
				showErrorBorder(numOfDocuments);
		      scrollToConversionServices();				
				return false;
			} else {
				hideErrorBorder(numOfDocuments);
			}
			
			if (validate_required(sizesOfDocuments,"Please specify the size(s) of the documents to scan!")==false) {
				sizesOfDocuments.focus();
				showErrorBorder(sizesOfDocuments);
		      scrollToConversionServices();				
				return false;
			} else {
				hideErrorBorder(sizesOfDocuments);
			}
		}
		
		if (digitalAudioConvert.checked == true) {
			if (validate_required(numOfDigitalFiles,"Please specify the number of digital files to convert!")==false) {
				numOfDigitalFiles.focus();
				showErrorBorder(numOfDigitalFiles);
	      	scrollToConversionServices();				
				return false;
			} else {
				hideErrorBorder(numOfDigitalFiles);
			} 			 
		}			 			 
	}
	
	return true;
} /* End of digital conversion services info validation */

/* Validate the misc services info */
function validateMiscServices(thisform) {
	with (thisform) {
		if (miscServices.checked==false) {
			return true;
		}
		
		if (wordResume.checked == false && bitmapLogo.checked == false &&
			 soundEngineering.checked == false && copyright.checked == false &&
			 typing.checked == false) {
			 alert('Please choose at least one service!');
			 scrollToMiscServices();
			 return false;
		}
		
		if (wordResume.checked == true) {
		   if (coverLetter[0].checked == false && coverLetter[1].checked == false) {
		      alert('Please indicate if a cover letter is needed!');
		      showErrorBorder(document.getElementById('coverLetter'));
		      coverLetter[0].focus();
		      scrollToMiscServices();
		      return false;
		   } else {
		   	hideErrorBorder(document.getElementById('coverLetter'));
		   }
		}
		
		if (bitmapLogo.checked == true) {
			if (validate_required(logoDesc,"Please enter a description of the logo needed!")==false) {
				logoDesc.focus();
				showErrorBorder(logoDesc);
	      	scrollToMiscServices();				
				return false;
			} else {
				hideErrorBorder(logoDesc);
			} 			 
		}
		
		if (soundEngineering.checked == true) {
			if (validate_required(soundDesc,"Please enter a description of the sound engineering work needed!")==false) {
				soundDesc.focus();
				showErrorBorder(soundDesc);
	      	scrollToMiscServices();				
				return false;
			} else {
				hideErrorBorder(soundDesc);
			} 			 
		}
		
		if (copyright.checked == true) {
			if (validate_required(copyrightDesc,"Please enter a description of the copyright filing needed!")==false) {
				copyrightDesc.focus();
				showErrorBorder(copyrightDesc);
	      	scrollToMiscServices();				
				return false;
			} else {
				hideErrorBorder(copyrightDesc);
			} 			 
		}
		
		if (typing.checked == true) {
			if (validate_required(typingDesc,"Please enter a description of the typing services needed!")==false) {
				typingDesc.focus();
				showErrorBorder(typingDesc);
	      	scrollToMiscServices();				
				return false;
			} else {
				hideErrorBorder(typingDesc);
			} 			 
		}
	}
	
	return true;
} /* End of misc services info validation */

/* Main form validation function */
function validate_form(thisform)
{ 
  if (validateContactInfo(thisform)==false) {
     return false;
  }
  
  if (validateComputerServices(thisform)==false) {
     return false;
  }
  
  if (validateDigitalConversionServices(thisform)==false) {
     return false;
  }

  if (validateMiscServices(thisform)==false) {
     return false;
  }
}



