var DAY = 1000*60*60*24;
var M = 365;  //максимальный срок бронирования и установки квоты
var StartDate = new Date(2002,0,1); //дата начала работы системы

function str_pad(str, pad_length, pad_string,pad_type)
{
  var s;
  s = '' + str;
  if (pad_type == undefined) pad_type = 0;
  while (s.length<pad_length) {
    if (pad_type == 0) 
      { s = '' + pad_string + s }
    else
      { s = '' + s + pad_string }
  }
  return s;
}


function LTrim(s){
  var i=0
  while((i<s.length)&&(s.charAt(i)==' ')){++i}
  return s.substring(i,s.length)
}
function RTrim(s){
  var i=(s.length-1)
  while((i>=0)&&(s.charAt(i)==' ')){--i}
  return s.substring(0,i+1)
}
function AllTrim(s){
  var f=0,l=(s.length-1)
  while((l>=0)&&(s.charAt(l)==' ')){--l}
  while((f<=l)&&(s.charAt(f)==' ')){++f}
  return s.substring(f,l+1)
}

function IsDigits(s)
{
  var ok=true, i=0, ch
  s=AllTrim(s)
  if(s == "") {return false}
  while((i<s.length)&&(ok=(((ch=s.charAt(i++))>='0')&&(ch<='9')))){}
  return ok
}
function IsDate(d,m,y)
{
  if(!(IsDigits(d)&&IsDigits(m)&&IsDigits(y)))return false
  if((d>31)||(d<1))return false
  if((m>12)||(m<1))return false
//  if(d==31) return ((m==1)||(m==3)||(m==5)||(m==7)||(m==8)||(m==10)||(m==12))
//  alert(';'+d+';'+m+';'+y);
//  if(d==30) return ((m==4)||(m==6)||(m==9)||(m==11))
//  if((d==29)&&(m==2)) return ((((y%4)==0)&&((y%100)!=0))||((y%400)==0))


/* ((((year%4)==0)&&((year%100)!=0))||((year%400)==0)) 
*/
  var b = true;
  if(d==31) b = ((m==1)||(m==3)||(m==5)||(m==7)||(m==8)||(m==10)||(m==12))
  if(d==30) b = (m!=2)
  if((d==29)&&(m==2)) b = ((((y%4)==0)&&((y%100)!=0))||((y%400)==0))

  return b
}
function RemoveHeadingZeros(num) {
 var k = 0;
 while(num.charAt(k)=='0'){k++}
   return num.substring(k,num.length);
}

function ParseDateStr(s,num)
{
  var results = new Array();
  var day, month, year;
  var i = 0, k;
  while((i<s.length)&&(s.charAt(i)!='.')) {++i;}
  results["day"] = s.substring(0,i);

  k = i + 1;
  while((k<s.length)&&(s.charAt(k)!='.')) {++k;}
  results["month"] = s.substring(i+1,k);
  results["year"] = s.substring(k+1, s.length);
  if (num == "numbers")
  {
   results["day"] = new Number (results["day"]);
   results["month"] = new Number(results["month"]);  
   results["year"] = new Number(results["year"]);
  }
  
  return results;
}

function IsDateStr(s){
  var d = new Array();
  d = ParseDateStr(s);
  if(IsDate(d["day"],d["month"],d["year"])) return true 
  else return false;
}

function IsLessOrEqualDate(s1,s2)
//returns true if s1 <= s2, else returns false
{  var d1 = new Array();
   var d2 = new Array();
   d1 = ParseDateStr(s1,"numbers");
   d2 = ParseDateStr(s2,"numbers");
  
   if (d1["year"] > d2["year"]) return false;
    else if (d1["year"] < d2["year"]) return true;
   if (d1["month"] > d2["month"]) return false;
     else if (d1["month"] < d2["month"]) return true;
   if (d1["day"] > d2["day"]) return false;
   return true; 
}


Date.prototype.addDays = function(num){
                return new Date((num*DAY)+this.valueOf());
}       
        

