    /* File layout:
       4. client side validation, javascript
       5. base ajax code
       6. ajax code for form country select list
       7. ajax code for form states select list
       8. ajax code to call php validate form input
     */
    

      // start client side validation of form input
      
      // check for empty spaces
      
  function doSubmission(){
    
    var first_name = document.getElementById("first_name").value.length;
    var last_name = document.getElementById("last_name").value.length;
    var company = document.getElementById("company").value.length;
    var title = document.getElementById("title").value.length;
    var email = document.getElementById("email").value.length;
    var phone = document.getElementById("phone").value.length;
    var street = document.getElementById("street").value.length;
    var city = document.getElementById("city").value.length;
    var zip = document.getElementById("zip").value.length;
    var revenue = document.getElementById("revenue").value.length;
    var industry = document.getElementById("industry").value.length;
    var country = document.getElementById("country").value.length;

    var errors = 0;
    clear_errors();

    if (first_name < 1 || first_name > 40 || first_name === undefined){
      errors = 1;
      addFormError('first_name_tr', 'First Name Required, Maximum 40 Characters');
    }
    
    if (last_name < 1 || last_name > 40 || last_name === undefined){
      errors = 1;
      var location = document.getElementById("last_name_tr");
      location++;
      addFormError('last_name_tr', 'Last Name Required, Maximum 80 Characters');
    }
    
    if (company < 1 || company > 40 || company === undefined){
      errors = 1;
      addFormError('company_tr', 'Company Name Required, Maximum 40 Characters');
    }
    
    if (title < 1 || title > 40 || title === undefined){
      errors = 1;
      addFormError('title_tr', 'Title Required, Maximum 40 Characters');
    }
    
    if (email < 1 || email > 40 || email === undefined){
      errors = 1;
      addFormError('email_tr', 'Email Required, Maximum 80 Characters');
    }
    
    if (phone < 1 || phone > 40 || phone === undefined){
      errors = 1;
      addFormError('phone_tr', 'Phone Required, Maximum 40 Characters');
    }
    
    if (street < 1 || street > 40 || street === undefined){
      errors = 1;
      addFormError('street_tr', 'Street Required, Maximum 40 Characters');
    }
    
    if (city < 1 || city > 40 || city === undefined){
      errors = 1;
      addFormError('city_tr', 'City Required, Maximum 40 Characters');
    }
    
    if (zip < 1 || zip > 40 || zip === undefined){
      errors = 1;
      addFormError('zip_tr', 'Zip / Postal Code Required, Maximum 40 Characters');
    }
    
    if (revenue < 1 || revenue === undefined){
      errors = 1;
      addFormError('revenue_tr', 'Please select a value of your annual PR budget that you outsource.');
    }
    
    if (industry < 1 || industry === undefined){
      errors = 1;
      addFormError('industry_tr', 'Please select an industry type.');
    }
    
    if (country < 1 || country === undefined){
      errors = 1;
      addFormError('country_tr', 'Please select a country.');
    }
    
    if (errors == 0){
      doAjaxSubmission();
    }
 
    
  } // end function doSubmission   

  function addFormError(formPlacement, errorMsg){


    var tableRef = document.getElementById("demo_table_tbody");
    var newRow = document.getElementById(formPlacement).cloneNode(false);
    var fieldRow = document.getElementById(formPlacement);
    document.getElementById('demo_table_tbody').insertBefore(newRow,fieldRow);

    newRow.setAttribute('id', 'tr_error');
    var newCell = newRow.insertCell(0);
    var newText = document.createTextNode(errorMsg);
    newCell.appendChild(newText);
    newCell.style.fontStyle = "italic";
    newCell.style.backgroundColor = "yellow";
    newCell.setAttribute ('colSpan', '2');
    document.getElementById('tr_error').focus();
    
  } // end function addFormError

  function clear_errors(){
    while (rowRef = document.getElementById("tr_error")){
	    if(rowRef){
	      var rowRefIndex = rowRef.rowIndex;
	      var tableRef = document.getElementById("demo_table");
	      tableRef.deleteRow(rowRefIndex);
	   }
	} 
    return true;
  } // end function clear_errors

  
    // Ajax base functions

  var xmlHttp;
  var processfunction;
  var receivedXML;
  var performCitySearch;
  var stateValue;

  function loadXMLDoc(URL){
    
    try{
      xmlHttp=new XMLHttpRequest();
    }
    catch (e)
    {
      try // Internet Explorer
      {
        xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
      }
      catch (e)
      {
        try
        {
          xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch (e)
        {
          alert("Your browser does not support AJAX!");
          return false;
        }
      }
    }
    xmlHttp.onreadystatechange=processReqChange;
    xmlHttp.open("GET",URL,true);

    //xmlHttp.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
    xmlHttp.send(null);

    return(xmlHttp);
  } // end function loadXMLDoc

  
      // handle the flow of ajax logic
      
  function processReqChange(){
  
    var div = document.getElementById('please_wait');
    div.style.visibility = 'visible';
    
    if (xmlHttp.readyState == 4){ //Complete
      if (xmlHttp.status == 200){ // OK
        var div = document.getElementById('please_wait');
        div.style.visibility = 'hidden';
      	if (processfunction=='fetchCountries') {
      		fetchCountries('process');
        }else if (processfunction=='fetchStates'){
          fetchStates('process');
        }else if (processfunction=='doAjaxSubmission'){
          doAjaxSubmission('process');
	   }
      }
     }     
   }  // end function processReqChange
   
   
   
            // generate SELECT list for countries on page load
            
  function fetchCountries(action){
    if(action=='process'){

      var receivedXML = xmlHttp.responseXML.documentElement; //returns reference to root node of XML doc
      var recNodeData = receivedXML.getElementsByTagName('record');
      var stateNum, stateName;
        
      offset=0;
      if (recNodeData.length>0){
        
            // create select element
        
        var selectTD = document.getElementById("country_select_td");
        selectTD.innerHTML='<select name="country" id="country" onchange="fetchStates();"></select></font>';
       
        var list = document.getElementById("country");
        
        for (var i=0; i<recNodeData.length; i++){ //for each instance of <record>
          countryNum=recNodeData[i].getElementsByTagName('countryNum')[0].firstChild.data;
          countryName=recNodeData[i].getElementsByTagName('countryName')[0].firstChild.data;
          var newOptionElement = document.createElement('option');
          newOptionElement.value=countryName;
          newOptionElement.text=countryName;
          try{
            list.add(newOptionElement, null);
            if (countryName == 'United Kingdom'){
              var newOptionElementSelect = document.createElement('option');
              newOptionElementSelect.value='';
              newOptionElementSelect.text='<Select>';
              newOptionElementSelect.setAttribute('selected', 'selected');
              try{
                list.add(newOptionElementSelect, null);
              }catch(ex){
	            list.add(newOptionElementSelect);
              }
            }
          }catch(ex){
	          list.add(newOptionElement);
	          if (countryName == 'United Kingdom'){
              var newOptionElementSelect = document.createElement('option');
              newOptionElementSelect.value='';
              newOptionElementSelect.text='<Select>';
              list.add(newOptionElementSelect);
              newOptionElementSelect.setAttribute('selected', 'selected');  
            }
          }
        }
      }
	  }else{
	      clear_state();
		processfunction='fetchCountries';
    		url='fetchcountries_demo_xml.mmsr';
    		loadXMLDoc(url);
	}
  } // end function fetchCountries

  

    // generate SELECT list for states on country select
    // if no country selected leave as text field

  function fetchStates(action){ 
    if(action=='process'){
      var receivedXML = xmlHttp.responseXML.documentElement; //returns reference to root node of XML doc
      var recNodeData = receivedXML.getElementsByTagName('record');
      var stateNum, stateName;
        
      offset=0;
      if (recNodeData.length>0){
        // create select element
        var selectTD = document.getElementById("state_select_td");
        selectTD.innerHTML= null;
        selectTD.innerHTML='<select name="state" id="state"></select>';
       
        var list = document.getElementById("state");
        
        var newOptionElementSelect = document.createElement('option');
        newOptionElementSelect.value='Select';
        newOptionElementSelect.text='<Select>';
        newOptionElementSelect.setAttribute('selected', 'selected');
        
        try{
           list.add(newOptionElementSelect, null);
        }catch(ex){
	       list.add(newOptionElementSelect);
        }
        
        for (var i=0; i<recNodeData.length; i++){ //for each instance of <record>
          stateNum=recNodeData[i].getElementsByTagName('stateNum')[0].firstChild.data;
          stateName=recNodeData[i].getElementsByTagName('stateName')[0].firstChild.data;
          var newOptionElement = document.createElement('option');
          newOptionElement.value=stateName;
          newOptionElement.text=stateName;
          try{
            list.add(newOptionElement, null);
          }catch(ex){
	 list.add(newOptionElement);
          }
        }
      }else{
        clear_state();
      }
  }else{

            var countryIndex = document.getElementById("country");
      	var countryIndexValue = countryIndex.options[countryIndex.selectedIndex].value;
		processfunction='fetchStates';
    		url='fetchstates_demo_xml.mmsr?i='+countryIndexValue;
    		loadXMLDoc(url);
    		       
    		       // set display to postal code if Canadian visitor and zip for Americans
    		       
    		if (countryIndexValue == "Canada"){ 
          		var selectTD = document.getElementById("state_label");
      	      selectTD.innerHTML= null;
                  selectTD.innerHTML= '<span class="required_field">Province:</span>';
                  selectTD = document.getElementById("zip_label");
            	selectTD.innerHTML= null;
                  selectTD.innerHTML= '<span class="required_field">Postal Code:</span>';
             }else if (countryIndexValue == "United States"){ 
          		var selectTD = document.getElementById("state_label");
      	      selectTD.innerHTML= null;
                  selectTD.innerHTML= '<span class="required_field">State:</span>';
                  selectTD = document.getElementById("zip_label");
            	selectTD.innerHTML= null;
                  selectTD.innerHTML= '<span class="required_field">Zip Code:</span>';
             }
	}
  } // end function fetchStates
  
  
      // clear the state select and set to text input

  function clear_state(){
	var selectTD = document.getElementById("state_select_td");
	selectTD.innerHTML= null;
      selectTD.innerHTML= '<input name="state" id="state" maxlength="40" size="20" type="text" />';
      var selectTD = document.getElementById("state_label");
	selectTD.innerHTML= null;
      selectTD.innerHTML= 'Region:';
      selectTD = document.getElementById("zip_label");
	selectTD.innerHTML=null;
      selectTD.innerHTML= '<span class="required_field">Zip / Postal Code:</span>';
	return true;
  } // end function clear_state   



      // start processing form
      
  function doAjaxSubmission(action){

    if (action == 'process'){
	  var receivedXML = xmlHttp.responseXML.documentElement; //returns reference to root node of XML doc
        var recNodeData = receivedXML.getElementsByTagName('result');

        if (recNodeData.length>0){
        	if (recNodeData[0].getElementsByTagName('success').length>0){  // success reponse from submission
              var resultDiv = document.getElementById("resultDiv");
              resultDiv.style.visibility = 'visible';
              var success_msg=recNodeData[0].getElementsByTagName('success')[0].firstChild.data;
              if (success_msg == 'success'){
                  resultDiv.innerHTML = "<br/>Thank you taking the time to fill out our form. One of our sales team will be in touch shortly.  You can also reach the sales department during normal business hours at: <a href=\"http://www.mediamiser.com/contact/\">www.mediamiser.com/contact/</a>";
                  var welcomeDiv = document.getElementById("welcomeDiv");
                  welcomeDiv.innerHTML = '';
                  welcomeDiv.style.visibility = 'hidden';
              }else{
                resultDiv.innerHTML = "An error has occured while submitting the form. Please contact us at <a href=\"mailto:info@mediamiser.com\">info@mediamiser.com</a>.";
              }
              var hideFormDiv = document.getElementById("demo_form_div");
              hideFormDiv.style.visibility = 'hidden';
              resultDiv.focus();
        	}else if (recNodeData[0].getElementsByTagName('error').length>0){  // error response from submission
        	   // call javascript addFormError (table index, message) for each error
        	   var error_row;
        	   var error_msg;
        	   
               for (var i=0; i<recNodeData.length; i++) {
        		error_row=recNodeData[i].getElementsByTagName('formelement')[0].firstChild.data;
        		error_msg=recNodeData[i].getElementsByTagName('errormsg')[0].firstChild.data;
        		error_row = error_row + "_tr"
                  if(error_row){
                    addFormError (error_row, error_msg)
                  }
        	   }
        	}
        }
        
      }else{  // else for if action == process
        
            processfunction='doAjaxSubmission';
            
            var formLength = document.demo_form.elements.length;
            var getString ='?';
            
            for (i=0; i<formLength; i++){
              getString = getString + escape(document.demo_form.elements[i].name) + '=';
              getString = getString + escape(document.demo_form.elements[i].value) + '&';
            }
            
            getString = getString.slice(0, -1);
            url='demo_form_xml.mmsr' + getString;
            loadXMLDoc(url);
    }
        var div = document.getElementById('please_wait');
        div.style.visibility = 'hidden';  
  } // end function doAjaxSubmission
