function sendfn (kp, nf, ftab, ff, url, net, ui, qi, qu) {
/*
kp0 - name field, kp1 - type field (text, inte, doubl, tim, dat, mail)
nf - name form
ftab - имя функции отражаемой таблицы
ff - имя функции выполняемой в z_zap.php
url - page s vipolnyaemoy function
net - имя div table
ui - user id
qi - zapros insert
qu - zapros update
*/
  setTimeout(function(){
  //tinyMCE.get('elm1').getContent();

  var j;    
  for(j=0; j<kp.length; j++) {
    if (kp[j][2]=="date") {
        if (isdate(document.forms[nf].elements[kp[j][0]])==false) {
          return false;
        } else if (document.forms[nf].elements[kp[j][0]].value=="") {
          alert('Пожалуйста, заполните поле "'+kp[j][1]+'"');
          return false;
        }
    }
    if (kp[j][2]=="mail") {
        if (isValidEmail(document.forms[nf].elements[kp[j][0]].value)==false) {
          alert('Пожалуйста, заполните правильно поле "'+kp[j][1]+'"');
          return false;
        }
    }
    if (kp[j][2]=="text" & document.forms[nf].elements[kp[j][0]].value=="") {
        alert('Пожалуйста, заполните поле "'+kp[j][1]+'"');
        document.forms[nf].elements[kp[j][0]].focus();
        return false;
    }
    if (kp[j][2]=="p") {
      if (document.forms[nf].elements[kp[j][0]].value=="" || document.forms[nf].elements[kp[j][0]].value != document.forms[nf].elements[kp[j+1][0]].value) {
        alert('Пожалуйста, повторите ввод пароля!');
        document.forms[nf].elements[kp[j][0]].value="";
        document.forms[nf].elements[kp[j+1][0]].value="";
        document.forms[nf].elements[kp[j][0]].focus();
        return false;
      }
    }
    if (kp[j][3]=="s" & kp[j][2]=="date") {
      qi=qi.replace("_fie_", date2timestamp(document.forms[nf].elements[kp[j][0]].value));
      qu=qu.replace("_fie_", date2timestamp(document.forms[nf].elements[kp[j][0]].value));
    } else if (kp[j][3]=="s" & kp[j][2]=="tiny") {
      qi=qi.replace("_fie_", tinyMCE.get(kp[j][0]).getContent());
      qu=qu.replace("_fie_", tinyMCE.get(kp[j][0]).getContent());
      //alert(tinyMCE.get(kp[j][0]).getContent());
    } else if (kp[j][3]=="s") {
      qi=qi.replace("_fie_", document.forms[nf].elements[kp[j][0]].value);
      qu=qu.replace("_fie_", document.forms[nf].elements[kp[j][0]].value);
    }
  }
  if (document.forms[nf].elements[kp[0][0]].value!="") {
    qi=qu.replace("_fie_id_", trim(document.forms[nf].elements[kp[0][0]].value));
  }
  //alert("!!!!!!!!!!!!!!!! "+document.forms[nf].elements[kp[0][0]].value+" !!!!!!!!!!!!!!!!");
  //alert(qi+" !!!!!!!!!!!!!!!!");
  
  request.open("POST", url, true);
  request.onreadystatechange = function () {
    if (request.readyState == 4) {
      if (request.status == 200) {
        var dat = request.responseText;
        //alert(net);
        document.getElementById(net).innerHTML=dat;
      } else
        alert("Error! Request status is " + request.status);
        //alert(request.responseText);
    }
  }
  request.setRequestHeader("Content-Type",
                           "application/x-www-form-urlencoded; charset=windows-1251");
  request.send("zap=" + escape(qi) +
               "&ftab=" + escape(ftab) +
               "&ff=" + escape(ff));
  
  },1000);
}//=============================================================================
//==============================================================================
//==============================================================================

function provdata(nf, url, ff) { //proverka
//url - page s vipolnyaemoy function; ff - имя функции выполняемой в z_zap.php; 
  if (nf.value!="") {
    request.open("POST", url, true);
    request.onreadystatechange = function () {
      if (request.readyState == 4) {
        if (request.status == 200) {
          var dat = request.responseText;
          //alert(dat);
          nf.value=dat;
          if (nf.value=="") {
            alert('Пожалуйста, заполните поле, или оставьте пустым');//+kp[mp[0]][1]);
            nf.value="!!!";
            nf.focus();
//            nf.value="";
            return false;
          }
        } else
          alert("Error! Request status is " + request.status);
      }
    }
    request.setRequestHeader("Content-Type",
                             "application/x-www-form-urlencoded");
    request.send("par1=" + nf.value +
                 "&sql_n=" + '1' +
                 "&ff=" + escape(ff));
  }
}//=============================================================================

