/*
 * @fileOverview This file intentions is to add Ajax behavior to competitions pages (those that uses templates/cms/page/new_competition.html template)
 * @author Matias Aguirre (maguirre)
 */
myDeco.competition = {
	form: null,
	previous_data: null,

	init: function () {
		this.form = $('emailvision-form');
		if(this.form)
		    this.form.observe('submit', this.send.bindAsEventListener(this));
		
		var link = $('share-with-friends-link');
		if(link) {
			var share_form = $('share-form').hide();
			link.observe('click', function(e) {
				e.stop();
				share_form.show();
				link.up('p').hide();
			});
		}
	},
	
	send: function(e) {
		e.stop();

        var action = (this.form.getAttribute('action') || document.location.href);

        var idx = action.indexOf('?');
        if(idx > -1){
            var url = action.substring(0, idx),
                params = action.substring(idx);
        } else {
            var url = action, params = ''
        }

        url += (url.endsWith('/') ? '' : '/') + "ajax/";

		new Ajax.Request(url + params, {
			parameters : Object.extend(this.form.serialize(), {format: 'json'}),
			onSuccess : function(t) {
				try {
					var data = t.responseText.evalJSON();
				} catch(e) {
					return;
				}
				
				if (data.status == 'ok') {
					if(this.form.hasClassName('no-redirect')) {
						var block = this.form.up('#newsletter-box');
						block.down('.subscribe').hide();
						block.down('.success').show();
					} else {
						document.location = data.location;
					}
				} else if (data.status == 'error') {
					for(var k in data.messages)
						this.error(data.messages[k], 'id_' + k);

					if(this.previous_data) {
						for(var k in this.previous_data){
							if(!data.messages[k])
								this.error(null, 'id_' + k);
						}
					}

                    if(this.form.down('.captcha-errors').visible()){
                        var cfield = this.form.down('.captcha-field input');
                        if(cfield.value != ''){
                            var img = this.form.down('#ev-captcha'),
                                n   = '#' + Math.floor(Math.random()*1000);
                            if(img.src.endsWith('#')) {
                                img.src = img.src.slice(0, -1) + n
                            } else {
                                img.src = img.src + n;
                            }
                        }
                    }

					this.previous_data = data.messages;
				}
			}.bind(this),
			onFailure : function() {},
			onComplete: function() {
				myDeco.formControls.submitButtons.enable(this.form);
			}.bind(this)
		});
	},
	
	error: function(errors, dom_id){
		if(errors) {
			var errors_html = '<ul class="errorlist">';
			errors._each(function(err) {
				errors_html += '<li>' + err + '</li>';
			});
			errors_html += '</ul>';
			$(dom_id + '-errors').update(errors_html).show();
		} else {
			$(dom_id + '-errors').update('').hide();
		}
	}
};

addLoadEvent(myDeco.competition.init.bind(myDeco.competition));
