﻿jQuery(function ($){
if(skilled_plugin &&
skilled_plugin.data &&
skilled_plugin.data.vcWidgets &&
skilled_plugin.data.vcWidgets.countdown &&
skilled_plugin.data.vcWidgets.countdown.items
){
var parser=/([0-9]{2})/gi;
var currDate='00:00:00:00:00';
var nextDate='00:00:00:00:00';
var newDateFormat='';
var symbols={
years: '%Y',
months: '%m',
weeks: '%w',
days: '%d',
hours: '%H',
minutes: '%M',
seconds: '%S'
};
var template='';
template +='<div class="time <%=label %>">';
template +='<span class="count curr top"><%=curr %></span>';
template +='<span class="count next top"><%=next %></span>';
template +='<span class="count next bottom"><%=next %></span>';
template +='<span class="count curr bottom"><%=curr %></span>';
template +='<span class="label"><%=translation.length < 6 ? translation:translation.substr(0, 3)  %></span>';
template +='</div>';
template=_.template(template);
$.each(skilled_plugin.data.vcWidgets.countdown.items, function (i, countdown){
function strfobj(str){
var parsed=str.match(parser),
obj={};
labels.forEach(function (label, i){
if(parsed){
obj[label]=parsed[i]
}});
return obj;
}
function diff(obj1, obj2){
var diff=[];
labels.forEach(function (key){
if(obj1[key]!==obj2[key]){
diff.push(key);
}});
return diff;
}
var out='';
var labels=countdown.options.labels.split(/[\s,]+/);
var labelTranslations=countdown.options.labelTranslations.split(/[\s,]+/);
var $countdown=$('#' + countdown.id);
var initData=strfobj(currDate);
$.each(labels, function (i, label){
var symbol=symbols[label];
if(symbol){
if(i){
newDateFormat +=':' + symbol;
}else{
newDateFormat +=symbol;
}}
var translation='';
if(labelTranslations.length&&labelTranslations[i]){
translation=labelTranslations[i];
}else{
translation=label;
}
$countdown.append(template({
curr: initData[label],
next: initData[label],
label: label,
translation: translation
}));
});
$countdown.countdown(countdown.options.targetDate, function (event){
var newDate=event.strftime(newDateFormat),
data;
if(newDate!==nextDate){
currDate=nextDate;
nextDate=newDate;
data={
'curr': strfobj(currDate),
'next': strfobj(nextDate)
};
diff(data.curr, data.next).forEach(function (label){
var selector='.%s'.replace(/%s/, label),
$node=$countdown.find(selector);
$node.removeClass('flip');
$node.find('.curr').text(data.curr[label]);
$node.find('.next').text(data.next[label]);
_.delay(function ($node){
$node.addClass('flip');
}, 50, $node);
});
}});
});
}});