function podmelem(url, ff, net, id, nf, ti) { //add zapis
/*
url - page s vipolnyaemoy function;
ff - имя функции выполняемой в z_zap.php;
net - имя div table;
id - id elementa pervoi formi
ti - отображение tiny в случае добавления записи
*/

  request.open("POST", url, true);
  request.onreadystatechange = function () {
    if (request.readyState == 4) {
      if (request.status == 200) {
        var dat = request.responseText;
        //alert(dat);
        document.getElementById(net).innerHTML=dat;
        if (ti==1) {
          f_tiny();
        }
      } else
        alert("Error! Request status is " + request.status);
    }
  }
    
  request.setRequestHeader("Content-Type",
                           "application/x-www-form-urlencoded; charset=windows-1251");
  if (nf=="form_usl_gr") {
    request.send("ff=" + escape(ff) +
                 "&id2=" + escape(id));
  } else {
    request.send("ff=" + escape(ff));
  }   
}//=============================================================================

function podmelem_list(url, ff, net, fid) { //add zapis, url - page s vipolnyaemoy function; ff - имя функции выполняемой в z_zap.php; net - имя div table
  //alert(document.getElementById(fid).value);
  request.open("POST", url, true);
  request.onreadystatechange = function () {
    if (request.readyState == 4) {
      if (request.status == 200) {
        var dat = request.responseText;
        document.getElementById(net).innerHTML = dat;
      } else
        alert("Error! Request status is " + request.status);
    }
  }
    
  request.setRequestHeader("Content-Type",
                           "application/x-www-form-urlencoded; charset=windows-1251");
  request.send("ff=" + escape(ff) +
               "&fid=" + document.getElementById(fid).value);
}//=============================================================================

function krit_arr(url, ff, ned, nedm, nel, nell, co, vp) {
/*url - page s vipolnyaemoy function;
ff - имя функции выполняемой в z_zap.php;
ned - имя div'а поля со списком;
nedm - имя div'а всех переменных полей;
nel - имя элемента с кот. возьмем значение;
nell - имя необязательного элемента;
co - номер изменяемого поля;
vp - всего полей*/
  var arr="";
  var p2;
  var cou=0;
  while (document.getElementById(cou+nel)) {
    if (document.getElementById(cou+nel).value!=1) {
      if (document.getElementById(cou+nell)) {p2=document.getElementById(cou+nell).value;} else {p2=0;}
      arr=arr+document.getElementById(cou+nel).value+","+p2+";";
    }
    cou++;
  }
  request.open("POST", url, true);
  request.onreadystatechange = function () {
    if (request.readyState == 4) {
      if (request.status == 200) {
        var dat = request.responseText;
        document.getElementById(nedm).innerHTML = dat;

      } else
        alert("Error! Request status is " + request.status);
    }
  }
  request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=windows-1251");
  request.send("ff=" + escape(ff) +
               "&nell=" + escape(co+nell) +
               "&nedm=" + escape(nedm) +
               "&arr=" + escape(arr) +
               "&fid=" + document.getElementById(co+nel).value
               );
}//=============================================================================



function f_tiny() {
  tinymce.dom.Event._pageInit();
  tinyMCE.init({
          // General options
          mode: "exact",
          elements: "elm1, f_menu_text",
          //mode : "textareas",
          theme : "advanced",
          plugins : "imagemanager,filemanager,safari,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template",

          // Theme options
          theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect",
          theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor",
          theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
          theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak",
          theme_advanced_toolbar_location : "top",
          theme_advanced_toolbar_align : "left",
          theme_advanced_statusbar_location : "bottom",
          theme_advanced_resizing : true,

          // Example content CSS (should be your site CSS)
		content_css : "../../styles.css",
          //content_css : "examples/css/content.css",

          // Drop lists for link/image/media/template dialogs
          template_external_list_url : "examples/lists/template_list.js",
          external_link_list_url : "examples/lists/link_list.js",
          external_image_list_url : "examples/lists/image_list.js",
          media_external_list_url : "examples/lists/media_list.js",

          // Replace values for the template plugin
          template_replace_values : {
                  username : "Some User",
                  staffid : "991234"
          }
  });
}//=============================================================================

