/*  Copyright (c) 2000, 2007, Oracle. All rights reserved.
    ToolsRel: 8.49 */

function formatDate(dt, dateFormat, calendarType)
{
var format = dateFormat.substring(0,3);
var separator = dateFormat.substring(3,4);

if(calendarType == "H")
{
  var day=Number(dt.day);
  var mnt=Number(dt.month) +1;
  var yr=Number(dt.year);
}
else
{
var day = dt.getDate();
var mnt = dt.getMonth() +1;
var yr = dt.getFullYear();
}
if (calendarType == null)
  calendarType = "G";

if (dateFormat.length>=7)
{
  if (dateFormat.substring(4,5) == "2")
  {
    var yrdef = parseInt(dateFormat.substring(5,7), 10);
    var yr2 = yr%100;
    if (yr2 < yrdef)
    {  
      if (yr2 + 2000 == yr)
        yr = yr2;
    }
    else
    {  
      if (yr2 + 1900 == yr)
        yr = yr2;
    }
  }
}

if (calendarType == "T")
  yr=yr+543;

var formattedDate;
if (format == 'MDY')
  formattedDate = '' + padout(mnt) + separator + padout(day) + separator + padout(yr);
else if (format == 'DMY')
  formattedDate = '' + padout(day) + separator +padout(mnt) + separator  + padout(yr);
else if (format == 'YMD')
  formattedDate = '' + padout(yr) + separator + padout(mnt) + separator + padout(day);


return formattedDate;
}

function padout(number)
{
return (number < 10) ? '0' + number : number;
}


function setSelectElemOptions_win0()
{
/* ICE#:1338733000 - Add form name specifier */
if (typeof selectElemOptions_win0 != "undefined")
	{
	for (var i = 0; i < selectElemOptions_win0.length; i++)
		{
        var selectElem = document.forms['win0'].elements[selectElemOptions_win0[i][0]];
		if (selectElem == null)
			continue;
		var curLen = selectElem.options.length;
		var options = optionsArray_win0[selectElemOptions_win0[i][1]];
		var selected = selectElemOptions_win0[i][2];
		var erroraccess = selectElemOptions_win0[i][3];
		if (options==null || selected == null)
			continue;
		for (var j = 0; j < options.length; j++)
			selectElem.options[curLen + j] = new Option(options[j][1], options[j][0], false, false);
		for (var k = 0; k < selected.length; k++)
			{	
			var selection = selected[k];
			/*YHINNACH Res#579416 - if accessibility layout on and error on the field prepend ERROR*/
			if(erroraccess != null && erroraccess == "1")
				{
				var optiondescr = "ERROR:"+ options[selection][1]; 
				selectElem.options[curLen + selection] = new Option(optiondescr,options[selection][0],false,false);		
				}
			selectElem.options[selection].selected = true;
			selectElem.options[selection].defaultSelected = true;
		
			}
		} /* end of for loop */
	}   /* end of if (typeof selectElemOptions_win0 != "undefined") */
}

var UmmAlQura=new Array();
UmmAlQura[0]= new Array(29, 30, 29, 29,  30, 29, 30, 30,  30, 30, 29, 30, 355); //1420 starts 1999-04-17
UmmAlQura[1]= new Array(29, 29, 30, 29,  29, 29, 30, 30,  30, 30, 29, 30, 354); //1421 starts 2000-04-06
UmmAlQura[2]= new Array(30, 29, 29, 30,  29, 29, 29, 30,  30, 30, 29, 30, 354); //1422 starts 2001-03-26
UmmAlQura[3]= new Array(30, 29, 30, 29,  30, 29, 29, 30,  29, 30, 29, 30, 354); //1423 starts 2002-03-15
UmmAlQura[4]= new Array(30, 29, 30, 30,  29, 30, 29, 30,  29, 29, 30, 29, 354); //1424 starts 2003-03-04
UmmAlQura[5]= new Array(30, 29, 30, 30,  29, 30, 29, 30,  30, 29, 30, 29, 355); //1425 starts 2004-02-21
UmmAlQura[6]= new Array(29, 30, 29, 30,  29, 30, 30, 29,  30, 30, 29, 30, 355); //1426 starts 2005-02-10
UmmAlQura[7]= new Array(29, 29, 30, 29,  30, 29, 30, 30,  29, 30, 30, 29, 354); //1427 starts 2006-01-31
UmmAlQura[8]= new Array(30, 29, 29, 30,  29, 29, 30, 30,  30, 29, 30, 30, 355); //1428 starts 2007-01-20
UmmAlQura[9]= new Array(29, 30, 29, 29,  30, 29, 29, 30,  30, 29, 30, 30, 354); //1429 starts 2008-01-10
UmmAlQura[10]=new Array(29, 30, 30, 29,  29, 30, 29, 30,  29, 30, 29, 30, 354); //1430 starts 2008-12-29
UmmAlQura[11]=new Array(29, 30, 30, 29,  30, 29, 30, 29,  30, 29, 29, 30, 354); //1431 starts 2009-12-18
UmmAlQura[12]=new Array(29, 30, 30, 30,  29, 30, 29, 30,  29, 30, 29, 29, 354); //1432 starts 2010-12-07
UmmAlQura[13]=new Array(30, 29, 30, 30,  29, 30, 30, 29,  30, 29, 30, 29, 355); //1433 starts 2011-11-26
UmmAlQura[14]=new Array(29, 30, 29, 30,  29, 30, 30, 29,  30 ,30, 29, 29, 354); //1434 starts 2012-11-15

