function left(str, n) {
	if (n <= 0)
	    return "";
	else if (n > String(str).length)
	    return str;
	else
	    return String(str).substring(0,n);
}

function right(str, n) {
    if (n <= 0)
       return "";
    else if (n > String(str).length)
       return str;
    else {
       var iLen = String(str).length;
       return String(str).substring(iLen, iLen - n);
    }
}

function mid(str, start, len)
{
    if (start < 0 || len < 0) return "";
    var iEnd, iLen = String(str).length;
    if (start + len > iLen)
          iEnd = iLen;
    else
          iEnd = start + len;
    return String(str).substring(start,iEnd);
}

function isBlank(val) {
	if(val==null) {
	  return true;
	}
	for (var i=0;i<val.length;i++) {
		if ((val.charAt(i)!=' ')&&(val.charAt(i)!="\t")&&(val.charAt(i)!="\n")&&(val.charAt(i)!="\r")) {
		  return false;
		}
	}
	
	return true;
}

function isDigit(num) {
	if (num.length>1){return false;}
	var string="1234567890";
	if (string.indexOf(num)!=-1){return true;}
	return false;
}

function isNumeric(val) {
	if (isBlank(val)) {
	  return false;
	}
	for (var i=0;i<val.length;i++) {
		if(!isDigit(val.charAt(i))) {
		  return false;
		}
	}
	
	return true;
}

function setDisabled(inname,inbool) {
	var obj = document.frmConfirmation;
	
	obj[inname].disabled = inbool;
}

function countNames(incnt) {
  var obj = document.frmSessions
  var fname1 = trimAll(obj.txtFName1.value)
  var lname1 = trimAll(obj.txtLName1.value)
  var fname2 = trimAll(obj.txtFName2.value)
  var lname2 = trimAll(obj.txtLName2.value)
  var fname3 = trimAll(obj.txtFName3.value)
  var lname3 = trimAll(obj.txtLName3.value)
  var fname4 = trimAll(obj.txtFName4.value)
  var lname4 = trimAll(obj.txtLName4.value)
  var fname5 = trimAll(obj.txtFName5.value)
  var lname5 = trimAll(obj.txtLName5.value)
  var fname6 = trimAll(obj.txtFName6.value)
  var lname6 = trimAll(obj.txtLName6.value)
  var cnt = 0
  
  if (incnt > 5) {
    if ((fname6.length != 0) && (lname6.length != 0)) cnt = cnt + 1
  }
  if (incnt > 4) {
    if ((fname5.length != 0) && (lname5.length != 0)) cnt = cnt + 1
  }
  if (incnt > 3) {
    if ((fname4.length != 0) && (lname4.length != 0)) cnt = cnt + 1
  }
  if (incnt > 2) {
    if ((fname3.length != 0) && (lname3.length != 0)) cnt = cnt + 1
  }
  if (incnt > 1) {
    if ((fname2.length != 0) && (lname2.length != 0)) cnt = cnt + 1
  }
  if (incnt > 0) {
    if ((fname1.length != 0) && (lname1.length != 0)) cnt = cnt + 1
  }
  
  return cnt
}

function validEmail(email) {
  var at="@"
  var dot="."
  var lat=email.indexOf(at)
  var lstr=email.length
  var ldot=email.indexOf(dot)
  if (email.indexOf(at)==-1){
    return false
  }
  if (email.indexOf(at)==-1 || email.indexOf(at)==0 || email.indexOf(at)==lstr){
    return false
  }
  if (email.indexOf(dot)==-1 || email.indexOf(dot)==0 || email.indexOf(dot)==lstr){
    return false
  }
  if (email.indexOf(at,(lat+1))!=-1){
    return false
  }
  if (email.substring(lat-1,lat)==dot || email.substring(lat+1,lat+2)==dot){
    return false
  }
  if (email.indexOf(dot,(lat+2))==-1){
    return false
  }

  if (email.indexOf(' ')!=-1){
    return false
  }
  return true					
}

