if(typeof Prototype=="undefined"){alert("CalendarDateSelectInit Error: Prototype could not be found. Please make sure that your application's layout includes prototype.js (e.g. <%= javascript_include_tag :defaults %>) *before* it includes calendar_date_select.js (e.g. <%= calendar_date_select_includes %>).")}Element.addMethods({purgeChildren:function(c){$A(c.childNodes).each(function(a){$(a).remove()})},build:function(k,i,h,j){newElement=Element.build(i,h,j);k.appendChild(newElement);return newElement}});Element.build=function(type,options,style){e=$(document.createElement(type));$H(options).each(function(pair){eval("e."+pair.key+" = pair.value")});if(style){$H(style).each(function(pair){eval("e.style."+pair.key+" = pair.value")})}return e};nil=null;Date.one_day=24*60*60*1000;Date.first_day_of_week=0;Date.months={es_ES:new Array("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"),en_GB:new Array("January","February","March","April","May","June","July","August","September","October","November","December"),de_DE:new Array("Januar","Februar","M&#228;rz","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember"),ca_ES:new Array("Gener","Febrer","Mar&#199;","Abril","Maig","Juny","Juliol","Agost","Setembre","Octubre","Novembre","Desembre"),eu_ES:new Array("Urtarril","Otsail ","Martxo","Apiril","Maiatz","Ekain","Uztail","Abuztu","Irail","Urri","Azaro","Abendu"),gl_ES:new Array("Xaneiro","Febreiro","Marzo","Abril","Maio","Xu&#241;o","Xullo","Agosto","Setembro","Outubro","Novembro","Decembro"),fr_FR:new Array("Janvier","F&#233;vrier","Mars","Avril","Mai","Juin","Juillet","Aout","Septembre","Octobre","Novembre","D&#233;cembre")};Date.weekdays={es_ES:new Array("L","M","X","J","V","S","D"),en_GB:new Array("M","T","W","T","F","S","S"),de_DE:new Array("M","D","X","D","F","S","S"),ca_ES:new Array("L","M","X","J","V","S","D"),eu_ES:new Array("L","M","X","J","V","S","D"),gl_ES:new Array("L","M","X","X","V","S","D"),fr_FR:new Array("L","M","M","J","V","S","D")};Locale="es_ES";Date.padded2=function(c){padded2=c.toString();if(parseInt(c)<10){padded2="0"+padded2}return padded2};Date.prototype.getPaddedMinutes=function(){return Date.padded2(this.getMinutes())};Date.prototype.getAMPMHour=function(){hour=this.getHours();return(hour==0)?12:(hour>12?hour-12:hour)};Date.prototype.getAMPM=function(){return(this.getHours()<12)?"AM":"PM"};Date.prototype.stripTime=function(){return new Date(this.getFullYear(),this.getMonth(),this.getDate())};Date.prototype.daysDistance=function(c){return Math.round((c-this)/Date.one_day)};Date.prototype.toFormattedString=function(c){str=Date.months[Locale][this.getMonth()]+" "+this.getDate()+", "+this.getFullYear();str=Date.addCeros(this.getDate())+"/"+Date.addCeros((this.getMonth()+1))+"/"+Date.addCeros(this.getFullYear());if(c){hour=this.getHours();str+=" "+this.getAMPMHour()+":"+this.getPaddedMinutes()+" "+this.getAMPM()}return str};Date.parseFormattedString=function(n){var l="([0-9]{2})(/([0-9]{2})(/([0-9]{4}))?)?";var j=n.match(new RegExp(l,"i"));if(j==null){return Date.parse(n)}var k=0;var i=new Date(j[5],0,1);if(j[3]){i.setMonth(j[3]-1)}if(j[1]){i.setDate(j[1])}return i};Date.addCeros=function(c){c+="";if(c.length==1){c="0"+c}return c};Math.floor_to_interval=function(g,f){return Math.floor(g/f)*f};window.f_height=function(){return([window.innerHeight?window.innerHeight:null,document.documentElement?document.documentElement.clientHeight:null,document.body?document.body.clientHeight:null].select(function(c){return c>0}).first()||0)};window.f_scrollTop=function(){return([window.pageYOffset?window.pageYOffset:null,document.documentElement?document.documentElement.scrollTop:null,document.body?document.body.scrollTop:null].select(function(c){return c>0}).first()||0)};_translations={OK:"OK",Now:"Ahora",Today:"Hoy"};SelectBox2=Class.create();SelectBox2.prototype={initialize:function(i,k,j,h){this.element=$(i).build("select",j,h);this.populate(k)},populate:function(c){this.element.purgeChildren();that=this;$A(c).each(function(a){if(typeof(a)!="object"){a=[a,a]}that.element.build("option",{value:a[1],innerHTML:a[0]})})},setValue:function(f,g){e=this.element;matched=false;$R(0,e.options.length-1).each(function(a){if(e.options[a].value==f.toString()){e.selectedIndex=a;matched=true}});return matched},getValue:function(){return $F(this.element)}};CalendarDateSelectInit=Class.create();CalendarDateSelectInit.prototype={initialize:function(l,j,p,n,q,k){this.target_element=$(l);this.target_element.calendar_date_select=this;Locale=j;this.options=$H({embedded:false,popup:nil,time:false,buttons:true,year_range:10,calendar_div:nil,close_on_click:nil,minute_interval:5,popup_by:l,month_year:"dropdowns",onchange:this.target_element.onchange,validate_date:true,initial_date:new Date(n,q,k),final_date:nil,dropdown_past_dates:true,dropdown_future_dates:true}).merge(p||{});this.initial_date=this.options.initial_date;this.final_date=this.options.final_date;this.selection_made=$F(this.target_element).strip()!=="";this.use_time=this.options.time;this.callback("before_show");this.calendar_div=$(this.options.calendar_div);if(!this.target_element){alert("Target element "+l+" not found!");return false}this.parseDate();if(this.calendar_div==nil){this.calendar_div=$(this.options.embedded?this.target_element.parentNode:document.body).build("div")}if(!this.options.embedded){this.calendar_div.setStyle({position:"absolute",visibility:"hidden"});this.positionCalendarDiv()}this.calendar_div.addClassName("calendar_date_select");if(this.options.embedded){this.options.close_on_click=false}if(this.options.close_on_click===nil){if(this.options.time){this.options.close_on_click=false}else{this.options.close_on_click=true}}if(!this.options.embedded){Event.observe(document.body,"mousedown",this.bodyClick_handler=this.bodyClick.bindAsEventListener(this))}this.initFrame();if(!this.options.embedded){this.positionCalendarDiv(true)}this.callback("after_show")},positionCalendarDiv:function(c){above=false;c_pos=Position.cumulativeOffset(this.calendar_div);c_left=c_pos[0];c_top=c_pos[1];c_dim=this.calendar_div.getDimensions();c_height=c_dim.height;c_width=c_dim.width;w_top=window.f_scrollTop();w_height=window.f_height();e_dim=Position.cumulativeOffset($(this.options.popup_by));e_top=e_dim[1];e_left=e_dim[0];if((c)&&((c_top+c_height)>(w_top+w_height))&&(c_top-c_height>w_top)){above=true}left_px=e_left.toString()+"px";top_px=(above?(e_top-c_height):(e_top+$(this.options.popup_by).getDimensions().height)).toString()+"px";this.calendar_div.style.left=left_px;this.calendar_div.style.top=top_px;if(c){this.iframe=$(document.body).build("iframe",{},{position:"absolute",left:left_px,top:top_px,height:c_height.toString()+"px",width:c_width.toString()+"px",border:"0px"});this.calendar_div.setStyle({visibility:""})}},initFrame:function(){that=this;$w("top header body buttons footer bottom").each(function(name){eval(name+"_div = that."+name+"_div = that.calendar_div.build('div', { className: 'cds_"+name+"' }, { clear: 'left'} ); ")});this.initButtonsDiv();this.updateFooter("&nbsp;");this.prev_month_button=header_div.build("a",{innerHTML:"&lt;",href:"#",onclick:function(){return false},className:"prev"});this.next_month_button=header_div.build("a",{innerHTML:"&gt;",href:"#",onclick:function(){return false},className:"next"});Event.observe(this.prev_month_button,"mousedown",function(){this.navMonth(this.date.getMonth()-1)}.bindAsEventListener(this));Event.observe(this.next_month_button,"mousedown",function(){this.navMonth(this.date.getMonth()+1)}.bindAsEventListener(this));if(this.options.month_year=="dropdowns"){this.month_select=new SelectBox2(header_div,$R(0,11).map(function(m){return[Date.months[Locale][m],m]}),{className:"month",onchange:function(){this.navMonth(this.month_select.getValue())}.bindAsEventListener(this)});this.year_select=new SelectBox2(header_div,[],{className:"year",onchange:function(){this.navYear(this.year_select.getValue())}.bindAsEventListener(this)})}else{this.month_year_label=header_div.build("span")}this.calendar_day_grid=[];days_table=body_div.build("table",{cellPadding:"0px",cellSpacing:"0px",width:"100%"});weekdays_row=days_table.build("thead").build("tr");Date.weekdays[Locale].each(function(weekday){weekdays_row.build("th",{innerHTML:weekday})});days_tbody=days_table.build("tbody");row_number=0;for(cell_index=0;cell_index<42;cell_index++){weekday=(cell_index+Date.first_day_of_week)%7;if(cell_index%7==0){days_row=days_tbody.build("tr",{className:"row_"+row_number++})}(this.calendar_day_grid[cell_index]=days_row.build("td",{calendar_date_select:this,onmouseover:function(){this.calendar_date_select.dayHover(this)},onmouseout:function(){this.calendar_date_select.dayHoverOut(this)},onclick:function(){this.calendar_date_select.updateSelectedDate(this)},className:(weekday==5)||(weekday==6)?" weekend":""},{cursor:"pointer"})).build("div");this.calendar_day_grid[cell_index]}this.refresh()},initButtonsDiv:function(){buttons_div=this.buttons_div;if(this.options.time){blank_time=$A(this.options.time=="mixed"?[[" - ",""]]:[]);buttons_div.build("span",{innerHTML:"@",className:"at_sign"});t=new Date();this.hour_select=new SelectBox2(buttons_div,blank_time.concat($R(0,23).map(function(c){t.setHours(c);return $A([t.getAMPMHour()+" "+t.getAMPM(),c])})),{calendar_date_select:this,onchange:function(){this.calendar_date_select.updateSelectedDate({hour:this.value})},className:"hour"});buttons_div.build("span",{innerHTML:":",className:"seperator"});that=this;this.minute_select=new SelectBox2(buttons_div,blank_time.concat($R(0,59).select(function(c){return(c%that.options.minute_interval==0)}).map(function(c){return $A([Date.padded2(c),c])})),{calendar_date_select:this,onchange:function(){this.calendar_date_select.updateSelectedDate({minute:this.value})},className:"minute"})}else{if(!this.options.buttons){buttons_div.remove()}}if(this.options.buttons){buttons_div.build("span",{innerHTML:" "});if(this.options.time=="mixed"){buttons_div.build("span",{innerHTML:" | ",className:"button_seperator"})}if(this.options.time){b=buttons_div.build("a",{innerHTML:_translations.Now,href:"#",onclick:function(){this.today(true);return false}.bindAsEventListener(this)})}}},dateString:function(){return(this.selection_made)?this.selected_date.toFormattedString(this.use_time):"&nbsp;"},navMonth:function(c){prev_day=this.date.getDate();this.date.setMonth(c);this.refresh();this.callback("after_navigate",this.date)},navYear:function(c){this.date.setYear(c);this.refresh();this.callback("after_navigate",this.date)},refresh:function(){m=this.date.getMonth();y=this.date.getFullYear();if(this.options.month_year=="dropdowns"){this.month_select.setValue(m,false);e=this.year_select.element;if(!(this.year_select.setValue(y))||e.selectedIndex<=1||e.selectedIndex>=e.options.length-2){var g=y-this.options.year_range;var f=y+this.options.year_range;if(!this.options.dropdown_past_dates){g=y}if(!this.options.dropdown_future_dates){f=y}this.year_select.populate($R(g,f).toArray());this.year_select.setValue(y)}}else{this.month_year_label.update(Date.months[Locale][m]+" "+y.toString())}this.beginning_date=new Date(this.date).stripTime();this.beginning_date.setDate(1);pre_days=this.beginning_date.getDay();if(pre_days<3){pre_days+=7}this.beginning_date.setDate(2-pre_days+Date.first_day_of_week);iterator=new Date(this.beginning_date);today=this.initial_date.stripTime();this_month=this.date.getMonth();for(cell_index=0;cell_index<42;cell_index++){day=iterator.getDate();month=iterator.getMonth();cell=this.calendar_day_grid[cell_index];Element.remove(cell.childNodes[0]);div=cell.build("div",{innerHTML:day});if(!this.validDateParts(day,month,iterator.getFullYear())){div.className="other"}cell.day=day;cell.month=month;cell.year=iterator.getFullYear();iterator.setDate(day+1)}if(this.today_cell){this.today_cell.removeClassName("today")}if($R(0,42).include(days_until=this.beginning_date.daysDistance(today))){this.today_cell=this.calendar_day_grid[days_until];this.today_cell.addClassName("today")}this.setUseTime(this.use_time);this.setSelectedClass();this.updateFooter()},dayHover:function(c){if(this.validDate(c)){c.addClassName("hover");hover_date=new Date(this.selected_date);hover_date.setYear(c.year);hover_date.setMonth(c.month);hover_date.setDate(c.day);this.updateFooter(hover_date.toFormattedString(this.use_time))}},dayHoverOut:function(c){if(this.validDate(c)){c.removeClassName("hover");this.updateFooter()}},setSelectedClass:function(){if(!this.selection_made){return}if(this.selected_cell){this.selected_cell.removeClassName("selected")}if($R(0,42).include(days_until=this.beginning_date.daysDistance(this.selected_date.stripTime()))){this.selected_cell=this.calendar_day_grid[days_until];this.selected_cell.addClassName("selected")}},reparse:function(){this.parseDate();this.refresh()},parseDate:function(){value=$F(this.target_element).strip();this.date=value==""?NaN:Date.parseFormattedString(this.options.date||value);if(isNaN(this.date)){this.date=new Date()}this.selected_date=new Date(this.date);this.use_time=/[0-9]:[0-9]{2}/.exec(value)?true:false;this.date.setDate(1)},updateFooter:function(c){if(!c){c=this.dateString()}this.footer_div.purgeChildren();this.footer_div.build("span",{innerHTML:c})},updateSelectedDate:function(c){if((this.target_element.disabled||this.target_element.readOnly)&&this.options.popup!="force"){return false}if(c.day){this.selection_made=true;for(x=0;x<=1;x++){this.selected_date.setDate(c.day);this.selected_date.setMonth(c.month);this.selected_date.setYear(c.year)}}if(!isNaN(c.hour)){this.selected_date.setHours(c.hour)}if(!isNaN(c.minute)){this.selected_date.setMinutes(Math.floor_to_interval(c.minute,this.options.minute_interval))}if(c.hour===""||c.minute===""){this.setUseTime(false)}else{if(!isNaN(c.hour)||!isNaN(c.minute)){this.setUseTime(true)}}this.updateFooter();if(!this.validDateDate()){return false}this.setSelectedClass();if(this.selection_made){this.updateValue()}if(this.options.close_on_click){this.close()}},setUseTime:function(c){this.use_time=this.options.time&&(this.options.time=="mixed"?c:true);if(this.use_time&&this.selected_date){minute=Math.floor_to_interval(this.selected_date.getMinutes(),this.options.minute_interval);hour=this.selected_date.getHours();this.hour_select.setValue(hour);this.minute_select.setValue(minute)}else{if(this.options.time=="mixed"){this.hour_select.setValue("");this.minute_select.setValue("")}}},validDate:function(g){if(!this.options.validate_date){return true}this.initial_date.setMinutes(0);this.initial_date.setHours(0);s=new Date();s.setMonth(g.month);s.setDate(g.day);s.setYear(g.year);var f=true;if(this.final_date!=nil){this.final_date.setMinutes(59);this.final_date.setHours(23);f=(this.final_date>s)}return(f&&s>=this.initial_date)},validDateDate:function(){if(!this.options.validate_date){return true}this.initial_date.setMinutes(0);this.initial_date.setHours(0);var g=new Date();g.setMonth(this.selected_date.getMonth());g.setDate(this.selected_date.getDate());ano=this.selected_date.getYear();if(ano<1980){ano=ano+1900}g.setYear(ano);var f=true;if(this.final_date!=nil){this.final_date.setMinutes(59);this.final_date.setHours(23);f=(this.final_date>g)}return(f&&g>=this.initial_date)},validDateParts:function(i,j,k){if(!this.options.validate_date){return true}this.initial_date.setMinutes(0);this.initial_date.setHours(0);var l=new Date();l.setMonth(j);l.setDate(i);l.setYear(k);var n=true;if(this.final_date!=nil){this.final_date.setMinutes(59);this.final_date.setHours(23);n=(this.final_date>l)}return(n&&l>=this.initial_date)},updateValue:function(){last_value=this.target_element.value;this.target_element.value=this.dateString();if(last_value!=this.target_element.value){this.callback("onchange")}},today:function(c){d=new Date();this.date=new Date();o=$H({day:d.getDate(),month:d.getMonth(),year:d.getFullYear(),hour:d.getHours(),minute:d.getMinutes()});if(!c){o=o.merge({hour:"",minute:""})}this.updateSelectedDate(o);this.refresh()},close:function(){if(this.closed){return false}this.callback("before_close");this.target_element.calendar_date_select=nil;Event.stopObserving(document.body,"mousedown",this.bodyClick_handler);this.calendar_div.remove();this.closed=true;if(this.iframe){this.iframe.remove()}this.target_element.focus();this.callback("after_close")},bodyClick:function(c){if(!$(Event.element(c)).descendantOf(this.calendar_div)){this.close()}},callback:function(f,g){if(this.options[f]){this.options[f].bind(this.target_element)(g)}}};
