/* */
var ajax_url_exat="/?ajax=1&module=Exat";
var ef_var_dates=null;
var selRepair=null;
var selZero=null;
var dateInptObj=null;
var hotelCache=null;
if (document.images)
 {
   var pic_null  = new Image(); pic_null.src = "/img/null.gif";
   var pic_up  = new Image(); pic_up.src = "/img/tours_main_sort_up.png";
   var pic_down  = new Image(); pic_down.src = "/img/tours_main_sort_down.png";
   var pic_star = [new Image(),new Image()];
   pic_star[0].src = "/img/head_gallery_item_star.png";
   pic_star[1].src = "/img/item_star_gold.png";
 }
/* */
function jsonACB_Exat(jsonObj)
 {
    var json_action = jsonObj.pubaction;
    if(parseInt(json_action.code,10)==0)
     {
        showError(json_action.errmsg);
     }
    else
     {
        switch(json_action.name)
         {
            case "hotelopinion":
                alert(json_action.msg);
                var formObj=document.forms[json_action.form];
                formObj.reset();
                ef_OpinionGradeClear();
                HotelShowForm(0);
                break;
            case "ordertour":
                alert(json_action.msg);
                var formObj=document.forms[json_action.form];
                formObj.person_fio.value="";
                formObj.person_phone.value="";
                formObj.person_email.value="";
                formObj.person_comment.value="";
                break;
            case "lockchoosehotel":
            case "lockchoosetour":
                var go_href='/choose-'+json_action.name.substr(10)+'/';
                window.location.href=go_href;
                break;
            case "resetform":
                ef_repairInputs(jsonObj.obj,jsonObj.form);
            case "changeform":
                ef_var_dates=null;
                if(jsonObj.repair)
                 {
                    selRepair=jsonObj.repair.split(",");
                 }
                if(jsonObj.zero)
                 {
                    selZero=jsonObj.zero.split(",");
                 }
                ef_buildSelects(jsonObj.obj,[jsonObj.form]);
                selRepair=null;
                selZero=null;
                ef_buildsGlobaVars(jsonObj.obj);
                break;
            case "initform":
                ef_var_dates=null;
                ef_buildSelects(jsonObj.obj,['exattourfm','exathotelfm']);
                break;
         }
     }
 }
function doACB_Exat(cmd)
 {
    switch(cmd)
     {
        default: break;
     }
 }
function xmlACB_Exat(xmlObj)
 {
    try
     {
       var xml_action=xmlObj.getElementsByTagName('action')[0];
       var aname = xml_action.getAttribute("name");
       if(parseInt(xml_action.getAttribute("code"),10)==0)
        {
           showError(xml_action.getAttribute("errmsg"));
        }
       else
        {
            switch(aname)
             {
               case "ordertour":
                 alert("Ваши данные отправлены");
                 var formObj=document.forms['onetourfm'];
                 formObj.person_fio.value="";
                 formObj.person_phone.value="";
                 formObj.person_email.value="";
                 formObj.person_comment.value="";
                 break;
               case "hotelopinion":
                 break;
               default: break;
             }
        }
     }
    catch (err)
     {
        alert(err.message);
     }
 }
function ef_Init()
 {
    cbFunc='Exat';
    sendAR('pubaction=initform',ajax_url_exat);
 }
function ef_Reset(clickObj)
 {
   var formObj=getParentByTagName(clickObj,'FORM');
   cbFunc='Exat';
   var query='pubaction=resetform&form='+formObj.name+"&noindex="
   var l=window.location.href.trim();
   l=(l.indexOf('http://')<0)?l:l.substr((l.indexOf('http://') + 7));
   l=(l.lastIndexOf('/')<0)?l:l.substr(0,l.lastIndexOf('/'));
   lArr=l.split('/');
   query+=(lArr.length>1)?1:0;
   sendAR(query,ajax_url_exat);
 }
function ef_repairInputs(objArr,form_name)
 {
   var formObj=document.forms[form_name];
   for(var i=0,il=formObj.elements.length;i<il;i++)
    {
      var elObj = formObj.elements[i];
      if(elObj.tagName=='INPUT' && elObj.type=='text') elObj.value="";
    }
   for(var i=0,il=objArr.length;i<il;i++)
    {
       inptObj=formObj.elements[objArr[i].name];
       if(inptObj && inptObj.tagName=='INPUT' && inptObj.type=="text")
        {
           inptObj.value=objArr[i].value;
        }
    }
 }
