function addCommas(nStr)
{
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}


function recalculateEmissions()
{
    var jsonData = '{ "energyArray": {';
    
    var isFirst = true;
    if( $('#energyUnitsConsumed').val() != '' && $('#energyUnitsConsumed').val() != 0 )
    {   // If there's something in the box, add it to the list of entered values
        var newDate = new Date;
        var newRowId = newDate.getTime();
        confirmEnergyUse( newRowId );
    }    
    $( "div[name='energyDataEntered']" ).each( function(i){
    	
    	var currentValue = $(this).find("td[name='energyEnteredValue']").text();
    	currentValue = currentValue.replace(/,/g,'');
      currentValue = ((/[0-9]*/).exec(currentValue))[0];
        
        var currentTypeId = $(this).find("input[name='energyEnteredId']").val(); 

        if( currentValue != '' && currentValue != 0 )
        {
            if( isFirst == false )
            {
                jsonData += ',';
            } 
            jsonData += '"' + $(this).attr("id") + '":{' + '"' + currentTypeId + '": "' + currentValue + '"}';
            isFirst = false;
        }    
        else
        {
            $(this).remove();
            if ($('#enteredEnergy div.dataEntered ').length==0) {
            	$('#fieldWrapper1').fadeIn("normal");
            	$('#energyUse div.add_another').hide();
            }
        }       
    }); 

    isFirst = true;
    if( $('#vehicleUnitsConsumed').val() != '' && $('#vehicleUnitsConsumed').val() != 0 )
    {   // If there's something in the box, add it to the list of entered values
        var newDate = new Date;
        var newRowId = newDate.getTime();
        
        confirmVehicleUse( newRowId );
    }    
    jsonData += '}, "vehicleArray" : {';
    
    $( "div[name='vehicleDataEntered']" ).each( function(i){
    	var currentValue = $(this).find("td[name='vehicleEnteredValue']").text();
    	currentValue = currentValue.replace(/,/g,'');
        currentValue = ((/[0-9]*/).exec(currentValue))[0];
        var currentTypeId = $(this).find("input[name='vehicleEnteredId']").val(); 

        if( currentValue != '' && currentValue != 0 )
        {
            if( isFirst == false )
            {
                jsonData += ',';
            } 
            jsonData += '"' + $(this).attr("id") + '":{' + '"' + currentTypeId + '": "' + currentValue + '"}';
            isFirst = false;
        }   
        else
        {
            $(this).remove();
            if ($('#enteredVehicle div.dataEntered ').length==0) {
            	$('#fieldWrapper2').fadeIn("normal");
            	$('#vehicle div.add_another').hide();
            }
        }     
    });

    isFirst = true;
    if( $('#airUnitsConsumed').val() != '' && $('#airUnitsConsumed').val() != 0 )
    {   // If there's something in the box, add it to the list of entered values
        var newDate = new Date;
        var newRowId = newDate.getTime();
        
        confirmAirUse( newRowId );
    }
    jsonData += '}, "airArray" : {';
    $( "div[name='airDataEntered']" ).each( function(i){
    	
    	var currentValue = $(this).find("td[name='airEnteredValue']").text();
    	currentValue = currentValue.replace(/,/g,'');
        currentValue = ((/[0-9]*/).exec(currentValue))[0];
        var currentTypeId = $(this).find("input[name='airEnteredId']").val(); 

        if( currentValue != '' && currentValue != 0 )
        {
            if( isFirst == false )
            {
                jsonData += ',';
            } 
            jsonData += '"' + $(this).attr("id") + '":{' + '"' + currentTypeId + '": "' + currentValue + '"}';
            isFirst = false;
        }  
        else
        {
            $(this).remove();
            if ($('#enteredAir div.dataEntered ').length==0) {
            	$('#fieldWrapper3').fadeIn("normal");
            	$('#air div.add_another').hide();
            }
        }         
    });

    isFirst = true;
    if( $('#wasteUnitsConsumed').val() != '' && $('#wasteUnitsConsumed').val() != 0 )
    {   // If there's something in the box, add it to the list of entered values
        var newDate = new Date;
        var newRowId = newDate.getTime();
        
        confirmWasteUse( newRowId );
    }
    jsonData += '}, "wasteArray" : {';
    $( "div[name='wasteDataEntered']" ).each( function(i){
    	var currentValue = $(this).find("td[name='wasteEnteredValue']").text();
    	currentValue = currentValue.replace(/,/g,'');
        currentValue = ((/[0-9]*/).exec(currentValue))[0];
        var currentTypeId = $(this).find("input[name='wasteEnteredId']").val(); 

        if( currentValue != '' && currentValue != 0 )
        {
            if( isFirst == false )
            {
                jsonData += ',';
            } 
            jsonData += '"' + $(this).attr("id") + '":{' + '"' + currentTypeId + '": "' + currentValue + '"}';
            isFirst = false;
        }    
        else
        {
            $(this).remove();
            if ($('#enteredWaste div.dataEntered ').length==0) {
            	$('#fieldWrapper4').fadeIn("normal");
            	$('#waste div.add_another').hide();
            }
        }       
    });
    
    jsonData += '} }';
    
    $.ajax({
       type: "POST",
       url: "/wp-content/themes/default/emissions-calc/ajax.php",
       data: "action=calculateEmissions&data=" + jsonData,
       success: function(msg){
         var emissions = $.secureEvalJSON(msg);
         
         // First, add in the newest values added, then update the grandtotal
         for( var counter in emissions['lastResult'] ){
            for( var key in emissions['lastResult'][counter] ){
               var newEmissionsVal =  emissions['lastResult'][counter][key];
               
               $('span.' + key ).html((newEmissionsVal==0)?'0':newEmissionsVal);
               $('span.' + key ).removeClass( key );         
            }
         }
         $( '#emissionsResult' ).hide();
         $( '#totalEmissions' ).text( emissions['totalEmissions'] );
         $( '#emissionsResult' ).animate({ opacity: 'show' }, 800);        
       }
     });
}

