//
//	Proposals form validation and functionality
//

function isOtherSessionType(sTB){	// var sessionTypeBox (sTB)
	display		= sTB.options[sTB.options.selectedIndex].value=='Other' ? 'block' : 'none';
	required	= sTB.options[sTB.options.selectedIndex].value=='Other' ? 'required' : null;
	oST			= document.getElementById('otherSessionType')
	oST.style.display		= display;
	setRequired(oST,required);	// set required	
}

function displayPanelistForm(nPB){ // var numPanelistsBox (nPB)
	numPanels		= parseInt(nPB.options[nPB.options.selectedIndex].value) - 1;
	panelEls		= document.getElementById('proposal-presenters').getElementsByTagName('div');
	for(p=0;p<panelEls.length;p+=2){
		// display panelist row
		display						= (p<=numPanels) ? 'block' : 'none';
		required					= (p<=numPanels) ? 'true' : null;
		panelEls[p].style.display	= display;
		setRequired(panelEls[p],required);

		panelEls[p+1].style.display	= display;		// set row's right column display="block"; for IE Win
		// set visibility for panelist row's right column
		visibility						= (p+1<=numPanels) ? 'visible' : 'hidden';
		required						= (p+1<=numPanels) ? 'true' : null;
		panelEls[p+1].style.visibility	= visibility;
		setRequired(panelEls[p+1],required);
	}
}

function setRequired(el,val){	// el is container element
	fEls			= el.getElementsByTagName('input');
	for(fe=0;fe<fEls.length;fe++){
		if(val) {
			fEls[fe].setAttribute('required',val);
			if (fEls[fe].name.match(/phone/)) {
				fEls[fe].setAttribute('validation','integer');
			}
		} else {
			fEls[fe].removeAttribute('required');
			if (fEls[fe].name.match(/phone/)) {
				fEls[fe].removeAttribute('validation');
			}
		}
	}
}

function checkLength(fEl,len){
	if(fEl.value.length > len){
		alert('Please make sure that ' + fEl.getAttribute('title') + ' is no longer than ' + len + ' characters.');
	}
}

function checkGenericForm(f) {
	retVal				= true;

	for(i=0;i<f.elements.length;i++){
		required		= (f.elements[i].getAttribute('required')!=null && f.elements[i].value.length<1) ? f.elements[i].getAttribute('title') : false;
		if(required!=false) {
			f.elements[i].focus();
			/* if (f.elements[i].tagName.indexOf('select')==-1)	{
				f.elements[i].select();
			} */
			alert('Please enter ' + required + '.');
			retVal 		= false;
			break;
		}
		
		validation		= (f.elements[i].getAttribute('validation')!=null && f.elements[i].value.length>0) ? f.elements[i].getAttribute('validation') : false;
		if(validation!=false){
			fieldTitle	= f.elements[i].getAttribute('title');

			switch (validation) {
				case 'integer':
					if(f.elements[i].value.match(/[^0-9]/)) {
						alert('Please make sure ' + fieldTitle + ' is numeric.');
						f.elements[i].focus();
						f.elements[i].select();
						retVal = false;
						break;
					}
				break;
			
			}
			if(retVal==false) break;
		}

	}
	return retVal;
}

//email validation script
function emailCheck(emailStr) {

	var specialChars      = "\\(\\)<>@,;:\\$" + "\\\\" + '\"' + "\\.\\[\\]";
	var validChars        = "[^\\s" + specialChars + "]";
	var quotedUser        = '("[^"]*")';
	var atom              = validChars + '+';
	var word              = "(" + atom + "|" + quotedUser + ")";
	var userPat           = new RegExp("^" + word + "(\\." + word + ")*$");

	//begin checking address
	var em = emailStr.split('@');
	if(em.length > 2){
    alert('Please check your Email Address -- you have too many \"@\" characters in it.');
		return false;
  }

	var matchArray        = emailStr.match(/^([^@]+)@([-\.\w\[\]]+)$/);

	if (matchArray == null) {
		if(emailStr.indexOf('@') == -1){
			alert('Please check your Email Address -- you are missing the \"@\" character.');
			return false;
		}
		else{
  	  if(em[0].search(userPat) == -1){
 	  		alert('Please check your Email Address -- your username (what\'s before the \"@\") is missing or invalid.');
				return false;
			}
			else{
				alert('Please check your Email Address -- your domain (what\'s after the \"@\") is missing or invalid.');
				return false;
			}
		}
	}

	user                  = new String(matchArray[1]);
	domain                = new String(matchArray[2]);

	if (user.search(userPat) == -1) {
    alert('Please check your Email Address -- your username (what\'s before the \"@\") is missing or invalid.');
		return false;
	}

	// verify the domain
	re1 = /^((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
	
	if(domain.search(re1) == -1){
    alert('Please check your Email Address -- your domain (what\'s after the \"@\") is missing or invalid.');
		return false;
  }
	
	// If we've gotten this far, everything's valid!
	return true;
}


function validate(form){
	valid	= checkGenericForm(form) 
			//&& emailCheck(form.info_email.value);
			&& emailCheck(form.sender.value);

	if(valid)	replaceSemicolons(form);	// address semicolon delimiter bug
	return valid;
}

function replaceSemicolons(form) {
	fEls	= form.elements;
	
	for(fe=0;fe<fEls.length;fe++){
		if(fEls[fe].value.indexOf(';')!=-1){
			fEls[fe].value	= fEls[fe].value.replace(/;/gi,'--');
		}
	}
}
