nuevo = {merda:{}};


$(function(){
	
	var get_class_name = function($c){
		return 'check-area-' + $c.data('name');
	};

	/*
	 * CHECK AREA 
	 */
	$('.check-area').each(function(){
		$(this).addClass(get_class_name($(this)));
		
	});

	$('.check-area').click(function(e){
		e.preventDefault();
		var $input = $(this).find('input');
				
		if (!$(this).hasClass('checked'))
		{
			if ($(this).hasClass('check-area-radio'))
			{
				$('.checked.'+get_class_name($(this))).not($(this)).click();
				$('.check-area-'+$input.data('name')).removeClass('invalid-input');
			}
			$(this).addClass('checked');
		
			$input.attr('name', $input.data('name'));
			//console.log($input);
			//$input.attr('name', '');
		}
		else
		{
			$input.attr('name', '');
			//$input.attr('name', $input.data('name'));
			$(this).removeClass('checked');
		}
		
	});
	
	$('.check-area input').each(function(){
		var $e = $(this);
		$e.data('name', $e.attr('name'));
		$e.attr('name','');
	});

	$('.check-area').keypress(function(e){
		$(this).click();
	});


	/*
	 * TEXT INPUT
	 */
	$('input.rounded-black-box[type="text"]').focus(function(){
		if (!$(this).data('title')) $(this).data('title', $(this).val());
		var title = $(this).data('title');
		
		if ($(this).val() == title)
		{
			$(this).val('');
		}
	}).blur(function(){
		if ($(this).val() == '')
		{
			$(this).val($(this).data('title'));
		}
	}).each(function(){
		var title = $(this).data('title');
		if ($(this).val() == '' && title)
			$(this).val(title);
	});
	/*
	$('.password-real').each(function(){
		var $real = $(this);
		var $dummy = $real.next('.password-dummy');
		$real.focus(function(){
			$dummy.hide();
			$real.show().focus();
			$real.attr('style', '');
		});
		$real.blur(function(){
			if ($real.val() == '')
			{
				$real.hide();
				$dummy.show().attr('style', '');;
			}
		})
	});
	*/

	/*
	 * SELECT AREA
	 */
	$('.select-area').click(function(){
		var $t = $(this);
		
		if (!$(this).data('title')) $(this).data('title', $(this).children('.select-title'));
		
		if ($t.data('running')) return;
		$t.data('running', true);
		
		var $options = $(this).find('.select-options');
		
		
		
		if (!$t.hasClass('open'))
		{
			$t.addClass('open');
			var callback = function(){
				$t.data('running', false);
				
				
			};
			$options.stop().slideDown(900, callback);
		}
		else
		{
			var callback = function(){
				$t.data('running', false);
				$t.removeClass('open');
			};
			$options.stop().slideUp(900, callback);
		}
	});
	
	$('.select-area, .select-option').keypress(function(e){
		$(this).click();
	});


	$('.select-option').click(function(e){
		e.preventDefault();
		var $area = $(this).parents('.select-area');
		
		if (!$area.hasClass('selected')) $area.addClass('selected');
		if ($area.hasClass('invalid-input')) $area.removeClass('invalid-input');
		
		$area.children('input').val($(this).data('value'));
		
		$area.children('.select-title').val($(this).children().html());
	});
	
	$('.select-option').hover(function(){
		var $area = $(this).parents('.select-area');
		var $input = $area.children('.select-title');
		$area.data('prev-title', $input.val());
		$input.val($(this).children().html());
	}, function(){
		var $area = $(this).parents('.select-area');
		var $input = $area.children('input');
		var $hi = $area.children('.hidden-input');
		if ($hi.val() != $(this).data('value'))
			$input.val($area.data('prev-title'));
	});
	/*
	 * PASSWORD INPUT
	 */
	nuevo.merda.cur_pword = $('.password-dummy').focus(function(){
		var $dummy = $(this);
		var $real = $dummy.next('.password-real');
		$dummy.hide();
		$real.show();
		$real.focus();
		nuevo.merda.cur_pword = $real;
	}).keyup(function(){
		$(this).focus().next('.password-real').val($(this).val());
	});
	
	
	$('.password-real').blur(function(){
		
		var $real = $(this);
		var $dummy = $real.prev('.password-dummy');
		if ($real.val() == '')
		{
			$real.hide();
			$dummy.show();
			$dummy.val('Password');
			nuevo.merda.cur_pword = $dummy;
		}
	});
	
});

