;ET.GIMP = 
{
    setSubject: function($form)
    {
        // if no subjeetc field found, abort (GIMP will use default subject based on Type)
        if($form.find('input[name="subject"]').length == 0) { return; }

        var $subject = $form.find('input[name="subject"]');
        var matches = $subject.val().match(/\{([a-zA-Z0-9])+\}/g);

        // If no tokens found, abort
        if(matches == null) { return; }

        jQuery.each(matches, function(i) 
        {
            var fieldName = matches[i].match(/[a-zA-Z0-9]+/)[0];
            var $field = $form.find(ET.UTIL.format('input[name="{1}"]', fieldName));
            var fieldValue = (typeof $field.val() != 'undefined') ? $field.val() : '';
            $subject.val($subject.val().replace(matches[i], fieldValue));
        });
    },

    /**
     * Provide defaults for required GIMP values if they are missing in a form
     */
    checkRequiredFields: function($form, urlStr)
    {
        urlStr += (ET.FORMS.checkFormFieldExistsNotEmpty($form.find('input[name="type"]'))) ? '' : 'type=General+Enquiry+Contact+Details&';
        urlStr += (ET.FORMS.checkFormFieldExistsNotEmpty($form.find('input[name="email"]'))) ? '' : 'email=email@email.com&';
        urlStr += (ET.FORMS.checkFormFieldExistsNotEmpty($form.find('input[name="postCode"]'))) ? '' : 'postCode=0000&';
        urlStr += (ET.FORMS.checkFormFieldExistsNotEmpty($form.find('input[name="brand"]'))) ? '' : 'brand='+ ET.SETTINGS.GIMP.brand + '&';
        urlStr += (ET.FORMS.checkFormFieldExistsNotEmpty($form.find('input[name="emailNewsletter"]'))) ? '' : 'emailNewsletter=No'+ '&';
        urlStr += (ET.FORMS.checkFormFieldExistsNotEmpty($form.find('input[name="forwardUrl"]'))) ? '' : 'forwardUrl='+ ET.SETTINGS.GIMP.forwardUrl + '&';
        urlStr += (ET.FORMS.checkFormFieldExistsNotEmpty($form.find('input[name="failUrl"]'))) ? '' : 'failUrl='+ ET.SETTINGS.GIMP.failUrl + '&';
        return urlStr;
    },
    
    /*
     * Take the supplied jQuery form referrence, collect all relevant form data, build a GIMP URL string and return it
     */
    processForm: function($form)
    {
        var gimpUrl = ET.SETTINGS.GIMP.baseUrl;
        this.setSubject($form);
        
        $form.find('input[type="text"], input[type="hidden"], input[type="checkbox"]:checked, input[type="radio"]:checked, select, textarea').each(function()
        {
            if($(this).attr('name') != '')
            {
                var fieldName = $(this).attr('name');
                gimpUrl += fieldName + '=' + encodeURIComponent(ET.UTIL.filterInputText($(this).val())) + '&';
            }
        });

        gimpUrl = this.checkRequiredFields($form, gimpUrl);
        return gimpUrl.substring(0, gimpUrl.length -1);
    }
};
