
function gebi(id){
  return document.getElementById(id)
}

function toggle_element(element) {
	var d = gebi(element);
	if (!d) return false;
	d.style.display = (d.style.display == 'block') ? 'none' : 'block';
}

function max_length_elm(node, length)
{
	if(!node)return false;
	var elm = jQuery("[name='"+jQuery(node).attr('name')+"']");
	if(elm.val().length > length)
	{
		elm.val(elm.val().substring(0, elm.val().length - 1));
	}
}

/**
* получение отступа слева/сверху для элемента путем суммирования смещения относительно предка вплоть до корня (по умолчанию body)
* @elm - текущий элемент
* @dim - left/top
* @roottree - имя корневого тега
*/
function ds_CalcPosElm(elm, dim, roottree)
{
	var pos = 0;
	var tmpelm = elm;

	if(dim == "left")
		dim = "Left";
	if(dim == "top")
		dim = "Top";

	if(typeof roottree == "undefined")
		roottree = "BODY";

	while(tmpelm != null && tmpelm != roottree)
	{
		pos += parseInt(tmpelm['offset' + dim]);
		tmpelm = tmpelm.offsetParent;
	}

	return pos;
}

/**
* копирует в буфер, если нет в браузере, то использует флеш
*/
function copy_to_clipboard(node, params)
{
	var ClipboardSwf = "clipboard.swf";
	var text = node;

	if(params.path)
		ClipboardSwf = params.path + ClipboardSwf;

	if(window.clipboardData)
	{
		window.clipboardData.setData('text',text);
	}
	else
	{
		var flashcopier=gebi('flashCopier');
		if(flashcopier==null)
		{
			flashcopier = document.createElement('div');
			flashcopier.id = "flashCopier";
			document.body.appendChild(flashcopier);
		}
		flashcopier.innerHTML = '<embed src="'+ClipboardSwf+'" FlashVars="clipboard='+encodeURIComponent(text)+'" width="0" height="0" type="application/x-shockwave-flash"></embed>';
	}
}

//Рисует стандартный компонент выбора 
// some_title [>][x] 
function create_object_select(name, type, id, title, params) {
	var url = "/object_select?action="+escape(type);
	if (!params) {
		params = new Array;
	}
	if (!title)
		title = '[-]';
	var content = $('<div>'+title+'&nbsp;&nbsp;</div>')
	if (id){
		content.append('<input type="hidden" name="'+name+'" value="'+escape(id)+'"/>');
	}
	// Кнопка выбора
	var open_button = $('<a href="#">[&raquo;]</a>');
	open_button.bind('click', function() {
		top.obj_win = window.open(url,'object_win','menubar=0,scrollbars=1,toolbar=0,width=640,height=480,status=1');
		// callback вызывается внутри окна по клику на айдишник
		window.confirm_select = function(id, title) {
			top.obj_win.close();
			content.replaceWith(
				create_object_select(name, type, id, title)	
			);
		};
		try {
			top.obj_win.focus();
		} catch (e) {}
		return false; // false = не перходим по ссылке
	});
	// Удалить позицию
	var delete_button = $('<a href="#">[x]</a>');
	delete_button.bind('click', function() {
		if (params['delete_replace']) {
			content.replaceWith(
				create_object_select(name, type)	
			);
		}
		else {
			content.remove();
		}
		return false; // false = не перходим по ссылке
	});
	content.append(open_button);
	content.append(delete_button);

	return content;
}

// По специльно сгенерииному html рисует компоненты выбора
function init_object_select(obj) {
	var name = obj.attr('attr_name');
	var type = obj.attr('attr_type');
	var multiselect = parseInt(obj.attr('attr_multiselect'));
	var object_params = {'delete_replace': multiselect ? 0 : 1};
	var childs = obj.find('span');
	// Генерируем контролы 
	childs.each(function(){
		var id = $($(this).find(':input')[0]).val();
		var title = $($(this).find('p')[0]).text();
		$(this).replaceWith(create_object_select(name, type, id, title, object_params));
	});
	// Добавляем пустой элемент
	if (!childs.length) {
		obj.append(create_object_select(name, type, null, null, object_params));
	}
	if (multiselect) {
		// Добавляем кнопку [+]
		obj.append( $('<a href="#">[+]</a>').bind('click', function() {
			create_object_select(name, type, null, null, object_params).insertBefore($(this)); 
			return false;
		}));
	}
}