function calculateEmissionsCosts( isUpdate, gstRate, averageYearlyIndividual, averageYearlyHousehold ) 
{
    var chosenProgramme = $( "input[name='programmeId'][checked]" ).val();
    var offsetPrice = $( "span#programme" + chosenProgramme + "span" ).text();
        
    var singleVal      = isUpdate ? $('#singleEmissions').val()     : 0;
    var individualVal  = isUpdate ? $('#individualEmissions').val() : 0;
    var householdVal   = isUpdate ? $('#householdEmissions').val()  : 0;       
    
    singleNumber     = isNaN( singleVal ) || singleVal == '' ? 0 : parseFloat( singleVal );
    individualNumber = isNaN( individualVal ) || individualVal == ''  ? 0 : parseFloat( individualVal ) * averageYearlyIndividual;
    householdNumber  = isNaN( householdVal ) || householdVal == ''  ? 0 : parseFloat( householdVal ) * averageYearlyHousehold;
    
    var totalNumber      = singleNumber + individualNumber + householdNumber;
    var subTotal         = totalNumber * offsetPrice;
    var gstAmount        = subTotal * (parseFloat(gstRate)/100);
    var totalCost        = subTotal + gstAmount;
    
    $('#singleEmissionsCost').text( '$' + ( singleNumber * offsetPrice ).toFixed(2) );
    $('#individualEmissionsCost').text( '$' + ( individualNumber * offsetPrice ).toFixed(2) );
    $('#householdEmissionsCost').text( '$' + ( householdNumber * offsetPrice ).toFixed(2) );
    
    $('#costOfSingle').text( parseFloat(offsetPrice).toFixed(0) );
    $('#costOfIndividual').text( ( averageYearlyIndividual * offsetPrice ).toFixed(0) );
    $('#costOfHousehold').text( ( averageYearlyHousehold * offsetPrice ).toFixed(0) );
        
    $('#totalNumber').text( totalNumber );
    $('#totalEmissions').val( totalNumber );
    $('#subTotal').text( '$' + subTotal.toFixed(2) );
    $('#gstAmount').text( '$' + gstAmount.toFixed(2) );
    $('#totalCost').text( '$' + totalCost.toFixed(2) );        
}

