/*************************************************
class: calendar (+myDate) 
modified: 2005.01.14
project: Moon 1.0
author: Audrius Naslenas, audrius@metasite.net
All rights reserved
*************************************************/

function calendar_content()
{
	var week_days=Array();
	week_days['lt'] = ["Pi", "An", "Tr", "Ke", "Pn", "Še","Se"];
	week_days['en'] = ["Mo", "Tu", "We", "Th", "Fr", "Sa","Su"];
	var arr_months=new Array;
	arr_months['lt'] = ["Sausis", "Vasaris", "Kovas", "Balandis", "Gegužė", "Birželis",
						"Liepa", "Rugpjūtis", "Rugsėjis", "Spalis", "Lapkritis", "Gruodis"];
	arr_months['en'] = ["January", "February", "March", "April", "May", "June",
						"July", "August", "September", "October", "November", "December"];
	
	var sel_years=this.draw_years();
	var sel_months=this.draw_months();
	var current_obj=this.str2date(this.current_date);
	current_obj.setDay(1);
	var d1=current_obj.getWday();
	if (d1==0) d1=7;
	d1--;
	var d2=current_obj.getMdays();
	var num_weeks=Math.ceil((d2+d1)/7);//kiek savaiciu
	//ar galioja reziai ir aktyvios dienos nustatymas	
	var out='';
	var tday=this.str2date(this.siandien);
	var dt=-100;
	if ( tday.getYear()==current_obj.getYear() && tday.getMonth()==current_obj.getMonth() ) dt=tday.getDay();
	//from
	tday=this.str2date(this.start_date);
	var dfrom=-100;
	if ( tday.getYear()==current_obj.getYear() && tday.getMonth()==current_obj.getMonth() ) dfrom=tday.getDay();
	//to
	tday=this.str2date(this.end_date);
	var dto=100;
	if ( tday.getYear()==current_obj.getYear() && tday.getMonth()==current_obj.getMonth() ) dto=tday.getDay();
		//out=this.start_date+' '+dto;
	
	out+='<form name="forma'+this.objname+'" style="margin:0;">';
	if (this.onTop) {
		out+='<div class=cal_nav>'+sel_years+sel_months+'</div>';
	}
	out+='<table cellspacing=0 cellpading=0 border=0 class="cal_table">\n';
	out+='<tr align="center"><td colspan='+(this.horizontal ? 7:(num_weeks+1))+' class="cal_head">\n';
	out+=current_obj.getYear()+' '+arr_months[this.lang][current_obj.getMonth()-1];
	out+='</td></tr>\n';
	var diena=0;
	
	var style='cal_weekend';
	var style2='cal_wnames';
	if (this.is_over_weekend('wnames')) {
		style='cal_wnames';
		style2='cal_weekend';
	}
	if (this.horizontal){
		out+='<tr align="right">';
		for(var i=0;i<7;i++) {
			if (i>4) out+='<td  class='+style+'><div class='+style2+'>'+week_days[this.lang][i]+'</div></td>';
			else  out+='<td  class="cal_wnames">'+week_days[this.lang][i]+'</td>';
		}
		out+='</tr>\n';
		for (i=0;i<num_weeks;i++){
			out+='<tr align="right">';
			for (var j=1;j<=7;j++) out+=this.draw_cell(current_obj,7*i+j-d1,dt,j,dfrom,dto);
		    out+='</tr>';
		}
	}else{
		for (i=0;i<7;i++){
			out+='<tr align="right">';
			if (i>4) out+='<td  class='+style+'><div class='+style2+'>'+week_days[this.lang][i]+'</div></td>';
			else  out+='<td  class="cal_wnames">'+week_days[this.lang][i]+'</td>';
			
			//out+='<td  class="cal_wnames">'+(i>4 ? "<div class=cal_holiday>":"")+week_days[this.lang][i]+(i>4 ? "</div>":"")+'</td>';
			for (var j=0;j<num_weeks;j++) out+=this.draw_cell(current_obj,7*j+i+1-d1,dt,i+1,dfrom,dto);
		    out+='</tr>';
		}
	}
	out+='</table>';
	if (!this.onTop) {
		out+='<div class=copy style="margin-top:3px;">'+(lang=='en' ? 'Change year and month:':'Keiskite metus ir mėnesį:')+'</div>'
		out+='<div class=cal_nav>'+sel_years+sel_months+'</div>';
	}
	out+='</form>';
	return out;
}
function calendar_draw_cell(sismenuo,diena,arsiandien,wDay,arfrom,arto){
	var lastDay=sismenuo.getMdays();
	sismenuo.setDay(diena);
			
	var style="cal_day";
	var tipas="out"; //siam men nepriklauso
	
	var out='';
	if (diena>0 && diena<=lastDay) {
		if (diena==arsiandien) style="cal_currentday";
		tipas='day';
		if (diena==arsiandien) tipas="currentday";
		out=''+(diena<10 ? '&nbsp;':'')+diena;
		diena=1*diena;
	} else out='&nbsp;';
	
	style='cal_'+tipas;
	if (wDay>5) {
		var style2=style
		if (this.is_over_weekend(tipas)) style2='cal_weekend';
		else style='cal_weekend';//pirma weekend
		out='<div class="'+style2+'">'+out+'</div>';
	}
		
	if (diena>=1 && diena<=lastDay && arfrom<=diena && arto>=diena) {
		out='<a href="javascript:'+this.objname+'.diena(\''+diena+'\')" class='+style+'>'+out+'</a>';
	}
	out='<td class="'+style+'">'+out+'</td>';
	return out;
}
function calendar_draw_years(){
	var nuo_obj=this.str2date(this.start_date);
	var iki_obj=this.str2date(this.end_date);
	var current_obj=this.str2date(this.current_date);
	var y1=nuo_obj.getYear();
	var y2=iki_obj.getYear();
	var yc=current_obj.getYear();
	if (y1>y2){
		y1=y2;
		this.start_date=iki_obj.show();
	}
	if (yc<y1) {
		yc=y1;
		this.current_date=nuo_obj.show();
	}
	if (yc>y2) {
		yc=y2;
		this.current_date=iki_obj.show();
	}
	var out='';
	out+='<select name="y" onChange="'+this.objname+'.keiciasi();" class="cal_input">\n';
	for (var i=y1;i<=y2;i++){
		out+='<option value="'+i+'"'+(i==yc ? ' SELECTED':'')+' class=opt>'+i+'</option>\n';
	}
	out+='</select>\n';
	return out;
}
function calendar_draw_months(){
	var arr_months=new Array;
	arr_months['lt'] = ["Sausis", "Vasaris", "Kovas", "Balandis", "Gegužė", "Birželis",
						"Liepa", "Rugpjūtis", "Rugsėjis", "Spalis", "Lapkritis", "Gruodis"];
	arr_months['en'] = ["January", "February", "March", "April", "May", "June",
						"July", "August", "September", "October", "November", "December"];

	var nuo_obj=this.str2date(this.start_date);
	var iki_obj=this.str2date(this.end_date);
	var current_obj=this.str2date(this.current_date);
	var y1=nuo_obj.getYear();
	var y2=iki_obj.getYear();
	var yc=current_obj.getYear();
	var m1,m2,mc;
	mc=current_obj.getMonth();
	m1=1;m2=12;
	if (y1==yc){
		m1=nuo_obj.getMonth();
		if (mc<m1){
			mc=m1;
			this.current_date=nuo_obj.show();
		}
	}
	if (y2==yc){
		m2=iki_obj.getMonth();
		if (mc>m2){
			mc=m2;
			this.current_date=iki_obj.show();
		}
	}
	//alert(m1);
	var out='';
	out+='<select name="m" onChange="'+this.objname+'.keiciasi();" class="cal_input">\n';
	for (var i=m1;i<=m2;i++){
		out+='<option value="'+(i)+'"'+(i==mc ? ' SELECTED':'')+'>'+arr_months[this.lang][i-1]+'</option>\n';
	}
	out+='</select>\n';
	return out;
}