function isCreditCard(strInput) {
	var sum = 0; 
	var mul = 1; 
	var l = strInput.length;
	
	// Encoding only works on cards with less than 19 digits	
	if (strInput.length > 19) {
    return false
  }
	
	for (i = 0; i < l; i++) {
		var digit    = strInput.substring(l-i-1,l-i)
    var tproduct = parseInt(digit ,10) * mul
    
   	if (tproduct >= 10) {
      sum += (tproduct % 10) + 1
    }
    else {
      sum += tproduct
    }
    
    if (mul == 1) {
      mul++
    }
	  else {
      mul--
    }
  }	
  
  if ((sum % 10) == 0) {
    return true
  }
  else {
    return false
  }
}

function leftTrim(sString) {
  while (sString.substring(0,1) == ' ') {
    sString = sString.substring(1, sString.length);
  }
  return sString;
}

function rightTrim(sString) {
  while (sString.substring(sString.length-1, sString.length) == ' ') {
    sString = sString.substring(0,sString.length-1);
  }
  return sString;
}

function trimAll(sString) {
  while (sString.substring(0,1) == ' ') {
    sString = sString.substring(1, sString.length);
  }
  while (sString.substring(sString.length-1, sString.length) == ' ') {
    sString = sString.substring(0,sString.length-1);
  }
  return sString;
}

function prePopulate(inState,inCity) {
  if (inState.length != 0) {
    document.frmLocation.cmbState.value = inState;
    document.frmLocation.cmbCity.disabled = false;
    update(document.frmLocation.cmbState.selectedIndex)
    if (inCity.length != 0) {
      document.frmLocation.cmbCity.value = inCity;
      document.frmLocation.txtCLIA.focus();
      //setMessage('tdmsgerror','City and State pre-populated.');
    }
  } else {
    document.frmLocation.cmbState.focus();
  }
}

function setMessage(inObj,inMsg) {
  var tdmsg = document.getElementById(inObj);
  tdmsg.innerHTML = inMsg;
}

function getCLIAData() {
  var clia = document.frmLocation.txtCLIA.value;
  var qstr = 'clia='+clia;
  if (clia.length == 9) {
    setMessage('tdmsgagency','Searching for CLIA...');
    status = 9;
    document.frames('ifGetData').location.replace('script/scr_searchclia.asp?'+qstr);
  } else {
    if ((clia.length == 8) && (mid(clia,2,1) != '-')) {
      clia = left(clia,2)+'-'+right(clia,6);
      qstr = 'clia='+clia;
      setMessage('tdmsgagency','Searching for CLIA...');
      status = 9;
      document.frames('ifGetData').location.replace('script/scr_searchclia.asp?'+qstr);
    }
    else {
      setMessage('tdmsgagency','');
    }
  }
}

function submitLocation() {
  var state = document.frmLocation.cmbState.value;
  var city = document.frmLocation.cmbCity.value;
  
  setMessage('tdmsgerror','');
  if ((state.length == 0) || (city.length == 0)){
    setMessage('tdmsgerror','ERROR: City and State are required.');
  } else {
    document.frmLocation.submit();
  }
}

function setStyleByClass(t,c,p,v){
	var elements;
	if(t == '*') {
		// '*' not supported by IE/Win 5.5 and below
		elements = (ie) ? document.all : document.getElementsByTagName('*');
	} else {
		elements = document.getElementsByTagName(t);
	}
	for(var i = 0; i < elements.length; i++){
		var node = elements.item(i);
		for(var j = 0; j < node.attributes.length; j++) {
			if(node.attributes.item(j).nodeName == 'class') {
				if(node.attributes.item(j).nodeValue == c) {
					eval('node.style.' + p + " = '" +v + "'");
				}
			}
		}
	}
}

function initPage() {
  var obj = document.frmSessions;
  var clia = document.frmSessions.txthCLIA.value;
  
  setStyleByClass('td','tdnonclia','color','#000000');
  setStyleByClass('td','tdclia','color','#000000');
  if (clia.length != 0) {
    setStyleByClass('td','tdnonclia','color','#c0c0c0');
  } else {
    setStyleByClass('td','tdclia','color','#c0c0c0');
  }
  if (obj['txtAttendees'] != 0) {
    enableNames();
  }
}