function confirmEnergyUse( newRowId )
{    
    // Create a new entry for the values in the energyDataEntered box
    energyType = $('#energyType option:selected').text();
    energyId = $('#energyType option:selected').val();
    energyValue = $('#energyUnitsConsumed').val();
    energyName=energyType.replace(/\([a-zA-Z]*\)$/,'');
    energyUnits=energyType.replace(/.*\(([a-zA-Z]*)\)$/,'$1');
    
   

    newDiv = $('<div name="energyDataEntered" class="dataEntered" id=' + newRowId + '> ' +
    		     '<table> ' +
                    '<tr> '+
                       '<td width="243" name="energyEnteredName" class="entered_name">' + energyName + '</td> '+
                       '<td width="97" name="energyEnteredValue" class="entered_value">' + addCommas(energyValue) + ' '+energyUnits+'</td> '+
                       '<td width="126" name="emissionsEnteredValue" class="generated_value"> '+
                       '	<span class="emissionsValue ' + newRowId + '"></span> tCO<sub>2</sub>-e '+
                       '	<input type="hidden" value="' + energyId + '" name="energyEnteredId"/> '+                    					
                       '</td> '+
                       '<td width="17" class="close_button"> '+
                       ' 	<a onclick="return removeRow( $(this) );" title="remove" class="remove hide_text" href="#">x</a> '+
                       '</td> '+
					'</tr> '+
				'</table> ' +
    	 	   '</div>'); 
    
    $('div#enteredEnergy').append( newDiv );
    newDiv.fadeIn("normal");
    $("#fieldWrapper1").hide();
    $('#energyUse > div.add_another').fadeIn("normal");
    $('#energyType').val("1");
    $('#energyUnitsConsumed').val("0");
                
    return false;
}

function addAnother(item) {
	$($(item).siblings()[1]).fadeIn("fast");
	$(item).parent().find('select')[0].selectedIndex=0;
	$(item).hide();
}

var shippingObject={};
shippingObject.voyages=[];
containers=[];
var currentContainer=0;
var currentVoyage=0;

$(document).ready(function(){
	
	$('.add_another').click(function() {addAnother(this); return false;});
	$('.add_another_shipping').click(function() {$('#fieldWrapper1').fadeIn("normal"); $('.add_another_shipping').hide();  return false;});
	$('.add_another_container').click(function() {addAnotherContainer(this); return false;}); 
	$('#confirmVoyageDetails').click(function() {calculateShipping(); return false;})
});

function calculateShipping() {
    vessel=$('#vesselType').val();
    depart=$('#departingPort').val();
    arrive=$('#arrivalPort').val();

    if ($('#containerWeight').val()>0 && !isNaN($('#containerWeight').val()) ) {
    	containers[currentContainer]=$('#containerWeight').val();
    	if (containers[currentContainer]>28.2) {
    		containers[currentContainer]=28.2;
    	}
    	currentContainer++;       	
    }
    
    if ($('#containerWeight').val()=='' || $('#containerWeight').val()==0 ) {
    	containers[currentContainer]=28.2;
    	currentContainer++;       	
    }
    
    shippingObject.voyages[currentVoyage]={};
	shippingObject.voyages[currentVoyage]['vessel_id']=vessel;
	shippingObject.voyages[currentVoyage]['depart_id']=depart;
	shippingObject.voyages[currentVoyage]['arrive_id']=arrive;
	shippingObject.voyages[currentVoyage]['containers']=containers;
	jsonData=$.toJSON(shippingObject);
	
	$.ajax({
        type: "POST",
        url: "/wp-content/themes/default/emissions-calc/ajax.php",
        data: "action=calculateShippingEmissions&data=" + jsonData,
        success: function(msg){
          var emissions = $.secureEvalJSON(msg);
          addShippingHTML(emissions);
          $('#totalEmissions').html(addCommas(emissions.shippingEmissions));
          $('#fieldWrapper1').hide();
          $('div.add_another_shipping').fadeIn("normal");
          containers=[];
          $('input.containerWeight_entered').parent().remove();

        }
      });

}


