
var SiteController = new Class({
    _slidingPanel: null,
    _menuItems: null,
    _shakeFormEffect: null,
    
    initialize: function() {
        this._slidingPanel = new SlidingPanel('content-container', {
            slideDuration: 1500,
            slideTransition: Fx.Transitions.Circ.easeInOut,
            onSlideStart: function(slidingPanel) {
                var pane = slidingPanel.getCurrentPane();
                this.setOverflow(pane, true);
                if (pane.id == 'contactPane') {
                    this.clearMailMessage();
                }
            }.bind(this),
            onSlideComplete: function(slidingPanel) {
                var pane = slidingPanel.getCurrentPane();
                this.setOverflow(pane, false);
            }.bind(this)
        });
        this._menuItems = $('menu-container').getChildren();
        
        $('sendButton').addEvent('click', this.sendMail.bindWithEvent(this));
        this._shakeFormEffect = new Fx.Style($('contactForm'), 'left', {
            duration: 300,
            transition: Fx.Transitions.Shake,
            onComplete: function() {
                $('contactForm').setStyle('left', '0px');
            }
        });
    },
    
    gotoPage: function(pageId, event) {
        if (event) {
            new Event(event).preventDefault();
        }
        var menuId = pageId+'Menu';
        this._menuItems.each(function(menuItem) {
           if (menuItem.id != menuId) {
               menuItem.removeClass('item-over');
               menuItem.addClass('item');
           } else {
               menuItem.removeClass('item');
               menuItem.addClass('item-over');
           }
        });
        var paneId = pageId+'Pane';
        this._slidingPanel.gotoPane(paneId);
    },
    
    setOverflow: function(pane, hidden) {
        if (hidden) {
            pane.setStyle('overflow-y', 'hidden');
        } else {
            pane.setStyle('overflow-y', 'auto');
        }
        $ES('textarea', pane).each(function(item) {
            if (hidden) {
                item.setStyle('overflow-y', 'hidden');
            } else {
                item.setStyle('overflow-y', 'auto');
            }
        });
    },
    
    sendMail: function(event) {
        event.preventDefault();
        
        var nameField = $('nameField');
        var emailField = $('emailField');
        var phoneField = $('phoneField');
        var subjectField = $('subjectField');
        var messageField = $('messageField');
        var isValid = true;
        
        if (! emailField.getValue().match(/^[a-z0-9._%-]+@[a-z0-9.-]+\.[a-z]{2,4}$/i)) {
            this._showError(emailField, true);
            isValid = false;
        } else {
            this._showError(emailField, false);
        }
        if (nameField.getValue().length == 0) {
            this._showError(nameField, true);
            isValid = false;
        } else {
            this._showError(nameField, false);
        }
        if (messageField.getValue().length == 0) {
            this._showError(messageField, true);
            isValid = false;
        } else {
            this._showError(messageField, false);
        }
        if (isValid) {
            $('contactForm').send({
                method: 'post',
                'onComplete': function(responseText) {
                    var response = Json.evaluate(responseText);
                    var responseNode = $('responseMessage');
                    if (response.status == 'success') {               
                        nameField.value = "";
                        emailField.value = "";
                        phoneField.value = "";
                        subjectField.value = "";
                        messageField.value = "";
                        if (responseNode) {
                            responseNode.setText(response.message);
                            responseNode.removeClass('message-error');
                            responseNode.addClass('message-success');
                        }
                    } else if (response.status == 'error') {
                        if (responseNode) {
                            responseNode.setText(response.message);
                            responseNode.removeClass('message-success');
                            responseNode.addClass('message-error');
                        }
                    }
                }
            });
        } else {
            this._shakeFormEffect.start(0, 5);
        }
        return false;
    },
    
    clearMailMessage: function() {
        $('responseMessage').setText("");
    },
    
    _showError: function(field, showError) {
        var parentField = field.getParent();
        if (showError) {
            parentField.addClass('field-error');
        } else {
            parentField.removeClass('field-error');
        }
    }
    
});