/************************************ Main ***************************************/
/*	Define here: Today
					 Now
	Define in data: HolList						*/
	Now = new Date();
/*	Now = new Date(2003,5,6, Now.getHours(), Now.getMinutes(), Now.getSeconds()); 	*/
/*************************** Misc. Date functions *******************************/
		function tomorrow(day) {
			var t = new Date(day.getTime());
			t.setDate(day.getDate()+1);
			return t;
		}
		
		function yesterday(day) {
			var t = new Date(day.getTime());
			t.setDate(day.getDate()-1);
			return t;
		}

		function normalizeDate (day) {
			var n = new Date(day.getTime());
			n.setMilliseconds(0);
			n.setSeconds(0);
			n.setMinutes(0);
			n.setHours(0);
			return n;
		}
		
		function daykey (day) {
			var r = '';
			r += ((day.getDate()<10)?'0':'')+day.getDate();
			r += ((day.getMonth()<10)?'0':'')+day.getMonth();
			r += day.getFullYear();
			return r;
		}
	
		function listdaykey (day) {
			var r = '';
			r += ((day.getDate()<10)?'0':'')+day.getDate();
			r += (((day.getMonth()+1)<10)?'0':'')+(day.getMonth()+1);
			r += day.getFullYear();
			return r;
		}
	
		function formatDate(day, eng) {
			var monthname = ['Jan','Feb','Mar','Apr','May','Jun',
								  'Jul','Aug','Sep','Oct','Nov','Dec'];
			var weekdayname = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'];
			var Cweekdayname = ['星期日','星期一','星期二','星期三','星期四','星期五','星期六'];
			var result = '';
			/*
			result = ((day.getDate()<10)?'0':'')+day.getDate()+' '+monthname[day.getMonth()]
						+' '+day.getFullYear()+' ('+(eng?weekdayname[day.getDay()]:Cweekdayname[day.getDay()])+')';
			*/
			result = ((day.getDate()<10)?'0':'')+day.getDate()+'/'+((day.getMonth()<9)?'0':'')+(day.getMonth()+1)
						+'/'+day.getFullYear()+' ('+(eng?weekdayname[day.getDay()]:Cweekdayname[day.getDay()])+')';
			return result;
		}