var Nuevo_Form = function($e){
	var c = this;
	$e.data('c', c);
	$e.submit(this.submit);
	this.text_inputs = $e.find('input[type="text"]').inputValidator({});
	this.pword_inputs = $e.find('input[type="password"]')
		.change(this.pwordChange)
		.keyup(this.pwordKeyup);
	
	this.select_areas = $e.find('.select-area');
	
	this.check_boxes = $e.find('.check-area');
	
	this.check_groups = {};
	this.check_boxes.each(function(){
		var $t = $(this);
		var n = $t.data('name');
		if (c.check_groups[n] == undefined)
			c.check_groups[n] = {el: $t, radio: $t.hasClass('check-area-radio')};
		else
			c.check_groups[n].el = c.check_groups[n].el.add($t);
	});
};

Nuevo_Form.prototype.submit = function(e){
	var c = $(this).data('c');
	c.text_inputs.trigger('change');
	c.pword_inputs.trigger('change');
	var success = true;
	
	if (c.text_inputs.filter('.invalid-input').length
		|| c.pword_inputs.filter('.invalid-input').length
		)
		success = false;
	
	if (0 != (c.select_areas.length - c.select_areas.filter('.selected').length))
	{
		success = false;
		c.select_areas.filter(':not(.selected)').addClass('invalid-input');
	}
	
	for (n in c.check_groups)
		if (c.check_groups[n].radio)
			if (!c.check_groups[n].el.filter('.checked').length)
			{
				c.check_groups[n].el.addClass('invalid-input');
			}
			//if (!$('.check-'+n+'-area.checked').length)
			
	
		
	if (success)
	{
		c.text_inputs.each(function(){
			if ($(this).val() == $(this).data('title')) $(this).val('');
		});
		return;
	}
	e.preventDefault();
	c.text_inputs.each(function(){
		if ($(this).val() == '') $(this).val($(this).data('title'));
	});
};

Nuevo_Form.prototype.pwordChange = function(e){
	var c = $(this).parents('form').data('c');
	if (c.pword_inputs.length == 2)
	{
		var val1 = $(this).val(),
		val2 = $(c.pword_inputs.not(this)).val();
		
		if (val1.length < 4)
		{
			$(this).invalidInput(true);
		}
		else if (val1 === '')
		{
			$(this).invalidInput(true);
		}
		else if (val1 === val2)
		{
			c.pword_inputs.invalidInput(false);
		}
		else
		{
			$(this).invalidInput(false);
			var last = c.pword_inputs.last();
			
			if (last.val() != '') last.invalidInput(true);
		}
	}
};

Nuevo_Form.prototype.pwordKeyup = function(){
	if ($(this).hasClass('invalid-input'))
	{
		$(this).change();
	}
};


jQuery.fn.invalidInput = function(on){
	$this = $(this);	

	if (on)
	{
		$this.addClass('invalid-input');
	}
	else if ($this.hasClass('invalid-input'))
	{
		$this.removeClass('invalid-input');
	}
	
	if ($this.hasClass('password-real'))
	{
		$this.prev('.password-dummy')[(on)?'addClass':'removeClass']('invalid-input');
		
	}
};


var validate_input = function(s, hardball){
	var data = {};
	data[s.field] = s.getVal(s.object);
	
	var invalid = !s.validator.testData(data);
	if (hardball || (!hardball && s.object.hasClass('invalid-input')))
		s.object.invalidInput(invalid);
};

jQuery.fn.inputValidator = function(options) {
	this.each(function(){
		var $this = $(this);
		if (!$this.data('field')) return;
		var type = $this.attr('type');
		var txt_inputs = ['text', 'textarea'];
		
		var triggers = ['change'];
		
		if (txt_inputs.indexOf(type) != -1)
		{
			triggers.push('keyup');
		}
		var title = $(this).data('title');
		var settings = {
			validator: 'required',
			field:  $this.data('field'),
			getVal : function(object){
				var val = object.val();
				return (title==val) ? "" : val;
			},
			object : $this,
			validator : window[$this.data('model')+'_validator'],
			triggers : triggers
		};
		jQuery.extend(settings, options);
		var s = settings;
		
		jQuery.each(s.triggers, function(i, trigger){
			s.object.bind(trigger, function(){
				var hardball = (trigger=='keyup') ? false : true;
				 validate_input(s, hardball);
			});
		});
	});
	return this;
};

