/*Центрирование внутри контейнера*/
jQuery.fn.centering = function(container){
	if (container == undefined) container = $(window);
	var wt = this.width();
	var ht = this.height();
	zu = this.outerWidth();
	zu = this.innerWidth();
	var wc = container.width();
	var hc = container.height();
	var x = (wc - wt) / 2;
	var y = (hc - ht) / 2;
	if (container[0] == window) {
		x = x + container.scrollLeft();
		y = y + container.scrollTop();	
	} else if  (container[0] != document) {
		cpos = container.offset();
		x = x + cpos.left + cpos.scrollLeft;
		y = y + cpos.top + cpos.scrollTop;
	}
	this.css({left:x,top:y});
}
/*Позиционирование относительно контейнера*/
jQuery.fn.setPosition = function(x, y, container, affixment_x, affixment_y){
	if (container == undefined) container = $(window);
	if (affixment_x == undefined) affixment_x = 'left';
	if (affixment_y == undefined) affixment_y = 'top';
	if (container[0] == window) {
		x = x + container.scrollLeft();
		y = y + container.scrollTop();	
	} else if  (container[0] != document) {
		cpos = container.offset();
		x = x + cpos.left + cpos.scrollLeft;
		y = y + cpos.top + cpos.scrollTop;
	}
	switch (affixment_x) {
		case 'center': x = x - this.width() / 2; break;
		case 'right': x = x - this.width(); break;
	}
	switch (affixment_y) {
		case 'center': y = y - this.height() / 2; break;
		case 'bottom': y = y - this.height(); break;
	}
	this.css({left:x,top:y});
}
/*Листалка*/
jQuery.fn.initPager = function(){
	var childs = this.find('#pageSet').children();
	var pagesCount = childs.size();
	childs.each(function(i){
		if (i>0) $(this).hide();
		else $(this).addClass('visiblePage');
	});
	this.find('#left_arrow').css('display','none');
	if (pagesCount==1) this.find('#right_arrow').css('display','none');
	return pagesCount;
}
jQuery.fn.nextPage = function(){
	var pageset = this.find('#pageSet');
	var childs = pageset.children();
	var cpage = childs.filter('.visiblePage');
	var pagesCount = childs.size();
	var position = childs.index(cpage[0]);
	if (position<0) return;
	$(childs[position]).removeClass();
	$(childs[position]).hide();
	$(childs[position+1]).addClass('visiblePage');
	$(childs[position+1]).show();
	if (position >= pagesCount-2) this.find('#right_arrow').css('display','none');
	if (pagesCount > 1) this.find('#left_arrow').css('display','block');
	return position + 1;
}
jQuery.fn.prevPage = function(){
	var pageset = this.find('#pageSet');
	var childs = pageset.children();
	var cpage = childs.filter('.visiblePage');
	var pagesCount = childs.size();
	var position = childs.index(cpage[0]);
	if (position<0) return;
	$(childs[position]).removeClass();
	$(childs[position]).hide();
	$(childs[position-1]).addClass('visiblePage');
	$(childs[position-1]).show();
	this.find('#right_arrow').css('display','block');
	if (position < 2) this.find('#left_arrow').css('display','none');
	return position - 1;
}
/*Выборка всех элементов формы*/
jQuery.fn.formElements = function(){
	return this.find('input,select,textarea');
}
/*Включение отслеживания изменений в элементах формы*/
jQuery.fn.markChanged = function(){
	this.formElements().change(
		function(){$(this).attr('changed','changed');});
	return this;
}
/*Сброс марккировки измененных элементов формы*/
jQuery.fn.unmarkChanged = function(){
	this.formElements().removeAttr('changed');
	return this;
}
/*Выборка измененных элементов формы*/
jQuery.fn.getChanged = function(){
	return this.formElements().filter('[@changed=changed]');
}
/*Создание одномерного массива для POST*/
jQuery.fn.makePostMap = function(){
	var map = {};
	this.each(function(i){
		map[this.name] = this.value;
	});
	return map;
}
jQuery.fn.initKeyCtrl = function(){
	this.keydown(function(e){
		if (!e.ctrlKey) return;
		var code = e.keyCode || e.charCode;		
		switch (code){
			case 37: 
				var c =	$('#prev_page').attr('href');
				break;
			case 39: 
				var c =	$('#next_page').attr('href');	
				break;
			case 38: 
				var c =	$('#top_page').attr('href');	
				break;
			case 40: 
				var c =	$('#bottom_page').attr('href');	
				break;
			default: return;
		}
		if (c && c != undefined) location.href = c;
	});
}
showHideChild = function(obj){
	var block = obj.parentNode.lastChild;
	if ($(block).css('display') == 'none') $(block).css('display', 'block');
	else $(block).css('display', 'none');}
