//Простые функции помогающие при работе с DOM
function hide(el) {
    el.addClassName('hidden');
}

function show(el) {
    el.removeClassName('hidden');
}

function toggle(el) {
    if (el.hasClassName('hidden')) show(el); else hide(el);
}

function addHTML(el, text) {
    el.update(el.innerHTML + text);
}

function update(obj) {
	return obj.update.bind(obj);
}

//Получение id некоторой сущности, который предварительно был прописан в скрытом input'е
function getId(name) {
    return $(name+'_id').value;
}

//Получение значения параметра из скрытого input'а (но лучше пользоваться следующей функцией!)
//Хотя она и шлёт лишнее :D
function getParam(name) {
	return $('params')[name].value;
}

//Но чтобы не задумываться, берём сразу все!
function getParams() {
	return $('params').serialize(true);
}

function setParam(name, value) {
	   $('params')[name].value = value;	   
}

function getElemValue(id) {
	return $(id).value;
}

//Извлекаем параметры из url
function urlParams(default_params) {
	if (!default_params) default_params = [];
	var result = default_params;
	var params = [];
	if (location.hash) {
		params = location.hash.substring(1).split(',').filter(function(el, i, a) {return el.length > 0});
	}
	for (var i=0; i<params.length; i++) {
		result[i] = params[i];
	}
	
	return result;	
}


//Всем элементам с заданным префиксом добавляет обработчик клика
function addHandlers(prefix, handler){
    $$('[id^="' + prefix + '"]').each(function(el){
        el.onclick = function(){
			handler(this);
		};
    });
}

//Получаем список элементов по префиксу и для каждого из них выполняем обработчик
function byIdPrefix(prefix, handler) {
    
}

function idPrefix(el, prefix) {
	return el.id.substr(prefix.length);
}

//Для использования вместо alert'ов, которые нарушают обычное функционирование скрипта
//и поэтому не всегда подходят
function log(message) {
    message = '<br />JS говорит:<br />'+message;
    addHTML($('developer-panel'), message);
}

//Кросс-браузерный способ получить тело iframe
function getIFrameBody(iframe) {
   if (iframe.contentDocument) {
        var d = iframe.contentDocument;
    }
    else {
        if (iframe.contentWindow) {
            var d = iframe.contentWindow.document;
        }
        else {
            var d = window.frames[iframe.id].document;
        }
    }
    return d.body;
}

//Добавление значение в textarea
function insertInTextarea(el, value) {  
  //IE  
  el.focus();
  if (document.selection) {  
     sel = document.selection.createRange();  
     sel.text = value;  
   }  
   //Другие
   else if (el.selectionStart || el.selectionStart == '0') {
       var startPos = el.selectionStart;  
       var endPos = el.selectionEnd;  
       el.value = el.value.substring(0, startPos) + value + el.value.substring(endPos, el.value.length);  
       //Установка курсора
       cursor = startPos + value.length;
       el.selectionStart = el.selectionEnd = cursor;
   }  
   else {  
     myField.value += myValue;  
   }  
}
