;SF.GIMP = 
{

    checkFormFieldExistsNotEmpty: function($element)
        {
        //  Check obvious
        if($element.length == 0 || $element.val() == '')
        {
            return false;
        }
        
        // Check checkboxes and radio
        var type = $($element[0]).attr('type');
        if(type != 'radio' && type != 'checkbox')
        {
            return true;
        }
        
        var checked = false;
        $element.each(function()
        {
            if($(this).attr('checked'))
            {
                checked = true;
            }
        });
        
        return checked;
    },

    GIMP: 
    {
        baseUrl: '/sendEnquiry?',
        brand: 'SF',
        forwardUrl: '/wps/wcm/myconnect/student-flights/global/forms/product-enquire-success',
        failUrl: '/wps/wcm/myconnect/student-flights/global/forms/product-enquire-fail',
        ignoreFields: ['failUrl', 'forwardUrl']
    },
        
    filterInputText: function(str)
    {
        try
        {
            return str.match(/[a-zA-Z0-9\(\)\',.!/:%@&?+_=\-\$ ]+/gm)
                       .join('');
        }
        catch(e)
        {
            return '';
        }
    },    
    
    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(FCL.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 += (SF.GIMP.checkFormFieldExistsNotEmpty($form.find('input[name="type"]'))) ? '' : 'type=General+Enquiry+Contact+Details&';
        urlStr += (SF.GIMP.checkFormFieldExistsNotEmpty($form.find('input[name="email"]'))) ? '' : 'email=email@email.com&';
        urlStr += (SF.GIMP.checkFormFieldExistsNotEmpty($form.find('input[name="postCode"]'))) ? '' : 'postCode=0000&';
        urlStr += (SF.GIMP.checkFormFieldExistsNotEmpty($form.find('input[name="brand"]'))) ? '' : 'brand='+ SF.GIMP.GIMP.brand + '&';
        urlStr += (SF.GIMP.checkFormFieldExistsNotEmpty($form.find('input[name="emailNewsletter"]'))) ? '' : 'emailNewsletter=No'+ '&';
        urlStr += (SF.GIMP.checkFormFieldExistsNotEmpty($form.find('input[name="forwardUrl"]'))) ? '' : 'forwardUrl='+ SF.GIMP.GIMP.forwardUrl + '&';
        urlStr += (SF.GIMP.checkFormFieldExistsNotEmpty($form.find('input[name="failUrl"]'))) ? '' : 'failUrl='+ SF.GIMP.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 = SF.GIMP.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(SF.GIMP.filterInputText($(this).val())) + '&';
            }
        });

        gimpUrl = this.checkRequiredFields($form, gimpUrl);
        return gimpUrl.substring(0, gimpUrl.length -1);
    }
};
