var loader = new YAHOO.util.YUILoader({

    require: ['event', 'animation', 'connection', 'json'],

	onSuccess: function() {
		return true;
	},
	
	onFailure: function(o) {
        alert("error: " + YAHOO.lang.dump(o));
    }

 });
 
loader.insert();


var formSubmit = function(e) {
	YAHOO.util.Connect.setForm(e);

	YAHOO.util.Connect.asyncRequest('POST', e.action, {
		success: function(e) {
			response = YAHOO.lang.JSON.parse(e.responseText);
 			
 			var msg = response['msg']['global'];
			if ( msg != null ) {
				if ( msg['class'] == 'ok' && response['page'] != null) 
					document.location.href = response['page'];
				
				YAHOO.util.Dom.setStyle('gui-form-msg', 'opacity', 0);
				YAHOO.util.Dom.setStyle('gui-form-msg', 'display', 'block');
				YAHOO.util.Dom.get('gui-form-msg').innerHTML = msg['content'];
				YAHOO.util.Dom.addClass('gui-form-msg', msg['class']);
				
				var anim = new YAHOO.util.Anim('gui-form-msg', {opacity: {to: 1}}, .5);
				anim.animate()
				anim.onComplete.subscribe(function (e) {
					var anim = new YAHOO.util.Anim('gui-form-msg', {opacity: {to: 1}}, 5);
					anim.animate();
					anim.onComplete.subscribe(function (e) {
						var anim = new YAHOO.util.Anim('gui-form-msg', {opacity: {to: 0}}, .5);
						anim.animate();
						anim.onComplete.subscribe(function (e) {
							YAHOO.util.Dom.setStyle('gui-form-msg', 'display', 'none');
						});
					});
				});
			}
			
			var msg = response['msg']['form'];
			for (k in msg) {
				if (typeof YAHOO.util.Dom.get('gui-form-input-' + k + '-msg')=="undefined"||!YAHOO.util.Dom.get('gui-form-input-' + k + '-msg'))
					continue;
				
				YAHOO.util.Dom.setStyle('gui-form-input-' + k + '-msg', 'opacity', 0);
				YAHOO.util.Dom.addClass('gui-form-input-' + k, 'field-error');
				YAHOO.util.Dom.get('gui-form-input-' + k + '-msg').innerHTML = msg[k]['content'];
				YAHOO.util.Dom.addClass('gui-form-input-' + k + '-msg', msg[k]['class']);
				new YAHOO.util.Anim('gui-form-input-' + k + '-msg', {opacity: {to: 1}}, .5).animate();
				
				YAHOO.util.Event.addListener('gui-form-input-' + k, 'focus', function(e){
					YAHOO.util.Dom.removeClass(this, 'field-error');
					var anim = new YAHOO.util.Anim(this.id + '-msg', {opacity: {to: 0} }, .5);
					anim.animate();
					tmp_val = this.id;
					anim.onComplete.subscribe(function(e) {
						YAHOO.util.Dom.setStyle(tmp_val + '-msg', 'display', 'none');
					});
				});
			}
			return false;
		},
		failure: function(e) {
			return false;
		}
	});
	
	return false;
};