HijriLeapYearCycle=new Array(0, 1,0,0,0,1, 0,1,0,0,0, 1,0,0,1,0, 0,1,0,1,0, 0,1,0,0,1, 0,1,0,0,1); // 1-based not 0-based

HijriDayTable=new Array();
HijriDayTable[0]= new Array(30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 29); 
HijriDayTable[1]= new Array(30, 29, 30, 29, 30, 29, 30, 29, 30, 29, 30, 30);

function GregorianToJulian(dt) {
    mon=dt.getMonth();
    day=dt.getDate(); 
    year=dt.getFullYear();
    hour=12;
    min=0;
    sec=0;
    with (Math) {  
      GGG = 1;
      if( year < 1582 ) GGG = 0;
      if( year <= 1582 && mon < 10 ) GGG = 0;
      if( year <= 1582 && mon == 10 && day < 5 ) GGG = 0;
      JD = -1 * floor(7 * (floor((mon + 9) / 12) + year) / 4);
      S = 1;
      if ((mon - 9)<0) S=-1;
      A = abs(mon - 9);
      J1 = floor(year + S * floor(A / 7));
      J1 = -1 * floor((floor(J1 / 100) + 1) * 3 / 4);
      JD = JD + floor(275 * mon / 9) + day + (GGG * J1);
      JD = JD + 1721027 + 2 * GGG + 367 * year - 0.5;
      JD = JD + (hour / 24);
    }
    return(JD);
}


function JulianToGregorian(jul) {
   JD=jul;
   with (Math) {  
   Z = floor(JD+0.5);
   F = JD+0.5 - Z;
   if (Z < 2299161) {
      Y = Z
	} else
      {I = floor((Z - 1867216.25)/36524.25);
      Y = Z + 1 + I - floor(I/4);
    }
   B = Y + 1524;
   C = floor((B - 122.1)/365.25);
   D = floor(365.25 * C);
   T = floor((B - D)/ 30.600);
   RJ = B - D - floor(30.6001 * T) + F;
   DD = floor(RJ);
   if (T < 14) {
      MM = T - 1
   } else
   { if ((T == 14) || (T == 15))  MM = T - 13 
   } 
   if (MM > 2) {
      YY = C - 4716 } else
   { if ((MM == 1) || (MM == 2)) YY = C - 4715
   }
   }
return(new Date(YY,MM-1,DD));
}

function HijriToJulian(year,month,day)
{

var julian;
var cycles = 0;
var cycledays = 0;
var yeardays = 0;
var monthdays = 0;
var useummalqura = false;
var dayspercycle = 10631.0;          //19 years of 354 days plus 11 years of 355 days

var yearspercycle = 30;					

cycles = Math.floor ((year-1) / yearspercycle);
cycledays = cycles * dayspercycle;
var cycleyears = year;
cycleyears -= (yearspercycle * cycles);
for (curyear = 1; curyear < cycleyears; curyear++) 
{
    yearproc=year-cycleyears+curyear;
	if ((yearproc) >= 1420 && (yearproc) <= 1434) // We're in Umm Al-Qura range
      yeardays += UmmAlQura[yearproc-1420][12]; 
	else
  	  if(HijriLeapYearCycle[curyear] == 1)
    	yeardays += 355;
	  else
		yeardays += 354;
}

if(year >=1420 && year <= 1434) 
  useummalqura=true;
else
  useummalqura=false;

for (curmonth = 0; curmonth < month; curmonth++) {
	if (useummalqura == true)
	  daysinmonth = UmmAlQura[year-1420][curmonth];
	else 
    {
	  if(HijriLeapYearCycle[curyear] == 1)
		daysinmonth = HijriDayTable[1][curmonth]; //one indexed
	  else
		daysinmonth = HijriDayTable[0][curmonth]; //one indexed
	}
	
    monthdays += daysinmonth;
}
julian = cycledays + yeardays + monthdays + day;
julian += 1948439;  // Hijri first day in Julian calendar

return(julian)
}

