var web_url = "/";
var js_web_path = "/app/js/";
var a_url = web_url+"ajax.php";
var loadingpath = web_url+'img/loading.gif';

$.ajaxSetup( {
  url: a_url,
  global: false,
  type: "POST"
} );


//###############################################################################
//#####                                   #####
//#####                     Базовые функции             #####
//#####                                   #####
//###############################################################################
// переключатель, предпочтительнее использовать вместо showBlock/HideBlock 
function toggle(obj) {
        if ($("#"+obj).css("display")=="none"){
            $("#"+obj).slideDown("slow");
            $(obj).css("display:block");
        }
        else {
           $("#"+obj).slideUp("slow");
           $(obj).css("display:none");
        }
}

// показать блок указанный в name
function showBlock(name){
  var b=document.getElementById(name);
  b.style.display='block';
}

// скрыть блок указанный в name
function hideBlock(name){
  var b=document.getElementById(name);
  b.style.display='none';
}

function makeBlockEmpty(element){
  document.getElementById(element).innerHTML = '';
  hideBlock(element);
}

function showLoadImg(element){
  //var element='LoadingImg';
  document.getElementById(element).innerHTML = "<img src="+loadingpath+" alt='Loading...' border='0'/>";
  //showBlock(element);
}

function hideLoadImg(element){
  //var element='LoadingImg';
  document.getElementById(element).innerHTML = '';
  //hideBlock(element);
}

// задержка выполнения кода
function pause(ms){
  var date = new Date();
  var curDate = null;
  do { curDate = new Date(); }
  while(curDate-date < ms);
}

// динамическая загрузка javascript и css
function loadjscssfile(filename, filetype){

   if (filetype=="js"){ //if filename is a external JavaScript file
    var fileref=document.createElement('script');
    fileref.setAttribute("language","JavaScript");
    fileref.setAttribute("type","text/javascript");
    fileref.setAttribute("src", filename);
   }
   else if (filetype=="css"){ //if filename is an external CSS file
    var fileref=document.createElement("link");
    fileref.setAttribute("rel", "stylesheet");
    fileref.setAttribute("type", "text/css");
    fileref.setAttribute("href", filename);
   }
   if (typeof fileref!="undefined")
    document.getElementsByTagName("head")[0].appendChild(fileref)
    
   return true;
   //alert(document.getElementsByTagName("head")[0].innerHTML)
}


// ### устанавливаем фокус на элемент
function setFocus(element){
  var cobj = document.getElementById(element);
  if (cobj) {
    //alert(cobj.focus);
    if (cobj && cobj.focus) {
      cobj.focus();
    }
  }
}

// ### получение данных имея controller action id, обновляя указанный divid
// ### удаление элемента тоже использует эту же функцию, т.к. в коде метода 
// ### уже будет возвращаться просто пустая строка и все!!!
  function getAjaxData(controller,action,id,divid){
      $.post(
        a_url,
        {
        c:controller,
        a:action,
        i:id
        },
        function(data){
          //alert(data);
          $("#"+divid).empty();
          $("#"+divid).append(data);
          //showBlock(divid);
        }
        );
  }
  
 function deleteitem(c,a,i,di){
  if (confirm("Уверены ?!")){
  	showLoadImg(di);
    getAjaxData(c,a,i,di);
  }
 }
 
 
// Инициализация визуального редактора  FCKeditor
function FCKeditorInit(item,a,b){
  if (item==undefined)
    var oFCKeditor = new FCKeditor('htmlarea_body');
  else var oFCKeditor = new FCKeditor(item,a,b);
  oFCKeditor.BasePath = "/app/js/fckeditor/";
  oFCKeditor.ReplaceTextarea() ;
}

// формирование списка для привязки к меню
function makeApplyTo(c,a,i,di){
  getAjaxData(c,a,i,di);
}
 
 
 
//###############################################################################
//#####                                   #####
//#####                    Обработка форм               #####
//#####                                   #####
//###############################################################################

// 
function checkSelectedElementBlockUnblockAnother(formid,tocheckobjid,tocheckvalue,blockunblockobjid,setblockunblockvalue){
//alert(formid+'='+document.forms[formid].elements[tocheckobjid].value+':'+tocheckvalue);
  if (document.forms[formid].elements[tocheckobjid].value != tocheckvalue){
    document.forms[formid].elements[blockunblockobjid].value = setblockunblockvalue;
    document.forms[formid].elements[blockunblockobjid].disabled = true;
  }
  else{
    document.forms[formid].elements[blockunblockobjid].value = setblockunblockvalue;
    document.forms[formid].elements[blockunblockobjid].disabled = false;
  }
}
// При загрузке формы - устанавливаем на неё фокус 
function onCompleteLoadForm(controller){
    //  d = document.getElementById(controller+'FormCreate');
    //  d.title.focus();
}

