// JavaScript Document
function getClientSize()
{
	var w, h;
    w = (window.innerWidth ? window.innerWidth : (document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.offsetWidth));
    h = (window.innerHeight ? window.innerHeight : (document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.offsetHeight));
    return [w, h];
}

function getPageScroll() {
	var xScroll, yScroll;

	if (self.pageYOffset) {
		yScroll = self.pageYOffset;
		xScroll = self.pageXOffset;
	} else if (document.documentElement && document.documentElement.scrollTop) {
		yScroll = document.documentElement.scrollTop;
		xScroll = document.documentElement.scrollLeft;
	} else if (document.body) {
		yScroll = document.body.scrollTop;
		xScroll = document.body.scrollLeft;	
	}

	return [xScroll, yScroll]; 
};


function getClientCenter(){
	var t, l;
	
	size = getClientSize();
	bodyScroll = getPageScroll();
	
	l = document.documentElement.clientWidth/2+bodyScroll[0];
	t = document.documentElement.clientHeight/2+bodyScroll[1];
	
	return [t, l];
}

function in_array(what, where) {
    var a=false;

    for(var i=0; i<where.length; i++) {
        if(what == where[i]) {
            a=true;
            break;
        }
    }
    return a;
}

/*
========= ФУНКЦИЯ ПРОВЕРКИ ПОЛЕЙ ФОРМЫ =========

fields - двумерный массив с id полей, назм поля, сообщением ошибки, типом и возможными значениями (если надо, иначе пустой "")
Пример:
var fields = [
	{
		id: "",
		name: "",
		message: "",
		type: "", (num | str)
		vals: "", [val1, va12]
		conf: [id, name]
	}
];
*/
function check_fields( fields ){
	var len = fields.length;
	
	if( len > 0 ){ // поля есть ли вообще для проверки?
		for(n = 0; n < len; n++){ // идем по полям			
			if( fields[n].type == 'num' ){ // если поле должно быть числом
				
				if( !$("#"+fields[n].id).val() || isNaN( $("#"+fields[n].id).val() ) || $("#"+fields[n].id).val() == 0 ){
					$("#"+fields[n].id).focus();
					alert(fields[n].message);
					return false;
				}
				
			}
			
			if( fields[n].type == 'str' ){ // если поле должно быть строкой
				
				if( !$("#"+fields[n].id).val() || $("#"+fields[n].id).val() == "" ){
					$("#"+fields[n].id).focus();
					alert(fields[n].message);
					return false;
				}
				
			}
			
			if( fields[n].type == 'checkgroup' ){ // если нужно выбрать хотябы 1 checkbox 
				var c = 0;
				$('input[name='+fields[n].id+']:checkbox').each(function(){
					if( this.checked == true ) c = 1;
				});
				if( c == 0 ){
					$('input[name='+fields[n].id+']:checkbox:first').focus();
					alert(fields[n].message);
					return false;
				}
			}
			
			var vals = fields[n].vals.length;
			
			if( vals ){
				if( !in_array( $("#"+fields[n].id).val(), fields[n].vals) ){
					$("#"+fields[n].id).focus();
					msg = "Не допустимое значение в поле \""+fields[n].name+"\"!\n\nВозможны следующие значения:\n";
					
					for(v = 0; v < vals; v++){
						msg += "\t-  "+fields[n].vals[v]+"\n";
					}
					
					alert(msg);
					
					return false;
				}
			}
			
			if( fields[n].conf.length ){
				if( $("#"+fields[n].id).val() != $("#"+fields[n].conf[0]).val() ){
					$("#"+fields[n].id).focus();

					alert("Значение в поле \""+fields[n].name+"\" должно совпадать со значением в поле \""+fields[n].conf[1]+"\"!");
					
					return false;
				}
			}
		}
	}
	
	return true;
}

/*=======================================================*/

/*============== ФУНКЦИИ ДЛЯ ПОСКАЗОК В ПОЛЯ ============*/
function InputHelperIn ( obj, text ){
	//если при фокусе значение поля равно значению подсказки, то чистим его и вешаем стили
	if ( $( obj ).attr("value") == text ){
	    $( obj )
	    .css ( { color: '#000', fontStyle: 'normal' } )
	    .val( '' );
	}
}
	