function addShippingHTML(em) {
	lastindex=-1;
	for (var i in em.shippingArray) {
		if (i>lastindex) lastindex=i;
	}
	
	shipItem=em.shippingArray[lastindex];
	newDiv='<div class="dataEntered" name="energyDataEntered"> '+
           '     <div class="three_col clearfix"> '+
           '       <div class="clearfix"> '+
           '         <div name="energyEnteredName"  class="entered_name">'+shipItem.name+'</div> '+
           '         <div name="energyEnteredValue" class="entered_value">Total container weight <span>'+addCommas(shipItem.value.toFixed(1))+'t</span></div> '+
           '         <div name="energyEnteredValue" class="generated_value"><span>'+addCommas(shipItem.emissions)+'</span> tCO<sub>2</sub>-e</div> '+
           '         <input type="hidden" value="'+(em.shippingArray.length-1)+'" name="energyEnteredId"/> '+
           '         <div class="close_button"> '+
           '           <a onclick="return removeShippingRow( $(this) );" title="remove" class="remove hide_text" href="#">x</a> '+
           '         </div> '+
           '       </div> '+
                
           '       <div> '+
           '         <div class="entered_name no_float">From <span>'+shipItem.depart+'</span></div> '+
           '        <div class="entered_name no_float">To <span>'+shipItem.arrive+' ('+addCommas(Math.round(shipItem.distance))+' km)</span></div> '+
           '      </div> '+
           '    </div> '+
           '  </div>' +
           '</div>';
	$('div#enteredEnergy').append( newDiv );
}

function removeContainer( row, pos )
{
	containers[pos]=0;
    row.parent().parent().fadeOut( "normal", function(){
        row.parent().parent().remove();
        } );

    return false;
}

function removeShippingRow( row )
{
	id = (row.parent().parent().find("input[name='energyEnteredId']")).val();
    row.parent().parent().parent().fadeOut( "normal", function(){
        row.parent().parent().parent().remove();
        
        } );
	$.ajax({
        type: "POST",
        url: "/wp-content/themes/default/emissions-calc/ajax.php",
        data: "action=removeShippingEmissions&id=" + id,
        success: function(msg){
          var emissions = $.secureEvalJSON(msg);
          $('#totalEmissions').html(emissions.shippingEmissions==0?'0':emissions.shippingEmissions);
          if (emissions.shippingArray.length==0) {
              $('#fieldWrapper1').fadeIn("normal");
              $('div.add_another_shipping').hide();
          }
        }
      });
    return false;
}

function addAnotherContainer(buttonRef) {

	$(buttonRef).prev().css('border','');
	previousValue=$(buttonRef).prev().val();
	if (previousValue==0 || previousValue=='') {
		previousValue=28.2;
		$(buttonRef).prev().val(28.2);
	}
	if (isNaN(previousValue)||previousValue>28.2) { 
		$(buttonRef).prev().css('border','red 1px solid'); return;
	}
    
	var newDiv='<div class="clearfix">' +
               '   <label for="containerWeight" class="left select">Enter container weight (t)</label>'+
               '   <input type="text" class="containerWeight_entered short" name="containerWeight_entered" tabindex="2" value="'+previousValue+'" readonly="readonly" />'+
               '   <div class="close_button left">' +
               '     <a href="#" class="on_white hide_text" title="remove" onclick="return removeContainer( $(this),'+currentContainer+' );">x</a>     '+
               '   </div> '+
               '</div>     ';
	containers[currentContainer]=previousValue;
	currentContainer++;
	$(buttonRef).prev().val(0);
	($(buttonRef).parent().before(newDiv));
}

