/*  Copyright (c) 2000, 2006, Oracle. All rights reserved.

    ToolsRel: 8.48.19 */



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()

{

var bIE = navigator.userAgent.toLowerCase().indexOf('msie');

/* 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);

            if (bIE>=0)  // IE browser

		        selectElem.options[curLen + j].innerHTML=selectElem.options[curLen + j].innerText;  // avoid converting &lt to &amp; lt

            else

                selectElem.options[curLen + j].innerHTML=selectElem.options[curLen + j].textContent; // avoid converting &lt to &amp; lt

            }

		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;

  }

}
