// _____________________________________________________________________________
// 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 s=(typeof(_value)!='undefined')?_value:_default;
return s;
}
// _____________________________________________________________________________
function sd_alert(_text)// вызывает сообщение с указанным текстом
// _text - текст сообщения
{
alert(_text);
return;
}
// _____________________________________________________________________________
function sd_debug(_text)// сбрасывает служебную / тестовую информацию в div конйнер
// _text - текст отладочной информации
{
if (!$('#debug').length) { $('body').append('<div id="debug"></div>'); }
$('#debug').html(_text);
}
// _____________________________________________________________________________
function sd_image(_params)// возвращает/формирует изображение
// _params - входные параметры
{
var title=(_params.title!='')?' alt="'+_params.title+'" title="'+_params.title+'"':'';
var class_=(_params.link_!='')?' class="im_c"':'';
var im='<img src="'+_params.image+'"'+class_+' />';
var r=(_params.link_!='')?'<a href="'+_params.link_+'">'+im+'</a>':im;
if (_params.full) { r+=' <a href="'+_params.link_+'">'+_params.title+'</a>'; }
return r;// возвращаем результатат
}
// _____________________________________________________________________________
function sd_link(_params)// возвращает/формирует изображение
// _params - входные параметры
{
var title=sd_default(_params.title,'Ссылка');
var link_=sd_default(_params.link_,'error');
var script_=sd_default(_params.script_,'');
var s='';
if (link_)
{ s='<a href="'+link_+'">'+title+'</a>'
  if (script_!='') { s='<a href="javascript:void(0)" onclick="'+script_+'">'+title+'</a>'; }
}
return s;// возвращаем результатат
}
// _____________________________________________________________________________
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)// работаем со всеми check box на указанной форме
// _form_name - название формы
// _status - присвоить статус; 0 - все отменить. 1 - всем включить; 2 - поменять местами
{
var f=document.getElementById(_form_name);// делаем короткий объект для обращений к форме
for (i=1;i<=f.length;i++)// пройтись по всем элементам на HTML форме
{ if (f.elements[i-1].type=='checkbox')// если тип элемента checkbox, то
  { 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)
{ document.selection.createRange().text=_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_flash(_params)// Вставка Flash объекта
{
$.getScript(path_sd_js+'sd_core_flash_install.js');// загрузка скрипта
echo1('<object id="'+_params.name_+'" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+_params.width+'" height="'+_params.height+'">');
echo1('<param name="movie" value="'+_params.object+'" />');
echo1('<param name="quality" value="high" />');
echo1('<param name="wmode" value="opaque" />');
echo1('<param name="swfversion" value="8.0.35.0" />');
echo1('<param name="expressinstall" value="'+path_sd_js+'sd_core_flash_install.swf" />');
echo1('<!--[if !IE]>-->');
echo1('<object type="application/x-shockwave-flash" data="'+_params.object+'" width="'+_params.width+'" height="'+_params.height+'">');
echo1('<!--<![endif]-->');
echo1('<param name="quality" value="high" />');
echo1('<param name="wmode" value="opaque" />');
echo1('<param name="swfversion" value="8.0.35.0" />');
echo1('<param name="expressinstall" value="'+path_sd_js+'sd_core_flash_install.swf" />');
echo1('<div><p>Flash файл отсутствует или требуется установить Adobe Flash Player старше 6.0 версии</p>');
echo1('<p><a href="http://www.adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" width="112" height="33" class="im_c" /></a></p>');
echo1('</div>');
echo1('<!--[if !IE]>--></object><!--<![endif]-->');
echo1('</object>');
swfobject.registerObject(_params.name_);
return;
}
// _____________________________________________________________________________
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,_params)// отправка ajax запросов при помощи библиотеки jquery
// _link - ссылка для вызова запроса
// _params - параметры запроса
{
var res;
$.ajax(
{ url: _link,
  type: 'POST',
  data: _params,
  dataType: 'json',
  async: false,
  success: function(data) { res=data; }
});
return res;
}
// Module: SD core panels
// _____________________________________________________________________________
function sd_panel_control()// объект отвечающий за формирование панелей управления
{
this.tr=Array();//
this.align_='center';// выравнивание
this.div_id='';// ID объекта куда будем выводить панель
this.count_=0;// кол-во элементов
// _____________________________________________________________________________
this.add=function(_image,_name,_link,_hr,_script)
// _image - изображение
// _name - название пункта
// _link - ссылка
// _hr - true - разделитель
{
hr=_hr||0;
script=_script||0;
this.tr[this.count_]=Array('image','name','link','hr');// задаем свойства
this.tr[this.count_]['image']=_image;// изображение
this.tr[this.count_]['name']=_name;// название
this.tr[this.count_]['link']=_link;// ссылка
this.tr[this.count_]['hr']=hr;// разделитель
this.tr[this.count_]['script']=script;// 1 - ссылка организована через скрипт
this.count_++;// увеличиваем индекс
return;// возвращение результата
}
// _____________________________________________________________________________
this.show=function(_obj)// отображая панель
// _obj - объект
{
s='<table class="table_list">';
c=this.tr.length;// кол-во пунктов
for(it=0;it<c;it++)
{ if (this.tr[it]['hr']==1)// если колонка является разделителем
  { s+='<tr><th colspan="2">'+this.tr[it]['name']+'</th></tr>';
  }
  else
  { if ((it%2)>0) { cl='tr_odd'; } else { cl='tr_even'; }// отмечаем чет не чет
    s+='<tr class="'+cl+'">';
    s+='<td>';
    s+=sd_image({ image:this.tr[it]['image'], link_:this.tr[it]['link'], title:this.tr[it]['name'], short_:1, script:this.tr[it]['script'] });
    s+='</td>';
    s+='<td>';
    s+=sd_link({ link_:this.tr[it]['link'], title:this.tr[it]['name'], script:this.tr[it]['script'] })
    s+='</td></tr>';
  }
}
s+='</table>';
echo(_obj,s);// отображаем всю информацию в указанный объект innerHTML
return;// возвращение результата
}
// _____________________________________________________________________________
return;// возвращение результата. Окончание объекта
}
// _____________________________________________________________________________
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);
}
// _____________________________________________________________________________
// Project: SD Core (JS)
// Module: Upload edit
// Date create: August 2008 year
// Date last change: January 2009 year
// Author: Beglec
// _____________________________________________________________________________
function change_image(_x,_y,_p,_pr,_fe,_pr_width,_pr_height)// если реестр работает только с изображением
// _x - максимум по X
// _y - максимум по Y 
// _p - true - соблюдать пропорции
// _pr - true - формировать миниатюру
// _fe - файловые расширения
// _pr - 
{
var check=document.getElementById('cb_image').checked;
if (check)
{ document.getElementById('div_xx').innerHTML='Максимальные координаты по X <input name="image_x" type="text" class="input_digit" value="'+_x+'" maxlength="5" style="width:50px;" />';
  document.getElementById('div_yy').innerHTML='Максимальные координаты по Y <input name="image_y" type="text" class="input_digit" value="'+_y+'" maxlength="5" style="width:50px;" />';
  proportion=_p==1?' checked':'';
  preview=_pr==1?' checked':'';
  document.getElementById('div_file_ext').innerHTML='Расширения файлов возможные для загрузки (через ; )<input name="files_types" id="files_types" type="text" class="input_normal" style="background-color:#CCCCCC;" value="gif;jpg;png" readonly="readonly" />';
  document.getElementById('div_proportion').innerHTML='Соблюдать пропорции <input type="checkbox" name="proportion" id="proportion"'+proportion+'>';
  var s;
  s='Формировать миниатюру <input type="checkbox" name="preview" id="preview"'+preview;
  s+=' onclick="change_image('+_x+','+_y+','+_p+','+!_pr+',\''+_fe+'\','+_pr_width+','+_pr_height+')" />';
  document.getElementById('div_preview').innerHTML=s;
//  document.getElementById('Preview').checked=!_pr;
  if (_pr)
  { // document.getElementById('Preview').checked=true;
    document.getElementById('div_preview_width').innerHTML='Ширина preview по X <input name="preview_width" type="text" class="input_digit" value="'+_pr_width+'" maxlength="5" style="width:50px;" />';
    document.getElementById('div_preview_height').innerHTML='Высота preview по Y <input name="preview_height" type="text" class="input_digit" value="'+_pr_height+'" maxlength="5" style="width:50px;" />';
  }
  else
  { // document.getElementById('Preview').checked=false;
    document.getElementById('div_preview_width').innerHTML='';
    document.getElementById('div_preview_height').innerHTML='';
  }
}
else
{ 
  document.getElementById('div_xx').innerHTML='';
  document.getElementById('div_yy').innerHTML='';
  document.getElementById('div_proportion').innerHTML='';
  document.getElementById('div_preview').innerHTML='';
  document.getElementById('div_preview_width').innerHTML='';
  document.getElementById('div_preview_height').innerHTML='';
  document.getElementById('div_file_ext').innerHTML='Расширения файлов возможные для загрузки (через ; )<input id="files_types" name="files_types" type="text" class="input_normal" value="'+_fe+'" />';
}
}
// _____________________________________________________________________________
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};
*/
}