function confirmVehicleUse( newRowId )
{    
    // Create a new entry for the values in the vehicleDataEntered box
    vehicleType = $('#vehicleType option:selected').text();
    vehicleId = $('#vehicleType option:selected').val();
    vehicleValue = $('#vehicleUnitsConsumed').val();

    energyName=vehicleType.replace(/\([a-zA-Z]*\)$/,'');
    energyUnits=vehicleType.replace(/.*\(([a-zA-Z]*)\)$/,'$1');
    
    newDiv = $('<div name="vehicleDataEntered" class="dataEntered" id=' + newRowId + '> ' +
		     '<table> ' +
               '<tr> '+
                  '<td width="243" name="vehicleEnteredName" class="entered_name">' + energyName + '</td> '+
                  '<td width="97" name="vehicleEnteredValue" class="entered_value">' + addCommas(vehicleValue) + ' '+energyUnits+'</td> '+
                  '<td width="126" name="emissionsEnteredValue" class="generated_value"> '+
                  '	<span class="emissionsValue ' + newRowId + '"></span> tCO<sub>2</sub>-e '+
                  '	<input type="hidden" value="' + vehicleId + '" name="vehicleEnteredId"/> '+                    					
                  '</td> '+
                  '<td width="17" class="close_button"> '+
                  ' 	<a onclick="return removeRow( $(this) );" title="remove" class="remove hide_text" href="#">x</a> '+
                  '</td> '+
				'</tr> '+
			'</table> ' +
	 	   '</div>'); 
    

    $('div#enteredVehicle').append( newDiv );
    newDiv.fadeIn("normal");

    $("#fieldWrapper2").hide();
    $('#vehicle > div.add_another').fadeIn("normal");
    
    $('#vehicleType').val("1");
    $('#vehicleUnitsConsumed').val("0");
                
    return false;
}

function confirmAirUse( newRowId )
{    
    // Create a new entry for the values in the airDataEntered box
    airType = $('#airType option:selected').text();
    airId = $('#airType option:selected').val();
    airValue = $('#airUnitsConsumed').val();
    
    energyName=airType.replace(/\([a-zA-Z]*\)$/,'');
    energyUnits=airType.replace(/.*\(([a-zA-Z]*)\)$/,'$1');

    newDiv = $('<div name="airDataEntered" class="dataEntered" id=' + newRowId + '> ' +
		     '<table> ' +
               '<tr> '+
                  '<td width="243" name="airEnteredName" class="entered_name">' + energyName + '</td> '+
                  '<td width="97" name="airEnteredValue" class="entered_value">' + addCommas(airValue) + ' '+energyUnits+'</td> '+
                  '<td width="126" name="emissionsEnteredValue" class="generated_value"> '+
                  '	<span class="emissionsValue ' + newRowId + '"></span> tCO<sub>2</sub>-e '+
                  '	<input type="hidden" value="' + airId + '" name="airEnteredId"/> '+                    					
                  '</td> '+
                  '<td width="17" class="close_button"> '+
                  ' 	<a onclick="return removeRow( $(this) );" title="remove" class="remove hide_text" href="#">x</a> '+
                  '</td> '+
				'</tr> '+
			'</table> ' +
	 	   '</div>'); 
    

    $('div#enteredAir').append( newDiv );
    newDiv.fadeIn("normal");

    $("#fieldWrapper3").hide();
    $('#air > div.add_another').fadeIn("normal");
    
    $('#airType').val("1");
    $('#airUnitsConsumed').val("0");
                
    return false;
}

function confirmWasteUse( newRowId )
{    
    // Create a new entry for the values in the airDataEntered box
    wasteType = $('#wasteType option:selected').text();
    wasteId = $('#wasteType option:selected').val();
    wasteValue = $('#wasteUnitsConsumed').val();

    energyName=wasteType.replace(/\([a-zA-Z]*\)$/,'');
    energyUnits=wasteType.replace(/.*\(([a-zA-Z]*)\)$/,'$1');
    
    newDiv = $('<div name="wasteDataEntered" class="dataEntered" id=' + newRowId + '> ' +
		     '<table> ' +
               '<tr> '+
                  '<td width="243" name="wasteEnteredName" class="entered_name">' + energyName + '</td> '+
                  '<td width="97" name="wasteEnteredValue" class="entered_value">' + addCommas(wasteValue) + ' '+energyUnits+'</td> '+
                  '<td width="126" name="emissionsEnteredValue" class="generated_value"> '+
                  '	<span class="emissionsValue ' + newRowId + '"></span> tCO<sub>2</sub>-e '+
                  '	<input type="hidden" value="' + wasteId + '" name="wasteEnteredId"/> '+                    					
                  '</td> '+
                  '<td width="17" class="close_button"> '+
                  ' 	<a onclick="return removeRow( $(this) );" title="remove" class="remove hide_text" href="#">x</a> '+
                  '</td> '+
				'</tr> '+
			'</table> ' +
	 	   '</div>');     
    

    $('div#enteredWaste').append( newDiv );
    newDiv.fadeIn("normal");

    $("#fieldWrapper4").hide();
    $('#waste > div.add_another').fadeIn("normal");
    
    $('#wasteType').val("1");
    $('#wasteUnitsConsumed').val("0");
                
    return false;
}


