(function($){
		var methods={
			init:function(options){
				var settings = {
					'hotelUrl':'',
					'numberOfMonths':2,
					'firstDay':1,
					'dateFormat':'yy-mm-dd',
					'siteId':8,
					'showToday':true,
					'checkInDateFailureMessage':'Check-in date field is required',
					'checkInDateName':'check_in_date_cosmores',
					'checkOutDateFailureMessage':'Check-out date field is required',
					'checkOutDateName':'check_out_date_cosmores',
					'checkInDateGreaterThanCheckOutDate':'Check-in date cannot be greater than Check-out date.',
					'adultsName':'adults_cosmores',
					'roomsName':'rooms_cosmores',
					'childrenName':'children_cosmores',
					'childrenText':'Child',
					'childrenHeaderText':'Age(s) of children.',
					'buttonName':'button_cosmores',
					'childrenCancelText':'Cancel',
					'childrenOKText':'OK'
				};
				
				return this.each(function(){
					if(options){
						$.extend(settings,options);
					}
					var errors = [];
					var regUrl = /^https\:\/\/[a-z0-9-]{3,255}\.cosmores\.com$/;
					if(settings.hotelUrl==""){
						errors.push("Error:Hotel url parameter is  provided is not valid.");
						
					}
					if(!document.getElementById(settings.checkInDateName)){
						errors.push("Error:Check-in date field element could not be found.");
					}
					if(!document.getElementById(settings.checkOutDateName)){
						errors.push("Error: Check-out date field element could not be found.");
					}
					if(!document.getElementById(settings.adultsName)){
						errors.push("Error: Adults field element could not be found");
					}
					if(errors.length>0){
						var err = "";
						for(var i=0;i<errors.length;i++){
							err+=errors[i]+"\n";
						}
						alert(err);
						return;
					}
					var mindate = new Date();
					var dateOptions = {
							minDate:mindate,
							numberOfMonths:settings.numberOfMonths,
							firstDay:settings.firstDay,
							dateFormat:settings.dateFormat	
					}
					var dateOptionsCheckin = {};
					$.extend(dateOptionsCheckin,dateOptions);
					dateOptionsCheckin['onSelect'] = function(selectedDate){
						var date = jQuery.datepicker.parseDate(
							jQuery(this).data("datepicker").settings.dateFormat ||
								jQuery.datepicker._defaults.dateFormat,
								selectedDate, jQuery(this).data("datepicker").settings
						);
						date = new Date(date.getFullYear(),date.getMonth(),date.getDate()+1);
						var maxdate = new Date(date.getFullYear(),date.getMonth(),date.getDate()+31);
						jQuery("#"+settings.checkOutDateName).datepicker("option","minDate",date);
						jQuery("#"+settings.checkOutDateName).datepicker("option","maxDate",maxdate);
					};
					$("#"+settings.checkInDateName).datepicker(
						dateOptionsCheckin
					);
					$("#"+settings.checkOutDateName).datepicker(
						dateOptions
					);
					if(document.getElementById(settings.childrenName)){
						$(this).append("<input type='hidden' name='hidden_children_cosmores' id='hidden_children_cosmores' value='' />");
						var childrenHandler = function(event){
							var numChildren = $("#"+settings.childrenName+" option:selected").val();
							if(numChildren==0){
								$("#hidden_children_cosmores").val("");
								if(document.getElementById("div_children_cosmores")){
									$("#div_children_cosmores").css("top",-3000).css("left",-3000);
								}
							}else{
								var divChildren = null;
								var okHandler = function(){
									var ages = [];
									var regNum = /^[1-9]([0-9])?/;
									var failure=[];
									$("#div_children_cosmores input[type=text]").each(function(context,node){
										var curChildrenAge = $(node).val();
										if(!regNum.test(curChildrenAge)){
											failure.push("Child "+(context+1)+" age is not valid.");
										}else{
											ages.push(curChildrenAge);
										}
									});
									if(failure.length==0){
										var childrenStr = ages.toString();
										$("#hidden_children_cosmores").val(childrenStr);
										$("#div_children_cosmores").css("top",-3000).css("left",-3000);
									}else{
										var mes="";
										for(var i=0;i<failure.length;i++){
											mes+=failure[i]+"\n";
										}
										alert(mes);
									}
									return false;
								};
								var cancelHandler = function(){
									$("#div_children_cosmores").css("top",-3000).css("left",-3000);
									var childrenValue = $("#hidden_children_cosmores").val();
									var selectedIndex=0;
									var childrenValueAr = childrenValue.split(",");
									if(childrenValue==""){
										selectedIndex=0;
									}else{
										selectedIndex=childrenValueAr.length;
									}
									document.getElementById(settings.childrenName).selectedIndex=selectedIndex;
									return false;
								};
								if(document.getElementById("div_children_cosmores")){
									divChildren = document.getElementById("div_children_cosmores");
								}else{
									divChildren = document.createElement("div");
									$(divChildren).attr("id","div_children_cosmores");
									$(divChildren).css("position","absolute").css("z-index",1000).css("left",-3000).css("top",-3000);
									document.body.appendChild(divChildren);
								}
								var childrenHtml = "<div class='div_children_content_cosmores'>";
								childrenHtml+="<h3>"+settings.childrenHeaderText+"<\/h3>";
								for(var i=1;i<=numChildren;i++){
									childrenHtml+="<div>";
										childrenHtml+="<label for='child_"+i+"_cosmores' class='label_child_cosmores'>"+settings.childrenText+" "+i+": <\/label>";
										childrenHtml+="<input type='text' name='child_"+i+"_cosmores' id='child_"+i+"_cosmores' value='' />";
									childrenHtml+="<\/div>";
								}
								childrenHtml+="<div class='div_children_buttons_cosmores'>";
								childrenHtml+="<a href='' class='link_children_ok_cosmores'>"+settings.childrenOKText+"<\/a>";
								childrenHtml+="<a href='' class='link_children_cancel_cosmores'>"+settings.childrenCancelText+"<\/a>";
								childrenHtml+="<\/div>";
								childrenHtml+="<\/div>";
								$(divChildren).html(childrenHtml);
								var position = $("#"+settings.childrenName).offset();
								var left = position.left;
								var top = position.top;
								var height = $("#"+settings.childrenName).height();
								var width = $("#"+settings.childrenName).width();
								var ww = $(window).width();
								var mw = $(divChildren).width();
								top+=height;
								if(left+mw>ww){
									left = left-mw+width;
								}
								$(divChildren).css("left",left).css("top",top);
								$("a.link_children_ok_cosmores").unbind("click",okHandler).bind("click",okHandler);
								$("a.link_children_cancel_cosmores").unbind("click",cancelHandler).bind("click",cancelHandler);
							}
							if(event.keyCode==27){
								cancelHandler();
							}
						};
						$("#"+settings.childrenName).bind("change",childrenHandler).bind("keyup",childrenHandler);
					}
					$("#"+settings.buttonName).bind("click",function(){
						var checkin = $("#"+settings.checkInDateName).datepicker("getDate");
						var checkout = $("#"+settings.checkOutDateName).datepicker("getDate");
						var failure = [];
						var checkInDateStr = "";
						var checkOutDateStr = "";
						var rooms = "";
						var adults = "";
						var siteId = settings.siteId;
						var hotelUrl = settings.hotelUrl;
						var childrenStr = "";
						if(checkin==null){
							failure.push(settings.checkInDateFailureMessage);
						}else{
							checkin.setFullYear(checkin.getFullYear(),checkin.getMonth(),checkin.getDate(),0,0,0);
						}
						if(checkout==null){
							failure.push(settings.checkOutDateFailureMessage);
						}else{
							checkout.setFullYear(checkout.getFullYear(),checkout.getMonth(),checkout.getDate(),0,0,0);
						}
						if(checkin!=null && checkout!=null){
							if(checkin.getTime()>=checkout.getTime()){
								failure.push(settings.checkInDateGreaterThanCheckOuDateMessage);
							}
						}
						if(failure.length==0){
							adults = $("#"+settings.adultsName+" option:selected").val();
							if(document.getElementById(settings.roomName)){
								rooms = $("#"+settings.roomsName+" option:selected").val();	
							}
							
							
							var ciy = checkin.getFullYear();
							var cim = checkin.getMonth()+1;
							var cid = checkin.getDate();
							if(cim<10){
								cim="0"+cim;
							}
							if(cid<10){
								cid="0"+cid;
							}
							var coy = checkout.getFullYear();
							var com = checkout.getMonth()+1;
							var cod = checkout.getDate();
							if(com<10){
								com="0"+com;
							}
							if(cod<10){
								cod="0"+cod;
							}
							checkInDateStr = ciy+"-"+cim+"-"+cid;
							checkOutDateStr = coy+"-"+com+"-"+cod;
							var params= "?";
							params+="SITE="+siteId;
							params+="&CHECK_IN_DATE="+checkInDateStr;
							params+="&CHECK_OUT_DATE="+checkOutDateStr;
							params+="&PERSONS="+adults;
							if(rooms!=""){
								params+="&ROOMS="+rooms;	
							}
							
							if(document.getElementById("hidden_children_cosmores")){
								var childrenParams = $("#hidden_children_cosmores").val();
								if(childrenParams!=""){
									params+="&CHILDREN="+childrenParams;
								}
							}
							
							window.location.href=hotelUrl+params;
						}else{
							var mes="";
							for(var i=0;i<failure.length;i++){
								mes+=failure[i]+"\n";
							}
							alert(mes);
						}
						
						return false;
					});
				});
			}//init
		};
		$.fn.cosmoresbooking = function(method){
			if(methods[method]){
				return methods[method].apply(this,Array.prototype.slice.call(arguments,1));
			}else if(typeof method=='object' || !method){
				return methods.init.apply(this,arguments);
			}else{
				alert("Error: cosmoresbooking was not called correctly.");
			}
		};
	})(jQuery);