function ef_buildsGlobaVars(objArr)
 {
    if(objArr)
     {
        for(var i=0,il=objArr.length;i<il;i++)
         {
           switch(objArr[i].name)
            {
              case "exatDatesCtrl":
               ef_var_dates=objArr[i].option;
               break;
            }
         }
     }
 }
function ef_buildSelects(objArr,formArr)
 {
    if(objArr)
     {
        for(c=0,cl=formArr.length;c<cl;c++)
         {
            var formObj=document.forms[formArr[c]];
            for(var i=0,il=objArr.length;i<il;i++)
             {
                selObj=formObj.elements[objArr[i].name];
                if(selObj && selObj.tagName=='SELECT')
                 {
                   if(selObj.name=='exatHotelCtrl') 
                    {
                      hotelCache=objArr[i].option;
                    }
                   var repair_val=[];
                   if(selObj.multiple && selRepair && selRepair.length && selRepair.inArray(objArr[i].name))
                    {
                      for(var j=0,jl=selObj.options.length;j<jl;j++)
                       {
                          if(selObj.options[j].selected) repair_val.push(selObj.options[j].value);
                       }
                    }
                   while(selObj.options.length) selObj.options[selObj.options.length-1]=null;
                   if(!selObj.multiple && selZero && selZero.length && selZero.inArray(objArr[i].name))
                    {
                       selObj.options[selObj.options.length] = new Option('все',0);
                    }
                   for(var j=0,jl=objArr[i].option.length;j<jl;j++)
                    {
                        if(objArr[i].option[j].sel>0) selObj.options[selObj.options.length] = new Option(objArr[i].option[j].txt,objArr[i].option[j].val,true,true);
                        else selObj.options[selObj.options.length] = new Option(objArr[i].option[j].txt,objArr[i].option[j].val);
                    }
                   if(repair_val.length) setMultiSelectIndex(selObj,repair_val);
                   df_Rebuild(selObj.form,[objArr[i].name]);
                 }
             }
         }
     }
 }
function ef_trRolover(event)
 {
    var trObj=getParentByTagName(getEventTarget(event),'TR');
    if(trObj.rowIndex<2) return false;
    switch(event.type)
     {
        case "mouseover": var c="body highlight"; break;
        case "mouseout":  var c="body"; break;
        default: return false;
     }
    trObj.className=c;
    return true;
 }
function ef_changeSelect(selObj)
 {
    var formObj=selObj.form;
    var query='pubaction=changeform&form='+formObj.name;
    if(!selObj.multiple)
     {
       var v=getSelectValue(selObj);
       if(v>0) query+='&elem='+selObj.name;
     }
    else
     {
       switch(formObj.name)
        {
          case "exattourfm":
           switch(selObj.name)
            {
              case "exatResortCtrl":
              case "exatCategoryCtrl":
//                ShowGlassWindow(true);
                var selArr=['Resort','Category'];
                var valObj = {"r" : new Array(),"c": new Array()};
                for(var i=0;i<2;i++)
                 {
                   var subSelObj=formObj.elements['exat'+selArr[i]+'Ctrl'];
                   for(var j=0,jl=subSelObj.options.length;j<jl;j++)
                    {
                       if(subSelObj.options[j].selected)
                        {
                          switch(selArr[i])
                           {
                             case "Resort": valObj.r.push(subSelObj.options[j].value); break;
                             case "Category": valObj.c.push(subSelObj.options[j].value); break;
                           }
                        }
                    }
                 }
                subSelObj=formObj.elements['exatHotelCtrl'];
                if(subSelObj && subSelObj.tagName=='SELECT')
                 {
                     var repair_val=[];
                     for(var j=0,jl=subSelObj.options.length;j<jl;j++)
                      {
                         if(subSelObj.options[j].selected)
                          {
                            repair_val.push(subSelObj.options[j].value);
                          }
                      }
//alert(repair_val); alert(valObj.r); alert(valObj.c);
                     while(subSelObj.options.length) subSelObj.options[subSelObj.options.length-1]=null;
//alert(hotelCache.length);
                     for(var c=0,cl=hotelCache.length;c<cl;c++)
                      {
                         if( (valObj.r.length>0 && !valObj.r.inArray(hotelCache[c].resort)) || (valObj.c.length>0 && !valObj.c.inArray(hotelCache[c].cat)) )  continue;
                         subSelObj.options[subSelObj.options.length] = new Option(hotelCache[c].txt,hotelCache[c].val);
                      }
                     if(repair_val.length) setMultiSelectIndex(subSelObj,repair_val);
                     df_Rebuild(selObj.form,[subSelObj.name]);
                 }
//                ShowGlassWindow(false);
                return true;
                break;
            }
           break;
          case "exathotelfm":
           switch(selObj.name)
            {
              case "exatPlaceCtrl":
                query+='&elem=exatResortCtrl';
                break;
              case "exatResortCtrl":
                query+='&elem=exatCountryCtrl';
                break;
              case "exatCountryCtrl":
                query+='&elem=exatDepartureCtrl';
                break;
            }
           break;
        }
     }
    if(selObj.options.length)
     {
        cbFunc='Exat';
        query+=makeQF(selObj.form);
        sendAR(query,ajax_url_exat);
     }
 }