/***************************** GUI functions ************************************/
		function fillCalendar(/* list of select boxes */) {
			var Today = normalizeDate(Now);
			var CalList = HolList.getCalList(Today);
			var CalIdx = 0;
			/* find the selected index CalIdx */
			if ((HolList.isHoliday(Today)) || (Now.getHours() > 13)) {
				for (CalIdx=0; CalIdx<CalList.length-1; CalIdx++) 
					if (CalList[CalIdx].getTime() > Today.getTime()) break;
			} else {
				for (CalIdx=0; CalIdx<CalList.length-1; CalIdx++) 
					if (CalList[CalIdx].getTime() >= Today.getTime()) break; 
			}
			/* fill the select boxes */
			for (var i=0; i<arguments.length; i++) {
				var selbox = arguments[i];
				selbox.options.length=0;
				for (var j=0; j < CalList.length; j++)
					selbox.options[selbox.options.length] = new Option(formatDate(CalList[j]), j);
			}
			selbox.selectedIndex=CalIdx;
		}
		
		function genCalendar(selname, eng) {
			var Today = normalizeDate(Now); 
			var CalList = HolList.getCalList(Today);
			var CalIdx = 0;
			/* find the selected index CalIdx */ 
			if ((HolList.isHoliday(Today)) || (Now.getHours() > 17) || ((Now.getHours()==17)&&(Now.getMinutes()>30))) { //alert("arm 1");
				for (CalIdx=0; CalIdx<CalList.length-1; CalIdx++) {
					if (CalList[CalIdx].getTime() > Today.getTime()) break;
				}
			} else { //alert("arm 2");
				for (CalIdx=0; CalIdx<CalList.length-1; CalIdx++) {
					if (CalList[CalIdx].getTime() >= Today.getTime()) break; 
				}
			}
			//alert (CalIdx);
			/* form the select box html code */
			var s = "<select name='"+selname+"'>";
			for (var i=0; i<CalList.length; i++) 
				s += "<option value='"+i+"'"+((CalIdx==i)?" selected>":">")+formatDate(CalList[i], eng)+"</option>";
			s += "</select>";
			//alert(s);
			document.write(s);
		}

		/*
				Generate the court icon
				sample:
					<img src="images/court_cfa.gif" width="35" height="35" hspace="5" vspace="5" border="1"> 
               <br> <span class="tabletxt">Court of Final Appeal </span>
		*/
		/*
		function genCourtIcon(court, eng) {
			var s = "<img src='"+court.img+"' width='35' height='35' hspace='5' vspace='5' border='1'>"
						+"<br><span class='tabletxt'>"+(eng?court.name:court.cname)+"</span>";
			document.write(s);
		}
		*/

    function high_lite()
    {
     with(txtblock.style){color="red"; fontWeight="bold";}
    }
    function shownormal()
    {
     with (myItem.style){color="black"; fontWeight="normal";}
    }

		function genCourtIcon(formname, crtgrpname, crtkey, calname, eng) {

			var court = window[crtgrpname][crtkey];
			var altext = new String(eng?court.name:court.cname);
			//alert(altext.charAt(0));

			var i = altext.indexOf("<br>");
			while (i>=0) {
				altext = altext.substring(0,i)+' '+altext.substring(i+4);
				i = altext.indexOf("<br>");
			}

			//JL
			var    isNS4 = (document.layers) ? true : false;
			var    isIE4 = (document.all && !document.getElementById) ? true : false;
			var    isIE5 = (document.all && document.getElementById) ? true : false;
			var    isNS6 = (!document.all && document.getElementById) ? true : false;
			var    cname = court.cname;
			var    name = court.name;
            //if (isNS4 || isNS6) {
			//}
			//alert(cname);
			
//JL							+"<br><span class='dailycaulist'>"+(eng?court.name:court.cname)+"</span></a>";
			var s="";
            if (isNS4 || isNS6) {
				 s = "<font style='FONT:3pt Arial,Verdana,Tahoma'><br></font><a href='javascript:gotoList(\""+formname+"\", \""+crtgrpname+"\", \""+crtkey+"\", \""+calname+"\", "+eng+")' onmouseover=\"javascript:document.getElementById('txtblock').color='yellow'\" >"
							+"<img src='"+court.img+"' width='35' height='35' hspace='0' vspace='0' border='0' alt=\""+altext+"\">"
							+"<font style='FONT:3pt Arial,Verdana,Tahoma'><br><br></font><span id=txtblock class='dailycaulist'>"+(eng?name:cname)+"</span></a>";
			}
			else{
				 s = "<a href='javascript:gotoList(\""+formname+"\", \""+crtgrpname+"\", \""+crtkey+"\", \""+calname+"\", "+eng+")'>"
							+"<img src='"+court.img+"' width='35' height='35' hspace='5' vspace='5' border='0' alt=\""+altext+"\">"
							+"<br><span class='dailycaulist'>"+(eng?name:cname)+"</span>";
			}

			document.write(s);

			//JL
			//alert(s);
		}

		/*
				Generate the court radio button
				sample:
					<input type="radio" name="radiobutton" value="radiobutton">
		*/
		function genCourtRdoBtn(court, name, checked) {
			document.write("<input type='radio' name='"+name+"' value='"+court.key+"'"+(checked?" checked":"")+">");
		}
		
		/*
			experimental to disable radio buttons
		*/
		function updateRdoBtn(form, crtname, calname) {
			var crtkey = "";
			var chosenday = HolList.getCalList(Now)[(form[calname].selectedIndex)];
			for (var i=0; i<form[crtname].length; i++) {
				crtkey = form[crtname][i].value;
				form[crtname][i].disabled = !window[crtname][crtkey].isAvailable(chosenday);
				alert(form[crtname][i].disabled);
			}
		}
		/*
		function gotoList(form, crtname, calname, eng) {
			var crtkey = "";
			var calidx = -1;
			for (var i=0; i<form[crtname].length; i++) {
				if (form[crtname][i].checked) {
					crtkey = form[crtname][i].value;
					break;
				}
			}
			calidx = form[calname].selectedIndex;
			var url = window[crtname][crtkey].getListURL(HolList.getCalList(Now)[calidx], eng);
			//alert(url);
			window.open(url, "dailylist","width=760,height=500,status=no,menubar=yes,toolbar=yes,resizable=yes,scrollbars=yes");
			//alert(url);
		}
		*/
		function gotoList(formname, crtgrpname, crtkey, calname, eng) {
			//var form = window[formname];
			var form = document[formname]; 
			var calidx = form[calname].selectedIndex;
			//var calidx = form.MainCourtCal.selectedIndex;
			var url = window[crtgrpname][crtkey].getListURL(HolList.getCalList(Now)[calidx], eng);

			var width = screen.width-40;
			var height = screen.height-150;
			/*alert(crtgrpname);
			alert(crtkey);
			alert(calidx);
			alert(url); */
			window.open(url, "dailylist","width="+width+",height="+height+",top=0,left=0,status=no,menubar=yes,toolbar=yes,resizable=yes,scrollbars=yes");
		}
		