function addEmissionsToCart( newType, newVal )
{
    var jsonData  = '{ "enteredData" : { ';
        jsonData += '"1" : { "fieldEntered": "' + newType + '", "dataEntered": "' + newVal + '"}';
        jsonData += ' } }';
    return makeAjaxCall( jsonData );       
}

function addAllEmissionsToCart()
{       
    var singleVal = $('#singleEmissions').val();
    var individualVal = $('#individualEmissions').val();
    var householdVal = $('#householdEmissions').val();
    var programmeId = $( "input[name='programmeId'][checked]" ).val();
    
    var jsonData  = '{ "enteredData" : {';
        jsonData += '"1" : { "fieldEntered" :"singleEmissions", "dataEntered" : "' + singleVal + '" },';
        jsonData += '"2" : { "fieldEntered" :"individualEmissions", "dataEntered" : "' + individualVal + '" },';
        jsonData += '"3" : { "fieldEntered" :"householdEmissions", "dataEntered" : "' + householdVal + '"},';
        jsonData += '"4" : { "fieldEntered" :"programmeId", "dataEntered" : "' + programmeId + '"}';
        jsonData += '} }';
    
    return makeAjaxCall( jsonData );
}

function makeAjaxCall( jsonData )
{
    var ajaxReturn = $.ajax({
        type: "POST",
        async: false,
        url: "/wp-content/themes/default/emissions-calc/ajax.php",
        data: "action=updateCart&data=" + jsonData,
        success: function(msg){  
        }
    });
    
    return $.secureEvalJSON( ajaxReturn.responseText );
}

function removeRow( row )
{
    row.parent().parent().fadeOut( "normal", function(){
        row.parent().parent().remove();
        recalculateEmissions();
        } );

    return false;
}

/**
 * VALIDATION FUNCTIONS
 */
function checkWholeNumber( input ) 
{ 
    if( input == '' ) { return 0; } 
    
    var newstring = parseInt(input).toString(); 
    
    if( input.length == newstring.length && newstring != "NaN" && parseInt(input) >= 0 ) 
    { return newstring; } 
    else 
    { return 'invalid'; } 
    
}

function trim( input )
{
    return input.replace(/^\s*(\S*(\s+\S+)*)\s*$/, "$1");
}

function validateCheckoutEmissionValues()
{
    var singleVal = $('#singleEmissions').val();
    var individualVal = $('#individualEmissions').val();
    var householdVal = $('#householdEmissions').val();
    var allValid = true;
    
    if( checkWholeNumber( singleVal ) == 'invalid' )
    {
        $( '#notification' ).text( 'Please enter only whole numbers in each field' );   
        $('#singleEmissions').addClass( 'error' );
        allValid = false;      
    } 
    if( checkWholeNumber( individualVal ) == 'invalid' )
    {
        $( '#notification' ).text( 'Please enter only whole numbers in each field' );   
        $('#individualEmissions').addClass( 'error' );
        allValid = false;    
    }
    if( checkWholeNumber( householdVal ) == 'invalid' )
    {
        $( '#notification' ).text( 'Please enter only whole numbers in each field' );   
        $('#householdEmissions').addClass( 'error' );
        allValid = false;    
    }
    
    if( !allValid )
    {        
        $('#notification').animate({ opacity: 'hide' }, 10);
        $('#notification').animate({ opacity: 'show' }, 400);	
        
        return false;
    }     
    else
    {
        $('input').removeClass( 'error' );
        $('#notification').text('');
        $('#notification').animate({ opacity: 'hide' }, 10);        
    } 
    
    return allValid;
}

