
window.addEvent('domready', function() {
    quickInvoiceForm = new QuickInvoiceForm();
   
    var md = Date.parse('next saturday');
    var d = md.getDate();
    var m = md.getMonth()+1;
    var y = md.getFullYear();

    new Calendar({PeriodEnd:'d/m/Y'});
});


var QuickInvoiceForm = new Class({
    initialize: function() {
        $$('.addRow').each(function(button, index) {
            button.addEvent('click', this.addRow.bind(this));
        }, this);
        
        $$('.deleteRow').each(function(button, index) {
            button.addEvent('click', this.deleteRow.bind(this, button.getParent('tr')));
        }, this);
        
        $('invoice').addEvent('submit', function() {
            return this.validate();
        }.bind(this));
        
    },
    
    addRow: function() {
        $$('img.addRow').each(function(button) {
            button.setStyle('display', 'none');
        });
        
        $$('img.deleteRow').each(function(button) {
            button.setStyle('display', 'inline');
        });
        
        var newRow = $$('.rate-row')[0].clone();
      
        newRow.getElements('input[type="text"]').each(function(input) {
            input.removeClass('red');
            input.value = '';
        });
        
        var minutes = newRow.getElement('select');
        minutes.selectedIndex = 0;
        minutes.value = 0;
        
        newRow.inject($$('.rate-row')[$$('.rate-row').length - 1], 'after');
        
        newRow.getElement('img.addRow').setStyle('display', 'inline');
        newRow.getElement('img.addRow').addEvent('click', this.addRow.bind(this));
        newRow.getElement('img.deleteRow').addEvent('click', this.deleteRow.bind(this, newRow));
    },
    
    deleteRow: function(row) {
        row.destroy();
        
        var rowCount = $$('.rate-row').length;
        $$('.rate-row')[rowCount - 1].getElement('img.addRow').setStyle('display', 'inline');
        
        if(rowCount == 1) 
            $$('.rate-row')[rowCount - 1].getElement('img.deleteRow').setStyle('display', 'none');
    },
    
    validateRow: function(row, index) {
    
        var hours = row.getElement('input[name="hour"]');
        var minutes = row.getElement('select');
        var days = row.getElement('input[name="day"]');
        var rate = row.getElement('input[name="rate"]');
        
        hours.removeClass('red');
        days.removeClass('red');
        rate.removeClass('red');
    
        if((hours.value == '' && days.value == '') || (hours.value != '' && days.value != '')) {
            hours.addClass('red');
            days.addClass('red');
            
            stuffError('Rate ' + (index + 1) + ': Please enter a single value for hours or days.');
        } else {
            if(hours.value != '' && !hours.value.match(/\d+/)) {
                hours.addClass('red');
                stuffError('Rate ' + (index + 1) + ': Please enter a valid hour value.');
            }
            else if(days.value != '' && !days.value.match(/\d+/)) {
                days.addClass('red');
                stuffError('Rate ' + (index + 1) + ': Please enter a valid day value.');
            }
        }
        
        if(rate.value == '' || !rate.value.match(/^[0-9]+(\.[0-9]{2})?$/)) {
            rate.addClass('red');
            stuffError('Rate ' + (index + 1) + ': Please enter a valid rate.');
        }
    },
    
    validate: function() {
	    errorCount = 0;
	    errors = new Array();
    	
	    clearErrors();
    	
	    stuffError( validatePresence( "EmployeeID", "Please enter your employee ID" ));
	    if ($('EmployeeID').value != '') {
		    if (isNaN($('EmployeeID').value) || $('EmployeeID').value.length != 6) {
			    stuffError("Please enter the 6 digit customer ID, if you don't know your customer number then please either examine your invoice statement or call Brookson Membership Services Team on 08450581200");
		    }
	    }
    	
	    stuffError( validatePresence( "ContactNumber", "Please enter your contact number" ));
	    if($('ContactNumber').value != '') {
	        stuffError(validatePattern("ContactNumber", /^0\d{2,4}[ -]?[\d]{3}[\d -]{1}[\d -]{1}[\d]{1,4}$/, "Please enter a valid contact number."));
	    }
    	
	    stuffError( validatePresence( "PeriodEnd", "Please select the week ending date" ));
	    if($('PeriodEnd').value != '') {
	        stuffError(validatePattern("PeriodEnd", /^\d{2}\/\d{2}\/\d{4}$/, "Please enter a valid date in the form dd/MM/yyyy."));
	    }
    	
    	$('ExpenseBonus').removeClass('red');
	    if ($('ExpenseBonus').value.length > 0)
		    stuffError(validatePattern("ExpenseBonus", /^[0-9]+(\.[0-9]{2})?$/, "Please enter a valid number for your expenses"));
		    
		// Validate Each Row.
		$$('.rate-row').each(function(row, index) {
		    this.validateRow(row, index);
		}, this);
    	
	    if ( errorCount > 0 )
		    alertErrors(errors);
    	
	    return ( errorCount == 0 );
    }
});