function calendar_is_over_weekend(tipas)
{
	if (tipas=='wnames') return false;
	else if (tipas=='day') return false;
	else if (tipas=='currentday') return true;
	else if (tipas=='out') return false;
	else return true;
}

function calendar_str2date(stamp){
	  var re_date = /^(\d+)\.(\d+)\.(\d+)$/;
      if (!re_date.exec(stamp))
              return alert("Blogas datos formatas: "+ stamp);
      return (new myDate (RegExp.$1, RegExp.$2, RegExp.$3));
}

function calendar_redraw(){
	var desc=this.content();
	var myobj;
	if(this.ns4) {
		eval("myobj=document."+this.divid);
		myobj.document.write(desc);
		myobj.document.close();
		myobj.visibility="show";
	}else if (this.ns6){
		myobj=document.getElementById(this.divid);
		myobj.innerHTML=desc;
		myobj.style.visibility="visible";
	}else{
		eval("myobj="+this.divid);
		myobj.innerHTML=desc;
		myobj.style.visibility="visible";
	 }
}


function calendar_init(lang,divid){//inicializacija
	if (divid==null) divid="divcalendar";
	this.divid=divid;
	if (lang==null) lang="lt";
	this.lang=lang;
	var ns4=(document.layers)? true:false;
	var ns6=(document.getElementById)? true:false;
	var ie4=(document.all)? true:false;
	var ie5=false;
	if(ie4){
		if(navigator.userAgent.indexOf('MSIE 5')>0 || navigator.userAgent.indexOf('MSIE 6')>0){		ie5=true;	}
		if(ns6){ns6=false;}
	}
	this.ns4=ns4;
	this.ns6=ns6;
}
function calendar_keiciasi(){
	var forma;
	if (this.ns4) eval("forma=document."+this.divid+".document.forma"+this.objname);
	else  eval("forma=document.forma"+this.objname);
	var y=forma.y.options[forma.y.selectedIndex].value;
	var m=forma.m.options[forma.m.selectedIndex].value;
	this.current_date=y+"."+m+".01";
	this.redraw();
}
function calendar_diena(d){
	var forma;
	if (this.ns4) eval("forma=document."+this.divid+".document.forma"+this.objname);
	else  eval("forma=document.forma"+this.objname);
	var y=forma.y.options[forma.y.selectedIndex].value;
	var m=forma.m.options[forma.m.selectedIndex].value;
	var day=new myDate(y,m,d);
	if (this.function_out.length) eval(this.function_out+"('"+day.show()+"');")
	else alert(day.show());
}
function calendar_display(){
	if (this.ns4){
		document.write('<layer name="'+this.divid+'">')
		document.write(this.content())
		document.write('&nbsp;</layer>')
	}else{
		document.write('<div ID="'+this.divid+'" style="position:relative;z-index:2">&nbsp;</div>');
		document.close();
		this.redraw();
	}
}