/*********************** Definition of HolidayList Object ***********************/
		function HolidayList (startday, endday, aryholidays) {
			this.startday = normalizeDate(startday);
			this.endday = normalizeDate(endday);
			this.aryh = aryholidays;
			this.holidays = new Object();
			for (var i=0; i<this.aryh.length; i++) {
				this.aryh[i] = normalizeDate(this.aryh[i]);
				this.holidays[daykey(this.aryh[i])] = true;
			}
		}
	
		HolidayList.prototype.isHoliday = function(day) {
			// if (day.getDay()==0) return true;							// Sunday
			if (this.holidays[daykey(day)]) return true;		// a holiday
			return false;					// not a holiday
		}
		
		HolidayList.prototype.getWrkDayList = function(startday, length) {
			var day = normalizeDate(startday);
			if (day.getTime()<this.startday.getTime()) return null;
			if (day.getTime()>this.endday.getTime()) return null;
			var result = new Array();
			for (var i=0; i<length; ) {
				if (day.getTime() > this.endday.getTime()) break;
				if (!this.isHoliday(day)) result[i++] = day;
				day = tomorrow(day);
			}
			return result;															
		}
		
		HolidayList.prototype.getCalList = function(now) {
			var today = normalizeDate(now);
			if (today.getTime()<this.startday.getTime()) return null;
			if (today.getTime()>this.endday.getTime()) return null;
			var result = new Array();
			var day = today;
			var tmp = yesterday(day);
			var i = 0;
			while ((i<3) && (tmp.getTime()>=this.startday.getTime())) {
				if (!this.isHoliday(tmp)) {
					day = tmp;
					i++;
				}
				tmp = yesterday(tmp);
			}
			result = this.getWrkDayList(day, 4+i);
			//while (this.isHoliday(day)) day=yesterday(day);
			//if (day.getTime() >= this.startday.getTime()) result[result.length] = day;
			//result = result.concat(this.getWrkDayList(today, 4));
/*															for (var i=0; i<4; ) {
				day = tomorrow(day);
				if (day.getTime() > this.endday.getTime()) break;
				if (!this.isHoliday(day)) {
					result[result.length] = day;
					i++;
				}
			}		*/
			return result;															
		}
														