function calcTotal() {
  var obj = document.frmSessions;
  var clia = obj.txthCLIA.value;
  var courseid1 = obj.rdoCourseID1;
  var courseid2 = obj.rdoCourseID2;
  var courseid3 = obj.rdoCourseID3;
  var courseid4 = obj.rdoCourseID4;
  var tradeshow = obj.chkTradeShow.checked;
  var attendees = obj.txtAttendees.value;
  var courses = 0;
  var total = 0;
  
  if (courseid1[0].checked) courses = courses + 1;
  if (courseid1[1].checked) courses = courses + 1;
  if (courseid2[0].checked) courses = courses + 1;
  if (courseid2[1].checked) courses = courses + 1;
  if (courseid3[0].checked) courses = courses + 1;
  if (courseid3[1].checked) courses = courses + 1;
  if (courseid4[0].checked) courses = courses + 1;
  if (courseid4[1].checked) courses = courses + 1;
  
  if (clia.length == 0) {
    switch (courses) {
      case 0:
        break;
      case 1:
        total = 45;
        break;
      case 2:
        total = 70;
        break;
      case 3:
        total = 90;
        break;
      case 4:
        total = 105;
        break;
    }
  }
  else {
    switch (courses) {
      case 0:
        break;
      case 1:
        total = 35;
        break;
      case 2:
        total = 60;
        break;
      case 3:
        total = 80;
        break;
      case 4:
        total = 95;
        break;
    }
  }
  
  total = total * attendees;
  
  if (total == 0) {
    if (tradeshow) {
      if (clia.length == 0) {
        total = 10 * attendees;
      }
      else {
        total = 5 * attendees
      }
    }
  }
  
  obj['txtTotalCost'].value = '$'+total+'.00';
  obj['txthCourses'].value = courses;
}

function disableAll() {
  var obj = document.frmSessions;
  
  obj['txtFName1'].disabled = true;
  obj['txtLName1'].disabled = true;
  obj['txtFName2'].disabled = true;
  obj['txtLName2'].disabled = true;
  obj['txtFName3'].disabled = true;
  obj['txtLName3'].disabled = true;
  obj['txtFName4'].disabled = true;
  obj['txtLName4'].disabled = true;
  obj['txtFName5'].disabled = true;
  obj['txtLName5'].disabled = true;
  obj['txtFName6'].disabled = true;
  obj['txtLName6'].disabled = true;
  obj['txtFName1'].value = '[Unused]';
  obj['txtLName1'].value = '[Unused]';
  obj['txtFName2'].value = '[Unused]';
  obj['txtLName2'].value = '[Unused]';
  obj['txtFName3'].value = '[Unused]';
  obj['txtLName3'].value = '[Unused]';
  obj['txtFName4'].value = '[Unused]';
  obj['txtLName4'].value = '[Unused]';
  obj['txtFName5'].value = '[Unused]';
  obj['txtLName5'].value = '[Unused]';
  obj['txtFName6'].value = '[Unused]';
  obj['txtLName6'].value = '[Unused]';
}

function disableSet(innum) {
  var obj = document.frmSessions;
  var fname = obj['txtFName'+innum]
  var lname = obj['txtLName'+innum]
  
  fname.disabled = true;
  lname.disabled = true;
  fname.value = '[Unused]';
  lname.value = '[Unused]';
}

function enableSet(innum) {
  var obj = document.frmSessions;
  var fname = obj['txtFName'+innum]
  var lname = obj['txtLName'+innum]
  
  fname.disabled = false;
  lname.disabled = false;
  if (fname.value == '[Unused]') {
    fname.value = '';
  }
  if (lname.value == '[Unused]') {
    lname.value = '';
  }
}

