﻿/// <reference path="jquery-1.4.1.min.js" />
/// <reference path="spider.validation.js" />
/// <reference path="spider.js" />

spider.submitForm = function (settings, callback) {

    var _settings = {
        formId: '',
        postUrl: '/',
        postData: '', //not json/object literal
        postSerialize: true,
        indicatorImagePath: '/content/images/indicator.gif',
        indicatorClassName: 'indicator',
        message: true,
        messageClassName: 'message',
        messageSpeed: 'slow',
        messageSuccess: 'Thank you',
        messageFail: 'Close, but no cigar',
        messageFadeOut: true,
        messageFadeOutDuration: 4000,
        debug: true,
        validate: false,
        indicator: true
    };

    $.extend(_settings, settings);

    return {
        init: function () {
            var keepGoing = false;
            if (_settings.validate) {
                if (spider.validation.isValid(_settings.formId)) {
                    keepGoing = this._doIt();
                }
            } else {
                keepGoing = this._doIt();
            }
            return false;
        },

        _doIt: function () {
            var $indicator = $('#' + _settings.formId).find('.' + _settings.indicatorClassName).eq(0);
            var $message = $('#' + _settings.formId).find('.' + _settings.messageClassName).eq(0);
            if (_settings.indicator) { $indicator.show(); }

            return $.post(_settings.postUrl, _settings.postSerialize ? $('#' + _settings.formId).serialize() : _settings.postData, function (d) {

                $indicator.hide();

                //success
                var success = true;
                if (_settings.debug) { success = d.message == 'success' ? true : false; }

                //message
                if (_settings.message) {

                    //set message, server or client
                    if (_settings.debug) {
                        $message.text(d.description);
                    } else {
                        $message.text(success ? _settings.messageSuccess : _settings.messageFail);
                    }

                    //show message
                    $message.show(_settings.messageSpeed);

                    //fadeout
                    if (_settings.messageFadeOut) {
                        setTimeout(function () {
                            $message.hide(_settings.messageSpeed);
                        }, _settings.messageFadeOutDuration);
                    }
                }

                //callback
                if (callback !== undefined) { callback(d); }


            }, 'json');
        }
    }


};