function calendar_from_to(nuo,iki){
	this.start_date=nuo;
	this.end_date=iki;
}
function calendar_now(dabar){
	this.current_date=dabar;
	this.siandien=dabar;
}
function calendar_vertical(){
	this.horizontal=false;
}
function calendar_waiting_function(name){
	this.function_out=name;
}

function calendar(objname){
	//properciai
	this.objname=objname;
	this.divid='';
	this.ns4=false;
	this.ns6=false;
	this.start_date='';
	this.end_date='';
	this.current_date='';
	this.siandien='';//issaugoma data
	this.lang='lt';
	this.horizontal=true;
	this.function_out='';//kokiai funkcijai atiduoti outputa
	//metodai
	this.init=calendar_init;
	this.display=calendar_display;
	this.from_to=calendar_from_to;
	this.now=calendar_now;
	this.vertical=calendar_vertical;
	this.waiting_function=calendar_waiting_function;
	
	this.content=calendar_content;
	this.redraw=calendar_redraw;
	this.str2date=calendar_str2date;
	this.keiciasi=calendar_keiciasi;
	this.diena=calendar_diena;
	
	this.draw_cell=calendar_draw_cell;
	this.draw_months=calendar_draw_months;
	this.draw_years=calendar_draw_years;
	this.is_over_weekend=calendar_is_over_weekend;
	
	this.onTop=false;
}




function myDate(y,m,d){
	//properties
	this.year=0;
	this.month=0;
	this.day=0;
	
	//methods definitions
	function myDate_setYear(y){
		this.year=parseInt(y,10);
	}
	function myDate_setMonth(m){
		this.month=parseInt(m,10);
	}
	function myDate_setDay(d){
		this.day=parseInt(d,10);
	}
	function myDate_getYear(){
		return(this.year);
	}
	function myDate_getMonth(){
		return(this.month);
	}
	function myDate_getDay(){
		return(this.day);
	}
	function myDate_getWday(){
		var M=(this.month>2 ? (this.month-2):(this.month+10)) ;
		var c=Math.floor(this.year/100);
		var Y=this.year % 100;
		if (this.month<=2) Y-- ;
		var s=this.day+Math.floor( (13*M-1)/5 )+Y+Math.floor(c/4)+Math.floor(Y/4)-2*c;
		s=s % 7;
		if (s<0) s+=7;
		return s;
	}
	function myDate_show() {
        var month = this.getMonth();
        if (month < 10) month = new String ("0" + month);
        var date = (this.getDay());
        if (date < 10) date = new String ("0" + date);
        return (new String ( this.getYear() + "."+month+"."+date));
	}
	function myDate_getMdays() {
        var s =( ( Math.floor(this.month+this.month/8) % 2 ) ? 31:30);
		if (this.month==2){
			var Y=this.year;
			if (Y % 400==0 || ((Y % 4==0) && (Y % 100)) ) s=29;
			else s=28;
		}
        return s;
	}
	
	//methods
	this.setYear=myDate_setYear;
	this.setMonth=myDate_setMonth;
	this.setDay=myDate_setDay;
	this.getYear=myDate_getYear;
	this.getMonth=myDate_getMonth;
	this.getDay=myDate_getDay;
	this.getWday=myDate_getWday;
	this.getMdays=myDate_getMdays;
	this.show=myDate_show;
	
	//kontructor
	this.setYear(y);
	this.setMonth(m);
	this.setDay(d);
}