function InputHelperOut ( obj, text ){
    //если при потере фокуса значение поля равно пустоте или значению по умолчанию,
    //то пихаем в него текст подсказки и вешаем стили подсказки
	if ( $(obj).attr("value") == '' || $(obj).attr("value") == text || !$(obj).attr("value") ){
	    $(obj)
        .css ( { color: '#b3b3b3', fontStyle: 'italic' } )
        .val( text );
	}
}
	
function InputHelperCreate ( obj, text ){ 
    //вешаем на поле эвенты. На фокус и потерю фокуса.
	obj
	.bind ( 'focus', function () { InputHelperIn ( this, text ); } )
	.bind ( 'blur', function () { InputHelperOut ( this, text ); } );

	//первоначальный инит
	InputHelperOut ( obj, text );
}

/*=======================================================*/

function email_link(name, domain, end, alias){
	email = '<a href="mailto:' + name + '&#64;' + domain + '.'+ end +'">';
	email += (alias ? alias : name + '&#64;' + domain + '.'+ end);
	email += '</a>';
	document.write(email);
}

function email_link2(name, domain, end){
	email = '<a href="mailto:' + name + '&#64;' + domain + '.'+ end +'">';
	document.write(email);
}

function email_link3(name, domain, end){
	email = name + '&#64;' + domain + '.'+ end;
	document.write(email);
}

/*================= диалоговые окна ================*/

(function($){

$.fn.dialog = function(options){
	var options = $.extend({
		title:'',
		width:400,
		height:0,
		modal:false,
		autoOpen:false,
		flowOpacity:0.4
	},options);
	
	//this.opn = function(){ $.fn.dialog.open(this, options); }
	
	return this.each(function(){
		$.fn.dialog.set(this, options);
	});
}

$.fn.dialog.set = function(el, o){
	$(el).hide();
	
	var content = $(el).html();
	
	$(el).html('');
	
	$(el).appendTo($('body'));
	
	$(el).addClass('dialog');
	$(el).append('<div class="header"><div>'+o.title+'</div></div><div class="content"></div>');
	
	if(!o.modal) $('.header', el).append('<div class="close"><img class="close_dialog" src="/images/design/close.gif" alt="Закрыть" style="float:left;" /></div>');
	
	$('.header', el).append('<div class="c"></div>');
	
	$('.content', el).html(content);
	
	$(el).css('width', o.width+'px');
	if( o.height )
		$(el).css('height', o.height+'px');
	
	if( o.autoOpen ){
		$.fn.dialog.open(el, o);
	}
	
	$('img.close_dialog', el).bind('click', function(){ $.fn.dialog.close(el, o); });
};

$.fn.dialog.open = function(el, o){
	var size = $.fn.dialog.clientSize();
	var pscroll = $.fn.dialog.pageScroll();

	if( o.flowOpacity ){
		$('body').append('<div id="bgflow"></div>');
		$('div#bgflow').css('top', pscroll[1]).css('height', size[1]).css({opacity:o.flowOpacity}).show();
	}

	$(el).css('top', (size[1]/2-$(el).height()/2)+pscroll[1]).css('left', (size[0]/2-$(el).width()/2)+pscroll[0]).show();
};

$.fn.dialog.close = function(el, o){
	$(el).hide();
	if(o.flowOpacity) $('div#bgflow').remove();
}

$.fn.dialog.clientSize = function(){
	var w, h;
    w = (window.innerWidth ? window.innerWidth : (document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.offsetWidth));
    h = (window.innerHeight ? window.innerHeight : (document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.offsetHeight));
    return [w, h];
};

$.fn.dialog.pageScroll = function(){
	var xScroll, yScroll;

	if (self.pageYOffset) {
		yScroll = self.pageYOffset;
		xScroll = self.pageXOffset;
	} else if (document.documentElement && document.documentElement.scrollTop) {
		yScroll = document.documentElement.scrollTop;
		xScroll = document.documentElement.scrollLeft;
	} else if (document.body) {
		yScroll = document.body.scrollTop;
		xScroll = document.body.scrollLeft;	
	}

	return [xScroll, yScroll]; 
};

})(jQuery);