var time_sel;

function sel_check_get_obj(id) {
	if (window.select_check_array == null || window.select_check_array[id] == null) return null;
	return window.select_check_array[id]['object'];
}

function sel_check(obj,id) {
	if (time_sel > 0) {
		clearTimeout(time_sel);
		time_sel = 0;
	}
	object = obj;
	time_sel = setTimeout('select_check(object,\''+id+'\')',200);
}

function select_check(obj,id) {
	var txt = obj.value;
	var objsel = gebi(id);
	while (objsel.type != "select-one" && objsel.nextSibling != null && !objsel.mass) {
		objsel = objsel.nextSibling;
	}
	
	var mas = objsel.mass;
	objsel.innerHTML = "";
	txt = txt.toLowerCase();
	for (var i in mas) {
		if (mas[i] == null) continue;
		var text = mas[i].toLowerCase();
		if (text.indexOf(txt) !== false && text.indexOf(txt) != -1) {
			var option = document.createElement('OPTION');
			option.text = mas[i];
			option.value = i;
			try {objsel.add(option,null) } catch(e) {objsel.add(option,-1)}
		}
	}
}

function sel_check_grp(obj,id) {
	if (window.select_check_array == null)
		window.select_check_array = [];
		if(window.select_check_array[id] == null) {
			window.select_check_array[id] = [];
			window.select_check_array[id]['time_sel'] = 0;
		}
		if (window.select_check_array[id]['time_sel'] > 0) {
			clearTimeout(window.select_check_array[id]['time_sel']);
			window.select_check_array[id]['time_sel'] = 0;
		}
		window.select_check_array[id]['object'] = obj;
		window.select_check_array[id]['time_sel'] = setTimeout('select_check_grp(sel_check_get_obj(\''+id+'\'),\''+id+'\')',500);
}


function select_check_grp(obj,id) {
     if(obj == null) return;
     var txt = obj.value;
     var objsel = gebi(id);
     while (objsel.type != "select-one" && objsel.nextSibling != null && !objsel.mass) {
			objsel = objsel.nextSibling;
     }
     var mas = objsel.mass;
     objsel.innerHTML = "";
     txt = txt.toLowerCase();
     for (var i in mas) {
          if (!mas[i] || mas[i] == undefined) continue;
          var objs = mas[i]['objects'];
          var grp = null;
          for (var j in objs) {
               if (!objs[j] || objs[j] == undefined) continue;
               var text = objs[j].toLowerCase();
               if (text.indexOf(txt) !== false && text.indexOf(txt) != -1) {
                    if(grp == null) {
							grp = document.createElement('OPTGROUP');
							grp.label = mas[i]['label'];
                    }
                    var option = document.createElement('OPTION');
                    option.innerHTML = objs[j]; // IE 6 fix
                    option.text = objs[j];
                    option.value = j;
                    try {grp.appendChild(option) } catch(e) {}
               }
          }
          if(grp != null) {
               try {objsel.appendChild(grp) } catch(e) {}
          }
     }
}

function init_selectHelper() {
	var div = $('<div style="position:absolute; display:none;" class="sh_content"/>');
	var loopFunction = function(select) {
		var button = $("<a href='#'>&nbsp;&nbsp;&gt;&gt;</a>");
		button.click(function (event) { 
			show_selectHelper(event, div, select); 
			return false;
		});
		$(select).after(button);
	};
			$('body').append(div);
	$(".selectHelper").each(function() {
		loopFunction(this);
	});
}

function show_selectHelper(event, div, select) {
	var data = [];
	$(select).find("*").each( function() {
		if (this.value) {
			data[this.value] = this.innerHTML;
		}
	});

	div.css('left', $(select).offset().left);
	div.css('top', $(select).offset().top + $(select).height() + 5);
	div.width( $(select).width() );
	div.html('').show();
	var opt = { 
		minInput: parseInt($(select).attr("minInput"))
	};
	var ac = new selectHelper(data, opt);

	ac.list.select(function(key) {
		$(div).hide();
		var i=0;
		$(select).find("*").each( function() {
			if (this.value == key) {
				select.selectedIndex = i;
			}
			++i;
		});
		$(event.target).focus();
	});

	ac.appendTo(div);
	setTimeout( function() {
		ac.setFocus();
	}, 100);
}
