<!--

function ajaxSubListRedefine(url, list1, list2, loader){
	var loader = $(loader);

	new Ajax.Request(url, {
		method: 'GET',
		parameters: 'AJAXMODE=1&root=' + list1.value,
		onCreate: function(){
			list2.disabled = true;
			loader.show();
		},
		onLoaded: function(){
			for(var i = list2.options.length - 1; i >= 0; i--)
				list2.remove(i);
		},
		onSuccess: function(transport){
			if(transport.responseText.length > 0){
				var result = transport.responseText.evalJSON();
				for(var i = 0; i < result.length; i++)
					list2.appendChild(new Element('option', {value: result[i].id}).update(result[i].title));
			}
		},
		onComplete: function(){
			loader.hide();
			list2.disabled = false;
		},
		onException: function(a, b){
			alert('error: #' + b.message);
		}
	});
}

function blogsAddFormSubmit(form, flag){
	form.formIsValid.value = 0;
	$('blogsAddFormMessades').hide().update();

	if(flag){
		var result = true;

		if($F(form.root).blank()){
			form.root.addClassName('empty_field');
			result = false;
		}
		else{
			form.root.removeClassName('empty_field');
		}

		if($F(form.title).blank()){
			form.title.addClassName('empty_field');
			result = false;
		}
		else{
			form.title.removeClassName('empty_field');
		}

		if(result){
			form.formIsValid.value = 1;
			form.submit();
		}
		else{
			form.formIsValid.value = 0;
			$('blogsAddFormMessades').hide().update('Не все поля отмеченные "<span class="required">*</span>" заполнены!');
			new Effect.Appear('blogsAddFormMessades');
		}
	}
	else{
		var els = $(form).getElements();
		els.each(function(el){
			el.removeClassName('empty_field');
		});
	}
	return false;
}

function loginFormValidate(form){
	var login = $F(form.login);
	var password = $F(form.pass);

	var loginFormMessages = $('loginFormMessages');
	var result = true;

	if(login.blank() || !login.match(/[A-Z0-9_]+/i)){
		form.login.addClassName('empty_field');
		result = false;
	}
    else if(password.blank() || !password.match(/.+/)){
		form.pass.addClassName('empty_field');
		result = false;
	}

	return result;
}

function loginFormSubmit(form, flag){
	form.formIsValid.value = 0;
	$('loginFormMessades').hide().update();

	if(flag){
		var result = true;

		if($F(form.login).blank() || !$F(form.login).match(/[A-Z0-9_]{3,16}/i)){
			form.login.addClassName('empty_field');
			result = false;
		}
		else{
			form.login.removeClassName('empty_field');
		}

		if($F(form.pass).blank() || !$F(form.pass).match(/.{6,16}/)){
			form.pass.addClassName('empty_field');
			result = false;
		}
		else{
			form.pass.removeClassName('empty_field');
		}

		if(result){
			form.formIsValid.value = 1;
			form.submit();
		}
		else{
			form.formIsValid.value = 0;
			$('loginFormMessades').hide().update('Не все поля отмеченные "<span class="required">*</span>" заполнены!');
			new Effect.Appear('loginFormMessades');
		}
	}
	else{
		var els = $(form).getElements();
		els.each(function(el){
			el.removeClassName('empty_field');
		});
	}
	return false;
}

function registerFormSubmit(form, flag){
	form.formIsValid.value = 0;
	$('registerFormMessades').hide().update();

	if(flag){
		var result = true;

		if($F(form.email).blank() || !$F(form.email).match(/\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/)){
			form.email.addClassName('empty_field');
			result = false;
		}
		else{
			form.email.removeClassName('empty_field');
		}

		if($F(form.login).blank() || !$F(form.login).match(/[A-Z0-9_]{3,16}/i)){
			form.login.addClassName('empty_field');
			result = false;
		}
		else{
			form.login.removeClassName('empty_field');
		}

		if($F(form.password).blank() || !$F(form.password).match(/.{6,16}/)){
			form.password.addClassName('empty_field');
			result = false;
		}
		else{
			form.password.removeClassName('empty_field');
		}

		if($F(form.password_copy).blank() || (!$F(form.password).blank() && $F(form.password) != $F(form.password_copy))){
			form.password_copy.addClassName('empty_field');
			result = false;
		}
		else{
			form.password_copy.removeClassName('empty_field');
		}

		if($F(form.region).blank()){
			form.region.addClassName('empty_field');
			result = false;
		}
		else{
			form.region.removeClassName('empty_field');
		}

		if(result){
			form.formIsValid.value = 1;
			form.submit();
		}
		else{
			form.formIsValid.value = 0;
			$('registerFormMessades').hide().update('Не все поля отмеченные "<span class="required">*</span>" заполнены!');
			new Effect.Appear('registerFormMessades');
		}
	}
	else{
		var els = $(form).getElements();
		els.each(function(el){
			el.removeClassName('empty_field');
		});
	}
	return false;
}

