        
    $.noConflict();

    /*
     * NewsletterSender
     * @author Gennadiy Ukhanov
     * @version 0.0.1
     * @build 1 (30/06/2011 11:18 AM)
     */
    (function(_global){

        /**
         * @namespace NewsletterSender Namespace -  for bluefountainmedia project's
         * @name NewsletterSender
         */
        var bfm = /** @lends NewsletterSender */{
            /**
             * NewsletterSender Version Number
             * @type String
             * @const
             */
            VERSION : '0.0.1'
        };
        

        bfm.NewsletterSender = function() {

            /**
             * Add a context to the slider
             * @type object.<CollectionSettings>
             * @private
             */
            this._scope = this;

            /**
             * NewsletterSender containers
             * @public
             */
            this.form = null;
            this.url = null;

            /**
             * NewsletterSender containers
             * @private
             */
            this._submit = null;
            this._input = null;
            this._messageBox = null;

        };

        bfm.NewsletterSender.prototype = {

            /**
             * @public
             */
            create : function() {
                this.form.submit(jQuery.proxy(this._scope, '_onFormSubmit'));
            },

            /**
             * @private
             */
            _disableForm : function() {
                this.form.find('input[type=text]').attr('disabled', 'disabled');
                this.form.find('input[type=submit]').attr('disabled', 'disabled');
                this.form.addClass('disabled');
            },

            /**
             * @private
             */
            _enableForm : function() {
                this.form.find('input[type=text]').removeAttr('disabled');
                this.form.find('input[type=submit]').removeAttr('disabled');
                this.form.removeClass('disabled');
            },

            /**
             * Get object with all vars
             * @private
             * @return {object}
             */
            _getDataFromForm : function() {

                var items = jQuery('._for_sending');
                var obj = {};

                for(var i=0; i<items.length; i++) {
                    var key = jQuery(items[i]).attr('value');
                    var id = jQuery(items[i]).attr('name');
                    if(jQuery(items[i]).hasClass('type-checkbox')) {
                        key = jQuery(items[i]).is(":checked");
                        if(!key) {
                            key = null;
                            id = null;
                        }
                    }

                    if(id!=null) {obj[id] = key;}
                }

                return obj;
            },

            /**
             * @private
             */
            _sendForm : function() {
			
				
                jQuery.ajax({
                    url: this.form.attr('action'),
                    type: this.form.attr('method'),
                    data: this._getDataFromForm(),
                    dataType: 'json',
                    success: jQuery.proxy(this._scope, '_onFormSendedSuccess'),
                    error: jQuery.proxy(this._scope, '_onFormSendedError')
                });
				
				
            },

            /**
             * @private
             */
            _onFormSubmit : function() {

                 if(this._messageBox!= null) {
                    this._messageBox.remove();
                }


                var email = this.form.find('.email').val();

                if((/^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/).test(email)) {
                    this._disableForm();
                    this._sendForm();
                } else {
                    this.buildMessageBox(bfm.messages.email_validate);
                }


                
                return false;
            },

            /**
             * @private
             */
            _onFormSendedSuccess : function(data) {
                this._enableForm();
                this.buildMessageBox(data['result']);
            },


            /**
             * @private
             */
            _onFormSendedError : function(data) {
                this._enableForm();
                this.buildMessageBox(bfm.messages.error_json_loaded);
            },

            /**
             * @public
             */
            buildMessageBox : function(data) {
 
                this._messageBox = jQuery(
                    "<div class='message-box'>"+
                        "<p>"+ data +"</p>"+
                        "<a class='message-box-close' href='#/close/'>Close box</a>"+
                    "</div"
                );
                this._messageBox.appendTo(this.form).hide().fadeIn();
                this._messageBox.find('.message-box-close').click(jQuery.proxy(this._scope, 'messageBoxClose'));
            },

            /**
             * @private
             */
            messageBoxClose : function() {
                this._messageBox.fadeOut(jQuery.proxy(this._scope, '_onMessageBoxClose'));
                return false;
            },
            
            /**
             * privatepublic
             */
            _onMessageBoxClose : function() {
                this._messageBox.remove();
            }

        }

        _global.bfm = bfm;

    })(window || this);