function ef_Choose(clickObj)
 {
    var formObj=getParentByTagName(clickObj,'FORM');
    var query='pubaction=';
    var err="";
    switch(formObj.name)
     {
       case "exattourfm":
         query+='lockchoosetour';
         var sdate = formObj.elements['exatMinDateCtrl'].value.trim();
         var edate = formObj.elements['exatMaxDateCtrl'].value.trim();
         if(sdate!="" && !ef_checkRangeDate(calendar_ToDay(),sdate))       err+="укажите правильно начальную дату.\n";
         else if(sdate!="" && edate!="" && !ef_checkRangeDate(sdate,edate)) err+="укажите правильно диапазон дат.\n";
         break;
       case "exathotelfm":
         query+='lockchoosehotel';
         break;
     }
    if(getSelectValue(formObj.elements['exatCountryCtrl'])==0)
     {
       err+="укажите куда вы хотите поехать\n";
     }
    if(err!="")
     {
        alert(err);
        return false;
     }
    else
     {
       query+=makeQF(formObj);
       cbFunc='Exat';
       sendAR(query,ajax_url_exat);
     }
 }
function ef_Hotels(from)
 {
    var formObj=document.forms["exathotelfm"];
    for(var i=0,il=formObj.elements.length;i<il;i++)
     {
        var elObj=formObj.elements[i];
        if(elObj.tagName=='SELECT' && elObj.multiple)
         {
           elObj.setAttribute("name",elObj.name+"[]");
         }
     }
    formObj.appendChild(createHtmlElement('INPUT',{name:'from',type:'hidden',value:from}));
    formObj.submit();
 }