function accountFormSubmit(form, flag){
	form.formIsValid.value = 0;
	$('accountFormErrors').hide().update();
	$('accountFormMessages').hide().update();

	if(flag){
		var result = true;

		if($F(form.region).blank()){
			form.region.addClassName('empty_field');
			result = false;
		}
		else{
			form.region.removeClassName('empty_field');
		}

		if(result){
			form.formIsValid.value = 1;
			form.submit();
		}
		else{
			form.formIsValid.value = 0;
			$('accountFormErrors').hide().update('Не все поля отмеченные "<span class="required">*</span>" заполнены!');
			new Effect.Appear('accountFormErrors');
		}
	}
	else{
		var els = $(form).getElements();
		els.each(function(el){
			el.removeClassName('empty_field');
		});
	}
	return false;
}

//------------------------------------------------------------------------------

function remarksFormControl()
	{
	this.active_form = null;

	this.show = function(){
		var countainer = $$('#remarks_bar .form').shift();

		if(this.active_form && this.active_form !== countainer)
			this.active_form.hide();
        countainer.toggle();
		this.active_form = countainer.visible() ? countainer : null;

		return false;
	};

	this.reply = function(id, user){
		if(parseInt(user) > 0){
			var countainer = $(id);

			if(this.active_form && this.active_form !== countainer)
				this.active_form.hide();
	        countainer.toggle();
			this.active_form = countainer.visible() ? countainer : null;
			}
		else{
			alert('Вы не авторизированы!');
		}

		return false;
	};
}

//------------------------------------------------------------------------------

function ratingBar(u){
	var self	= this;
	this.url	= u && u.length ? u : '/?module=ratings&action=vote';

	this.vote = function(obj){
		var el			= $(obj);

		var button		= el.tagName.match(/img/i) ? el.cleanWhitespace().up('.rating_button') : el;
		var container	= button.up('div[rel="rating_bar_container"]');
		var params		= button.rel.split(':');

		if(container.readAttribute('voted') == 'yes'){
			alert('Вы уже голосовали');
		}
		else if(button && params[0].length && params[1].length && parseInt(params[2]) > 0){
			new Ajax.Request(self.url, {
				method: 'GET',
				parameters: 'AJAXMODE=1&mid=' + params[1] + '&cid=' + params[2] + '&mark=' + params[0],
				onSuccess: function(transport){
					container.select('div[rel="count"]').shift().update(parseInt(transport.responseText));
				},
				onComplete: function(){
					container.select('a.rating_button').each(function(el){
						container.writeAttribute('voted', 'yes');
					});
				},
				onException: function(a, b){
					alert('error: #' + b.message);
				}
			});
		}

		return false;
	};

	this.bottonOver = function(e){
		var el = Event.element(e);
		var img = el.tagName.match(/a/i) ? el.cleanWhitespace().firstDescendant() : el;
		if(e.type.match(/mouseover/i))
			var src = img.src.substring(0, img.src.length - 4) + 'a' + img.src.substring(img.src.length - 4);
		else
			var src = img.src.substring(0, img.src.length - 5) + img.src.substring(img.src.length - 4);
		img.src = src;
	};

	this.init = function(){
		$$('a:[class=rating_button]').each(function(el){
			Event.observe(el, 'mouseover', self.bottonOver);
			Event.observe(el, 'mouseout', self.bottonOver);
		});
	};

	Event.observe(window, 'load', this.init);
}

//------------------------------------------------------------------------------