function validateCheckoutShippingValues()
{
    errors = new Array();
    
    var firstName = $('#firstName').val();
    var lastName = $('#lastName').val();
    var emailAddress = $('#emailAddress').val();
    var address = $('#address').val();
    var suburb = $('#suburb').val();
    var city = $('#city').val();
    var firstName = $('#firstName').val();
    var singleVal = $('#singleEmissions').val();
    var individualVal = $('#individualEmissions').val();
    var householdVal = $('#householdEmissions').val();
    var allValid = true;
    
    // FIRST NAME
    if( trim( firstName ) == '' )
    {
        errors.push( '<li>Please enter your first name</li>' );
        $('#firstName').addClass( 'error' );      
        allValid = false;    
    }
    else if( ( trim( firstName ) ).length > 50 )
    {
        errors.push( '<li>Please enter fewer than 50 characters for your first name</li>' );
        $('#firstName').addClass( 'error' );      
        allValid = false;        
    }
    
    // LAST NAME
    if( trim( lastName ) == '' )
    {
        errors.push( '<li>Please enter your last name</li>' );
        $('#lastName').addClass( 'error' );      
        allValid = false;        
    }
    else if( ( trim( lastName ) ).length > 50 )
    {
        errors.push( '<li>Please enter fewer than 50 characters for your last name</li>' );
        $('#lastName').addClass( 'error' );      
        allValid = false;        
    }
    
    // EMAIL ADDRESS
    if( trim( emailAddress ) == '' )
    {
        errors.push( '<li>Please enter a value for the email address</li>' );
        $('#emailAddress').addClass( 'error' );      
        allValid = false;        
    }
    else if( ( trim( emailAddress ) ).length > 100 )
    {
        errors.push( '<li>Please enter fewer than 100 characters for the email address</li>' );
        $('#emailAddress').addClass( 'error' );      
        allValid = false;        
    }
    else
    {
        var filter = /^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
        if( !filter.test( emailAddress ) )
        {
            errors.push( '<li>Please enter a valid email address</li>' );
            $('#emailAddress').addClass( 'error' );      
            allValid = false; 
        }
    }
    
    // ADDRESS
    if( trim( address ) == '' )
    {
        errors.push( '<li>Please enter your address</li>' );
        $('#address').addClass( 'error' );      
        allValid = false;       
    }
    else if( ( trim( address ) ).length > 100 )
    {
        errors.push( '<li>Please enter fewer than 100 characters for your address</li>' );
        $('#address').addClass( 'error' );      
        allValid = false;       
    }
    
    
    // SUBURB
    if( ( trim( suburb ) ).length > 50 )
    {
        errors.push( '<li>Please enter fewer than 50 characters for your suburb</li>' );
        $('#suburb').addClass( 'error' );      
        allValid = false;        
    }
    
    // CITY
    if( trim( city ) == '' )
    {
        errors.push( '<li>Please enter your city</li>' );
        $('#city').addClass( 'error' );      
        allValid = false;        
    }
    else if( ( trim( city ) ).length > 50 )
    {
        errors.push( '<li>Please enter fewer than 50 characters for your city</li>' );
        $('#city').addClass( 'error' );      
        allValid = false;        
    }    
        
    if( singleVal == '' || singleVal == 0 )
        if( individualVal == '' || individualVal == 0 )
            if( householdVal == '' || householdVal == 0 )
            {
                errors.push( '<li>There is nothing in your cart to purchase</li>' );   
                $('#totalCost').addClass( 'error' );
                allValid = false;
            }
        
    if( !allValid )
    {
        var errorHtml = '<ul>';
        for( var i=0; i<errors.length; i++ )
        {
            errorHtml += errors[i];
        }
        errorHtml += '</ul>';
        
        $( '#notification' ).html( errorHtml );
        
        $('#notification').animate({ opacity: 'hide' }, 10);
        $('#notification').animate({ opacity: 'show' }, 400);	
        
        return false;
    }     
    else
    {
        $('input').removeClass( 'error' );
        $( '#notification' ).text('');
        $('#notification').animate({ opacity: 'hide' }, 10);        
    } 
    
    return allValid;
}

