/*  Copyright (c) 2000, 2009, Oracle. All rights reserved.
    ToolsRel: 8.50.19 */

function formatDate(dt, dateFormat, calendarType)
{
return pt_formatDate(dt, dateFormat, calendarType);
}

function pt_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_win1()
{
/* ICE#:1338733000 - Add form name specifier */
var bIE = navigator.userAgent.toLowerCase().indexOf('msie');
if (typeof selectElemOptions_win1 != "undefined")
	{
	for (var i = 0; i < selectElemOptions_win1.length; i++)
		{
        var selectElem = document.forms['win1'].elements[selectElemOptions_win1[i][0]];
		if (selectElem == null)
			continue;
		var curLen = selectElem.options.length;
        var options = optionsArray_win1[selectElemOptions_win1[i][1]];   // new options from appservers
		var selected = selectElemOptions_win1[i][2];                          // indexes for selected options
		var erroraccess = selectElemOptions_win1[i][3];                       // error option index
        if (typeof options == "undefined" || options==null || selected == null)
			continue;

		//ICE - 1794939000, resolution 831433
	    
	    var invalidValueText = "(Invalid Value)";
	    var bRemove=false;
	    for (var l = curLen - 1; l >= 0; l--) 
			{
		     
		     
 		     if (selectElem.options[selectElem.options.length - 1].text != invalidValueText)
 		        {
 		           var nLen= selectElem.options[selectElem.options.length - 1].value.length;
 		           if (nLen > 0)  
		     	       selectElem.remove(selectElem.options.length - 1);
                   
		     	   else if (nLen==0)    
		     	       {
		     	          if (!bRemove)
		     	             bRemove=true;   // blank option exists
		     	          else  
		     	             selectElem.remove(selectElem.options.length - 1);  // remove the 2nd and after blank option 
		     	       }
		    	}
		    }

        
	   	curLen = selectElem.options.length;

        
        for (var j = 0, nIndex = curLen; j < options.length; j++)
            {
               
               
               if (!bRemove || (bRemove && (options[j][1].length > 0 || options[j][0].length > 0 )))
                  {
		   	          selectElem.options[nIndex] = new Option(options[j][1], options[j][0], false, false);
                      if (bIE>=0)  // IE browser
		                  selectElem.options[nIndex].innerHTML=selectElem.options[nIndex].innerText;  //avoid converting &lt to &amp;lt
                      else
                           selectElem.options[nIndex].innerHTML=selectElem.options[nIndex].textContent; //avoid converting &lt to &amp;lt
                      nIndex++;   
                   }
            }
        
        
		for (var k = 0; k < selected.length; k++)
			{	
			var selection = selected[k];

			
		    
		    
		    
		    
		    
		    
		    
		    
            if (curLen > 0 && !bRemove)
		    	selection += curLen;
			if (selection < 0)
				selection = 0;
			if( selection >= selectElem.options.length)
				selection = selectElem.options.length-1;
		    	
            
            if (selectElem.options[selection].value == options[selected[k]][0])
                {
           	    /*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[selection] = new Option(optiondescr,options[selection][0],false,false);		
				    }
			    selectElem.options[selection].selected = true;
			    selectElem.options[selection].defaultSelected = true;
                }
            else
                {
                
                for (var m=0; m<selectElem.options.length; m++)
                    {
                    if (selectElem.options[m].value == options[selected[k]][0])
                        {
                   	    
			            if (erroraccess != null && erroraccess == "1")
				            {
				            var optiondescr = "ERROR:"+ options[selection][1]; 
				            selectElem.options[selection] = new Option(optiondescr,options[selection][0],false,false);		
				            }

       		  	        selectElem.options[m].selected = true;
			            selectElem.options[m].defaultSelected = true;
                        break; 
                        }
                    }  // end of for (var m=0; m<selectElem.options.length; m++)
                }  // end of else
		    }  // end of for (var k = 0; k < selected.length; k++)
		}  // end of for loop 
	}   // end of if (typeof selectElemOptions_win1 != "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;
  }
}

function psAlert(msg, msgTitle)
{
if (typeof popupObj_win1 != "undefined" && popupObj_win1 && popupObj_win1.Initialized)
{
   var shtml;
   if (msgTitle)
       shtml = "<div id=msgTitle>"+msgTitle+"</div>";
   shtml += "<div id='alertmsg'><span class='popupText' >"+msg+"</span></div>";
   shtml += "<div id='alertbutton'><a class='PSPUSHBUTTON' id='Left' style='border:0;'><span><input type=button id='#ALERTOK' name='#ALERTOK'  class='PSPUSHBUTTONTBOK'  value='OK' onclick=popupObj_win1.hidePopup(); tabindex='1' alt='Ok (Enter)' title='Ok (Enter)'></div></span></a>";
   popupObj_win1.showMsg(shtml);
}
else
   alert(msg);
}
function psComfirm(msg, msgTitle)
{
if (typeof popupObj_win1 != "undefined" && popupObj_win1)
{
   var shtml;
   if (msgTitle)
       shtml = "<div id=msgTitle>"+msgTitle+"</div>";
   shtml += "<div id='alertmsg'><span class='popupText' >"+msg+"</span></div>";
   shtml += "<div id='alertbutton'><a class='PSPUSHBUTTON' id='Left' style='border:0;'><span><input type=button id='#ALERTOK' name='#ALERTOK'  class='PSPUSHBUTTONTBOK'  value='OK' onclick=popupObj_win1.hidePopup(); tabindex='1' alt='Ok (Enter)' title='Ok (Enter)'></div></span></a>";
   popupObj_win1.showMsg(shtml);
}
}
