function cut(number) {
  if (number < 0) { return Math.ceil(number); }
  else { return Math.floor(number); }
}

function toDate(jtime, calendar) {
  if (jtime == "") { return ""; }
  if (isNaN(jtime)) { return "N/A"; }
  jtime *= 1;
  //jtime += 3600;
  var date="";
  var time="";
  // date string
  var jd=cut(jtime/86400);
  var l = jd + 68569;
  var n = cut(( 4 * l ) / 146097);
  l = l - cut(( 146097 * n + 3 ) / 4);
  var i = cut(( 4000 * ( l + 1 ) ) / 1461001);
  l = l - cut(( 1461 * i ) / 4) + 31;
  var j = cut(( 80 * l ) / 2447);
  var d = l - cut(( 2447 * j ) / 80);
  l = cut(j / 11);
  var m = j + 2 - ( 12 * l );
  var y = 100 * ( n - 49 ) + i + l;

  if (calendar == 1) {
    var gy = y-1600;
    var gm = m-1;
    var gd = d-1;
    var g_days_in_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
    var j_days_in_month = [31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29];

    var g_day_no = 365*gy+cut((gy+3)/4)-cut((gy+99)/100)+cut((gy+399)/400);
    for (i=0 ; i<gm; i++) {
      g_day_no += g_days_in_month[i];
    }
    if (gm>1 && ((gy%4==0 && gy%100!=0) || (gy%400==0)))
      /* leap and after Feb */
      g_day_no++;
    g_day_no += gd;

    var j_day_no = g_day_no-79;

    var j_np = cut(j_day_no / 12053);
    j_day_no %= 12053;

    var jy = 979+33*j_np+4*(cut(j_day_no/1461));
    j_day_no %= 1461;

    if (j_day_no >= 366) {
      jy += cut((j_day_no-1)/365);
      j_day_no = (j_day_no-1)%365;
    }

    for (i = 0; i < 11 && j_day_no >= j_days_in_month[i]; i++) {
      j_day_no -= j_days_in_month[i];
    }
    m = i+1;
    d = j_day_no+1;
    y=jy;


  }
  date = y + "-" + m + "-" + d;
  var jt = jtime - jd*86400;
  var hour = cut(jt/3600);
  var minute = cut((jt - hour*3600)/60);
  var second = jt - hour*3600 - minute*60;
  time += hour + ":";
  if (minute < 10)
    time += "0";
  time += minute +".";
  if (second < 10)
    time += "0";
  time += second;
  return date;//+ " " + time;
}

function nowDate(format) {
		var date = null;
		date = new Date();
		var m = date.getMonth()+1;
		var d = date.getDate();
		var y = date.getFullYear();
		
		datestr = toDate(toSecs(y + "-" + m + "-" + d),1);
		var a = datestr.split("-");
		var y=a[0]*1;
		var m=a[1]*1;
		var d=a[2]*1;
 		monthname=["","فروردین","اردیبهشت","خرداد","تیر","مرداد","شهریور","مهر","آبان","آذر","دی","بهمن","اسفند"];
		if( format == "long" ){
			return  d + "&nbsp;" + monthname[m] + "&nbsp;" + y;
		}
		return datestr;
}