/******************************* Court List *************************************/
/*			
			key = key string of the court
			name = the full name of the court
			cname = the traditional Chinese full name of the court
			img = the path of the image of the court
			hldlist = holiday list defining holidays
			avlvtrstr = availability vector start date
			avlvtr = availability vector
*/
		function Court(key, name, cname, img, hldlist, avlvtrstr, avlvtr) {
			this.key = key;
			this.name = name;
			this.cname=cname;
			this.img = img;
			this.hldlist = hldlist;
			this.avlvtrstr = avlvtrstr
			this.avlvtr = avlvtr
			this.avldatevtr = this.hldlist.getWrkDayList(this.avlvtrstr, this.avlvtr.length);
			if (this.avlvtr.length < this.avldatevtr.length) avlvtr.length = avldatevtr.length;
			this.available = new Object();
			for (var i=0; i<avlvtr.length; i++)
				if (avlvtr[i])
					this.available[daykey(this.avldatevtr[i])] = true;
		}
		
		Court.prototype.getAvailDateVtr = function() { return this.avldatevtr; }
															
		Court.prototype.getAvailVtr = function() { return avlvtr; }
		
		Court.prototype.isAvailable = function(day) {
				if (this.available[daykey(day)]) return true;
					return false;
				}
												


		Court.prototype.getListURL = function(day, eng) {
				if (!this.isAvailable(day)) 
					if (eng == "en") {
						return "ny_available.html";
					} else {
						return "../../en/crt_lists/ny_available.html";
					}
				// return "hc-10022003.html";
/*													return "http://www.info.gov.hk/jud/dailylist/html/"
				+this.key+'/'+daykey(day)+"-"+(eng?"en":"tc")+".html";		*/
				//if (eng == "en") {
					//return "lists/"+listdaykey(day)+'/'+this.key+".html";
				//} else {
					//alert("http"+"://"+www0.info.gov.hk/jud/ver2003/en/crt_lists/lists/"+listdaykey(day)+'/'+this.key+".htm");					
					var urlforward='';
					if (window.location.href.indexOf('test')>=0){
						urlforward="http"+":"+"/"+"/"+"www0.judiciary.gov.hk";
					}else if (window.location.href.indexOf('www0')>=0){
						urlforward="http"+":"+"/"+"/"+"www0.judiciary.gov.hk";
					}else{
					        urlforward="http"+":"+"/"+"/"+"www.judiciary.gov.hk";
					}
					if (this.key == "wtnmag"){
						return urlforward+"/en/crt_lists/lists/"+listdaykey(day)+'/'+ "allmag" +".html";
					}
					else{
						return urlforward+"/en/crt_lists/lists/"+listdaykey(day)+'/'+this.key+".html";
					}
					
				//}
			}

//*************************Warned List********************/
/*
   Define new functions genWarnedList() and gotoWarnedList() for enabling the dynamic behaviour
   for showing Warned List
*/
function genWarnedList(court, thisweek, eng)
{
    var s

    s = "<a href='javascript:gotoWarnedList(\""+court+"\", "+thisweek+", "+ eng+")' >"
    if ( eng ) 
    {
        if ( thisweek )
        {
            s = s + "This week"
        }
        else
        {
            s = s + "Next week"
        }
    }
    else
    { 
        if ( thisweek )
        {
            s = s + "本週"
        }
        else
        {
            s = s + "下週"
        }        
    }
    s = s + "</a>"

    document.write(s)
}
function warnedlistdaykey(t){
 
  var d = t;
  var year = d.getFullYear();
  var month = String(parseFloat(d.getMonth()+1));
  if (month.length == 1)
      month = "0"+month;
  var day = String(d.getDate());
  if (day.length == 1) 
      day = "0"+day;
  var hr =  String(d.getHours());
  if (hr.length == 1)    
      hr = "0"+hr;
  var min = String(d.getMinutes());
  if (min.length == 1)    
      min = "0"+min;

  return day+month+year;
 

}
function gotoWarnedList(court, thisweek, eng) 
{
       var t = new Date()
       var lan="tc";

        if ( thisweek )
        {
	    t.setDate(t.getDate() - t.getDay() + 1)
        }
        else
        {
	    t.setDate(t.getDate() - t.getDay() + 8)
        }
        if (eng)lan="en";

	var url = "../../en/crt_lists/wl/" + warnedlistdaykey(t) + "/" + court + ".htm";
	
	
	var width = screen.width-40;
	var height = screen.height-150;
	

	window.open(url, "warnedlist","width="+width+",height="+height+",top=0,left=0,status=no,menubar=yes,toolbar=yes,resizable=yes,scrollbars=yes");
}

