var umiRequest = new Class({
    Implements: [Events, Options],
    options: {
        url: '/content/get_ajax_content/',
        method: 'post',
        callback: function(text){return text},
        params: new Hash,
        mode: 'update' //update or result
    },
    initialize: function (){
        var params = Array.link(arguments, {options: Object.type, elements: $defined});
        this.setOptions(params.options || null);
    },
    setValue: function(key, value){
        this.options.params.set(key,value);
    },
    setValues: function(values){//must be an object
        this.options.params.extend(values);
    },
    send: function (request){
        this.cook = document.cookie;//получаем все куки
        request.setHeader('Cookie', this.cook);
        request.send();
    },
    commit: function(){
        if(!this.options.url) alert('Не указан целевой адрес!');//здесь бы хорошо сделать более умную обработку ошибки
        var _self = this;
        var data = this.options.params.toQueryString();
       
        var request = new Request({
            method: this.options.method,
            url: this.options.url,
            data: data,
            evalScripts: true,
            onComplete: function(text){
                if(_self.options.mode == 'result') return text;
                else _self.options.callback(text);
        }
        });
        this.send(request);
    }
});




function fadeImage(){

	//SqueezeBox.assign($$('a[rel=boxed]'));
	
	
	
	$$('.small_img').addEvent('click',function(e){
		e.stop();
		var largePath = this.getProperty("href");
		var largePic = this.getElement('img').getProperty("src");
		var rel = this.getProperty('rel');
		
		var lageLink = this.getParent('.object_gallery').getElement('.big_img');
		var lageImage = lageLink.getElement('img');
		
	
		
		var myFx = new Fx.Tween(lageImage, {
			property: 'opacity',
			onComplete: function(){
				var o = lageImage.getStyle('opacity').toInt();
				if(!o){
					var img = new Asset.image(largePath, {
						onload: function(){
							var fx2 =  new Fx.Tween(lageImage, {
								property: 'opacity'			
							});
							
							lageLink.setProperty('href', rel);
							lageImage.setProperty('src', largePath);
							//alert(img.src);
							fx2.start(0,1);
						}
					});
					
				}
			}
		});
		myFx.start(1,0);
		return false;
	});
	
	
	//подгружаем аяксом блок текста основного
	
}


function test_login(elem){

	var login = $(elem).getParent('form').getElement('input[name=login]').getProperty('value');
	if(!login) $('login_test').set('html', '<font color=red>Не указано имя!</font>');
	
	var callback = function(text){
		$('login_test').set('html', text);
	}
	 
	var request = new umiRequest({
		method: 'post', 
		url: '/users/test_login/',
		callback: callback		
	});
	request.setValue('login',login);
	request.commit();
	$('login_test').set('html', 'Подождите...');
	
}



var is_ie = Browser.Engine.trident;
var is_safari = Browser.Engine.webkit;
var Mozilla = Browser.Engine.gecko;

var Forum;

window.addEvent('domready', function(){

	$$('form.save_data').each(function(form){
		new umiSaveFormData(form);
	});

});






var umiSaveFormData = new Class({
    Implements: [Options, Events],
    options: {
		'error_messages': '.error_messages'
	},
    initialize: function (form){
		var params = Array.link(arguments, {options: Object.type, elements: $defined});
        this.setOptions(params.options || null);
		
		this.form = $(form);
		if(this.form){
  			var _self = this;
			
			this.form.addEvent('submit',function(e){
				e.stop();
				_self.saveFormData(_self.form);
				this.submit();
			});
			if(form.getElement(_self.options.error_messages)) _self.restoreFormData(_self.form);
		}
	},

	saveFormData: function(form) {
		if(!form) return false;
		if(!form.id) {
			alert("You should set id attribute in form tag to save or restore it.");
			return false;
		}

		var cookieData = new Array;	
		for(var i = 0; i < form.elements.length; i++) {
			var input = form.elements[i];
			var inputName = input.name.replace(/([)\\])/g, "\\$1");

			switch(input.type) {
				case "password": break;
				case "text":
				case "textarea": {
					cookieData.push({type: 'T', name: inputName, value: input.value});
					break;
				}
				case "checkbox":
				case "radio": {
					cookieData.push({type: 'C', name: inputName, value: (input.checked ? 1 : 0)});
					break;
				}
				case "select-multiple":
				case "select-one": {
					cookieData.push({type: 'S', name: inputName, value: input.selectedIndex});
					break;
				}
			}
		}
		
		var i, str = "";
		for(var i = 0; i < cookieData.length; i++) {
			var elementData = cookieData[i];
			var value = new String(elementData.value);
			var inputName = new String(elementData.name);
			if(!inputName || !value) continue;
			str += elementData.type + "," + inputName.length + "," + inputName + "," + value.length + "," + value;
		}
		document.cookie="frm" + form.id + "=" + escape(str.replace(/([|\\])/g, "\\$1"));
		return true;
	},

	restoreFormData: function(form) {
		if(!form) return false;
		if(!form.id) {
			alert("You should set id attribute in form tag to save or restore it.");
			return false;
		}
		var cookieName = "frm" + form.id + "=";
		
		var cookie = new String(unescape(document.cookie));
		var posStart, posEnd;
		if((posStart = cookie.indexOf(cookieName)) == -1) {
			return false;
		}
		
		if((posEnd = cookie.indexOf(";", posStart)) == -1) {
			posEnd = cookie.length;
		}
		
		var data = cookie.substring(posStart + cookieName.length, posEnd);
		var pos = 0, cookieData = new Array;

		while(pos < data.length) {
			var inputName;
			var type = data.substring(pos, pos + 1);
			pos += 2;
			
			var length = parseInt(data.substring(pos, data.indexOf(",", pos)));
			pos = data.indexOf(",", pos) + 1;
			var inputName = data.substring(pos, pos + length);
			pos += length + 1;

			var length = parseInt(data.substring(pos, data.indexOf(",", pos)));
			if(length == 0) {
				pos += 2;
				continue;
			} else {
				pos = data.indexOf(",", pos) + 1;
			}
			
			var value = data.substring(pos, pos + length);
			pos += length;
			
			cookieData.push({type: type, name: inputName, value: value});
		}
		
		for(var i = 0; i < cookieData.length; i++) {
			var elementData = cookieData[i];
			switch(elementData.type) {
				case "T": {
					form.elements[elementData.name].value = elementData.value;
					break;
				}
				case "C": {
					form.elements[elementData.name].checked = elementData.value ? true : false;
					break;
				}
				case "S": {
					form.elements[elementData.name].selectedIndex = elementData.value;
					break;
				}
			}
		}
	}

});




var Loading = new Class({
	Implements: [Events, Options],
	
	options: {
		url: '/gif/wait/loading-small.gif',
		className: 'temp',
		size: {x:32,y:32},
		delay: 500
	},
	
	initialize: function(options){
		var params = Array.link(arguments, {options: Object.type, elements: $defined});
		this.setOptions(options);
		
		var _self = this;
		this.div = new Element('div', {
			'class': _self.options.className
		});
		var img = new Element('img',{
			'width': this.options.size.x,
			'height': this.options.size.y,
			'src': this.options.url
		});
		/*img.src = this.options.url;
		img.width = this.options.size.x;
		img.height = this.options.size.y;*/
		img.inject(this.div);
	},
	
	start: function(el){
		el.empty();
		this.div.inject(el);
		//this.img.inject(this.div);
	},
	
	flush: function(el, text){
		var setText = function (text){
			this.set('html',text);
		}
		setText.delay(this.options.delay,el,text);
	}
	
});