// роверка данных форм, обновление тега div с id=divid2update 
function validateFormData(objid,controller,action,divid2update){
  //alert(objid+" : "+document.forms[objid].elements.length);
  // ---флаг выхода из цикла прохода по элементам формы
  // флаг, по которому отпределяем выбран ли radio box для groups
  var flag = 0; 
  // обновляемый тег div, если не указан, берется как 'controller+"FormOperationResults"'
  var updateid=undefined;
  // если хоть одно поле пустое (флаг)
   var emptyItems = 0;
  // строка, содержащая названия незаполненных/ошибочных полей
   var errorStr="";
  // строка параметров,содержит все передаваемые данные, разделенные ";"
  var params="l=0";
   for(var i=0; i<document.forms[objid].elements.length; i++)  {
    // если взведен флаг выходим из цикла  
    //if (flag) break;
          els  =  document.forms[objid].elements[i];  //  текущий  элемент  
          ft  =  els.title;  //  title  элемента  
          fv  =  els.value;  //  value  элемента  
          fn  =  els.name;  //  name  элемента
        //  alert(els.type+":::"+els.name+":::"+els.value);
            switch(els.type)  {  //  обрабатываем  данные  согласно  типу  элемента  
                case  "text": 
                	   // if (els.value==""){
                       	// emptyItems = 1;
                       	// errorStr+="Не заполнено поле: "+els.title+"\n";
                       	//} 
                       	//else{
                       		params+="&"+els.name+"="+escape(els.value);
                       	//}
                         break;
                case  "hidden":  params+="&"+els.name+"="+escape(els.value); break;
                case  "password": if (els.value==""){
                        emptyItems = 1;
                        errorStr+="Не заполнено поле: "+els.title+"\n";
                    } 
                    else{
                       params+="&"+els.name+"="+escape(els.value);
                   }
                   break;
                case  "textarea":
                	//if (els.value==""){
                    //      emptyItems = 1;
                    //      errorStr+="Не заполнено поле: "+els.title+"\n";
                    // }
                    // else{
                       params+="&"+els.name+"="+escape(els.value);
                       //alert(escape(els.value));
                    // } 
                    // alert(els.name);
                    // alert(els.value);
                   //  alert(escape(els.value));
                    //  проверяем,  обязательно  ли  это  поле  для  заполнения  или  нет  
                   // if(encodeURI(ft)  ==  "required"  &&  encodeURI(fv).length  <  1)  {  
                   //     alert('''+fn+''  is  a  required  field,  please  complete.');  
                   //     els.focus();  
                   //     return  false;  
                   // }  
                   // str  +=  fn  +  "="  +  encodeURI(fv)  +  "&";  
                    break;  
                case  "checkbox": break;  
                case  "radio": // alert(els.type+":::"+els.name+":::"+els.value);
                        if (objid=="sysgroups_list"){
                          if ((els.name=="radiobutton_grouplist") && !flag){
                            //alert("1");
                              if(els.checked){ 
                                if (action=="delgroupitem"){
                                  deleteItem(controller,action,els.value,divid2update);
                                  return;
                                }
                          updateid=divid2update;
                                flag=1;
                                emptyItems=0;
                                errorStr="";
                                params+="&"+els.name+"="+els.value;
                              }
                              else {
                                if(flag){}
                                else {
                                  emptyItems=1;
                                  errorStr="Не выбрана группа!\n";
                                }
                              }
                           }
                           if (els.name=="addgroupitem_settings"){
                            //alert("2");
                            if(els.checked)
                              params+="&"+els.name+"="+els.value;
                           }
                          break;
                        }    // end of if = sysgroups_list
                         
                        if(els.checked) params+="&"+els.name+"="+escape(els.value);
                        break;
                                    
          case  "select-multiple" : //alert(els.name);
                        //alert(els.options.length);
                       for(j=0;j<els.options.length;j++){
                        //alert("j="+j+"_l="+els.options.length);
                        if (els.options[j].selected){
                          //alert("id элемента:"+j+"_значение:"+els.options[j].value);
                          if (j==0){
                            emptyItems = 1;
                                  errorStr+="Не выбрана группа принадлежности, либо необходимо отменить информационное поле списка. \n";
                          }
                          else{
                            //alert("id элемента:"+j+"_значение:"+els.options[j].value);
                            params+="&"+els.name+"="+els.options[j].value;
                          }
                        }
                       }
                                     
                       break;
          case  "select-one" :  
                     //if (els.name=="apply_to" && document.forms[objid].pid.value==0){
                      //alert(els.name+"="+els.value);
                    //  if (els.value=="#" || els.value=="0"){
                      //  emptyItems = 1;
                        //      errorStr+="Не выбран пункт меню для привязки статьи\n";
                      //}
                      //else{
                       // params+="&"+els.name+"="+escape(els.value);
                      //}
                      //}
                      //else 
                        params+="&"+els.name+"="+escape(els.value); 
                      
                      break;
          case "file"     :params+="&"+els.name+"="+escape(els.value);
                    break;
          
          default: break;
            }  //  switch  
      }  //  for
   if (emptyItems) {
    alert(errorStr);
    //return false;
   }
   else {
    if (divid2update) updateid=divid2update;
    if (!updateid) updateid=controller+"FormOperationResults";
   // alert(params);
      $.post(
        a_url,
        {
        c:controller,
        a:action,
        i:'0',
        p:params
        },
        function(data){
          //alert(data);
          $("#"+updateid).empty();
          $("#"+updateid).append(data);
          showBlock(updateid);
        }
        );
   }
}




//###############################################################################
//#####                                   #####
//#####                    Обработка таблиц               #####
//#####                                   #####
//###############################################################################

function removeLastRowFromTable(tableID,rowid){
    var table=document.getElementById(tableID);
  //alert (tableID+":"+rowid+":"+table+":"+table.rows[rowid]+":"+table.rows[table.rows.length-1]);
    //table.childNodes[0].removeChild(table.childNodes[0].childNodes[table.childNodes[0].childNodes.length-1]);
    //table.deleteRow(table.rows[table.rows.length-1])
    table.deleteRow(rowid);
}

function removeRowFromTableById(tableID,rowid){
   var table=document.getElementById(tableID);
     table.deleteRowByID(rowid);
}