function JulianToHijri(julian)  //Returns Year-Month-Day as String as "YYYY-MM-DD"
{
    var year=0;
    var month=0;
    var day=1;
    var count=0;
    var count2=0;
    var julLeft = julian;
    var cycleLastDay = false;

    var UAQStart = 2451285;
    var UAQEnd = 2456599;

// Work out whether Julian is before, in or after Umm Al-Qurarange
    if ((julLeft >= UAQStart) && (julLeft <= UAQEnd))
    {                       // Inside Umm Al-Qurarange
        year=1420;
        julLeft-=(UAQStart-1);
        for (count=0;julLeft>UmmAlQura[count][12];count++)
        {
            year++;julLeft-=UmmAlQura[count][12];
        }
        for (count2=0;julLeft>UmmAlQura[count][count2];count2++)
        {
            month++;julLeft-=UmmAlQura[count][count2];
        }
        day=julLeft;
    }
    else
    {                       // Outside Umm Al-Qurarange
        julLeft-=1948437;
        year=1+(Math.floor(julLeft/10631.0)*30);
        julLeft-= Math.floor(julLeft/10631.0)*10631.0;
        if (julLeft == 0)
        {
            cycleLastDay = true;
            year-=30;
            julLeft = 10630;
        }

        for (count=0;julLeft>(354+HijriLeapYearCycle[count+1]);count++)
        {
            year++;julLeft-=(354+HijriLeapYearCycle[count+1]);
        }
        for (count2=0;julLeft>(HijriDayTable[HijriLeapYearCycle[count+1]][count2]);count2++)
        {
            month++;julLeft-=(HijriDayTable[HijriLeapYearCycle[count+1]][count2]);
        }
        day=julLeft;
        if (cycleLastDay == true) day+=1;
    }
    if (day<10) 
      day="0"+day;
    
    month+=2;  
    if (month<10) 
      month= "0"+(month);
    
    if (year<10) 
      year="000"+year;
    else if (year<100) 
      year="00"+year;
    else if(year<1000) 
      year="0"+year;
    return(year+"-"+month+"-"+day);
}

function getHijriMonthDays(year,month)
{

if(year >= 1420 && year <= 1434)
  return(UmmAlQura[year-1420][month]);
else
 {
   var cycleyear = year%30; // 30 year leap year cycle
   isleapyear=HijriLeapYearCycle[cycleyear];
   return HijriDayTable[isleapyear][month];
 }

}

function HijriDate(yearVal, monthVal, dayVal) 
{
  if(yearVal!=null && monthVal != null && dayVal != null)
  {
    this.year=yearVal;
    this.month=monthVal;
    this.day=dayVal;
  }
  else
  {
   tempdt=new Date; 
   currJul=GregorianToJulian(tempdt);
   currHijriStr=JulianToHijri(currJul);
   this.year=Number(currHijriStr.substring(0,4));
   this.month=Number(currHijriStr.substring(5,7))-1;
   this.day=Number(currHijriStr.substring(8,10));
   // 12 months: 0 - 11 
   if (this.month > 11)
   {
      this.month = this.month - 12;
      this.year = this.year + 1;
   }
  }

  this.daysOfMonth=daysOfMonth;
  this.adjustDay=adjustDay;
  this.adjustMonth=adjustMonth;
  
  function daysOfMonth()
  {
    return(getHijriMonthDays(this.year,this.month));
  }

  function adjustDay(delta)
  {
    dayAdj=this.day+delta;
    if(dayAdj < 1)
    {
      this.adjustMonth(-1);
      this.day=this.daysOfMonth()+dayAdj;
     }
    else if((dayAdj) > this.daysOfMonth())
    {
      this.day=dayAdj-this.daysOfMonth();
      this.adjustMonth(+1);
     }
    else 
      this.day=dayAdj;
    return this.day;
    }

  function adjustMonth(delta)
  {
    monthAdj=this.month+delta;
    if(monthAdj < 0)
    {
      this.year--;
      this.month=12+monthAdj;
     }
    else if(monthAdj > 11)
    {
      this.year++;
      this.month=monthAdj-12;
    }
    else 
      this.month=monthAdj;

  return this.month;
  }
}