function formatSeconds(s) {
  if (s == "") { return ""; }
  if (isNaN(s)) { return "N/A"; }
  s *= 1;
  var negative=false;
  if (s < 0) {
    negative=true;
    s *= -1;
  }
  var second=s % 60;
  s = cut(s/60);
  var minute=s % 60;
  var hour = cut(s/60);
  var result = hour + ":";
  if (minute < 10)
    result += "0";
  result += minute + ".";
  if (second < 10)
    result += "0";
  result += second+"";
  if (negative == true)
    result = "-" + result;
  return result;
}
function toSecs(s, calendar) {
  var date;
  var time;
  var delim=s.indexOf(" ");
  if (delim == -1)
    date=s;
  else {
    date = s.substring(0, delim);
    time = s.substring(delim+1, s.length);
  }
  var a = date.split("-");
  var y=a[0]*1;
  var m=a[1]*1;
  var d=a[2]*1;
  var jtime;
  if (calendar == 1) {
    var g_days_in_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
    var j_days_in_month = [31, 31, 31, 31, 31, 31, 30, 30, 30, 30, 30, 29];
    var gy, gm, gd;
    var jy, jm, jd;
    var g_day_no, j_day_no;
    var leap;
    var i;

    jy = y-979;
    jm = m-1;
    jd = d-1;

    j_day_no = 365*jy + cut(jy/33)*8 + cut((jy%33+3)/4);
    for (i=0; i < jm; ++i)
       j_day_no += j_days_in_month[i];
    j_day_no += jd;
    g_day_no = j_day_no+79;

    gy = 1600 + 400*cut(g_day_no/146097); /* 146097 = 365*400 + 400/4 - 400/100 + 400/400 */
    g_day_no = g_day_no % 146097;

    leap = 1;
    if (g_day_no >= 36525) /* 36525 = 365*100 + 100/4 */
    {
       g_day_no--;
       gy += 100*cut(g_day_no/36524); /* 36524 = 365*100 + 100/4 - 100/100 */
       g_day_no = g_day_no % 36524;

       if (g_day_no >= 365)
          g_day_no++;
       else
          leap = 0;
    }
    gy += 4*cut(g_day_no/1461); /* 1461 = 365*4 + 4/4 */
    g_day_no %= 1461;
    if (g_day_no >= 366) {
       leap = 0;
       g_day_no--;
       gy += cut(g_day_no/365);
       g_day_no = g_day_no % 365;
    }

    for (i = 0; g_day_no >= g_days_in_month[i] + (i == 1 && leap); i++)
      g_day_no -= g_days_in_month[i] + (i == 1 && leap);
    gm = i+1;
    gd = g_day_no+1;

    y = gy;
    m = gm;
    d = gd;
  }
  var mm=cut( (m-14)/12 );

  jtime = cut( ( 1461 * ( y + 4800 + mm ) ) / 4 ) +
      cut( ( 367 * ( m - 2 - 12 *  mm  ) ) / 12 ) -
      cut(( 3 * cut(( y + 4900 + mm ) / 100) ) / 4 ) +
      d - 32075;
  jtime *= 86400;
  if (delim != -1) {
    jtime += timeToSecs(time);
  }
  if ((jtime+"") == "NaN") {
    return "";
  }
  return jtime;
}
function commify(s) {
  var flag=false;
  var negative=false;
  var result="";
  var j=0;
  if (s.charAt(0) == "-") {
    negative=true;
    s=s.substring(1);
  }
  var i=s.length-1;
  while (i >= 0) {
    if (j%3 == 0) {
      if (flag == true)
        result = "," + result;
      else
        flag=true;
    }
    result = s.charAt(i) + result;
    i--;
    j++;
  }
  if (negative == true)
    result = "-" + result;
  return result;
}
function timeToSecs(time) {
  if (time == "") { return "Empty"; }
  if (time == null) { return "Null"; }
  if (time == 0) { return 0; }
  var negative=1;
  if (time.indexOf("-") == 0) {
    negative=-1;
    time=time.substring(1, time.length);
  }
  var b = time.split(".");
  var a = b[0].split(":");
  var hour=a[0]*1;
  var minute=a[1]*1;
  var second=0;
  if (b.length > 1)
    second=b[1]*1;
  var result= (hour*3600 + minute*60 +second*1)*negative;
  if ((result+"") == "NaN") {
    return "NaN2";
  }
  return result;
}
function makeTimeRange(begin, end) {
  return timeToSecs(begin)+"t"+timeToSecs(end);
}
function makeDateRange(begin, end, calendar) {
  return toSecs(begin, calendar)+"t"+toSecs(end, calendar);
}
//>>