function subdan(url, id, ff, nf, nt, nam_tab, net, kk) {
/*
url - page s vipolnyaemoy function
ff - имя функции выполняемой в z_zap.php;
nf - имя формы редактирования записи
nt - name table
nam_tab - имя функции отражаемой таблицы
net - имя div table
kk - kolichestvo knopok
*/
 
  mnp = new Array(); //massiv imen poley
  var time=0, i, raz="", zap="";

  podmelem(url, ff, net, id, nf);

  setTimeout(function(){ //chtobi dat' vremya ispolnitsya function podmelem
    kel=document.forms[nf].length-kk;
    for (i=0; i<kel; i++) { 
      mnp[i] = document.forms[nf].elements[i].name;
      if (i!=kel-1) {raz=", ";} else {raz=" ";}
      zap=zap+mnp[i]+raz;
    }
    zap="select " + zap + " from " + nt + " where " + mnp[0] + "=`" + id + "`";
    //alert(zap);
    request.open("POST", url, true);
    request.onreadystatechange = function () {
      if (request.readyState == 4) {
        if (request.status == 200) {
          var dat = request.responseText;
          //alert(dat);
          var mp = new Array();
          mp = dat.split('end_field');
          //mp[0] = mp[0].substr(2); //чтобы избавиться от пустой строчки!!!!!!!!!!!!!!!!!!!!!!!!!!!если одна кнопка
          for (i=0; i<kel; i++) {
            document.forms[nf].elements[i].value = mp[i];
            //alert("!!!!!!!!!!!!!!! "+mp[i]+" !!!!!!!!!!!!!!!");
          }
          f_tiny();
        } else
          alert("Error! Request status is " + request.status);
      }
    }
    request.setRequestHeader("Content-Type",
                             "application/x-www-form-urlencoded");
    request.send("zap=" + escape(zap) +
                 "&id=" + escape(id) +
                 "&ff=" + escape("zapf"));
  },1500);
}//=============================================================================

function delzap(zap, ftab, net) { //del zapis
  var url = "z_del.php";
  request.open("POST", url, true);
  request.onreadystatechange = function () {
    if (request.readyState == 4) {
      if (request.status == 200) {
        var dat = request.responseText;
        document.getElementById(net).innerHTML=dat;
        //window.location = window.location;
      } else
        alert("Error! Request status is " + request.status);
    }
  }
  request.setRequestHeader("Content-Type",
                           "application/x-www-form-urlencoded");
  request.send("zap=" + escape(zap) +
               "&ftab=" + escape(ftab));
}//=============================================================================

function confirm_del(fundel, ftab, net) {
  if (window.confirm("Удалить запись?")==true){
      delzap(fundel, ftab, net);
  }
}//=============================================================================

function isdate(f) {
  if((f.value.length==10)&&(f.value.substr(2,1)=="." || f.value.substr(2,1)=="/")&&(f.value.substr(5,1)=="." || f.value.substr(5,1)=="/")&&(f.value!="")){
    n=f.value.length;
    day=f.value.substr(0,2);
    month=f.value.substr(3,2);
    year=f.value.substr(6,4);
    if(day>31||day<1){
      alert("Введите дату в формате дд.мм.гггг День месяца должен быть меньше либо равен 31");
      f.focus();
      return false;
    };
    if(month>12||month<1){
      alert("Введите дату в формате дд.мм.гггг Месяц должен быть меньше либо равен 12");
      f.focus();
      return false;
    };
    if(year<1753){
      alert("Введите дату в формате дд.мм.гггг Год должен быть больше 1753");
      f.focus();
      return false;
    };
  } else if(f.value!="") {
    alert("Введите дату в формате дд.мм.гггг"); 
    f.focus();
    return false;
  }
  return true;
}//=============================================================================

//преобразование даты в unix timestamp и обратно.
function date2timestamp(ddd) {
  day=ddd.substr(0,2);
  month=ddd.substr(3,2);
  year=ddd.substr(6,4);
  return (Date.UTC(year, month-1, day) / 1000);
}//-------------------------------------------------------------------------


function timestamp2date(timestamp) {
  var theDate = new Date(timestamp * 1000);
  return theDate.toGMTString();
}

function date_2_timestamp(year, month, day, hour, min, sec) {
  return (Date.UTC(year, month-1, day, hour, min, sec) / 1000);
}//-------------------------------------------------------------------------

/* Функция isValidEmail принимает один или 2 аргумента:
email - электронный адрес для проверки;
strict - необязательный логический параметр (true/false), который 
определяет строгую проверку при которой пробелы до и после адреса 
считаются ошибкой 
В качестве результата функция возвращает либо true, либо false
*/
function isValidEmail (email, strict)
{
 if ( !strict ) email = email.replace(/^\s+|\s+$/g, '');
 return (/^([a-z0-9_\-]+\.)*[a-z0-9_\-]+@([a-z0-9][a-z0-9\-]*[a-z0-9]\.)+[a-z]{2,4}$/i).test(email);
}

function trim(s)
{
  return rtrim(ltrim(s));
}

function ltrim(s)
{
  return s.replace(/^\s+/, ''); 
}

function rtrim(s)
{
  return s.replace(/\s+$/, ''); 
}