function modalWindow(w, h){
	var self		= this;

	this.winWidth	= parseInt(w) < 100 ? 100 : parseInt(w);
	this.winHeight	= parseInt(h) < 100 ? 100 : parseInt(h);

	this.running	= false;
	this.visible	= false;

	this.elements		= $H({container: null, shadow: null, window: null});

	this.init = function(){
		this.elements.set('container', new Element('div', {id: 'modalContainer'}).hide());
		this.elements.set('shadow', new Element('div', {id: 'modalShadow'}));
		this.elements.set('window', new Element('div', {id: 'modalWindow'}).setStyle({width: this.winWidth + 'px', height: this.winHeight + 'px'}));
	};

	this.positionize = function(){
		var viewHeight = document.viewport.getHeight();
		var scrollOffset = document.viewport.getScrollOffsets();

		if(typeof self.elements.get('container') == 'object'){
			self.elements.get('container').setStyle({height: viewHeight + 'px', top: scrollOffset.top + 'px'});
			if(typeof self.elements.get('window') == 'object'){
			    var positionTop = parseInt((viewHeight - self.winHeight) / 2);
				self.elements.get('window').setStyle({top: positionTop + 'px'});
			}
		}
	};

    this.show = function(content){
		if(this.running	== false){
	        if(this.visible	== false){
				$(document.body).insert({
					top: this.elements.get('container').insert({
						top: this.elements.get('shadow').insert({
							top: this.elements.get('window').show().update(content)
						})
					}).hide()
				});

				this.animateShow.defer();
			}
			else if($('modal_container')){
				this.hide();
			}
		}
	};

	this.update = function(content){
		this.elements.get('window').update(content);
	};

    this.hide = function(){
		if(this.visible	== true && this.running	== false){
			this.animateHide();
		}
	};

    this.animateShow = function(){
		self.running = true;

		self.hideElements(false);

		self.positionize();
		Event.observe(window, 'resize', self.positionize);
		Event.observe(window, 'scroll', self.positionize);
		Event.observe(self.elements.get('shadow'), 'click', function(e){
			if(Event.element(e) === self.elements.get('shadow'))
				self.hide();
		});

		new Effect.SlideDown(self.elements.get('container'));
 		window.setTimeout(function(){self.running = false;}, 1500);

		self.visible = true;
	};

    this.animateHide = function(){
		this.running = true;

		Event.stopObserving(window, 'resize', this.positionize);
		Event.stopObserving(window, 'scroll', this.positionize);

		new Effect.Fade(this.elements.get('window'));
 		window.setTimeout(function(){
			$('modalContainer').remove();
			self.hideElements(true);
			self.running = false;
		}, 1000);

		this.visible = false;
	};

	this.hideElements = function(opt){
		$$('iframe').invoke(opt ? 'show' : 'hide');
		$$('select').invoke(opt ? 'show' : 'hide');
	};

	this.init();
}

//------------------------------------------------------------------------------

function floatingFrame(r, h){
	var self			= this;
	var delay			= $H({running: (parseInt(r) >= 2500) ? parseInt(r) : 2500, hide: (parseInt(h) >= 3000) ? parseInt(h) : 3000});

	this.btn			= null;
	this.frame			= null;

	this.initialized	= false;
	this.visible		= false;
	this.running		= false;
	this.timePtr		= null;

	this.run = function(a, b){
		if(self.initialized === false)
			self.init(a, b);

		if(!self.running && !self.visible)
			self.show();
	};

	this.init = function(a, b){
		this.btn = $(a);
		this.frame = $(b);

		this.frame.setStyle({display: 'block'}).hide();

		var coords = this.btn.positionedOffset();
		var x = (coords.left + this.btn.offsetWidth) + 'px';
		var y = coords.top + 'px';
		this.frame.setStyle({top: y, left: x});

        this.btn.observe('mouseover', this.mouseOver);
        this.btn.observe('mouseout', this.mouseOut);
        this.frame.observe('mouseover', this.mouseOver);
        this.frame.observe('mouseout', this.mouseOut);

		this.initialized = true;
	};

	this.mouseOver = function(){
		if(self.visible && self.timePtr){
			window.clearTimeout(self.timePtr);
		}
	};

	this.mouseOut = function(){
		if(self.visible){
			if(self.timePtr != null){
				window.clearTimeout(self.timePtr);
				self.timePtr = null;
			}
   			self.timePtr = window.setTimeout(function(){self.hide()}, delay.get('hide'));
		}
	};

	this.show = function(){
		new Effect.Unfold(this.frame);

		this.running = true;
		this.visible = true;

		window.setTimeout(function(){self.running = false}, delay.get('running'));
	};

	this.hide = function(){
		new Effect.Fold(this.frame);

		this.running = true;
		this.visible = false;
		this.timePtr = null;

		window.setTimeout(function(){self.running = false}, delay.get('running'));
	};
}

//-->

