// _____________________________________________________________________________
// Project: SD Core (JS)
// Module: SD Standart
// Date create: June 2009 year
// Date last change: June 2009 year
// Author: Beglec
// _____________________________________________________________________________
function sd_show_hide(_params)// выпадающие списки + или -
{
params=
{ effect: 1,// 1 - используем эффекты
  speed: 1000,// скороть эффектов
  image_plus: '',
  image_minus: ''
}
sd_property_set(_params,params);
var obj1=$('.show_hide').filter('[id]');
c=sd_size_array(obj1);
for(it=0;it<c;it++)
{ im_plus=(params.image_plus!='')?params.image_plus:path_sd_images+'control/plus.gif';
  im_minus=(params.image_minus!='')?params.image_minus:path_sd_images+'control/plus.gif';
  $('#'+obj1[it].id).html('<img src="'+im_plus+'" id="'+obj1[it].id+'_images" class="im_c" />');
  $('#'+obj1[it].id).click(function()
  { if ($('#'+this.id+'_info').is(':hidden'))
    { $('#'+this.id+'_info').slideDown(params.speed);
      $('#'+this.id+'_images').attr('src',im_minus);
    }
    else
    { $('#'+this.id+'_info').slideUp(params.speed);
      $('#'+this.id+'_images').attr('src',im_plus);
    }
  });
  $('#'+obj1[it].id+'_label').click(function()
  { id=this.id.replace('_label','');
    if ($('#'+id+'_info').is(':hidden'))
    { $('#'+id+'_info').slideDown(params.speed);
      $('#'+id+'_images').attr('src',im_minus);
    }
    else
    { $('#'+id+'_info').slideUp(params.speed);
      $('#'+id+'_images').attr('src',im_plus);
    }
  });
}
return false;// возвращение результата // false - не переходить по ссылке если что
}
// _____________________________________________________________________________
function w3c(_separator)
{
var separator=(typeof(_separator)!='undefined')?_separator:' ';// разделитель по умолчанию
var s='';
s+='<a href="http://validator.w3.org/check?uri=referer"><img src="images/w3c_xhtml.png" alt="100% соблюдены стандарты XHTML 1.0 Strict W3C" title="100% соблюдение стандартов XHTML 1.0 Strict W3C" /></a>';
s+=separator;// добавляем разделитель
s+='<a href="http://jigsaw.w3.org/css-validator/check/referer"><img src="images/w3c_css.png" alt="100% соблюдены стандарты CSS!" title="100% соблюдены стандарты CSS!" /></a>';
return s;
}

function sound_message(_sound,_value)
{
var sound=sd_default(_sound,'');
if (sound=='') { return; }
soundManager.url=path_sd+'sound/soundmanager2.swf';// указываем путь к swf файлу
soundManager.debugMode=true;
soundManager.consoleOnly=true;
soundManager.onload=function() { soundManager.createSound('sound_my',sound); }
alert(sound+' '+_value);
soundManager.setVolume('sound_my',_value);// устанавливаем громкость
soundManager.play('sound_my');// прываем мелодию
return;
}
// _____________________________________________________________________________
function escape_html(_str)// экранирование от опасных символов
{
var s=_str;
s=s.replace(/&/gm, '&amp;').replace(/</gm, '&lt;').replace(/>/gm, '&gt;');
return s;
}
// _____________________________________________________________________________
function products(_name,_link,_rem,_image)// Выводит в нужном формате, информацию о продуктах компании
// _name - название продукта
// _link - ссылка на подробное описание продукта
{
var link_open, link_close;
var rem=_rem||'';
image=sd_image({title: _name, link_:_link,image:_image,short_:1});
if (_link!='')
{ name='<a href="'+_link+'">'+_name+'</a>';
}
else
{ name='<strong>'+_name+'</strong>';
}
echo1('<tr>');
echo1('<td class="products_image">'+image+'</td>');
echo1('<td class="products_comment">'+name+'<br />'+rem+'</td>');
echo1('</tr>');
echo1('<tr class="pix"><td colspan="2"></td></tr>');
return;
}
// _____________________________________________________________________________
function fsd_th(_title)// Формирует красивый заголовок для таблиц
// _title - текст заголовка
// _colspan - кол-во объеденяемых ячеек
// _height - явная высота заголовка
// _width_lr - ширрина изображения левого и правого
{
echo1('<table style="width:100%;">');
echo1('<tr>');
echo1('<td class="bk_th_left"></td>');
echo1('<td class="bk_th_center" style="vertical-align:middle;">'+_title+'</td>');
echo1('<td class="bk_th_right"></td>');
echo1('</tr>');
echo1('</table>');
return;
}
// _____________________________________________________________________________
function sd_form_submit(_form_name)// подтверждения удаления на форме выделенных записей
// _form_name - название формы
{
document.getElementById(_form_name).submit();// находим указанный элемент
return false;// возвращаем false, чтобы на форме не сработал метод action
}
// _____________________________________________________________________________
function sd_form_send_post(_action,_key,_value)
{
var form_new=document.createElement('form');
form_new.method='POST';
form_new.action=_action;
var input_new=document.createElement('input');
input_new.name=_key;
input_new.type='hidden';
input_new.value=_value;
form_new.appendChild(input_new);
document.getElementsByTagName('body')[0].appendChild(form_new);
form_new.submit();
return false;// возвращаем всегда отрицательный ответ чтобы не переходить по ссылке
}

// _____________________________________________________________________________
/*
function send(_form_name,_link)
{
with(document.getElementById(_form_name))
{ action=ptr_.href
      // Эмулируем нажатие кнопки submit в форме
      submit()
   }
}
function sd_form_send_post(_form_name,_link)
{// Ищем указатель на форму 'send' по ее id
with(document.getElementById(_form_name))
{
      action=ptr_.href;// Устанавливаем куда будет переход, беря адрес из тега <a>
      // Эмулируем нажатие кнопки submit в форме
      submit()
   }
}
*/
// _____________________________________________________________________________
function sd_form_del(_form_name)// подтверждения удаления на форме выделенных записей
// _form_name - название формы
{
form=document.getElementById(_form_name);// находим указанный элемент
if (confirm('Вы действительно хотите удалить выделенные записи?'))// запросить подтверждение
{ form.submit();// вызвать метод submit на указанной форме
}
return false;// возвращаем false, чтобы на форме не сработал метод action
}
// _____________________________________________________________________________
function sd_form_del_im(_form_name,_short,_path)// отображает кнопку удаления, так как надо, в едином стиле
// _form_name - название формы
{
path=_path||'sd/images/buttons';
short_=_short||false;// true - сокращенный вариант, комментарий к кнопке удаления не будет показываться.
c=' onclick="sd_form_del(\''+_form_name+'\')"';// сама js функция
echo1('<img src="'+path+'button_delete.png" alt="Удалить" title="Удалить выделенные записи" class="im_c" '+c+' />');// отобразить картинку
if (!short_)// если показывается не короткий вариант
{ echo1(' <a href="javascript:void(0)" '+c+'>Удалить</a>');// отобразить картинку
}
}
// _____________________________________________________________________________
function 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;// определяем клавишу
  ret=true;// по умолчанию символ для ввода входит в заданные условия
  switch(_type)
  { case 1: { ret=true; break; }// разрешено вводить все, что угодно
    case 2: { ret=true; 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;
}


