// _____________________________________________________________________________
// Project: SD Core (JS)
// Module: SD Standart
// Date create: June 2009 year
// Date last change: June 2009 year
// Author: Beglec
// _____________________________________________________________________________
function sd_default(_value,_default)
{
var r=(typeof(_value)!='undefined')?_value:_default;
return r;
}
// _____________________________________________________________________________
function sd_alert(_text)// вызывает сообщение с указанным текстом
// _text - текст сообщения
{
alert(_text);
return;
}
// _____________________________________________________________________________
function sd_confirm(_text)// вызывает сообщение с указанным текстом
// _text - текст сообщения
{
var r=false;
if (confirm(_text)) { r=true; }
return r;
}
// _____________________________________________________________________________
function sd_input(_text,_default)// диалог с вводом значения
// _text - текст сообщения
// _default - значение по умолчанию
{
var default_=(typeof(_default!='undefined'))?_default:'';
r=prompt(_text,default_);
return r;
}

// _____________________________________________________________________________
function sd_debug(_text)// сбрасывает служебную / тестовую информацию в div конйнер
// _text - текст отладочной информации
{
if (!$('#debug').length) { $('body').append('<div id="debug"></div>'); }
$('#debug').html(_text);
return;
}
// _____________________________________________________________________________
function sd_image(_params)// возвращает/формирует изображение
// _params - входные параметры
{
var title=sd_default(_params.title,'');
var link_=sd_default(_params.link_,'');
var title=sd_default(_params.title,'');
var script=sd_default(_params.script,'');
var r='';
if (script!='') { script='onclick="'+script+'"';}
if (link_!='')
{ r='<a href="'+link_+'"><img src="'+_params.image+'" alt="'+title+'" title="'+title+'" '+script+' class="im_c" /></a>';
  if (_params.full) { r+=' <a href="'+link_+'" '+script+'>'+title+'</a>'; }// если изображение ссылка должны быть полной / размернутой, то
}
else
{ r='<img src="'+_params.image+'" alt="'+title+'" title="'+title+'" '+script+' class="im_c" />';
  if (_params.full) { r+=' <a href="javascript:void(0);" '+script+'>'+title+'</a>'; }// если изображение ссылка должны быть полной / размернутой, то 
}
return r;// возвращаем результатат
}
// _____________________________________________________________________________
function sd_link(_params)// возвращает/формирует изображение
// _params - входные параметры
{
var title=sd_default(_params.title,'Ссылка');
var link_=sd_default(_params.link_,'');
var script_=sd_default(_params.script_,'');
var r='';
if (link_)
{ r='<a href="'+link_+'">'+title+'</a>'
  if (script_!='') { r='<a href="javascript:void(0)" onclick="'+script_+'">'+title+'</a>'; }
}
return r;// возвращаем результатат
}
// _____________________________________________________________________________
function sd_link_sq(_text,_link,_sq)// срабатывает ссылка после подтверждения
{
sq=_sq||0;// по умолчанию запроса дополнительного нет
if ((_text=='')&&(_link='')) { return false; }
if (sq)
{ if (confirm(_text))// запросить подтверждение
  { document.location.href=_link;// переходим по указанной ссылке
    return false;// если дошли до седова то переход по ссылке всегда запрещен
  }
}
else
{ // alert(_link);
  document.location=_link;// переходим по указанной ссылке
}
return false;// если дошли до седова то переход по ссылке всегда запрещен
}
// _____________________________________________________________________________
function sd_pix_to_int(_value)// преобразует пиксели к числу (75px=75)
{
var str=_value;// преобразовать к строке чтобы преобразовать
r=0;
if (typeof(str)=='number') { return parseInt(str); }
if (typeof(str)=='string')
{ str=str.replace('px','');// убрать текстовые символы, оставить только цифры
  str=str.replace('auto','0');// 
  r=parseInt(str);// парсируем в число
  return r;// возвраащаем результата
}
}
// _____________________________________________________________________________
function sd_pti(_value) { return sd_pix_to_int(_value); }// аналог sd_pix_to_int, только в сокращенном виде
// _____________________________________________________________________________
function sd_goto(_link)// переход на указанную страницу
{
document.location=_link;// _link - указанная страница / html ссылка
}
// _____________________________________________________________________________
function sd_email_show(_mail,_server,_name)// выводит email адрес с защитой от сканирования спамеров
// _mail - сам почтовый ящик, до разделителя @
// _server - сам mx почтовый сервер
// _name - название почтового ящика, то есть как будет отображаться
{
name=_name||'';
r=_mail+'@'+_server;// формируем правильный email
n=r;
if (name!='') { n=name; }// если указано как отобращать email? то так и будет отображать
document.write('<a href="mailto:'+r+'">'+n+'</a>');// выводим информацию
}
// _____________________________________________________________________________
function sd_email_image(_image,_user,_mix,_f)// правильно формирует и маскирует email но для картинки
// пример: email_image('<img src="images/contact.gif" alt="Контакт" title="Написать письмо" class="im_c" />','sd_company','mail.ru',1));
{
if (_f==0)// если используется напрямую
{ document.write('<a href="mailto:'+_user+'@'+_mix+'">'+_image+'</a>'); }
else // если используется в нутри скрипта
{ s='<a href="mailto:'+_user+'@'+_mix+'">'+_image+'</a>';
  return s;// возвращение результата
}
}
// _____________________________________________________________________________
function echo(_obj_name,_text,_info)// вывода информации, реализована для сокращения текта и быстроты написания кода, а также совместимость вызова с PHP
// _obj_name - название объекта
// _text - текст вывода
{
info=_info||0;
o=document.getElementById(_obj_name);
if (o)
{ document.getElementById(_obj_name).innerHTML=_text;
}
else
{ if (info) { alert('Нет объекта '+_obj_name); }// Если требуется специальное информирование о том, что нет объекта
}
return;
// (_obj_name).html(_text);// тоже самое на jquery
}
// _____________________________________________________________________________
function echo1(_text)// Вывод информации. Реализована для быстроты написания кода и совместимости с PHP
// _text - текст вывода
{ document.write(_text); return;
}
// _____________________________________________________________________________
var sd_backcolor='';
function sd_focus(_obj_name,_vis)// переводит фукус на нужный объект
// _obj_name - название объекта ввода, на который требуется перевести фокус ввода, как правило объект input
// _vis -
{
var vis=_vis||0;
if (_vis==1)
{ document.getElementById(_obj_name).style.backgroundColor=sd_color_back;
  document.getElementById(_obj_name).focus();
  return;
}
sd_color_back=document.getElementById(_obj_name).style.backgroundColor;
document.getElementById(_obj_name).style.backgroundColor='#FF0000';
document.getElementById(_obj_name).focus();
text='sd_focus(\''+_obj_name+'\',1)';
setTimeout(text,300);
return;
}
// _____________________________________________________________________________
var sd_calc_color;
var sd_calc_color_bk;
function sd_td_active(_obj_name,_color)// подсветки объекта используется в основном на событиях типа onmouseover="sd_td_active(this)" и onmouseout="sd_td_deactive(this)" то есть при на веденеии на объект он изменяет цвет
// _obj_name - название объекта
// _color - цвет которые будет при наведении / выделении объекта
{
sd_calc_color_bk=_obj_name.style.backgroundColor;
sd_calc_color=_obj_name.style.color;
var col=(typeof(_color)!='undefined')?_color:'#FF0000';
_obj_name.style.color=col;// изменяем у объекта цвет
_obj_name.style.backgroundColor='#FFFFFF';
}
// _____________________________________________________________________________
function sd_td_deactive(_obj_name)// деактивировать ячейки, см выше f_td_active
// _obj_name - название объекта
// _color - цвет которые будет при потере фокуса ввода на объекта
{
_obj_name.style.color=sd_calc_color;// изменяем у объекта цвет
_obj_name.style.backgroundColor=sd_calc_color_bk;// задний фон
}
// _____________________________________________________________________________
function sd_checkbox_status(_form_name,_status,_name)// работаем со всеми check box на указанной форме
// form_name - название формы
// status - присвоить статус; 0 - все отменить. 1 - всем включить; 2 - поменять местами
// name - имя checkbox`s (чекбоксов)
{
var f=document.getElementById(_form_name);// делаем короткий объект для обращений к форме
var name_='';
var str='';
name_=(typeof(_name)=='undefined')?'del':_name;
for (i=1;i<=f.length;i++)// пройтись по всем элементам на HTML форме
{ if (f.elements[i-1].type=='checkbox')// если тип элемента checkbox, то
  { str=f.elements[i-1].name;
    if (sd_str_pos(str,name_)<1) { continue; }// если нет искомого значения
    switch(_status)
    { case(0): { f.elements[i-1].checked=false; break; }// сбрасываем
      case(1): { f.elements[i-1].checked=true; break; }// устанавливаем
      case(2): { f.elements[i-1].checked=!f.elements[i-1].checked; break; }// меняемся местами
    }
  }
}
}
// _____________________________________________________________________________
function sd_mouse(e)// возащение пиксели к числу (75px=75)
// _value - значение 
{
var r=Array();
if (!e) { e=window.event; }// совместимость с IE
r.x=e.clientX;
r.y=e.clientY;
return r;
}
// _____________________________________________________________________________
function sd_position_x(_obj)
{
var r=$('#'+_obj).top();
alert(r);
return r;
}
// _____________________________________________________________________________
function sd_property_set(_obj_a,_obj_b)// задает или перезаписывает свойства объекта A объекту B
{
var r=_obj_b;
for (var key in _obj_a)// пройтись по всем свойствам объекта
{ if (typeof(_obj_a[key])!='object')// если свойство не является объектом, то
  { r[key]=_obj_a[key];// присваиваем свойство объекту B
  }
  else// если свойство является дополнительным объектом
  { // в объекте B уже имеется такой объект, то корректировать его, иначе создаем новый экзепляр
    if (typeof(r[key])=='object') { vb=r[key]; } else { var vb={}; }
    sd_property_set(_obj_a[key],vb);// рекрсивно вызываем сами себя прописываем все свойства 
    r[key]=vb;// возвращаем правильно прописанные функции.
    // такой оборот делает из-за изчезновения свойств в случае если в объекте А они не указаны
  }
}
return r;// заканчиваем процедуру корректно
}
// _____________________________________________________________________________
function sd_text_selected_get(_obj_name)// возвращает выделеный текст, если таковой имеется
// _obj_name - название объекта если что из которого брать выделение
{
var s='';
// стандарт
if (window.getSelection)
{ s=window.getSelection();
  if (s=='')// если есть выделение, но выделение не на странице, где то в объекте ввода
  { var e=document.getElementById(_obj_name); s=e.value;// узнаем значение в объекте ввода
    if (s!='') { s=s.substring(e.selectionStart,e.selectionEnd); }// выбираем все что выделено в объекте ввода
  }
  return s;
}
// совместимость с IE
if (document.getSelection)
{ s=document.getSelection();
  return s;
}
// поддержка старых версий
if (document.selection)
{ s=document.selection.createRange().text;
  return s;// возвращаем результата
}
return s;// возвращаем результата
}
// _____________________________________________________________________________
function sd_text_selected_insert(_obj_name,_text)
{
var area=document.getElementById(_obj_name);
if (document.selection)
{ if (window.getSelection)
  { area.value=area.value.substring(0,area.selectionStart)+_text+area.value.substring(area.selectionEnd,area.value.length);
  }
  else
  { area.value+=_text;
  }
}
else// нач
{ if (window.getSelection)
    area.value=area.value.substring(0,area.selectionStart)+_text+area.value.substring(area.selectionEnd,area.value.length);
  else
    area.value+=_text;
}
}
// _____________________________________________________________________________
function sd_tag_insert(_bb_code,_obj_name)// вставляет bb код в указанный объект
// _bb_code - bb код
// _obj_name - имя объекта (как правило input text) куда вставляет ии код
{
if (!$('#'+_obj_name).length) { alert('Object '+_obj_name+' of page not found'); return; }// если такого объекта не существует, то прекращаем работу функции
// ('#'+_obj_name).html('['+_bb_code+']'+sd_text_selected_get(_obj_name)+'[/'+_bb_code+']');
sd_text_selected_insert(_obj_name,'['+_bb_code+']'+sd_text_selected_get(_obj_name)+'[/'+_bb_code+']');
}
// _____________________________________________________________________________
function sd_style_add(_file_css)// вставка css согласно канонам w3c
{
if (_file_css=='') { return; }
$('head').append('<link rel="stylesheet" type="text/css" href="'+_file_css+'" />');
return;
}
// _____________________________________________________________________________
function sd_ajax(_link,_paramss)// отправка ajax запросов при помощи библиотеки jquery
// _link - ссылка для вызова запроса
// _params - параметры запроса
{
var ress;
$.ajax(
{ url: _link,
  type: 'post',
  global: false,
  async: false,
  data: _paramss,
  dataType: 'json',
  error: function (_XMLHttpRequest, _textStatus) { ress.error=1; alert('Error jQuery/AJAX: '+_textStatus); },
  success: function(_data,_text) { ress=_data; ress.error=0; }
});
return ress;
}
// _____________________________________________________________________________
function sd_ajax_xml(_link,_paramss)// отправка ajax запросов при помощи библиотеки jquery
// _link - ссылка для вызова запроса
// _params - параметры запроса
{
var ress;
$.ajax(
{ url: _link,
  type: 'POST',
  global: false,
  async: false,
  data: _paramss,
  dataType: 'xml',
  error: function (_XMLHttpRequest, _textStatus) { alert('Error jQuery/AJAX: '+_textStatus); },
  success: function(_datas,_text) { ress=_datas; }
})
return ress;
}
// _____________________________________________________________________________
function sd_error_js(e)// отловитель js ошибок
// function func()
// { try { s=s/0; }
//   catch(e) { sd_error_js(e); }
// }
// func();
{
var s='';
var p;
s+='Error JavaScript!'+"\n";
s+='--------------------------------------------'+"\n";
for(p in e)
{ switch(p)
  { case('name'): { s+='name: '+e.name; break; }
    case('message'): { s+='text: '+e.message; break; }
    case('fileName'): { s+='file: '+e.fileName; break; }
    case('lineNumber'): { s+='line: '+e.lineNumber; break; }
    case('stack'): { s+='stack: '+e.stack; break; }
    default: continue;
  }// switch
  s+="\n";
}
alert(s);
}
// _____________________________________________________________________________
function sd_linse(_control,_image,_show)
{
var show=_show||1;
if (show!=1)
{ echo(_control,'');
  return;
};
if (!$('#'+_control).length) { echo1('<div id="'+_control+'"></div>'); }// формирование div 
s='<div id="images_show_plus" ';
s+='style="position:absolute;';
s+='width:300px; ';
s+='height:300px; ';
s+='border:1px solid gray; ';
s+='background:white; ';
s+='display: block;';
s+='padding:20px 20px 20px 20px; '
s+='text-align:center;';
s+='" onmouseout="sd_linse(\''+_control+'\',\''+_image+'\',2)">';
s+='<img src="'+_image+'" width="100%" alt="" class="im_c" />';
s+='</div>'
echo(_control,s);
}
// _____________________________________________________________________________
function sd_get_pos1(_obj_name)// возвращает координаты указанного элемента r=get_pos('name')
// _obj_name - название объекта
{
var o=document.getElementById(_obj_name);
var left=o.offsetLeft;
var top=o.offsetTop;
var parent=o.offsetParent;
while(parent&&parent.tagName!='body')
{ left+=parent.offsetLeft;
  top+=parent.offsetTop;
  parent=parent.offsetParent;
}
var r=Array();
r.left=left;
r.top=top;
return r;
}
// _____________________________________________________________________________
function sd_get_pos(_obj)// возвращает координаты указанного элемента r=get_pos(document.getElementById('name'))
// _obj - название объекта
{
// o=document.getElementById(_obj_name);
var r={x: _obj.offsetLeft, y: _obj.offsetTop };// узнаем координаты, объекта
if (_obj.offsetParent)// если есть объект
{ var tmp=sd_get_pos(_obj.offsetParent);// повторный запрос координат
  r.x+=tmp.x;// возвращаем координаты X
  r.y+=tmp.y;// возвращаем координаты Y
}
return r;// реально возвращаем координаты
/*
o=document.getElementById(_obj_name);
var left=o.offsetLeft;
var top=o.offsetTop;
for (var parent=o.offsetParent; parent; parent=parent.offsetParent)
{ left+=parent.offsetLeft-parent.scrollLeft;
  top+=parent.offsetTop-parent.scrollTop;
}
return {left: left, top:top, width:o.offsetWidth, height:o.offsetHeight};
*/
}
// _____________________________________________________________________________
function sd_processing(_div,_mode,_text)
// _div - ID контейнер для вывода информации
// _mode - режим вывода. on - включить, off - выключить
// _text - сопроводительный текст
{
if (_mode=='on32')
{ $('#'+_div).html('<img src="/images/processing_x32.gif" alt="Действие в процессе" title="Действие в процессе" /><br />'+_text);
  return;
}
if (_mode=='on16')
{ $('#'+_div).html('<img src="/images/processing_x16.gif" alt="Действие в процессе" title="Действие в процессе" /> '+_text);
  return;
}
else
{ var text=(typeof(_text)=='undefined')?'Режим ожидания':_text;
  $('#'+_div).html('<img src="/images/processing.png" alt="Режим ожидания" title="Режим ожидание" /> '+text);
}
return;
}
// _____________________________________________________________________________
function sd_select_all(_obj)// выделает всю область редактирования у указанного объекта
{
_obj.focus();// переводим фокус ввода
_obj.select();// выделяем сразу весь текст
}
// _____________________________________________________________________________
function sd_date(timestamp,format)// Format a local time/date
{    
    // 
    // +   original by: Carlos R. L. Rodrigues
    // +      parts by: Peter-Paul Koch (http://www.quirksmode.org/js/beat.html)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: MeEtc (http://yass.meetcweb.com)
    // +   improved by: Brad Touesnard
 
    var a, jsdate = new Date(timestamp ? timestamp * 1000 : null);
    var pad = function(n, c){
        if( (n = n + "").length < c ) {
            return new Array(++c - n.length).join("0") + n;
        } else {
            return n;
        }
    };
    var txt_weekdays = ["Sunday","Monday","Tuesday","Wednesday",
        "Thursday","Friday","Saturday"];
    var txt_ordin = {1:"st",2:"nd",3:"rd",21:"st",22:"nd",23:"rd",31:"st"};
    var txt_months =  ["", "January", "February", "March", "April",
        "May", "June", "July", "August", "September", "October", "November",
        "December"];
 
    var f = {
        // Day
            d: function(){
                return pad(f.j(), 2);
            },
            D: function(){
                t = f.l(); return t.substr(0,3);
            },
            j: function(){
                return jsdate.getDate();
            },
            l: function(){
                return txt_weekdays[f.w()];
            },
            N: function(){
                return f.w() + 1;
            },
            S: function(){
                return txt_ordin[f.j()] ? txt_ordin[f.j()] : 'th';
            },
            w: function(){
                return jsdate.getDay();
            },
            z: function(){
                return (jsdate - new Date(jsdate.getFullYear() + "/1/1")) / 864e5 >> 0;
            },
 
        // Week
            W: function(){
                var a = f.z(), b = 364 + f.L() - a;
                var nd2, nd = (new Date(jsdate.getFullYear() + "/1/1").getDay() || 7) - 1;
 
                if(b <= 2 && ((jsdate.getDay() || 7) - 1) <= 2 - b){
                    return 1;
                } else{
 
                    if(a <= 2 && nd >= 4 && a >= (6 - nd)){
                        nd2 = new Date(jsdate.getFullYear() - 1 + "/12/31");
                        return date("W", Math.round(nd2.getTime()/1000));
                    } else{
                        return (1 + (nd <= 3 ? ((a + nd) / 7) : (a - (7 - nd)) / 7) >> 0);
                    }
                }
            },
 
        // Month
            F: function(){
                return txt_months[f.n()];
            },
            m: function(){
                return pad(f.n(), 2);
            },
            M: function(){
                t = f.F(); return t.substr(0,3);
            },
            n: function(){
                return jsdate.getMonth() + 1;
            },
            t: function(){
                var n;
                if( (n = jsdate.getMonth() + 1) == 2 ){
                    return 28 + f.L();
                } else{
                    if( n & 1 && n < 8 || !(n & 1) && n > 7 ){
                        return 31;
                    } else{
                        return 30;
                    }
                }
            },
 
        // Year
            L: function(){
                var y = f.Y();
                return (!(y & 3) && (y % 1e2 || !(y % 4e2))) ? 1 : 0;
            },
            //o not supported yet
            Y: function(){
                return jsdate.getFullYear();
            },
            y: function(){
                return (jsdate.getFullYear() + "").slice(2);
            },
 
        // Time
            a: function(){
                return jsdate.getHours() > 11 ? "pm" : "am";
            },
            A: function(){
                return f.a().toUpperCase();
            },
            B: function(){
                // peter paul koch:
                var off = (jsdate.getTimezoneOffset() + 60)*60;
                var theSeconds = (jsdate.getHours() * 3600) +
                                 (jsdate.getMinutes() * 60) +
                                  jsdate.getSeconds() + off;
                var beat = Math.floor(theSeconds/86.4);
                if (beat > 1000) beat -= 1000;
                if (beat < 0) beat += 1000;
                if ((String(beat)).length == 1) beat = "00"+beat;
                if ((String(beat)).length == 2) beat = "0"+beat;
                return beat;
            },
            g: function(){
                return jsdate.getHours() % 12 || 12;
            },
            G: function(){
                return jsdate.getHours();
            },
            h: function(){
                return pad(f.g(), 2);
            },
            H: function(){
                return pad(jsdate.getHours(), 2);
            },
            i: function(){
                return pad(jsdate.getMinutes(), 2);
            },
            s: function(){
                return pad(jsdate.getSeconds(), 2);
            },
            //u not supported yet
 
        // Timezone
            //e not supported yet
            //I not supported yet
            O: function(){
               var t = pad(Math.abs(jsdate.getTimezoneOffset()/60*100), 4);
               if (jsdate.getTimezoneOffset() > 0) t = "-" + t; else t = "+" + t;
               return t;
            },
            P: function(){
                var O = f.O();
                return (O.substr(0, 3) + ":" + O.substr(3, 2));
            },
            //T not supported yet
            //Z not supported yet
 
        // Full Date/Time
            c: function(){
                return f.Y() + "-" + f.m() + "-" + f.d() + "T" + f.h() + ":" + f.i() + ":" + f.s() + f.P();
            },
            //r not supported yet
            U: function(){
                return Math.round(jsdate.getTime()/1000);
            }
    };
 
    return format.replace(/[\\]?([a-zA-Z])/g, function(t, s){
        if( t!=s ){
            // escaped
            ret = s;
        } else if( f[s] ){
            // a date function exists
            ret = f[s]();
        } else{
            // nothing special
            ret = s;
        }
 
        return ret;
    });
}
// _____________________________________________________________________________
function sd_required(_correct,_obj_name,_rem,_length)// проверка полей на обязательный ввод
// _result - значение по умолчанию
// _obj_name - имя объекта для проверки
// _rem - комментарий в сообщении, чтобы было понятно что именно не введено
{
var len=_length||0;// задается длина либо, по умолчанию свободно
var r=true;
if (!_correct) { return false; }// если форма уже не корректна, то дальнейшую проверку не имеет смысла проводить
var text=$('input[name="'+_obj_name+'"]').val();
// document.getElementByName(_obj_name).value.toString();// считываем данные с указанного объекта
if (text=='')// если нет значения в указанном поле
{ alert('Не указано поле для обязательного заполнения ['+_rem+']');// выдаем предупреждающее сообщение
  sd_focus(_obj_name);// переключить фокус ввода, в нужное место, для удобства
  r=false;// возвращаем, что поле ввода не корректно
}
// если ввод устраивает первоначальный критерий
if (r)
{ if (len!=0)// если требуется, проверка на длину ввода
  { if (i.length>len)// если текущая длина больше, чем разрешено
    { alert('Значение больше, чем положено. Максимум ['+len+'] символов');
      sd_focus(_obj_name);// передаем туда фокус ввода
      r=false;// указываем что значение введено неверно
    }
  }
}
return r;// возвращение результата
}
// _____________________________________________________________________________
// ограничение ввода
// _event - событие
// _obj_name - название объекта
// _type - какой тип данных должен быть в поле
// ######## дополнительная информация по клавишам
// key8 - забой
// key9 - табуляция
// key46 - точка
// key46 - delete, да именно 46 идет совпадение кодов!
// key118 - F5
// key>=96 и key<=105 - цифры с дополнительной клавиатуры
// key - return / enter
// key - delete
// kry - обработка запятой
function sd_field_check(_event,_obj_name,_type)
{ var k=_event.which;
// определяем совместимость так как в FF и IE разные объекты отвечают за клавиатуру
  key=k?_event.which:_event.keyCode;// определяем клавишу
  var ret=true;// по умолчанию символ для ввода входит в заданные условия
  switch(_type)
  { case 1: { ret=true; break; }// разрешено вводить все, что угодно
    case 2: { ret=true; break; }// разрешено вводить все, что угодно
    case 21:// разрешено вводить все, что угодно
    { ret=((key>=48)&&(key<=57)||(key==8)||(key==9)||((key>=35)&&(key<=40))||((key>=97)&&(key<=122)))?true:false;
      break;
    }
    case 3:// разрешено вводить, только цифры
    { ret=((key>=48)&&(key<=57)||(key==8)||(key==9)||(key==46)||((key>=35)&&(key<=40))||((key>=96)&&(key<=105)))?true:false;
      break;
    }
    case 30:// Ввод только цифры и точку
    { ret=((key>=48)&&(key<=57)||(key==8)||(key==9)||((key>=35)&&(key<=40)))?true:false;
      if (key==46)// если набрана точка
      { ret=true;// по умолчанию ввод корректен
        d=document.getElementById(_obj_name).value.toString();// считаем информацию из поля ввода
        t=d.indexOf(".");// ищем точку
        if (t>=0) { ret=false; }// если точка уже есть, то значит вторую выводить не стоит, значит ввод не корректен
      }
      break;
    }
    case 31:// Ввод только цифры и отрицательного числа
    { ret=((key>=48)&&(key<=57)||(key==8)||(key==9)||((key>=35)&&(key<=40)))?true:false;
      if (key==45)// если знак минус
      { d=document.getElementById(_obj_name).value.toString();// считаем информацию из поля ввода
        t=d.indexOf("-");// ищем минус
        if (t<0) { document.getElementById(_obj_name).value='-'+d; }// если знака нет, то ставим его в начало
        ret=false;// специально возвращаем не корректность, так как минус уже поставлен в начало строки
      }
      break;
    }
    case 32:// Ввод только цифры и отрицательного числа и точка
    { ret=((key>=48)&&(key<=57)||(key==45)||(key==8)||(key==9)||((key>=35)&&(key<=40)))?true:false;
      if (key==46)// если набрана точка
      { ret=true;// по умолчанию ввод корректен
        d=document.getElementById(_obj_name).value.toString();// считаем информацию из поля ввода
        t=d.indexOf(".");// ищем точку
        if (t>=0) { ret=false; }// если точка уже есть, то значит вторую выводить не стоит, значит ввод не корректен
      }
      if (key==45)// если знак минус
      { d=document.getElementById(_obj_name).value.toString();// считаем информацию из поля ввода
        t=d.indexOf("-");// ищем минус
        if (t<0) { document.getElementById(_obj_name).value='-'+d; }// если знака нет, то ставим его в начало
        ret=false;// специально возвращаем не корректность, так как минус уже поставлен в начало строки
      }
      break;
    }
  }
  return ret;
}
// _____________________________________________________________________________
function html_load(_name)// загрузка html файла в body
{
var params={'mode': 'html', 'name_': _name }
var i=sd_ajax('index.php',params);// отправка ajax запросов при помощи библиотеки jquery
$('body').html(i.info.content);
}
// _____________________________________________________________________________
function sd_input_autoselect(_this)// автоматическое выделение поля ввода
{
_this.focus();// переводим фокус ввода
_this.select();// выделяем весь текст
return;
}
// _____________________________________________________________________________
function sd_htmlspecialchars(_str)
{
var d=document.createElement('div');
d.appendChild(document.createTextNode(_str));
return d.innerHTML;
}
