/* = jquery.eventCalendar.js version: 0.54 date: 18-04-2013 author: Jaime Fernandez (@vissit) company: Paradigma Tecnologico (@paradigmate) */ ;$.fn.eventCalendar = function(options){ var p = options.precios; var pr= new Array(); if (p!=null){ pr[1]=p.d1;pr[2]=p.d2;pr[3]=p.d3;pr[4]=p.d4;pr[5]=p.d5;pr[6]=p.d6;pr[7]=p.d7;pr[8]=p.d8;pr[9]=p.d9;pr[10]=p.d10; pr[11]=p.d11;pr[12]=p.d12;pr[13]=p.d13;pr[14]=p.d14;pr[15]=p.d15;pr[16]=p.d16;pr[17]=p.d17;pr[18]=p.d18;pr[19]=p.d19;pr[20]=p.d20; pr[21]=p.d21;pr[22]=p.d22;pr[23]=p.d23;pr[24]=p.d24;pr[25]=p.d25;pr[26]=p.d26;pr[27]=p.d27;pr[28]=p.d28;pr[29]=p.d29;pr[30]=p.d30; pr[31]=p.d31; } var amoneda = options.amoneda; var dmoneda = options.dmoneda; var DiaSelect = options.diaselect; var Integracion = options.Integracion; var IDregistro = options.IDregistro; if (amoneda===undefined) amoneda = ""; if (dmoneda===undefined) dmoneda = "€"; var eventsOpts = $.extend({}, $.fn.eventCalendar.defaults, options); // define global vars for the function var flags = { wrap: "", directionLeftMove: "300", eventsJson: {} } // each eventCalendar will execute this function this.each(function(){ flags.wrap = $(this); if (eventsOpts.eventsScrollable) { flags.wrap.find('.eventsCalendar-list-content').addClass('scrollable'); } setCalendarWidth(); $(window).resize(function(){ setCalendarWidth(); }); // show current month dateSlider('',options.year, options.month); changeMonth(); flags.wrap.on('click','.eventsCalendar-day a',function(e){ e.preventDefault(); var year = flags.wrap.attr('data-current-year'), month = flags.wrap.attr('data-current-month'), day = $(this).parent().attr('rel'); }); }); // show event description flags.wrap.find('.eventsCalendar-list').on('click','.eventTitle',function(e){ if(!eventsOpts.showDescription) { e.preventDefault(); var desc = $(this).parent().find('.eventDesc'); if (!desc.find('a').size()) { var eventUrl = $(this).attr('href'); var eventTarget = $(this).attr('target'); // create a button to go to event url desc.append(''+eventsOpts.txt_GoToEventUrl+'') } if (desc.is(':visible')) { desc.slideUp(); } else { if(eventsOpts.onlyOneDescription) { flags.wrap.find('.eventDesc').slideUp(); } desc.slideDown(); } } }); function sortJson(a, b){ return a.date.toLowerCase() > b.date.toLowerCase() ? 1 : -1; }; function dateSlider(show, year, month) { var $eventsCalendarSlider = $("
"), $eventsCalendarMonthWrap = $("
"), $eventsCalendarDaysList = $(""), date = new Date(); if (!flags.wrap.find('.eventsCalendar-slider').size()) { flags.wrap.prepend($eventsCalendarSlider); $eventsCalendarSlider.append($eventsCalendarMonthWrap); } else { flags.wrap.find('.eventsCalendar-slider').append($eventsCalendarMonthWrap); } flags.wrap.find('.eventsCalendar-monthWrap.currentMonth').removeClass('currentMonth').addClass('oldMonth'); $eventsCalendarMonthWrap.addClass('currentMonth').append($eventsCalendarDaysList); // if current show current month & day if (show === "current") { day = date.getDate(); } else { date = new Date(year, month - 1, 1, 0, 0, 0); // current visible month day = 0; // not show current day in days list moveOfMonth = 1; date.setMonth( date.getMonth() + moveOfMonth ); var tmpDate = new Date(); if (date.getMonth() === tmpDate.getMonth()) { day = tmpDate.getDate(); } } // get date portions var year = date.getFullYear(), // year of the events currentYear = (new Date).getFullYear(), // current year month = date.getMonth(), // 0-11 monthToShow = month + 1; flags.wrap.attr('data-current-month',month) .attr('data-current-year',year); // add current date info // print all month days var daysOnTheMonth = 32 - new Date(year, month, 32).getDate(); var daysList = []; if (eventsOpts.showDayAsWeeks) { $eventsCalendarDaysList.addClass('showAsWeek'); // show day name in top of calendar if (eventsOpts.showDayNameInCalendar) { $eventsCalendarDaysList.addClass('showDayNames'); var i = 0; // if week start on monday if (eventsOpts.startWeekOnMonday) { i = 1; } for (; i < 7; i++) { daysList.push('
  • '+eventsOpts.dayNamesShort[i]+'
  • '); if (i === 6 && eventsOpts.startWeekOnMonday) { // print sunday header daysList.push('
  • '+eventsOpts.dayNamesShort[0]+'
  • '); } } } dt=new Date(year, month, 01); var weekDay = dt.getDay(); // day of the week where month starts if (eventsOpts.startWeekOnMonday) { weekDay = dt.getDay() - 1; } if (weekDay < 0) { weekDay = 6; } // if -1 is because day starts on sunday(0) and week starts on monday for (i = weekDay; i > 0; i--) { daysList.push('
  • '); } } for (dayCount = 1; dayCount <= daysOnTheMonth; dayCount++) { var dayClass = ""; if (day > 0 && dayCount === day && year === currentYear) { dayClass = "today"; } /* mod.pinta precios */ if (pr[dayCount]!=undefined){ var PrecioDelDia = pr[dayCount]; // precio del dia var strFechaSalida = dayCount+'-'+(month + 1)+'-'+year; // fecha completa /* integracines */ switch (Integracion) { case 'SOL': /* soltour */ linkurl = 'http://192.168.0.119/soltour_form.asp'; paramsurl = '?id=' + IDregistro + '&FechaSalida=' + strFechaSalida; break; case 'OFE': /* ofertas */ linkurl = 'http://192.168.0.119/oferta_form.asp'; paramsurl = '?id=' + IDregistro + '&FechaSalida=' + strFechaSalida; break; case 'TRA': /* travelplan */ linkurl = 'http://192.168.0.119/travelplan_form.asp'; paramsurl = '?id=' + IDregistro + '&FechaSalida=' + strFechaSalida break; case 'CAR': /* coches */ linkurl = cochesformpage + '?FechaSalida=' + strFechaSalida + '&carID=' + IDregistro + cochesformpage_params; paramsurl = ''; break; case 'HOT': /* hoteles */ linkurl = hotelesformpage + '?FechaSalida=' + strFechaSalida + '&hotelID=' + IDregistro + hotelesformpage_params; paramsurl = ''; break; case 'CRU': /* cruceros */ linkurl = crucerosformpage + '?FechaSalida=' + strFechaSalida + '&cruiseID=' + IDregistro + crucerosformpage_params; paramsurl = ''; break; case 'PAN': /* panavision */ if (IDregistro!=undefined){ var f = IDregistro.split(':') }; var idF = f[0]; var idP = f[1]; var idC = f[2]; var reg = 'tm'; /* */ linkurl = panavisionformpage + '?FechaSalida=' + strFechaSalida + '&idF=' + idF + '&idP=' + idP + '&idC=' + idC +'&salida=&adultos=&ninos=&bebes=&hdbl=&htrp=' +panavisionformpage_params; paramsurl = ''; break; } /* pinta precios */ if (DiaSelect==dayCount) {dayClass += 'current';} openlink =' document.location.href="' + linkurl + paramsurl + '" '; dayPush = '
  • '; dayPush = dayPush + '' + dayCount + '
    ' + amoneda + '' + PrecioDelDia + '' + dmoneda + '
  • ' daysList.push(dayPush); } else { dayPush = '
  • ' + dayCount + '
  • '; daysList.push(dayPush); } } /* */ $eventsCalendarDaysList.append(daysList.join('')); $eventsCalendarSlider.css('height',$eventsCalendarMonthWrap.height()+'px'); } function num_abbrev_str(num) { var len = num.length, last_char = num.charAt(len - 1), abbrev if (len === 2 && num.charAt(0) === '1') { abbrev = 'th' } else { if (last_char === '1') { abbrev = 'st' } else if (last_char === '2') { abbrev = 'nd' } else if (last_char === '3') { abbrev = 'rd' } else { abbrev = 'th' } } return num + abbrev } function changeMonth() { flags.wrap.find('.arrow').click(function(e){ e.preventDefault(); if ($(this).hasClass('next')) { dateSlider("next"); var lastMonthMove = '-=' + flags.directionLeftMove; } else { dateSlider("prev"); var lastMonthMove = '+=' + flags.directionLeftMove; } flags.wrap.find('.eventsCalendar-monthWrap.oldMonth').animate({ opacity: eventsOpts.moveOpacity, left: lastMonthMove }, eventsOpts.moveSpeed, function() { flags.wrap.find('.eventsCalendar-monthWrap.oldMonth').remove(); }); }); } function showError(msg) { flags.wrap.find('.eventsCalendar-list-wrap').html(""+msg+" " +eventsOpts.eventsjson+""); } function setCalendarWidth(){ // resize calendar width on window resize flags.directionLeftMove = flags.wrap.width(); flags.wrap.find('.eventsCalendar-monthWrap').width(flags.wrap.width() + 'px'); flags.wrap.find('.eventsCalendar-list-wrap').width(flags.wrap.width() + 'px'); } }; // define the parameters with the default values of the function $.fn.eventCalendar.defaults = { eventsjson: 'js/events.json', eventsLimit: 3, /* mod.idiomas.español */ monthNames: [ "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre" ], dayNames: [ 'Domingo','Lunes','Martes','Miercoles','Jueves','Viernes','Sabado' ], dayNamesShort: [ 'Dom','Lun','Mar','Mie', 'Jue','Vie','Sab' ], txt_noEvents: "There are no events in this period", txt_SpecificEvents_prev: "", txt_SpecificEvents_after: "events:", txt_next: "next", txt_prev: "prev", txt_NextEvents: "Next events:", txt_GoToEventUrl: "See the event", showDayAsWeeks: true, startWeekOnMonday: true, showDayNameInCalendar: true, showDescription: false, onlyOneDescription: true, openEventInNewWindow: false, eventsScrollable: false, jsonDateFormat: 'timestamp', // you can use also "human" 'YYYY-MM-DD HH:MM:SS' moveSpeed: 500, // speed of month move when you clic on a new date moveOpacity: 0.15, // month and events fadeOut to this opacity jsonData: "", // to load and inline json (not ajax calls) cacheJson: true // if true plugin get a json only first time and after plugin filter events // if false plugin get a new json on each date change };