/*
 * contactable 1.2.1 - jQuery Ajax contact form
 *
 * Copyright (c) 2009 Philip Beel (http://www.theodin.co.uk/)
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) 
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 *
 * Revision: $Id: jquery.contactable.js 2010-01-18 $
 *
 */
 
//extend the plugin
(function ($) {

    //define the new for the plugin ans how to call it	
    $.fn.contactable = function (options) {
        //set default options  
        var defaults = {
            url: '/WMEmail/',
            name: 'Name',
            email: 'Email',
            message: 'Message',
            subject: 'Subject',
            submit: 'SEND',
            recievedMsg: 'Thank you for your message, your feedback is welcomed.',
            notRecievedMsg: 'Sorry but your message could not be sent, please try again later.',
            disclaimer: 'Messages received after regular business hours or during weekends and holidays will likely be responded to on the next business day.',
            hideOnSubmit: true

        };

        //call in the default otions
        var options = $.extend(defaults, options);
        //act upon the element that is passed into the design    
        return this.each(function () {
            //construct the form
            var this_id_prefix = '#' + this.id + ' ';
            $(this).html('<div id="contactable_inner"></div><form id="contactForm" method="" action="" style="height: 540px;"><div id="loading"></div><div id="callback"></div><div class="holder"><p><label for="email">' + options.email + ' <span class="red"> * </span></label><br /><input id="email" class="contact" name="email" /></p><p><label for="subject">' + options.subject + ' <span class="red"> * </span></label><br /><input id="subject" class="contact" name="subject" /></p><p><label for="message">' + options.message + ' <span class="red"> * </span></label><br /><textarea id="message" name="message" class="message" rows="4" cols="30" ></textarea></p><p id="recaptcha_incorrect" style="text-align:center; color: #FF0000; font-weight:bold;"></p><div id="recaptcha_div"></div><p><input class="submit" type="submit" value="' + options.submit + '"/></p><p class="disclaimer">' + options.disclaimer + '</p></div></form>');
            //show / hide function
            $(this_id_prefix + 'div#contactable_inner').toggle(function () {
                $(this_id_prefix + '#overlay').css({ display: 'block' });
                $(this).animate({ "marginLeft": "-=5px" }, "fast");
                $(this_id_prefix + '#contactForm').animate({ "marginLeft": "-=0px" }, "fast");
                $(this).animate({ "marginLeft": "+=387px" }, "slow");
                $(this_id_prefix + '#contactForm').animate({ "marginLeft": "+=390px" }, "slow");
            },
			function () {
			    $(this_id_prefix + '#contactForm').animate({ "marginLeft": "-=390px" }, "slow");
			    $(this).animate({ "marginLeft": "-=387px" }, "slow").animate({ "marginLeft": "+=5px" }, "fast");
			    $(this_id_prefix + '#overlay').css({ display: 'none' });
			});

            //validate the form 
            $(this_id_prefix + "#contactForm").validate({
                //set the rules for the field names
                rules: {
                    subject: {
                        required: true,
                        minlength: 2
                    },
                    email: {
                        required: true,
                        email: true
                    },
                    message: {
                        required: true
                    },
                    recaptcha_response_field: {
                        required: true
                    }
                },
                //set messages to appear inline
                messages: {
                    subject: "",
                    email: "",
                    message: ""
                },

                submitHandler: function () {
                    $(this_id_prefix + '.holder').hide();
                    $(this_id_prefix + '#loading').show();
                    $.ajax({
                        type: 'POST',
                        url: options.url,
                        data: { subject: $(this_id_prefix + '#subject').val(), email: $(this_id_prefix + '#email').val(), message: $(this_id_prefix + '#message').val(), recaptcha_challenge_field: $('#recaptcha_challenge_field').val(), recaptcha_response_field: $('#recaptcha_response_field').val(), page_id: options.page_id, domain_id: options.domain_id},
                        success: function (data) {
                            $(this_id_prefix + '#loading').css({ display: 'none' });
                            if (data == 'success') {
                                $(this_id_prefix + '#callback').show().append(options.recievedMsg);
                                if (options.hideOnSubmit == true) {
                                    //hide the tab after successful submition if requested
                                    $(this_id_prefix + '#contactForm').animate({ dummy: 1 }, 2000).animate({ "marginLeft": "-=450px" }, "slow");
                                    $(this_id_prefix + 'div#contactable_inner').animate({ dummy: 1 }, 2000).animate({ "marginLeft": "-=447px" }, "slow").animate({ "marginLeft": "+=5px" }, "fast");
                                    $(this_id_prefix + '#overlay').css({ display: 'none' });
                                }
                            } else if (data == 'incorrect') {
                                $(this_id_prefix + '.holder').show();
                                $(this_id_prefix + '#loading').hide();
                                $("#recaptcha_incorrect").text("Incorrect reCaptcha, try again.");
                                Recaptcha.create("6LeArwIAAAAAAGmrHSgVNwwox8nvfGLibWWsm-XR", "recaptcha_div", { theme: "red" });
                            } else {
                                $(this_id_prefix + '#callback').show().append(options.notRecievedMsg + "<br /><br />" + data);
                                setTimeout(function () {
                                    $(this_id_prefix + '.holder').show();
                                    $(this_id_prefix + '#callback').hide().html('');
                                }, 2000);
                            }
                        },
                        error: function () {
                            $(this_id_prefix + '#loading').css({ display: 'none' });
                            $(this_id_prefix + '#callback').show().append(options.notRecievedMsg);
                        }
                    });
                }
            });
        });
    };
})(jQuery);