function IsDateStrBetweenDates(s,d1,d2)
{
  var a = new Array();
  a = ParseDateStr(s,"numbers");
  var d1_ = new Date(d1.getYear(), d1.getMonth(),d1.getDate());
  var d2_ = new Date(d2.getYear(), d2.getMonth(),d2.getDate());
  var d = new Date(a["year"],a["month"] - 1, a["day"]);
  if (d.valueOf() < d1_.valueOf())  return false;
  if (d.valueOf() > d2_.valueOf())  return false;
  return true;
}

function IsPeriodBetweenLimits(s1,s2,low,high)
{
  var d1 = ParseDateStr(s1,"numbers");
  var d2 = ParseDateStr(s2,"numbers");
  var d1_ = new Date(d1["year"],d1["month"] - 1, d1["day"]);
  var d2_ = new Date(d2["year"],d2["month"] - 1, d2["day"]);
  var period = d2_.valueOf() - d1_.valueOf();
  if (period  < DAY*low) return false;
  if (period > DAY*high) return false;
  return true;
}

function IsTime(hh,mm,ss)
{
  if(!(IsDigits(hh)&&IsDigits(mm)&&IsDigits(ss)))return false
  if((hh>23)||(hh<0))return false
  if((mm>59)||(mm<0))return false
  if((ss>59)||(ss<0))return false
  return true
}
function ParseTimeStr(s,num)
{
  var results = new Array();
  var hour, minute, second;
  var i = 0, k;
  while((i<s.length)&&(s.charAt(i)!=':')) {++i;}
  results["hour"] = s.substring(0,i);

  k = i + 1;
  while((k<s.length)&&(s.charAt(k)!=':')) {++k;}
  results["minute"] = s.substring(i+1,k);
  results["second"] = s.substring(k+1, s.length);
  if (num == "numbers")
  {
   results["hour"] = new Number (results["hour"]);
   results["minute"] = new Number(results["minute"]);  
   results["second"] = new Number(results["second"]);
  }
  
  return results;
}
function IsTimeStr(s,withsecond){
  var d,ss;
  d = new Array();
  d = ParseTimeStr(s);
  ss = d["second"];
  if (withsecond!=1) ss = '0';
  if(IsTime(d["hour"],d["minute"],ss)) return true 
  else return false;
}

function datetoibdate(dat)
{
  return (dat / 86400000) - dat.getTimezoneOffset() / 1440 + 25569;
}

function strtodate(s)
{
  if (!IsDateStr(s)) return false;
  var d,dat,r;
  d = new Array();
  d = ParseDateStr(s);
  dat = new Date(d["year"],d["month"] - 1,d["day"],0,0,0);
  r = Math.floor(datetoibdate(dat));
  return r;
}

function strtotime(s)
{
  if (!IsTimeStr(s)) return false;
  var d,dat,r;
//alert(s);
  d = new Array();
  d = ParseTimeStr(s,'numbers');
  dat = new Date(2000,1,1,d["hour"],d["minute"],0);
  r = datetoibdate(dat);
  r = r - Math.floor(r);
  return r;
}

function DateStrToYYYYMMDD( s )
{
  if (!IsDateStr(s)) return false;
  var d,dat;
  d = new Array();
  d = ParseDateStr(s,"numbers");
  dat = new Date(d["year"],d["month"] - 1,d["day"],0,0,0);
  return '' + dat.getYear() + padZero(dat.getMonth()+1) + padZero(dat.getDate());
}

function TimeStrToHHMMSS( s )
{  if (!IsTimeStr(s)) return false;
  var d,dat,s1,hh,mm,ss;
  d = new Array();
  d = ParseTimeStr(s,"numbers");
  hh = str_pad(d["hour"], 2,'0');
  mm = str_pad(d["minute"], 2,'0');
  ss = str_pad(d["second"], 2,'0');
  s1 = '' + hh + mm + ss;
//  s1 = '' + padZero(d["hour"]) + padZero(d["minute"]) + padZero(d["second"]);
//  alert('' + hh + ';'+ mm + ';' + ss);
  return s1;
}

