function daysInMonth(month, year) 
{
    return new Date(year, month, 0).getDate();
}

// zona tooltip
function getTooltip(purl,flag) 
{

	if(flag=='on'){
	$.ajax({
		   url: purl,
		   success: function(data) 
		   {
			   if(data!=''){
				   var arrayParms = new Array();   
    	     	   arrayParms = purl.split("&");  
        	       arrayId = arrayParms[3].split("=");  

				   var position=$('#'+arrayId[1]).position();
			       var tPosX=(position.left-18);
				   var tPosY=position.top;
			  
				   $("#tooltipWrapper").fadeIn(500);
				   $("#tooltipWrapper").html(data);
				   var toolHeight=$(".tooltipStyle").height();
				   $(".tooltipStyle").css({left: tPosX+"px", top:(tPosY-toolHeight-10)+"px"});
			   }
		}
   }); 
  }
  else{
		var arrayParms = new Array();   
		arrayParms = purl.split("&");  
		arrayId = arrayParms[3].split("=");  
		
		var position=$('#'+arrayId[1]).position();
		var tPosX=(position.left-18);
		var tPosY=position.top;
		
		$("#tooltipWrapper").fadeOut(500);
  }
};



//###############################################################################
//validar se existem eventos para um dado dia
function getDaysEvents(day,purl){
  $.ajax({
		   url: purl,
		   success: function(data){ 
		   		if(data!='')
					$("#day"+day).addClass('agendaDia');
			}
		  });
}




jQuery.fn.calendarPicker = function(options) {
  // --------------------------  start default option values --------------------------
  if (!options.date) {
    options.date = new Date();
  }

  if (typeof(options.years) == "undefined")
    options.years=1;

  if (typeof(options.months) == "undefined")
    options.months=3;

  if (typeof(options.days) == "undefined")
    options.days=4;

  if (typeof(options.showDayArrows) == "undefined")
    options.showDayArrows=true;

  if (typeof(options.useWheel) == "undefined")
    options.useWheel=true;

  if (typeof(options.callbackDelay) == "undefined")
    options.callbackDelay=500;
  
  if (typeof(options.monthNames) == "undefined")
    options.monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];

  
  if (typeof(options.dayNames) == "undefined")
    options.dayNames = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"];
  

  // --------------------------  end default option values --------------------------

  var calendar = {currentDate: options.date};
  calendar.options = options;

  //build the calendar on the first element in the set of matched elements.
  var theDiv = this.eq(0);//$(this);
  theDiv.addClass("calBox");

  //empty the div
  theDiv.empty();

  var divDays = $("<div>").addClass("calDay");
  var divMonths = $("<div>").addClass("calMonth");
  var divYears = $("<div>").addClass("calYear");
  
  //theDiv.append(divDays).append(divMonths).append(divYears);
  theDiv.append(divDays).append(divMonths);

  calendar.changeDate = function(date)
  {
     calendar.currentDate = date;

     var fillYears = function(date) 
     {
       var year = date.getFullYear();
       var t = new Date();
       divYears.empty();
       var nc = options.years*2+1;
       var w = parseInt((theDiv.width()-4-(nc)*4)/nc)+"px";
       for (var i = year - options.years; i <= year + options.years; i++) 
       {
         var d = new Date(date);
         d.setFullYear(i);
         var span = $("<span>").addClass("calElement").attr("millis", d.getTime()).html(i).css("width",w);
         if (d.getYear() == t.getYear())
           span.addClass("today");
         if (d.getYear() == calendar.currentDate.getYear())
           span.addClass("selected");
         divYears.append(span);
        }
      }

      var fillMonths = function(date) 
      {
        var month = date.getMonth();
        var t = new Date();
        divMonths.empty();
        var oldday = date.getDay();
        var nc = options.months*2+1;
        var w="auto";
        for (var i = -options.months; i <= options.months; i++) 
        {
          var d = new Date(date);
          var oldday = d.getDate();
          d.setMonth(month + i);

          if (d.getDate() != oldday) 
          {
            d.setMonth(d.getMonth() - 1);
            d.setDate(28);
          }
          var span = $("<span >").addClass("calMes pLeft5 pRight5").attr("millis", d.getTime()).html(options.monthNames[d.getMonth()]).css("width",w);
         
          if (d.getYear() == t.getYear() && d.getMonth() == t.getMonth())
            span.addClass("today");
          if (d.getYear() == calendar.currentDate.getYear() && d.getMonth() == calendar.currentDate.getMonth())
            span.addClass("selected");
          divMonths.append(span);

        }
     }

     var fillDays = function(date) 
     {
       var day = date.getDate();
       var t = new Date();
       divDays.empty();
       var nc = options.days*2+1;
       
        
             
       var w = parseInt((theDiv.width()-4-(options.showDayArrows?12:0)-(nc)*4)/(nc-(options.showDayArrows?2:0)))+"px";
       for (var i = 1; i <= daysInMonth((date.getMonth()+1), date.getYear()); i++) 
       {
         var d = new Date(date);
         d.setDate(i)
         var data_dia=d.getDate();
         if(data_dia<10) data_dia='0'+data_dia;
         
         var data_mes=d.getMonth()+1;
         if(data_mes<10) data_mes='0'+data_mes;
         
         var data_amd=d.getFullYear()+'-'+data_mes+'-'+data_dia;
         var span = $("<span>").addClass("calElement").attr("millis", d.getTime())
           

	span.html("<span class=dayNumber id=day"+d.getDate()+" onmouseover=getTooltip('?action=3&op=19&dt="+data_amd+"&id=day"+d.getDate()+"','on') onmouseout=getTooltip('?action=3&op=19&dt="+data_amd+"&id=day"+d.getDate()+"','off')>" + d.getDate() + "</span>").css("width",w);
		 
         if (d.getYear() == t.getYear() && d.getMonth() == t.getMonth() && d.getDate() == t.getDate())
             span.addClass("today");
	  else
		getDaysEvents(d.getDate(),'?action=3&op=19&dt='+data_amd+'&id=day'+d.getDate());   

         if (d.getYear() == calendar.currentDate.getYear() && d.getMonth() == calendar.currentDate.getMonth() && d.getDate() == calendar.currentDate.getDate())
             span.addClass("selected");
			 
         
         divDays.append(span);

       }
     }

     var deferredCallBack = function() 
     {
      if (typeof(options.callback) == "function") 
      {
        if (calendar.timer)
          clearTimeout(calendar.timer);

        calendar.timer = setTimeout(function() 
        {
           options.callback(calendar);
        }, options.callbackDelay);
      }
     }


    fillYears(date);
    fillMonths(date);
    fillDays(date);

    deferredCallBack();

  }

  theDiv.click(function(ev) {
    var el = $(ev.target).closest(".calElement");
    if (el.hasClass("calElement")) {
      calendar.changeDate(new Date(parseInt(el.attr("millis"))));
    }
  });

  theDiv.click(function(ev) {
    var el = $(ev.target).closest(".calMes");
    if (el.hasClass("calMes")) {
      calendar.changeDate(new Date(parseInt(el.attr("millis"))));
    }
  });
  
  calendar.changeDate(options.date);

  return calendar;
};