function enableNames() {
  var obj = document.frmSessions;
  var attendees = obj.txtAttendees.value;
  
  switch (attendees) {
    case '6':
      enableSet(1);
      enableSet(2);
      enableSet(3);
      enableSet(4);
      enableSet(5);
      enableSet(6);
      break;
    case '5':
      enableSet(1);
      enableSet(2);
      enableSet(3);
      enableSet(4);
      enableSet(5);
      disableSet(6);
      break;
    case '4':
      enableSet(1);
      enableSet(2);
      enableSet(3);
      enableSet(4);
      disableSet(5);
      disableSet(6);
      break;
    case '3':
      enableSet(1);
      enableSet(2);
      enableSet(3);
      disableSet(4);
      disableSet(5);
      disableSet(6);
      break;
    case '2':
      enableSet(1);
      enableSet(2);
      disableSet(3);
      disableSet(4);
      disableSet(5);
      disableSet(6);
      break;
    case '1':
      enableSet(1);
      disableSet(2);
      disableSet(3);
      disableSet(4);
      disableSet(5);
      disableSet(6);
      break;
    default:
      obj.txtAttendees.value = 0;
      disableAll();
      break;
  }
}

function submitSessions() {
  var obj = document.frmSessions;
  var courses = obj['txthCourses'].value;
  var tradeshow = obj['chkTradeShow'].checked;
  var attendees = obj['txtAttendees'].value;
  var outmsg = '';
  
  setMessage('tdmsgerror','');
  
  if ((courses == 0) && (tradeshow == false)) {
    outmsg = 'ERROR: You must select at least one course and/or the Trade Show.';
  } else {
    if (attendees == 0) {
      outmsg = 'ERROR: Attendees can not be zero.';
    }
  }
  
  if (countNames(attendees) != attendees) {
    outmsg = 'ERROR: Number of Attendees does not match number of names listed.';
  }
  
  if (outmsg.length != 0) {
    setMessage('tdmsgerror',outmsg);
  } else {
    obj.submit();
  }
}