function ef_Tours(from)
 {
    var page_href = window.location.href;
    var err='';
    if(page_href.indexOf('choose-tour')<0)
     {
       var formObj=document.forms["exatfm"];
       formObj.exatfm_offset.value=(from==null)?0:from;
       var query = makeQF(formObj);
     }
    else
     {
       var formObj=document.forms["exattourfm"];
       formObj.exatfm_offset.value=(from==null)?0:from;
       var re_fm = /^exatfm_/i;
       var re_date = /^\s*(\d{2})\.(\d{2})\.(\d{4})\s*$/i;
       var re_price = /^\s*(\d+)\s*$/i;
       var qArr=[];
       var query='pubaction=tours';
       var dateArr=['',''];
       var priceArr=[0,0];
       var q_str='';
       for(var i=0,il=formObj.elements.length;i<il;i++)
        {
          var elObj=formObj.elements[i];
          switch(elObj.name)
           {
             case "exatDepartureCtrl":
               query+='&exatfm_departureId='+getSelectValue(elObj);
               break;
             case "exatCountryCtrl":
               if(formObj.elements['exatResortCtrl'].selectedIndex<0) query+='&exatfm_placeGroupId[]='+getSelectValue(elObj);
               break;
             case "exatResortCtrl":
               q_str='';
               for(var j=0,jl=elObj.options.length;j<jl;j++)
                {
                  if(elObj.options[j].selected) q_str+=','+elObj.options[j].value;
                }
               if(q_str!='')
                {
                  query+='&exatfm_placeGroupId[]='+q_str.substr(1);
                  query+='&exatfm_placeItemId[]='+q_str.substr(1);
                }
               break;
             case "exatCategoryCtrl":
               q_str='';
               for(var j=0,jl=elObj.options.length;j<jl;j++)
                {
                  if(elObj.options[j].selected) q_str+=','+elObj.options[j].value;
                }
               if(q_str!='') query+='&exatfm_categoryId[]='+q_str.substr(1);
               break;
             case "exatHotelCtrl":
               q_str='';
               for(var j=0,jl=elObj.options.length;j<jl;j++)
                {
                  if(elObj.options[j].selected) q_str+=','+elObj.options[j].value;
                }
               if(q_str!='') query+='&exatfm_hotelId[]='+q_str.substr(1);
               break;
             case "exatFoodTypeCtrl":
               q_str='';
               for(var j=0,jl=elObj.options.length;j<jl;j++)
                {
                  if(elObj.options[j].selected) q_str+=','+elObj.options[j].value;
                }
               if(q_str!='') query+='&exatfm_foodTypeId[]='+q_str.substr(1);
               break;
             case "exatMinDateCtrl":
               if(re_date.test(elObj.value)) { query+='&exatfm_minDate='+elObj.value; dateArr[0]=elObj.value.trim(); }
               break;
             case "exatMaxDateCtrl":
               if(re_date.test(elObj.value)) { query+='&exatfm_maxDate='+elObj.value; dateArr[1]=elObj.value.trim(); }
               break;
             case "exatMinNightsDurationCtrl":
               var min_dur=parseInt(getSelectValue(elObj),10);
               query+='&exatfm_minDuration='+((min_dur>0)?(min_dur+1):0);
               break;
             case "exatMaxNightsDurationCtrl":
               var max_dur=parseInt(getSelectValue(elObj),10);
               query+='&exatfm_maxDuration='+((max_dur>0)?(max_dur+1):0);
               break;
             case "exatMinAmountCtrl":
               if(elObj.value.trim()!="" && re_price.test(elObj.value)) { query+='&exatfm_minAmount='+elObj.value; priceArr[0]=elObj.value.trim(); }
               break;
             case "exatMaxAmountCtrl":
               if(elObj.value.trim()!="" && re_price.test(elObj.value)) { query+='&exatfm_maxAmount='+elObj.value; priceArr[1]=elObj.value.trim(); }
               break;
             case "exatCurrencyCtrl":
               query+='&exatfm_currencyId='+getSelectValue(elObj);
               break;
             default:
               if(re_fm.test(elObj.name)) qArr.push(elObj.name);
               break;
           }
        }
       if(qArr.length) query+=makeQF(formObj,qArr);
       if(priceArr[0]>0 && priceArr[0]>=priceArr[1]) err+="укажите правильно диапазон цен.\n";
       if(dateArr[0]!="" && !ef_checkRangeDate(calendar_ToDay(),dateArr[0])) err+="укажите правильно начальную дату.\n";
       if(dateArr[0]!="" && dateArr[1]!="" && !ef_checkRangeDate(dateArr[0],dateArr[1])) err+="укажите правильно диапазон дат.\n";
       if(err!="")
        {
          alert(err);
          return false;
        }
     }
    if(document.getElementById('toursContainerDiv'))
     {
      tgt= 'toursContainerDiv';
      sendAR(query, '/countries/?module=Exat&ajax=1');
     }
    else alert('Не задан DIV-контейнер');
 }
function ef_checkRangeDate(sdate,edate)
 {
   var sArr=sdate.split(".");
   var eArr=edate.split(".");
   var s_d = new Date(parseInt(sArr[2],10), (sArr[1]-1), parseInt(sArr[0],10));
   var e_d = new Date(parseInt(eArr[2],10), (eArr[1]-1), parseInt(eArr[0],10));
   return ((s_d.getTime() - e_d.getTime())>0)?false:true;
 }
function ef_Tour(ids,currency)
 {
    window.location.href='/one-tour/?id='+ids+'&curr='+currency;
 }
