(function($) { $.fn.jCal = function (opt) { $.jCal(this, opt); } $.jCal = function (target, opt) { opt = $.extend({ day: new Date(), // date to drive first cal days: 1, // default number of days user can select showMonths: 1, // how many side-by-side months to show dCheck: function (day) { return true; }, // handler for checking if single date is valid or not callback: function (day, days) { return true; }, // callback function for click on date selectedBG: 'rgb(0, 143, 214)', // default bgcolor for selected date cell defaultBG: 'rgb(255, 255, 255)', // default bgcolor for unselected date cell dayOffset: 0, // 0=week start with sunday, 1=week starts with monday forceWeek: false, // true=force selection at start of week, false=select days out from selected day dow: ['S', 'M', 'T', 'W', 'T', 'F', 'S'], // days of week - change this to reflect your dayOffset ml: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], ms: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], _target: target // target DOM element - no need to set extend this variable }, opt); opt.day = new Date(opt.day.getFullYear(), opt.day.getMonth(), opt.day.getDate()); $(target).stop().empty(); for (var sm=0; sm < opt.showMonths; sm++) $(target).append('
'); opt.cID = 'c' + $('.jCalMo').length; $('.jCalMo', target).each( function (ind) { drawCalControl($(this), $.extend( {}, opt, { 'ind':ind, 'day':new Date( new Date( opt.day.getTime() ).setMonth( new Date( opt.day.getTime() ).getMonth() + ind ) ) } )); drawCal($(this), $.extend( {}, opt, { 'ind':ind, 'day':new Date( new Date( opt.day.getTime() ).setMonth( new Date( opt.day.getTime() ).getMonth() + ind ) ) } )); }); $('.jCal', target).each( function () { $('.month', this).css('width', $(this).parent().width() - ( $('.left', this).width() || 0 ) - ( $('.right', this).width() || 0 ) + 'px') }); } function drawCalControl (target, opt) { $(target).append( '
' + ( (opt.ind == 0) ? '' : '' ) + '' + opt.ml[opt.day.getMonth()] + ' ' + opt.day.getFullYear() + '' + ( (opt.ind == ( opt.showMonths - 1 )) ? '' : '' ) + '
'); $(target).find('.jCal .left').bind('click', function (e) { document.getElementById('calTwoResult').innerHTML = ''; if ($('.jCalMask', opt._target).length > 0) return false; var mD = { w:0, h:0 }; $('.jCalMo', opt._target).each( function () { mD.w += $(this).width() + parseInt($(this).css('padding-left')) + parseInt($(this).css('padding-right')); var cH = $(this).height() + parseInt($(this).css('padding-top')) + parseInt($(this).css('padding-bottom')); mD.h = ((cH > mD.h) ? cH : mD.h); } ); $(opt._target).prepend('
'); opt.day = new Date( $('div[id*=' + opt.cID + 'd_]:first', opt._target).attr('id').replace(opt.cID + 'd_', '').replace(/_/g, '/') ); opt.day.setDate(1); opt.day.setMonth( opt.day.getMonth() - 1 ); drawCalControl($('.jCalMo:first', opt._target), opt); drawCal($('.jCalMo:first', opt._target), opt); if (opt.showMonths > 1) { $('.right', opt._target).clone(true).appendTo( $('.jCalMo:eq(1) .jCal', opt._target) ); $('.left:last, .right:last', opt._target).remove(); } $(opt._target).append('
'); $('.jCalMo', opt._target).wrapAll( '
' + '
' + '
'); $('.jCalMove', opt._target).css('margin-left', ( ( mD.w / opt.showMonths ) * -1 ) + 'px').css('opacity', 0.5).animate({ marginLeft:'0px' }, 'veryfast', function () { $(this).children('.jCalMo:not(:last)').appendTo( $(opt._target) ); $('.jCalSpace, .jCalMask', opt._target).empty().remove(); if ( typeof $(opt._target).data('day') == 'object' ) reSelectDates(opt._target, $(opt._target).data('day'), $(opt._target).data('days'), opt); }); }); $(target).find('.jCal .right').bind('click', function (e) { document.getElementById('calTwoResult').innerHTML = ''; if ($('.jCalMask', opt._target).length > 0) return false; var mD = { w:0, h:0 }; $('.jCalMo', opt._target).each( function () { mD.w += $(this).width() + parseInt($(this).css('padding-left')) + parseInt($(this).css('padding-right')); var cH = $(this).height() + parseInt($(this).css('padding-top')) + parseInt($(this).css('padding-bottom')); mD.h = ((cH > mD.h) ? cH : mD.h); } ); $(opt._target).append('
'); opt.day = new Date( $('div[id^=' + opt.cID + 'd_]:last', opt._target).attr('id').replace(opt.cID + 'd_', '').replace(/_/g, '/') ); opt.day.setDate(1); opt.day.setMonth( opt.day.getMonth() + 1 ); drawCalControl($('.jCalMo:last', opt._target), opt); drawCal($('.jCalMo:last', opt._target), opt); if (opt.showMonths > 1) { $('.left', opt._target).clone(true).prependTo( $('.jCalMo:eq(1) .jCal', opt._target) ); $('.left:first, .right:first', opt._target).remove(); } $(opt._target).append('
'); $('.jCalMo', opt._target).wrapAll( '
' + '
' + '
'); $('.jCalMove', opt._target).css('opacity', 0.5).animate({ marginLeft:( ( mD.w / opt.showMonths ) * -1 ) + 'px' }, 'veryfast', function () { $(this).children('.jCalMo:not(:first)').appendTo( $(opt._target) ); $('.jCalSpace, .jCalMask', opt._target).empty().remove(); if ( typeof $(opt._target).data('day') == 'object' ) reSelectDates(opt._target, $(opt._target).data('day'), $(opt._target).data('days'), opt); }); }); } function reSelectDates (target, day, days, opt) { var fDay = new Date(day.getTime()); var sDay = new Date(day.getTime()); for (var fC = false, di = 0, dC = days; di < dC; di++) { var dF = $(target).find('div[id*=d_' + (sDay.getMonth() + 1) + '_' + sDay.getDate() + '_' + sDay.getFullYear() + ']'); if ( dF.length > 0 ) { dF.stop().addClass('selectedDay'); fC = true; } sDay.setDate( sDay.getDate() + 1 ); } if ( fC && typeof opt.callback == 'function' ) opt.callback( day, days ); } function drawCal (target, opt) { var events = new Array(); events[1] = new Object(); events[1]['title'] = 'ABRaS AC 10K - Race 1 09/10';events[1]['date'] = '2009-10-30';events[1]['url'] = 'http://www.premiermarathons.com/events/abras_ac_10k__race_1_0910_185.html';events[2] = new Object(); events[2]['title'] = 'ABRaS AC 10K - Race 2 09/10';events[2]['date'] = '2010-2-5';events[2]['url'] = 'http://www.premiermarathons.com/events/abras_ac_10k__race_2_0910_199.html';events[3] = new Object(); events[3]['title'] = 'ABRaS AC 10K - Race 3 09/10';events[3]['date'] = '2010-4-30';events[3]['url'] = 'http://www.premiermarathons.com/events/abras_ac_10k__race_3_0910_212.html';events[4] = new Object(); events[4]['title'] = 'ABRaS AC Cross Country - February 2010';events[4]['date'] = '2010-3-5';events[4]['url'] = 'http://www.premiermarathons.com/events/abras_ac_cross_country__february_2010_203.html';events[5] = new Object(); events[5]['title'] = 'ABRaS Mina 10k Series - Race 1 - 08/09';events[5]['date'] = '2008-10-17';events[5]['url'] = 'http://www.premiermarathons.com/events/abras_mina_10k_series__race_1__0809_157.html';events[6] = new Object(); events[6]['title'] = 'ABRaS Mina 10k Series - Race 1 - 08/09';events[6]['date'] = '2009-10-30';events[6]['url'] = 'http://www.premiermarathons.com/events/abras_mina_10k_series__race_1__0809_274.html';events[7] = new Object(); events[7]['title'] = 'ABRaS Mina 10k Series - Race 2 - 08/09';events[7]['date'] = '2009-3-27';events[7]['url'] = 'http://www.premiermarathons.com/events/abras_mina_10k_series__race_2__0809_171.html';events[8] = new Object(); events[8]['title'] = 'ABRaS Mina 10k Series - Race 3 - 08/09';events[8]['date'] = '2009-5-15';events[8]['url'] = 'http://www.premiermarathons.com/events/abras_mina_10k_series__race_3__0809_172.html';events[9] = new Object(); events[9]['title'] = 'Abu Dhabi Striders Half Marathon & 10K - 2009';events[9]['date'] = '2009-11-13';events[9]['url'] = 'http://www.premiermarathons.com/events/abu_dhabi_striders_half_marathon__10k__2009_187.html';events[10] = new Object(); events[10]['title'] = 'Airtel Delhi Half Marathon - 2008';events[10]['date'] = '2008-11-9';events[10]['url'] = 'http://www.premiermarathons.com/events/airtel_delhi_half_marathon__2008_165.html';events[11] = new Object(); events[11]['title'] = 'Aquathlon - September 2009';events[11]['date'] = '2009-9-25';events[11]['url'] = 'http://www.premiermarathons.com/events/aquathlon__september_2009_180.html';events[12] = new Object(); events[12]['title'] = 'Aquathlon Race 1 (Sprint and Super Sprint distance) - October 2009';events[12]['date'] = '2009-10-2';events[12]['url'] = 'http://www.premiermarathons.com/events/aquathlon_race_1_sprint_and_super_sprint_distance__october_2009_182.html';events[13] = new Object(); events[13]['title'] = 'Aquathlon Race 2 (Sprint and Super Sprint distance) - November 2009';events[13]['date'] = '2009-11-21';events[13]['url'] = 'http://www.premiermarathons.com/events/aquathlon_race_2_sprint_and_super_sprint_distance__november_2009_189.html';events[14] = new Object(); events[14]['title'] = 'Aquathlon Race 3 (Sprint and Super Sprint distance) - May 2010';events[14]['date'] = '2010-5-1';events[14]['url'] = 'http://www.premiermarathons.com/events/aquathlon_race_3_sprint_and_super_sprint_distance__may_2010_213.html';events[15] = new Object(); events[15]['title'] = 'BLOM Beirut Marathon 2008';events[15]['date'] = '2008-11-30';events[15]['url'] = 'http://www.premiermarathons.com/events/blom_beirut_marathon_2008_164.html';events[16] = new Object(); events[16]['title'] = 'Cheeky 5km - 2010';events[16]['date'] = '2010-4-23';events[16]['url'] = 'http://www.premiermarathons.com/events/cheeky_5km__2010_211.html';events[17] = new Object(); events[17]['title'] = 'Christmas Pursuit Race - 2008';events[17]['date'] = '2008-12-13';events[17]['url'] = 'http://www.premiermarathons.com/events/christmas_pursuit_race__2008_168.html';events[18] = new Object(); events[18]['title'] = 'Christmas Pursuit Race - 2009';events[18]['date'] = '2009-12-12';events[18]['url'] = 'http://www.premiermarathons.com/events/christmas_pursuit_race__2009_194.html';events[19] = new Object(); events[19]['title'] = 'Creek Relay - 2010';events[19]['date'] = '2010-1-29';events[19]['url'] = 'http://www.premiermarathons.com/events/creek_relay__2010_197.html';events[20] = new Object(); events[20]['title'] = 'DRR Dubai Autodrome 10K 2010';events[20]['date'] = '2010-3-27';events[20]['url'] = 'http://www.premiermarathons.com/events/drr_dubai_autodrome_10k_2010_283.html';events[21] = new Object(); events[21]['title'] = 'Duathlon - 2010';events[21]['date'] = '2010-1-30';events[21]['url'] = 'http://www.premiermarathons.com/events/duathlon__2010_198.html';events[22] = new Object(); events[22]['title'] = 'Dubai Road Runners 10K Race - 2009';events[22]['date'] = '2009-1-3';events[22]['url'] = 'http://www.premiermarathons.com/events/dubai_road_runners_10k_race__2009_169.html';events[23] = new Object(); events[23]['title'] = 'Dubai Road Runners Predictor Relay 2009';events[23]['date'] = '2009-10-17';events[23]['url'] = 'http://www.premiermarathons.com/events/dubai_road_runners_predictor_relay_2009_183.html';events[24] = new Object(); events[24]['title'] = 'Dubai Tri Club Aquathlon - September 2008';events[24]['date'] = '2008-9-27';events[24]['url'] = 'http://www.premiermarathons.com/events/dubai_tri_club_aquathlon__september_2008_144.html';events[25] = new Object(); events[25]['title'] = 'Dubai Tri Club Half Ironman - Jan 2009';events[25]['date'] = '2009-1-30';events[25]['url'] = 'http://www.premiermarathons.com/events/dubai_tri_club_half_ironman__jan_2009_170.html';events[26] = new Object(); events[26]['title'] = 'Dubai Tri Club Olympic Triathlon - 2009';events[26]['date'] = '2009-3-6';events[26]['url'] = 'http://www.premiermarathons.com/events/dubai_tri_club_olympic_triathlon__2009_173.html';events[27] = new Object(); events[27]['title'] = 'Dubai Tri Club Triathlon - November 2008';events[27]['date'] = '2008-11-28';events[27]['url'] = 'http://www.premiermarathons.com/events/dubai_tri_club_triathlon__november_2008_163.html';events[28] = new Object(); events[28]['title'] = 'Golden Tulip Al Jazira Triathlon Feb 2010';events[28]['date'] = '2010-2-26';events[28]['url'] = 'http://www.premiermarathons.com/events/golden_tulip_al_jazira_triathlon_feb_2010_286.html';events[29] = new Object(); events[29]['title'] = 'Golden Tulip Triathlon 9th April 2010';events[29]['date'] = '2010-4-9';events[29]['url'] = 'http://www.premiermarathons.com/events/golden_tulip_triathlon_9th_april_2010_287.html';events[30] = new Object(); events[30]['title'] = 'Iftar Challenge - 2009';events[30]['date'] = '2009-9-10';events[30]['url'] = 'http://www.premiermarathons.com/events/iftar_challenge__2009_179.html';events[31] = new Object(); events[31]['title'] = 'Johnson Arabia Dubai Creek Striders Half Marathon 2008';events[31]['date'] = '2008-12-5';events[31]['url'] = 'http://www.premiermarathons.com/events/johnson_arabia_dubai_creek_striders_half_marathon_2008_146.html';events[32] = new Object(); events[32]['title'] = 'Johnson Arabia Dubai Creek Striders Half Marathon 2009';events[32]['date'] = '2009-12-11';events[32]['url'] = 'http://www.premiermarathons.com/events/johnson_arabia_dubai_creek_striders_half_marathon_2009_271.html';events[33] = new Object(); events[33]['title'] = 'Mafraq Hotel Cross Country';events[33]['date'] = '2010-4-9';events[33]['url'] = 'http://www.premiermarathons.com/events/mafraq_hotel_cross_country_209.html';events[34] = new Object(); events[34]['title'] = 'Mina Mile Race 1 (open water swim)';events[34]['date'] = '2009-12-5';events[34]['url'] = 'http://www.premiermarathons.com/events/mina_mile_race_1_open_water_swim_192.html';events[35] = new Object(); events[35]['title'] = 'Mina Mile Race 2 (open water swim)';events[35]['date'] = '2010-2-6';events[35]['url'] = 'http://www.premiermarathons.com/events/mina_mile_race_2_open_water_swim_200.html';events[36] = new Object(); events[36]['title'] = 'Mina Mile Race 3 (open water swim)';events[36]['date'] = '2010-3-19';events[36]['url'] = 'http://www.premiermarathons.com/events/mina_mile_race_3_open_water_swim_206.html';events[37] = new Object(); events[37]['title'] = 'MSF Vertical Marathon - 2010';events[37]['date'] = '2010-5-28';events[37]['url'] = 'http://www.premiermarathons.com/events/msf_vertical_marathon__2010_215.html';events[38] = new Object(); events[38]['title'] = 'RAK Half Marathon 2009';events[38]['date'] = '2009-2-20';events[38]['url'] = 'http://www.premiermarathons.com/events/rak_half_marathon_2009_143.html';events[39] = new Object(); events[39]['title'] = 'RAK Half Marathon 2010';events[39]['date'] = '2010-2-19';events[39]['url'] = 'http://www.premiermarathons.com/events/rak_half_marathon_2010_178.html';events[40] = new Object(); events[40]['title'] = 'RAK Half Marathon 2010 WAIT LIST ENTRIES';events[40]['date'] = '2010-2-19';events[40]['url'] = 'http://www.premiermarathons.com/events/rak_half_marathon_2010_wait_list_entries_284.html';events[41] = new Object(); events[41]['title'] = 'Standard Chartered Dubai Marathon 2009';events[41]['date'] = '1970-1-1';events[41]['url'] = 'http://www.premiermarathons.com/events/standard_chartered_dubai_marathon_2009_167.html';events[42] = new Object(); events[42]['title'] = 'Standard Chartered Dubai Marathon 2010';events[42]['date'] = '2010-1-22';events[42]['url'] = 'http://www.premiermarathons.com/events/standard_chartered_dubai_marathon_2010_238.html';events[43] = new Object(); events[43]['title'] = 'Standard Chartered Dubai Marathon 2010';events[43]['date'] = '2010-1-22';events[43]['url'] = 'http://www.premiermarathons.com/events/standard_chartered_dubai_marathon_2010_196.html';events[44] = new Object(); events[44]['title'] = 'Standard Chartered Mumbai Marathon - 2009';events[44]['date'] = '2009-1-18';events[44]['url'] = 'http://www.premiermarathons.com/events/standard_chartered_mumbai_marathon__2009_166.html';events[45] = new Object(); events[45]['title'] = 'Super Sports 8km Race & 4km Charity Run - January 2010';events[45]['date'] = '2010-1-9';events[45]['url'] = 'http://www.premiermarathons.com/events/super_sports_8km_race__4km_charity_run__january_2010_195.html';events[46] = new Object(); events[46]['title'] = 'Super Sports 8km Race & 4km Charity Run - May 2010';events[46]['date'] = '2010-5-8';events[46]['url'] = 'http://www.premiermarathons.com/events/super_sports_8km_race__4km_charity_run__may_2010_214.html';events[47] = new Object(); events[47]['title'] = 'Super Sports 8km Race & 4km Charity Run - November 2009';events[47]['date'] = '2009-11-7';events[47]['url'] = 'http://www.premiermarathons.com/events/super_sports_8km_race__4km_charity_run__november_2009_186.html';events[48] = new Object(); events[48]['title'] = 'The Donut 10';events[48]['date'] = '2009-11-20';events[48]['url'] = 'http://www.premiermarathons.com/events/the_donut_10_272.html';events[49] = new Object(); events[49]['title'] = 'Time Trial (cycling) - March 2010';events[49]['date'] = '2010-3-12';events[49]['url'] = 'http://www.premiermarathons.com/events/time_trial_cycling__march_2010_205.html';events[50] = new Object(); events[50]['title'] = 'UAE Adventure Racing Daytime - November 2009';events[50]['date'] = '2009-11-27';events[50]['url'] = 'http://www.premiermarathons.com/events/uae_adventure_racing_daytime__november_2009_190.html';events[51] = new Object(); events[51]['title'] = 'UAE Adventure Racing Night - October 2009';events[51]['date'] = '2009-10-1';events[51]['url'] = 'http://www.premiermarathons.com/events/uae_adventure_racing_night__october_2009_181.html';events[52] = new Object(); events[52]['title'] = 'Wadi Bih Run 2010';events[52]['date'] = '2010-2-12';events[52]['url'] = 'http://www.premiermarathons.com/events/wadi_bih_run_2010_280.html';events[53] = new Object(); events[53]['title'] = 'World Tour and Biathle ME - 2010';events[53]['date'] = '2010-3-6';events[53]['url'] = 'http://www.premiermarathons.com/events/world_tour_and_biathle_me__2010_204.html'; for (var ds in opt.dow) $(target).append('
' + opt.dow[ds] + '
'); var fd = new Date( new Date( opt.day.getTime() ).setDate(1) ); var ldlm = new Date( new Date( fd.getTime() ).setDate(0) ); var ld = new Date( new Date( new Date( fd.getTime() ).setMonth( fd.getMonth() + 1 ) ).setDate(0) ); var copt = {fd:fd.getDay(), lld:ldlm.getDate(), ld:ld.getDate()}; var offsetDayStart = ( ( copt.fd < opt.dayOffset ) ? ( opt.dayOffset - 7 ) : 1 ); var offsetDayEnd = ( ( ld.getDay() < opt.dayOffset ) ? ( 7 - ld.getDay() ) : ld.getDay() ); var i = 1; var css_class = 'day'; var current_day = 0; for ( var d = offsetDayStart, dE = ( copt.fd + copt.ld + ( 7 - offsetDayEnd ) ); d < dE; d++) { if(d <= ( copt.fd - opt.dayOffset)) { current_day = (copt.lld - ( ( copt.fd - opt.dayOffset ) - d )); current_month = fd.getMonth();} else if(d > ( ( copt.fd - opt.dayOffset ) + copt.ld)) { current_day = (d - ( ( copt.fd - opt.dayOffset ) + copt.ld)); current_month = fd.getMonth() + 2;} else { current_day = ( d - ( copt.fd - opt.dayOffset)); current_month = fd.getMonth() + 1;} current_year = fd.getFullYear(); current_date = current_year + '-' + current_month + '-' + current_day; for (var j in events) { if(typeof(events[j]) != 'undefined') { if(current_date == events[j]['date']) { css_class = 'dayevent'; break; } else { css_class = 'day'; } } } $(target).append( (( d <= ( copt.fd - opt.dayOffset ) ) ? '
' + ( copt.lld - ( ( copt.fd - opt.dayOffset ) - d ) ) + '
' : ( ( d > ( ( copt.fd - opt.dayOffset ) + copt.ld ) ) ? '
' + ( d - ( ( copt.fd - opt.dayOffset ) + copt.ld ) ) + '
' : '
' + ( d - ( copt.fd - opt.dayOffset ) ) + '
' ) ) ); i++; } $(target).find('div[id^=' + opt.cID + 'd]:first, div[id^=' + opt.cID + 'd]:nth-child(7n+2)').before( '
' ); $(target).find('div[id^=' + opt.cID + 'd_]:not(.invday)').bind("mouseover mouseout click", function(e){ if ($('.jCalMask', opt._target).length > 0) return false; var osDate = new Date ( $(this).attr('id').replace(/c[0-9]{1,}d_([0-9]{1,2})_([0-9]{1,2})_([0-9]{4})/, '$1/$2/$3') ); if (opt.forceWeek) osDate.setDate( osDate.getDate() + (opt.dayOffset - osDate.getDay()) ); var sDate = new Date ( osDate.getTime() ); if (e.type == 'click') $('div[id*=d_]', opt._target).stop().removeClass('selectedDay').removeClass('overDay').css('backgroundColor', ''); for (var di = 0, ds = opt.days; di < ds; di++) { var currDay = $(opt._target).find('#' + opt.cID + 'd_' + ( sDate.getMonth() + 1 ) + '_' + sDate.getDate() + '_' + sDate.getFullYear()); if ( currDay.length == 0 || $(currDay).hasClass('invday') ) break; if ( e.type == 'mouseover' ) $(currDay).addClass('overDay'); else if ( e.type == 'mouseout' ) $(currDay).stop().removeClass('overDay').css('backgroundColor', ''); else if ( e.type == 'click' ) $(currDay).stop().addClass('selectedDay'); sDate.setDate( sDate.getDate() + 1 ); } if (e.type == 'mouseover') { opt.callback( osDate, di ); } if (e.type == 'click') { opt.day = osDate; opt.callback( osDate, di ); $(opt._target).data('day', opt.day).data('days', di); } }); } })(jQuery);