var cal_rows,cal_st,cal_timeout,cal_id;
cal_id="";

function cal_Setup(cObj){
 if(cObj.parentNode.id){
  var pObj=cObj.parentNode;
  var oldcal_id=cal_id;
  var newcal_id=pObj.id.split("_")[1];
  if(oldcal_id!=newcal_id)cal_hs(0);  //HIDE VISIBLE CALENDARS
  cal_id=newcal_id;
  if(cal_timeout)clearTimeout(cal_timeout);
  
  //SET IDS
  //if(pObj.childNodes[0].id==""){
   pObj.childNodes[0].id="date_"+cal_id;
   pObj.childNodes[0].name="date_"+cal_id;
   pObj.childNodes[1].id="calimg_"+cal_id;
   pObj.childNodes[2].id=cal_id;
  //}

  //SHOW/HIDE CALENDAR
  if(getStyle(cal_id)){
   if(getStyle(cal_id).display!="block"){
    var tObj=cal_targetDate();
    cal_Create(tObj,tObj);
   }else{
    cal_hs(0);
   }
  }
 }
}
function cal_Create(dObj,sObj){
 if(isDate(dObj) && isDate(sObj)){
  var t=dObj.dateProperties();
  var dayoneObj=new Date(t.year,t.month-1,1);
  var dayone=dayoneObj.dateProperties().dow;
  var startcol=(dayone==7)?0:dayone;
  var prev=dateAdd("m",-1,dObj).dateProperties();
  var next=dateAdd("m",1,dObj).dateProperties();
  var prefix=0;
  cal_rows=0;

  //HEADER
  cal_st='<div class="cal_innerDiv" onmouseout="cal_hsTimeout(0)" onmouseover="cal_hsTimeout(1)"><table class="cal_outerTbl">';
  cal_st+='<thead><tr><th class="prev" onclick="cal_getNextPrev('+prev.year+','+prev.month+')"><img src="graphics/arrow_left.gif" alt="" /></th><th><select id="cal_select'+cal_id+'" size="1" onchange="cal_selectCal(this)">';
  
  var nObj=new Date();
  for(var i=-2;i<18;i++){
   var aObj=dateAdd("m",i,nObj);
   cal_st+='<option value="'+aObj.formatDate("m_yyyy")+'">'+aObj.formatDate("mmmm yyyy")+'</option>';
  }
  
  cal_st+='</select></th><th class="next" onclick="cal_getNextPrev('+next.year+','+next.month+')"><img src="graphics/arrow_right.gif" alt="" /></th></tr></thead><tbody><tr><td colspan="3">';

  //CALENDAR DOW
  cal_st+='<table class="cal_Tbl"><thead><tr>';
  for(var i=0; i<dys.length; i++)cal_st+='<th>'+ds[i]+'</th>';
  cal_st+='</tr></thead><tbody>';

  //CALENDAR DAYS
  for(var i=0; i<t.dim; i++){
   if(cal_rows==0)cal_st+='<tr>';
   if(!prefix++)cal_blankDays(0,startcol,new Date(t.year,t.month-2,1));
    cal_st+='<td><a href="javascript:void(0)" onclick="cal_setDate('+t.year+','+t.month+','+(i+1)+')"'+((sObj.compareDates(new Date(t.year,t.month-1,i+1))==0)?' class="thisdate"':'')+'>'+(i+1)+'</a></td>';
   if(++cal_rows>6){
    cal_st+='</tr>';
    cal_rows=0;
   }
  }
  if(cal_rows!=0)cal_blankDays(cal_rows,7,new Date(t.year,t.month,1));
  
  //CALENDAR FOOTER
  cal_st+='</tr></tbody></table></td></tbody>';
  cal_st+='<tfoot><tr><td colspan="3"><a href="javascript:cal_hs(0)">close calendar</a></td></tr></tfoot>';
  getObject(cal_id).innerHTML=cal_st+'</table></div>';
  setSelect('cal_select'+cal_id,dObj.formatDate("m_yyyy"));
  cal_hs(1);
 }
}
function cal_getNextPrev(y,m){
 if(inSelect('cal_select'+cal_id,m+'_'+y)){
  cal_Create(new Date(y,m-1,1), cal_targetDate());
 }
}
function cal_targetDate(){
 var datecal=getObject('date_'+cal_id).value;
 var sObj=new Date();
 if(datecal){
  var dObj=isDateString(datecal);
  if(dObj[0])sObj=dObj[1];
 }
 return sObj;
}
function cal_selectCal(sObj){
 var a=ddv(sObj.id).split("_");
 if(a.length==2){
  cal_getNextPrev(a[1],a[0]);
 }
}
function cal_blankDays(s,e,dObj){
 var t=dObj.dateProperties();
 for(var j=s; j<e; j++){
  var v=(!s)?(t.dim-(e-j-1)):(j-s+1);
  cal_st+='<td><a href="javascript:void(0)" onclick="cal_setDate('+t.year+','+t.month+','+v+')" class="blank">'+v+'</a></td>';
  cal_rows++;
 }
}
function cal_setDate(y,m,d){
 var dObj=new Date(y,m-1,d);
 if(isDate(dObj)){
  getObject('date_'+cal_id).value=dObj.formatDate("d/m/yyyy");
  cal_hs(0);
 }
}
function cal_hs(f){
 getStyle(cal_id).display=(f)?'block':'none';
}
function cal_hsTimeout(f){
 if(cal_timeout)clearTimeout(cal_timeout);
 if(!f)cal_timeout=setTimeout("cal_hs(0)",2000);
}