function ef_ShowBlock(clickObj)
 {
   var divObj=getParentByTagName(clickObj,'DIV');
   var imgObj=divObj.getElementsByTagName("IMG")[0];
   var img_src = imgObj.src;
   var divList=getElementsByClass('body',getParentByTagName(divObj,'DIV'),'DIV');
   if(divList[0].style.display=='none')
    {
      divList[0].style.display='';
      imgObj.src=img_src.replace(/^(.*)(\/hotel_info_title_)(open|closed)(\.jpg)$/,"$1$2open$4");
    }
   else
    {
      divList[0].style.display='none';
      imgObj.src=img_src.replace(/^(.*)(\/hotel_info_title_)(open|closed)(\.jpg)$/,"$1$2closed$4");
    }
 }
function ef_orderTour(clickObj)
 {
   var formObj=getParentByTagName(clickObj,"FORM");
   var query="pubaction=ordertour&form="+formObj.name+makeQF(formObj,['person_fio','person_phone','person_email','person_comment']);
   var indData = ['tpid','url','departure','date','days','nights','price','currency','adult','child','inccomment','place','transport'];
   var indSubData = ['place','hotel','category','room','food','tourtype'];
   if(formObj.tpdata.length)        var str = getRadioValue(formObj.tpdata);
   else if(formObj.tpdata.checked)  var str = formObj.tpdata.value;
   var valData=str.split("||");
   if(valData.length==indData.length)
    {
      for(var i=0,il=indData.length;i<il;i++)
       {
         if(indData[i]=='place')
          {
            var placeData=valData[i].split("##");
            for(var j=0,jl=placeData.length;j<jl;j++)
             {
               var valSubData=placeData[j].split("@@");
               for(var c=0,cl=valSubData.length;c<cl;c++)
                {
                  query+="&data_"+indSubData[c]+"[]="+valSubData[c];
                }
             }
          }
         else query+="&data_"+indData[i]+"="+replaceEscape(valData[i]);
       }
      cbFunc='Exat';
      sendAR(query,ajax_url_exat);
    }
   else return false;
 }
function ef_Calendar(mode)
 {
   var re = /\d{1,2}\.\d{1,2}\.\d{4}/;
   switch(mode)
    {
       case "min":
         dateInptObj=document.forms['exattourfm'].elements['exatMinDateCtrl'];
         break;
       case "max":
         dateInptObj=document.forms['exattourfm'].elements['exatMaxDateCtrl'];
         break;
       default:
         return false;
         break;
    }
   var aObj = dateInptObj.nextSibling;
   while(aObj.tagName!='A') aObj = aObj.nextSibling;
   var imgObj=aObj.getElementsByTagName("IMG")[0];
   var pos = getPosition(imgObj);
   var date_str=dateInptObj.value.trim();
   if(date_str=="" || !re.test(date_str))
    {
      dateInptObj.value="";
      date_str=calendar_ToDay();
    }
   else
    {
      var testObj=calendar_testDateStr(date_str);
      if(testObj.code==0)
       {
         dateInptObj.value="";
         date_str=calendar_ToDay();
       }
    }
   var dateArr=date_str.split(".");
   calendar_Open( parseInt(dateArr[1],10), parseInt(dateArr[2],10), pos);
 }
function ef_SetDate(v)
 {
    dateInptObj.value=v;
    calendar_Close();
 }
function ef_tourSortBy(clickObj,mode)
 {
   var formObj=document.forms['exatfm'];
   formObj=(formObj && formObj.tagName=='FORM')?formObj:document.forms['exattourfm'];
   var tdObj=getParentByTagName(clickObj,'TD');
   var trObj=getParentByTagName(tdObj,'TR');
   var imgObj=tdObj.getElementsByTagName("IMG")[0];
   var img_src=imgObj.src;
   var re = /^(.*)(\/tours_main_sort_)(up|down)(\.png)$/;
   if(re.test(img_src))
    {
      var srcArr = re.exec(img_src);
      switch(srcArr[3])
       {
         case "up":
           img_src = pic_down.src;
           class_name='sort_down';
           sort_desc=1;
           alt = 'По убыванию';
           break;
         case "down":
           img_src = pic_up.src;
           class_name='sort_up';
           sort_desc=0;
           alt = 'По возрастанию';
           break;
       }
    }
   else
    {
       img_src = pic_up.src;
       class_name='sort_up';
       sort_desc=0;
       alt = 'По возрастанию';
    }
   formObj.elements['exatfm_sortBy'].value=mode;
   formObj.elements['exatfm_sortDesc'].value=sort_desc;
   var imgList = trObj.getElementsByTagName("IMG");
   for(var i=0,il=imgList.length;i<il;i++)
    {
      if(imgList[i]==imgObj)
       {
          imgList[i].src=img_src;
          imgList[i].setAttribute('class',class_name);
          imgList[i].alt=alt;
       }
      else
       {
          imgList[i].src='/img/null.gif';
          imgList[i].removeAttribute('class');
          imgList[i].alt="";
       }
    }
   ef_Tours(0);
 }