function submitConfirmation() {
  var obj = document.frmConfirmation;
  var afname = trimAll(obj['txtAgencyFName'].value);
  var alname = trimAll(obj['txtAgencyLName'].value);
  var aname = trimAll(obj['txtAgencyName'].value);
  var aaddress1 = trimAll(obj['txtAgencyAddress1'].value);
  var acity = trimAll(obj['txtAgencyCity'].value);
  var astate = trimAll(obj['txtAgencyState'].value);
  var azip = trimAll(obj['txtAgencyZip'].value);
  var aphone = trimAll(obj['txtAgencyPhone'].value);
  var aemail = trimAll(obj['txtAgencyEmail'].value);
  var cctype = obj['cmbCCType'].value;
  var ccnumber = trimAll(obj['txtCCNumber'].value);
  var ccexpire = trimAll(obj['txtCCExpire'].value);
  var ccname = trimAll(obj['txtCCName'].value);
  var total = obj['txthTotalCost'].value;
  var outmsg = '';
  
  setMessage('tdmsgerror',outmsg);
    
  if (afname.length == 0) {
    outmsg = 'ERROR: First Name is required.';
    setMessage('tdmsgerror',outmsg);
    obj['txtAgencyFName'].focus();
  }
  
  if ((alname.length == 0) && (outmsg.length == 0)) {
    outmsg = 'ERROR: Last Name is required.';
    setMessage('tdmsgerror',outmsg);
    obj['txtAgencyLName'].focus();
  }
  
  if ((aname.length == 0) && (outmsg.length == 0)) {
    outmsg = 'ERROR: Agency Name is required.';
    setMessage('tdmsgerror',outmsg);
    obj['txtAgencyName'].focus();
  }
  
  if ((aaddress1.length == 0) && (outmsg.length == 0)) {
    outmsg = 'ERROR: First Agency Address Field is required.';
    setMessage('tdmsgerror',outmsg);
    obj['txtAgencyAddress1'].focus();
  }
  
  if ((acity.length == 0) && (outmsg.length == 0)) {
    outmsg = 'ERROR: Agency City is required.';
    setMessage('tdmsgerror',outmsg);
    obj['txtAgencyCity'].focus();
  }
  
  if ((astate.length == 0) && (outmsg.length == 0)) {
    outmsg = 'ERROR: Agency State is required.';
    setMessage('tdmsgerror',outmsg);
    obj['txtAgencyState'].focus();
  }
  
  if ((azip.length == 0) && (outmsg.length == 0)) {
    outmsg = 'ERROR: Agency Zip is required.';
    setMessage('tdmsgerror',outmsg);
    obj['txtAgencyZip'].focus();
  }
  
  if (!validEmail(aemail)) {
    outmsg = 'ERROR: Invalid Email address.';
    setMessage('tdmsgerror',outmsg);
    obj['txtAgencyEmail'].focus();
  }
  
  if ((cctype == 'invalid') && (outmsg.length == 0)) {
    outmsg = 'ERROR: Invalid credit card type.';
    setMessage('tdmsgerror',outmsg);
    obj['cmbCCType'].focus();
  }

  if ((ccnumber.length == 0) && (outmsg.length == 0)) {
    outmsg = 'ERROR: Invalid credit card number.';
    setMessage('tdmsgerror',outmsg);
    obj['txtCCNumber'].focus();
  }
  
  if (!isCreditCard(ccnumber) && (outmsg.length == 0)) {
    outmsg = 'ERROR: Invalid credit card number.';
    setMessage('tdmsgerror',outmsg);
    obj['txtCCNumber'].focus();
  }
  
  if ((ccexpire.length < 5) && (outmsg.length == 0)) {
    outmsg = 'ERROR: Card expiration date is missing or not formatted correctly.';
    setMessage('tdmsgerror',outmsg);
    obj['txtCCExpire'].focus();
  }

  if ((ccexpire.length == 5) && (outmsg.length == 0)) {
		var temp = ccexpire;
		
		temp = left(ccexpire,2)+right(ccexpire,2);
		if (!isNumeric(temp)) {
	    outmsg = 'ERROR: Card expiration date is not formatted correctly.';
  	  setMessage('tdmsgerror',outmsg);
    	obj['txtCCExpire'].focus();
		}
  }
	
  if ((ccexpire.length < 5) && (outmsg.length == 0)) {
    outmsg = 'ERROR: Card expiration date is missing or not formatted correctly.';
    setMessage('tdmsgerror',outmsg);
    obj['txtCCExpire'].focus();
  }
	
	if ((ccname.length == 0) && (outmsg.length == 0)) {
    outmsg = 'ERROR: Name on credit card is required.';
    setMessage('tdmsgerror',outmsg);
    obj['txtCCName'].focus();
  }

  if (outmsg.length == 0) {
		setDisabled('txtAgencyFName',true);
		setDisabled('txtAgencyLName',true);
		setDisabled('txtAgencyName',true);
		setDisabled('txtAgencyAddress1',true);
		setDisabled('txtAgencyAddress2',true);
		setDisabled('txtAgencyCity',true);
		setDisabled('txtAgencyState',true);
		setDisabled('txtAgencyZip',true);
		setDisabled('txtAgencyCountry',true);
		setDisabled('txtAgencyPhone',true);
		setDisabled('txtAgencyFax',true);
		setDisabled('txtAgencyEmail',true);
		setDisabled('cmbCCType',true);
		setDisabled('txtCCNumber',true);
		setDisabled('txtCCExpire',true);
		setDisabled('txtCCName',true);
		setDisabled('cmdSubmit',true);

    outmsg = 'We are ready to process your request.  Clicking the Authorize button will complete your request and your credit card will be charged '+total+'.';
    document.getElementById('tdmsgerror').style.color = '#0000ff';
    document.getElementById('dvauthorize').style.display = 'inline';
    setMessage('tdmsgerror',outmsg);
  }
}

function submitAuthorization() {
	setDisabled('txtAgencyFName',false);
	setDisabled('txtAgencyLName',false);
	setDisabled('txtAgencyName',false);
	setDisabled('txtAgencyAddress1',false);
	setDisabled('txtAgencyAddress2',false);
	setDisabled('txtAgencyCity',false);
	setDisabled('txtAgencyState',false);
	setDisabled('txtAgencyZip',false);
	setDisabled('txtAgencyCountry',false);
	setDisabled('txtAgencyPhone',false);
	setDisabled('txtAgencyFax',false);
	setDisabled('txtAgencyEmail',false);
	setDisabled('cmbCCType',false);
	setDisabled('txtCCNumber',false);
	setDisabled('txtCCExpire',false);
	setDisabled('txtCCName',false);
	setDisabled('cmdSubmit',false);
		
  document.frmConfirmation.submit();
}