getStruct = function(name,obj,lev,max,tab){
	var res = '<div>'+tab+name+' = ';
	if ((typeof obj).match(/object/) && (max == undefined || lev<max)){
		res = res+'<a href="javascript:;" onclick="showHideChild(this)">object</a> <div style="display:none;">'+tab+'{<br/>';
		for (key in obj){
			try {
				res = res+getStruct(key, obj[key], lev+1, max, tab+'&#160;&#160;&#160;');}
			catch (e){
				res = res+tab+'<div>&#160;&#160;&#160;'+name+' = Not inspectable!</div>';}}		
		res = res+tab+'}</div></div>';}
	else if ((typeof obj).match(/function/)){
		res = res+'<a href="javascript:;" onclick="showHideChild(this)">function</a> <div style="display:none;background:#ccf;"><pre>'+obj+'</pre></div></div>';} 
	else {
		try { 
			res = res+obj+'</div>';} 
		catch (e){
			res = res+'Not inspectable!</div>';	}}
	return res;}
closeDebugWindow = function(obj){
	$(obj.parentNode).remove();
	if($.browser.msie){	$('select').css('visibility','visible'); }
}
inspectObject = function(obj,maxlevel,name){
	if($.browser.msie){	$('select').css('visibility','hidden'); }
	if (name == undefined) name = 'Inspected object';
	$(document.body).append('<div id="debugWindow" style="padding:5px;background:#fff;border:1px solid #00f;width:400px;height:300px;position:absolute;z-index:100;">Debug Window: look to "'+name+'" [<a href="javascript:;" onclick="closeDebugWindow(this)">Закрыть</a>]<div style="width:400px;height:270px;overflow:auto;background:#ddd;margin-top:10px;" id="debugFrame">Inspecting...</div>');
	$('#debugWindow').centering();
	res = getStruct(name, obj,0,maxlevel,'');
	$('#debugFrame').html('<code>'+res+'</code>');}
inArray = function(arr,el){
	for (k in arr)
		if (arr[k] == el) return k;
	return undefined;}
buildUrl = function(alias, param){
	var url = location.protocol + '//' + document.domain;
	var langs = Array('eng','rus','ukr');
	var lngalias = location.pathname.match(/^\/([a-z]{3})(.?)/);
	if (lngalias){
		if ((lngalias[2] == '' || lngalias[2] == '/') && inArray(langs, lngalias[1]) != undefined){
			url = url + '/' + lngalias[1];}}
	url = url + (alias==undefined?'':alias);
	if (param != undefined){
		for (k in param){
			url = url + '/' + k + '.' + param[k];}}
	return url;}
gbID = function(id){
	return $(document.getElementById(id));}
isEmpty = function(v){
	return  v==undefined?true:typeof v=='string'?(!v.match(/[^\s]/)||v=='0'):(v==0||v==null);}
function ExpandClose(obj){
	p = obj.parent()[0];
	ch = $(p).children();
	if ($(ch[1]).css('display') == 'none') $(ch[1]).css('display','block');
	else $(ch[1]).css('display','none');
	pos = obj.offset();
	t = pos.top + pos.scrollTop;
	w = $(window).scrollTop();
	if (w > t) window.scrollTo(0, t);
	alt = $(obj).attr('alter') || '';
	if (alt != ''){
		obj.attr('alter',obj.html());
		obj.html(alt);}}