
/*
 * Application: Input, by Limarc /Alexander Lobashev/
 * 
 * (c) 2008-2009 by Limarc, Lim-on Media
 * _link: http://www.free-lance.ru/users/Limarc
 *
 * _version: 1.13
 *
 */

 var iInput = new Class
 ({
	 options:
	 {
		 url: '/',
		 error: 'object-error',
		 debug: false
	 },
	 
	 initialize: function(element, options)
	 {
		 if (options) { this.setOptions(options); }
                 if (!element) return;
		 
		 this.contain = element;
		 this.error = document.id(this.options.error);
		 
		 this.contain.addEvent('submit', this.setAction.pass(this.contain, this));
	 },
	 
         setAction: function(contain)
	 {
		 //var jRequest = new Request
		 var jRequest = new Request.JSON
		 ({
			 url: this.options.url,
			 method: 'post',
			 //onRequest: function () { this.error.setStyle('display', 'block').set('html', "Пожалуйста, подождите..."); }.bind(this),
			 onSuccess: function (j)
			 {
				 if (this.options.debug) { alert(j); }
				 
				 contain.getElements('input, select').removeClass('error');
				 
				 //
				 // -> okey
				 //
				 if (j.submit)
				 {
					 contain.submit();
				 }
				 else if (j.location)
				 {
					 location.href = j.location;
				 }
				 //
				 // -> error
				 //
				 else if (j.text)
				 {
					 this.error.setStyles({display: 'block'}).set('html', j.text);
					 
					 //
					 // -> error style
					 //
					 if (j.f)
					 {
						 if (j.f.input)
						 {
							 j.f.input.each( function(item) { contain.getElements('input[name='+ item +']').addClass('error'); });
						 }					 
						
						 if (j.f.select)
						 {
							 j.f.select.each( function(item) { contain.getElements('select[name='+ item +']').addClass('error'); });
						 }
						
						 if (j.f.textarea)
						 {
							 j.f.textarea.each( function(item) { contain.getElements('textarea[name='+ item +']').addClass('error'); });
					 	 }					 
					 }					 
				 }
				 
				 //
				 // -> change
				 //
				 contain.getElements('input, select, textarea').addEvent('change', function ()
				 {
					 if (this.hasClass('error'))
					 {
						 this.removeClass('error');
					 }
				 });
				 
				 if (j.add)
				 {
					 new Element("p", {'id': "information-complete", 'class': "object-complete", 'text': j.add}).wraps(contain);
					 
					 contain.dispose();
				 }				 
			 }.bind(this)
		 }).send(contain.toQueryString());
		 
		 return false;
         },
	 
	 Implements : [Options, Events]
 }); 
