рони,
если приходит пустая positions то календарь не формируется... я добавил проверку. но самое важное что при переходе на следующий месяц не отмечает даты которые заняты.
<script>
$(document).ready( function() {
// $('#fset_calendar').hide();
});
$('#country_slug').on('change', function() {
var country_slug = $(this).val();
if (country_slug) {
$('#fset_calendar').show();
cal();
} else {
$('#fset_calendar').hide();
}
});
function cal(dat) {
/// сбрасываем все переменные
for (i = 1; i <= 42; i++) {
$("#col" + i).html('');
$("#week" + i).show();
$("#prev").show();
}
/// зпросим данные по календарю
$.ajax({
type: 'GET',
url: '/positions/get_calendar',
data: {
date: dat
}
}).done(function( result ) {
/// распарсим что пришло
var db = JSON.parse(result);
/// если db['positions'] пустая календарь не формируется
if (db['positions']) {
var view = db['positions'];
} else {
var view = ["d","0"];
}
console.log(view);
var busy = view.map(function(e) {
return +e.d
});
var length = +db['dayofmonth'];
var today = +db['today'];
var day = +db['day'];
for (var i = 0; i < length; i++) {
var num = i + 1;
var html = num + '<br><input class="check" type="checkbox" name="day_view[]" value="" onclick="clk(this);">';
if ((busy.indexOf(num) > -1 || num <= today) && db['month'] <= db['tomonth'] ) html = num + '<br>-';
var id = "#col" + (i + day);
$(id).html(html).toggleClass("red", num == today)
}
//alert();
$("#date").html(db['date'] + '<input type="hidden" name="date_show[]" value="'+ db['date'] +'">');
/// соберем календарь
/*
for (i = 1; i <= db['dayofmonth']; i++) {
/// вычисляем день по счету с какого начинается неделя
var d = parseInt(db['day']) + parseInt(i) - parseInt(1);
/// если сегодня меньше и то не показывать чекбокс
if (db['today'] >= i && db['month'] <= db['tomonth']) {
$("#col" + d).html(i + '<br>-');
} else {
if (view) {
// if (i === view[0]['d']) {
// console.log(view[0]['d']);
// }
//for(k=0; k < view.length; k++) {
//if (view[i] == i) {
//console.log(i);
//}
//else {
//}
//}
}
//if (view[i] == i) {
// $("#col" + d).html(i + '<br>-');
//} else {
$("#col" + d).html(i + '<br><input class="check" type="checkbox" name="date_show[]" value="'+ i +'" onclick="clk(this);">');
//}
}
}
*/
/// вычислим сколько недель и спрячем ненужное
// var a = Math.ceil(parseInt(d) / 7);
// if (a == '5') {$("#week6").hide();}
// if (a == '4') {$("#week5").hide();$("#week6").hide();}
// if (db['month'] <= db['tomonth']) {$("#prev").hide();}
/// ссылки на переход туда сюда
next = db['next'];
prev = db['prev'];
today = db['today'];
});
}
cal();
</script>
<div id="calendar" align="center">
<table class="tablecall">
<tr>
<td>
<a class="arrow" id="prev" onclick="cal(prev);"> <<< </a>
</td>
<td>
<table class="tablecall">
<tr class="trcall">
<td colspan="7">Выбираем <span id="date"></span></td>
</tr>
<tr class="trcall">
<td>Пн</td>
<td>Вт</td>
<td>Ср</td>
<td>Чт</td>
<td>Пт</td>
<td><font color="red">Сб</font></td>
<td><font color="red">Вс</font></td>
</tr>
<tr class="day">
<td id="col1"></td>
<td id="col2"></td>
<td id="col3"></td>
<td id="col4"></td>
<td id="col5"></td>
<td id="col6"></td>
<td id="col7"></td>
</tr>
<tr class="day">
<td id="col8"></td>
<td id="col9"></td>
<td id="col10"></td>
<td id="col11"></td>
<td id="col12"></td>
<td id="col13"></td>
<td id="col14"></td>
</tr>
<tr class="day">
<td id="col15"></td>
<td id="col16"></td>
<td id="col17"></td>
<td id="col18"></td>
<td id="col19"></td>
<td id="col20"></td>
<td id="col21"></td>
</tr>
<tr class="day" id="week4">
<td id="col22"></td>
<td id="col23"></td>
<td id="col24"></td>
<td id="col25"></td>
<td id="col26"></td>
<td id="col27"></td>
<td id="col28"></td>
</tr>
<tr class="day" id="week5">
<td id="col29"></td>
<td id="col30"></td>
<td id="col31"></td>
<td id="col32"></td>
<td id="col33"></td>
<td id="col34"></td>
<td id="col35"></td>
</tr>
<tr class="day" id="week6">
<td id="col36"></td>
<td id="col37"></td>
<td id="col38"></td>
<td id="col39"></td>
<td id="col40"></td>
<td id="col41"></td>
<td id="col42"></td>
</tr>
</table>
</td>
<td><a class="arrow" onclick="cal(next);"> >>> </a></td>
</tr>
</table>
</div>