/*============== содержимое ссылки открывать в новом слове ===================*/
(function($){
	
$.extend({
	clientSize: function(){
		var w, h;
		w = (window.innerWidth ? window.innerWidth : (document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.offsetWidth));
		h = (window.innerHeight ? window.innerHeight : (document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.offsetHeight));
		return [w, h];
	},
	pageScroll:function(){
		var xScroll, yScroll;

		if (self.pageYOffset) {
			yScroll = self.pageYOffset;
			xScroll = self.pageXOffset;
		} else if (document.documentElement && document.documentElement.scrollTop) {
			yScroll = document.documentElement.scrollTop;
			xScroll = document.documentElement.scrollLeft;
		} else if (document.body) {
			yScroll = document.body.scrollTop;
			xScroll = document.body.scrollLeft;	
		}
	
		return [xScroll, yScroll]; 
	},
	boxclose:function(callback){
		$('div#boxflow').animate({opacity:0},'fast',function(){ $('div#boxflow').remove(); });
		$('div.shad').animate({opacity:0},'fast',function(){ $('div.shad').remove(); });
		$('div.dialog').animate({opacity:0},'fast',function(){ $('div.dialog').remove(); if( callback ) callback.call(); });
	}
});
	
$.fn.box = function(options){
	var options = $.extend({
		width:400,
		height:0,
		opacity:0.4,
		modal:0
	},options);
	
	return this.each(function(){
		$(this).attr('onClick', 'return false;');
		$(this).bind('click', function(){ $.fn.box.open(this, options); });
	});	
}

$.fn.box.open = function(el, o){
	var title = $(el).attr('title');
	var href = $(el).attr('href');
	
	$('body').append('<div id="boxflow"></div>');
	
	$('body').append('<div class="dialog"><div class="header"><div>'+title+'</div><div class="close"></div></div><div class="content"><center><img class="close_dialog" src="/images/loading.gif" alt="Загрузка" /></center></div></div>');
	
	if(!o.modal){
		$('.dialog .close').append('<center><img class="close_dialog" src="/images/design/close.gif" alt="Закрыть" style="float:left;" /></center>');
		$('img.close_dialog').bind('click', function(){ $.boxclose(); });
	}
	
	$('body').append('<div id="shad1" class="shad"></div><div id="shad2" class="shad"></div>');
		
	$('div.dialog').css('width', o.width+'px');
	if(o.height) $('div.dialog').css('height', o.height+'px');
	
	//$.fn.box.position();
	
	$('div#boxflow').css({opacity:0}).show().animate({opacity:o.opacity}, 'fast');
	
	//$('img.close_dialog').bind('click', function(){ $.boxclose(); });
	
	$.ajax({
		url:href,
		async:true,
		success: function(data){
			$('div.dialog div.content').html(data);			
			$.fn.box.position();
			
			$('div.dialog').css({opacity:0}).show().animate({opacity:1}, 'fast');
			$('#shad1').css({opacity:0}).show().animate({opacity:0.2}, 'fast');
			$('#shad2').css({opacity:0}).show().animate({opacity:0.2}, 'fast');
		}
	});
}

$.fn.box.position = function(){
	var size = $.clientSize();
	var pscroll = $.pageScroll();

	$('div#boxflow').css('top', 0).css('height', size[1]);
	$('div.dialog').css('top', (size[1]/2-$('div.dialog').height()/2)).css('left', (size[0]/2-$('div.dialog').width()/2));
	
	$('#shad1').css('width', ($('div.dialog').width()+2)+'px').css('height', ($('div.dialog').height()+2)+'px').css('top', size[1]/2-$('#shad1').height()/2).css('left', size[0]/2-$('#shad1').width()/2);
	$('#shad2').css('width', ($('div.dialog').width()+4)+'px').css('height', ($('div.dialog').height()+4)+'px').css('top', size[1]/2-$('#shad2').height()/2).css('left', size[0]/2-$('#shad2').width()/2);
}

})(jQuery);

/*======================= Разворачивающиеся блоки ========================*/
(function($){

$.fn.slideBlock = function(){
	return this.each(function(){
		var this_ = this
		$('div.header, div.bottom', this).css('cursor', 'pointer');
		$('div.header, div.bottom', this).bind('click', function(){ $('div.content', this_).slideToggle('fast'); $(this_).toggleClass('content_block_closed content_block_opened'); });
	});
}

})(jQuery);
