//Extended jcalendar
(function( $ ){
	$.fn.pfscalendar = function(options) {		
		var _de = {				 					
					day:0,
					numberweek:4,
					date:new Date(),
					text:"Date",
					onsave:function(data){},
					cssclass: "",
					weekformat:"long",
					highlightdate:null
				  };	
		if (options) {						
			$.extend(_de, options);			
		}
		
		var head = $("head").html();
		if(!head.indexOf('jquery-ui-1.8.14.custom.css')>-1){
			try{
				//$("head").append("<link href='" + app.URLs.css + "' type='text/css' rel='stylesheet'/>")	
			}catch(e){}
		}
		var isIE = navigator.appName.indexOf("Microsoft")> -1;		
		_de["numberweek"] -=1;
		Array.prototype.exists = function(search){
			  for (var i=0; i<this.length; i++)
			    if (this[i] == search) return true;					
			  return false;
		} 
		
		//set input text to hidden
		$(this).css({"visibility":"hidden","width":"1px"})

			
		var onchange = function(year, month, inst) { 
			$.fn.pfscalendar.month = month-1;
			$.fn.pfscalendar.year = year;
		}
		var onrendered = function(dateText, inst) {
			try{$.fn.pfscalendar.construct();}catch(e){}			
			try{var previous = $.fn.pfscalendar.widget.find(".ui-datepicker-prev");	 				 			
	 			if($.fn.pfscalendar.isstartdate){previous.addClass("ui-datepicker-prev-disabled");$.fn.pfscalendar.isstartdate=false;}else{previous.removeClass("ui-datepicker-prev-disabled")};	 			 
			}catch(e){}
			try{
				var next =  $.fn.pfscalendar.widget.find(".ui-datepicker-next");
				if($.fn.pfscalendar.isenddate){next.addClass("ui-datepicker-next-disabled");$.fn.pfscalendar.isenddate=false;}else{next.removeClass("ui-datepicker-next-disabled")};
			}catch(e){}			
		}
		var onSelect= function(dateText, inst) {}
		var onClose = function(dateText, inst) {countweeks=0;
			var date =  new Date(dateText);
			if(!dateText){date=_de["date"];}
			
			$.fn.pfscalendar.month = date.getMonth();
			$.fn.pfscalendar.year = date.getFullYear();	
						
			$.fn.pfscalendar.widget.parent().css("display","none");
		}		
		var onbeforeShow= function(input, inst) {
			$.fn.pfscalendar.mainwrapper().parent().css("display","block");
		}
		
		//init calendar
		var calendar =$(this);		
		calendar.datepicker({onChangeMonthYear:onchange,
							 onSelect:onSelect,
							 onClose:onClose,
							 beforeShow:onbeforeShow,
							 onrendered:onrendered,
							 weekformat:_de["weekformat"]
							});
		
	  $.fn.pfscalendar.weekday= function(day){
			var weekday=new Array(7);
			weekday[0]="Sunday";
			weekday[1]="Monday";
			weekday[2]="Tuesday";
			weekday[3]="Wednesday";
			weekday[4]="Thursday";
			weekday[5]="Friday";
			weekday[6]="Saturday";
			
			return weekday[day];
			
		}
		$.fn.pfscalendar.calendar = calendar;
		var showOn = calendar.datepicker( "option", "showOn" );
		calendar.datepicker( "option", "showOn", 'both' );
		calendar.datepicker( "option", "weekHeader", 'Wk' );
		
		// set the selected date
		var _tmpdate = new Date(_de["date"].getFullYear(),_de["date"].getMonth() ,_de["date"].getDate());
		calendar.datepicker( "option", "defaultDate",_tmpdate);
		var currdate = calendar.datepicker( "option", "defaultDate" );
		var date = currdate;
		
		//_de["numberweek"]-=1;
		
		$.fn.pfscalendar.month = currdate.getMonth();
		$.fn.pfscalendar.year = currdate.getFullYear();
		var monthweek = new Array();
		$.fn.pfscalendar.widgetheight = 0;
		$.fn.pfscalendar.currdate=currdate;
		$.fn.pfscalendar.widget = calendar.datepicker("widget"); 
		$.fn.pfscalendar.isInit = false;
		$.fn.pfscalendar.selectedDate = null;
		$.fn.pfscalendar.orderID = $(this).attr("orderid");
		$.fn.pfscalendar.isstartdate = false;
		$.fn.pfscalendar.isenddate = false;
		$.fn.pfscalendar.button = null;
		
		calendar.datepicker("widget").css({"display":"none"})
		
		$.fn.pfscalendar.endDate=null;
		$.fn.pfscalendar.startDate=null;
		$.fn.pfscalendar.highlightdate = _de["highlightdate"];
		
		for(var i=0;i<=_de["numberweek"];i++){			 			 
			 if(i==0){
				 var nd = new Date(currdate.getFullYear(),currdate.getMonth(),currdate.getDate());				 
				  monthweek.push(nd.toDateString());
				  $(this).data("startDate",nd.toDateString());
			 }else{
				 var j = (i*7);
				 var _currdate= new Date(currdate.getFullYear(),currdate.getMonth(),currdate.getDate());
				 _currdate.setDate(_currdate.getDate() + j);
				 var _d_currdate = new Date(_currdate);				 				 				 
				 monthweek.push(_d_currdate.toDateString());
				 
				 // set the ending week
				 if(i==_de["numberweek"]){				 
					 $(this).data("endDate",_d_currdate.toDateString());
				 }
			 }
			 
			 
		 }
		 
		
		//$(this).data({widget:$.fn.pfscalendar.widget,currdate:currdate,month:currdate.getMonth(),year:currdate.getFullYear(),monthweek:monthweek,isInit:$.fn.pfscalendar.isInit});
		$(this).data("widget",$.fn.pfscalendar.widget)
		$(this).data("currdate",currdate)
		$(this).data("month",currdate.getMonth())
		$(this).data("year",currdate.getFullYear())
		$(this).data("monthweek",monthweek)
		$(this).data("isInit",$.fn.pfscalendar.isInit);
		$(this).data("orderid",$.fn.pfscalendar.orderID);
		$(this).data("selectedDate",$.fn.pfscalendar.selectedDate);
		$(this).data("button",null);
		$(this).data("isstartdate",false);
		$(this).data("isenddate",false);
		$(this).data("highlightdate",$.fn.pfscalendar.highlightdate);
		
		var inputelement = $(this)
		
		
		$.fn.pfscalendar.monthweek = monthweek		
		$(this).mouseup(function(){
			$.fn.pfscalendar.construct();			
		})
		
		
		
		
		//Button Build
		var button = $(this).next(".ui-datepicker-trigger");		 				 
		 button.text(_de["text"]);
		 button.attr("id","btn-calendar-" + this.attr("id"));
		 button.addClass("btn-calendar-" + this.attr("id"));
		 button.data("input_element",inputelement);
		 
		 if(_de["cssclass"]!=""){
			 button.addClass(_de["cssclass"])	 
		 }
		 
		 button.mouseup(function(){
			 //$.fn.pfscalendar.construct();
		 })
		 
		 
		 button.mousedown(function(){
			 var elem = $(this).data("input_element");
			 //alert(elem.attr("id"));
			 $.fn.pfscalendar.month = elem.data("month");
			 $.fn.pfscalendar.year  = elem.data("year");
			 $.fn.pfscalendar.monthweek = elem.data("monthweek");
			 $.fn.pfscalendar.currdate = elem.data("currdate");
			 $.fn.pfscalendar.widget = elem.data("widget");
			 $.fn.pfscalendar.isInit = elem.data("isInit");
			 $.fn.pfscalendar.orderID = elem.data("orderid");
			 
			 $.fn.pfscalendar.startDate=elem.data("startDate");
			 $.fn.pfscalendar.endDate=elem.data("endDate"); 
			 $.fn.pfscalendar.selectedDate = elem.data("selectedDate");	
			 $.fn.pfscalendar.isstartdate = elem.data("isstartdate");
			 $.fn.pfscalendar.isenddate = elem.data("isenddate");
			 $.fn.pfscalendar.highlightdate = elem.data("highlightdate");
			 
			 $(this).data("button",this);
			 $.fn.pfscalendar.button = this;
			 
			 //$.fn.pfscalendar.construct();		
		 })
		//extend prototype
		$.fn.pfscalendar.mainwrapper=function(){
			return calendar.datepicker("widget");
		}
		
		
		$.fn.pfscalendar.calculateweek=function(month,year){
			 // month_number is in the range 1..12
		    var firstOfMonth = new Date(year, month-1, 1);
		    var lastOfMonth = new Date(year, month, 0);

		    var used = firstOfMonth.getDay() + lastOfMonth.getDate();

		    return Math.ceil( used / 7);
		}
		
		$.fn.pfscalendar.construct=function(){
			
			var hd = new Date($.fn.pfscalendar.highlightdate.getFullYear(),$.fn.pfscalendar.highlightdate.getMonth()-1,$.fn.pfscalendar.highlightdate.getDate());
			
			var month = $.fn.pfscalendar.month; 
			var year = $.fn.pfscalendar.year;
			var tdbody = $.fn.pfscalendar.widget.find(".ui-datepicker-calendar");	
				var tr =tdbody.find("tr");
				jQuery.each(tr,function(i,e){
					var td = $(e).find("td");					
					 jQuery.each(td,function(j,e){						 						 
						 	var a = $(this).find("a");
						 	if (a.length>0){						 		
						 		if(j==0){
						 			$(this).addClass("ui-week-sun");
						 		}else if(j==6){
						 			$(this).addClass("ui-week-sat");
						 		}						 		
						 		
						 		var arr = $.fn.pfscalendar.monthweek;
						 		var _d =   new Date(year, month, a.text());
						 		var a_text = a.text();
						 		var aexist=false;
						 		
						 		//disable / enable the nex previous month
						 		var startDate = $.fn.pfscalendar.startDate;
								var endDate = $.fn.pfscalendar.endDate;
								
								if(hd.toDateString()==_d.toDateString()){
									jQuery(this).css('border','2px solid red');
								}
																
						 		if(endDate==_d.toDateString()){
						 			var next = $.fn.pfscalendar.widget.find(".ui-datepicker-next")
						 				next.removeAttr("onclick");
						 			    next.css("cursor","default");
						 			    $.fn.pfscalendar.isenddate = true;
						 		}
						 		
						 		if(startDate==_d.toDateString()){
						 			var previous = $.fn.pfscalendar.widget.find(".ui-datepicker-prev");
						 			previous.removeAttr("onclick");
						 			previous.css("cursor","default");
						 			$.fn.pfscalendar.isstartdate = true;
						 		}
						 		
						 		
						 		jQuery.each(arr,function(i,z){
						 			if (z==_d.toDateString()){						 				
						 				aexist=true;
						 				//alert(z + "    -    " + _d.toDateString())
						 				a.click(function(){
						 					var hl = tdbody.find(".ui-state-highlight");
						 					jQuery.each(hl,function(i,e){
						 						$(this).removeClass("ui-state-highlight");
						 						$(this).parent().removeClass("ui-state-highlight")
						 					})
						 					
						 					$.fn.pfscalendar.selectedDate = new Date(year,month,a_text);
						 					$(this).addClass("ui-state-highlight");
						 					$(this).parent().addClass("ui-state-highlight");
						 					return false;
						 				})
						 			}
						 		})
						 								 		
								var one_day=1000*60*60*24;
								var diff = parseInt(_d.getTime()- $.fn.pfscalendar.currdate.getTime())/(one_day);
								diff = parseInt(diff); 

								if(diff<0){	
									//alert(diff + " " + $.fn.pfscalendar.currdate + "  "  + _d.toDateString())
									//alert(diff +  "calendar date: " + _d.toDateString() + "curr date: " + $.fn.pfscalendar.currdate);
									aexist=false;
								}
								//alert(aexist + "  " + _d.toDateString() + " curr: " + $.fn.pfscalendar.currdate + "  diff: " + diff);						 		
						 		if(!aexist){
						 			 a.remove();
							 		 $(this).append("<label>" + a_text + "</label>")
							 		 $(this).unbind("click");
							 		 $(this).removeAttr("onclick");
							 		 $(this).addClass("disabled-date");
						 		}
						 	}						 						 
					 }) 					
				})
				
				
				 var widget = $.fn.pfscalendar.widget;

				 var wW = widget.outerWidth();
				 var hW = widget.outerHeight();
				 				 				 
				 var margin = tr.length==7? "-4px" : "11px" ;
				 if(widget.parent(".calendarWrapper").length==0){
					 var wrapper = widget.wrap("<div class='calendarWrapper'/>")
					    //"width":wW + "px","height":(hW + 40) + 'px',
						wrapper.css({"border":"solid 0px gray"})
					
						var buttom = $("<div class='calendarButtom' style='display: block;position:relative;'></div>")	
					 	buttom.append("<div class='selectafriday'>Please select any " +  $.fn.pfscalendar.weekday($.fn.pfscalendar.currdate.getDay()) +".</div>");														
						buttom.append("<button type='button'class='calendar-button-Save imagebutton autodelCalSave' style='float:right;margin:0 20px 0 10px;'>Save</button>");
					 	buttom.append("<button type='button' class='calendar-button-Cancel imagebutton autodelCalCancel' style='float:right;'>Cancel</button>");
					 	buttom.append("<div class='clear'></div>");
						widget.append(buttom);
											
						//$.fn.pfscalendar.widgetheight = hW;
						//var buttom_style = {"width":(wW-1) + "px","top": (parseInt(widget.css("top")) + hW) +"px","left": widget.css('left'), "position":"absolute","display":"block","height":"29px","z-index":1,"margin-top":"11px"}
						var buttom_style = {"width":(wW-1) + "px","height":"29px","z-index":1,"margin-top": margin}
						buttom.css(buttom_style)				
				 }else {
					 //var buttom_style = {"width":(wW-1) + "px","top": (parseInt(widget.css("top")) + $.fn.pfscalendar.widgetheight) + "px","left": widget.css('left'), "position":"absolute","display":"block","height":"29px","z-index":1,"margin-top":"11px"}
					 //var wrapper = widget.parent();					 
					 	var buttom = $("<div class='calendarButtom' style='display: block;position:relative;'></div>")	
					 	buttom.append("<div class='selectafriday'>Please select any " +  $.fn.pfscalendar.weekday($.fn.pfscalendar.currdate.getDay()) + ".</div>");
						buttom.append("<button type='button'class='calendar-button-Save imagebutton autodelCalSave' style='float:right;margin:0 20px 0 10px;'>Save</button>");
					 	buttom.append("<button type='button' class='calendar-button-Cancel imagebutton autodelCalCancel' style='float:right;'>Cancel</button>");
					 	buttom.append("<div class='clear'></div>");
						widget.append(buttom);	
						var buttom_style = {"width":(wW-1) + "px","height":"29px","z-index":1,"margin-top":margin}
						buttom.css(buttom_style)
				 }
				 
				 var save = widget.parent().find(".calendar-button-Save");				 	
				     save.click(function(){
				    	 if($.fn.pfscalendar.selectedDate==null) return false;				    	 
				    	 var data= {date:$.fn.pfscalendar.selectedDate, orderID:$.fn.pfscalendar.orderID};				    	 
				    	 if(typeof _de["onsave"] == 'function'){
				    		 var btn =  $($.fn.pfscalendar.button);
					    	 btn.trigger("click");
				    		 _de["onsave"].call(this, data);
				    	      }
				    	 
				     })
				  var cancel =  widget.parent().find(".calendar-button-Cancel");
				     cancel.click(function(){		
				    	 var btn =  $($.fn.pfscalendar.button);
				    	 btn.trigger("click");
				    })
				    
				    /*    				     
				     if(isIE){
				    	 widget.find(".ui-datepicker-next span").click(function(e){				    
					    	 widget.find(".ui-datepicker-next").trigger("click");
							 $.fn.pfscalendar.construct();			
						});	
				    	 
			    	   widget.find(".ui-datepicker-prev span").click(function(){
					    	widget.find(".ui-datepicker-prev").trigger("click");
							$.fn.pfscalendar.construct();
						});				    	 
				     }	
				 */		
		}
		
		
	}
})( jQuery );