function ef_OpinionGradeClear()
 {
   var formObj=document.forms['fopinion'];
   formObj.elements['grade'].value=0;
   var divObj = getElementsByClass('rating',formObj,'DIV');
   var imgList=divObj[0].getElementsByTagName("IMG");
   for(var i=0,il=imgList.length;i<il;i++)
    {
       imgList[i].src=pic_star[1].src;
    }
 }
function ef_OpinionGrade(clickObj,v)
 {
   var formObj=getParentByTagName(clickObj,'FORM');
   formObj.elements['grade'].value=v;
   var divObj = getParentByTagName(clickObj,'DIV',2);
   var imgObj = clickObj.getElementsByTagName("IMG")[0];
   var imgList=divObj.getElementsByTagName("IMG");
   for(var i=0,il=imgList.length;i<il;i++)
    {
       imgList[i].src=(imgList[i]==imgObj)?pic_star[0].src:pic_star[1].src;
    }
 }
function ef_Opinion(clickObj)
 {
    var formObj=getParentByTagName(clickObj,'FORM');
    var query="pubaction=hotelopinion&form="+formObj.name;
    query+=makeQF(formObj);
    query+="&date="+getSelectValue(formObj.date_d)+"."+getSelectValue(formObj.date_m)+"."+getSelectValue(formObj.date_y);
    cbFunc='Exat';
    sendAR(query,ajax_url_exat);
 }
////////////////////////////////////////////////////////////////////////////////
//                        календарные ф-ции
////////////////////////////////////////////////////////////////////////////////
function calendar_Close()
 {
   var divObj = document.getElementById("calendarDiv");
   if(divObj)
    {
       divObj.innerHTML="";
       divObj.style.display="none";
    }
 }
function calendar_Open(month,year,position)
 {
   calendar_Close();
   var month_name = ['','Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'];
   var prev_month=(month==1)?12:(month-1);
   var next_month=(month==12)?1:(month+1);
   var prev_year=(month==1)?(year-1):year;
   var next_year=(month==12)?(year+1):year;
   var divObj = document.getElementById("calendarDiv");
   if(!divObj)
    {
       divObj=createHtmlElement('DIV',{"class":"content_tour_form_calendar","id":"calendarDiv"});
       document.body.appendChild(divObj);
    }
   divObj.innerHTML="";
   while(divObj.childNodes.length) divObj.removeChild(divObj.lastChild);
   divObj.innerHTML='<a class="calendar_close" href="javascript:void(0);" onClick="calendar_Close();"><img src="/img/calendar_close.png" alt="Закрыть" /></a>';
   divTop = createHtmlElement('DIV',{"class":"calendar_title"});
   divObj.appendChild(divTop);
   divTop.innerHTML='<a class="left_arrow" href="javascript:void(0);" onClick="calendar_Open('+prev_month+','+prev_year+');"><img src="/img/calendar_left.png" alt="Назад" /></a> '+month_name[month]+' '+year+' <a class="right_arrow" href="javascript:void(0);" onClick="calendar_Open('+next_month+','+next_year+');"><img src="/img/calendar_right.png" alt="Вперед" /></a>';
   divObj.appendChild(calendar_GetMonthTable(month,year));
   divObj.style.display="block";
   if(position)
    {
       position[1]=position[1]+20;
       position[0]=position[0]-(divObj.clientWidth?divObj.clientWidth:divObj.offsetWidth)+20;
       divObj.style.top=(position[1]+'px');
       divObj.style.left=(position[0]+'px');
    }
 }
/* */
function calendar_ToDay()
 {
   var d=new Date();
   return (d.getDate()+"."+(d.getMonth()+1)+"."+(d.getYear()+1900));
 }
function calendar_IsLeapYear(y)
 {
     return((y%4)===0)&&(((y%100)!==0)||((y%400)===0));
 }
/* Ф-я получает число дней в месяце*/
function calendar_DaysPerMonth (year, month)
 {
    var toDay=new Date();
    if (month == null ) month=toDay.getMonth();
    var DaysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
    // если выбран февраль
    days=DaysInMonth[(month-1)];
    if ((month == 2) && calendar_IsLeapYear(year)) { days++; }
    return days;
 }
/* Ф-я формирует массив для календаря на конкретный месяц конкретного года*/
function calendar_MonthArray(month,year)
 {
    var myDate= new Date(year, (month-1), 1 , 0, 0, 0);
    var daysmonth = calendar_DaysPerMonth(year, month);  // сколько дней в конкретном месяце конкретного года
    var firstday = myDate.getDay();                      // с какого дня недели будет начинаться месяц  0-6 (0-Воскресение)
    if(!firstday) firstday=7;
    var count=0;
    var start = firstday-1;
    var mon = [];
    var tue = [];
    var wen = [];
    var thu = [];
    var fri = [];
    var sat = [];
    var sun = [];
    while(count < daysmonth)
     {
       count++;
       switch(start)
        {
          case 0: mon[mon.length]=count; start++; break;  // пн
          case 1: tue[tue.length]=count; start++; break;  // вт
          case 2: wen[wen.length]=count; start++; break;  // ср
          case 3: thu[thu.length]=count; start++; break;  // чт
          case 4: fri[fri.length]=count; start++; break;  // пт
          case 5: sat[sat.length]=count; start++; break;  // сб
          case 6: sun[sun.length]=count; start=0; break;  // вс
        }
     }
    // смещаем какие нужно массивы
    for(var i=0,il=(firstday-1);i<il;i++)
     {
       switch(i)
        {
          case 0: mon.unshift(0); break;  // пн
          case 1: tue.unshift(0); break;  // вт
          case 2: wen.unshift(0); break;  // ср
          case 3: thu.unshift(0); break;  // чт
          case 4: fri.unshift(0); break;  // пт
          case 5: sat.unshift(0); break;  // сб
          case 6: sun.unshift(0); break;  // вс
        }
     }
    return [mon,tue,wen,thu,fri,sat,sun];
 }
function calendar_GetMonthTable(month,year)
 {
    var tableObj = createHtmlElement('TABLE',{"class":"calendar_body","cellspacing":"0"});
    var calr = calendar_MonthArray(month,year);
    var days = ['Пн','Вт','Ср','Чт','Пт','Сб','Вс'];
    // вычисляем число недель
    var week_amount=0;
    var trObj = tableObj.insertRow(tableObj.rows.length);
    trObj.setAttribute("class","first_row");
    for(var i=0;i<7;i++)
     {
       if(calr[i].length > week_amount ) week_amount=calr[i].length;
       var tdObj=trObj.insertCell(i);
       tdObj.innerHTML=days[i];
     }
    var tr_class="normal_row"+((week_amount>5)?" important":"");
    for(var j=0;j<week_amount;j++)
     {
        var datacell=[(calr[0][j])?calr[0][j]:'',
                      (calr[1][j])?calr[1][j]:'',
                      (calr[2][j])?calr[2][j]:'',
                      (calr[3][j])?calr[3][j]:'',
                      (calr[4][j])?calr[4][j]:'',
                      (calr[5][j])?calr[5][j]:'',
                      (calr[6][j])?calr[6][j]:''
                     ];
        var trObj = tableObj.insertRow(tableObj.rows.length);
        trObj.setAttribute("class",tr_class);
        for(var i=0; i<datacell.length; i++)
         {
           var tdObj=trObj.insertCell(i);
           tdObj.innerHTML=(datacell[i]!='' && parseInt(datacell[i]) < 10 )?('0' + datacell[i]):datacell[i];
           if(tdObj.innerHTML!='')
             {
                var date_str=tdObj.innerHTML+'.'+((month<10)?('0'+month):month)+'.'+year;
                tdObj.innerHTML = '<a href="javascript:void(0)" onClick="ef_SetDate(\''+date_str+'\');">' + tdObj.innerHTML + '</a>';
             }
           else tdObj.innerHTML='&nbsp;';
           //if(i==5 || i==6) tdObj.style.color="#cc3333";
         }
     }
    return tableObj;
 }
function calendar_testDateStr(str)
 {
    var day;
    var month;
    var year;
    var err='';
    var date_ptr = /^\d{1,2}[\.]\d{1,2}[\.]\d{4}$/;
    start_year=2000;
    var d=new Date();
    finish_year=d.getYear()+1900+1;
    if (date_ptr.test(str))
     {
       date_arr=str.split(".");
       day=parseInt(date_arr[0],10);
       month=parseInt(date_arr[1],10);
       year=parseInt(date_arr[2],10);
       if(year< start_year || year > finish_year) err+='Укажите год c ' + start_year + 'по ' + finish_year + '\n';
       else
        {
           if(!month || month > 12) err+='Укажите правильно месяц\n';
           else
            {
               if( ((month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12) && day >31) || ((month==4 || month==6 || month==9 || month==11) && day >30 ) || ( month==2 &&   (((year%4) > 0 && day >28)  ||  ((year%4)== 0 && day >29)) ) ) err+='Неверное число дней месяца\n';
            }
        }
     }
    else err='Неверный формат даты\n';
    return (err=="")?{"code":1,"msg":""}:{"code":0,"msg":err};
 }
function calendar_Selects(form_up,selname,mode,args)
{args=!args?{}:args;var selYearObj=form_up.elements[(selname+'_y')];var selMonthObj=form_up.elements[(selname+'_m')];var selDayObj=form_up.elements[(selname+'_d')];var toDay=new Date();var d=parseInt(toDay.getDate(),10);var m=parseInt(toDay.getMonth(),10)+1;var y=parseInt(toDay.getFullYear(),10);var DaysInMonth=new Array(31,28,31,30,31,30,31,31,30,31,30,31)
switch(mode)
{case"today":setSelectIndex(selYearObj,y);setSelectIndex(selMonthObj,m);while(selDayObj.options.length>28){selDayObj.options[(selDayObj.options.length-1)]=null;}
var days=DaysInMonth[(m-1)];if((month===2)&&IsLeapYear(year)){days++;}
if(days>28)
{for(var i=29;i<=days;i++){selDayObj.options[selDayObj.options.length]=new Option(i,i);}}
setSelectIndex(selDayObj,d);break;case"year":var year=parseInt(getSelectValue(selYearObj),10);var month=(year===y)?m:1;setSelectIndex(selMonthObj,month);while(selDayObj.options.length>28){selDayObj.options[(selDayObj.options.length-1)]=null;}
var days=DaysInMonth[(month-1)];if((month===2)&&IsLeapYear(year)){days++;}
if(days>28)
{for(i=29;i<=days;i++)
selDayObj.options[selDayObj.options.length]=new Option(i,i);}
var day=(year===y&&month===m)?d:1;setSelectIndex(selDayObj,day);break;case"month":var year=parseInt(getSelectValue(selYearObj),10);var month=parseInt(getSelectValue(selMonthObj),10);while(selDayObj.options.length>28){selDayObj.options[(selDayObj.options.length-1)]=null;}
var days=DaysInMonth[(month-1)];if((month===2)&&IsLeapYear(year)){days++;}
if(days>28)
{for(var i=29;i<=days;i++)
selDayObj.options[selDayObj.options.length]=new Option(i,i);}
var day=(year===y&&month===m)?d:1;setSelectIndex(selDayObj,day);break;case"set":var year=parseInt(args.year,10);var month=parseInt(args.month,10);var day=parseInt(args.day,10);setSelectIndex(selYearObj,year);setSelectIndex(selMonthObj,month);while(selDayObj.options.length>28)selDayObj.options[(selDayObj.options.length-1)]=null;var days=DaysInMonth[(month-1)];if((month===2)&&IsLeapYear(year)){days++;}
if(days>28)
{for(var i=29;i<=days;i++){selDayObj.options[selDayObj.options.length]=new Option(i,i);}}
setSelectIndex(selDayObj,day);break;}}


