jQuery.fn.countdown = function(start) {
    if(jQuery(this).length == 0) return false;
    var rs = this;
    var go = false;
    
    if(start) {
    	var now = new Date();
    	var nowTS = Math.floor(now.getTime() / 1000);
    	
        this.each(
            function(){             	
            	var id = $(this).attr('id');            	
            	var params = $(this).attr('rel');
            	var paramsArray = params.split(',');
            	var from = parseInt(paramsArray[0]);
            	var to = parseInt(paramsArray[1]);
            	var stockStart = parseInt(paramsArray[2]);
            	var stock = parseInt(paramsArray[3]);            	
            	
            	var type = nowTS < from ? -1 : nowTS > to ? 1 : 0;
            	var ts = type == -1 ? from - nowTS : to - nowTS;
            	
            			
            	if (type == -1 || type == 0) {
	            	var days = Math.floor(ts/86400);	
	            	ts %= 86400;
	            	
	            	var daysMax = type == 0 ? Math.ceil((to - from) / 86400) : 7; 
	            			
	            	var hours = Math.floor(ts/3600);	
	            	ts %= 3600;
	            	
	            	var minutes = Math.floor(ts/60);	
	            	ts %= 60;
	 	            	
	            	var daysSelector = '#'+id+' .days';
	            	var hoursSelector = '#'+id+' .hours';
	            	var minutesSelector = '#'+id+' .minutes';
	            	var secondsSelector = '#'+id+' .seconds';
	            	var stockSelector = '#'+id+' .stock';
	            	
	            	var daysBarSelector = '#'+id+' .days_bar';
	            	var hoursBarSelector = '#'+id+' .hours_bar';
	            	var minutesBarSelector = '#'+id+' .minutes_bar';
	            	var secondsBarSelector = '#'+id+' .seconds_bar';
	            	var stockBarSelector = '#'+id+' .stock_bar';
	            	var stockBoxSelector = '#'+id+' .stock_box';
	            	
	            	$(daysSelector).html(days < 10 ? "0" + days : days);
	            	$(hoursSelector).html(hours < 10 ? "0" + hours : hours);
	            	$(minutesSelector).html(minutes < 10 ? "0" + minutes : minutes);
	            	$(secondsSelector).html(ts < 10 ? "0" + ts : ts);	            	
           	
	            	var stockRel = Math.floor(((stock > stockStart ? stockStart : stock)  / stockStart) * 100);	            	
	            	
	            	var daysMaxWidth = parseInt($(daysBarSelector).data('max-width'));
	            	if (isNaN(daysMaxWidth)) {
	            		daysMaxWidth = parseInt($(daysBarSelector).width());
	            		$(daysBarSelector).data('max-width', daysMaxWidth);
	            	}
	            	
	            	var hoursMaxWidth = parseInt($(hoursBarSelector).data('max-width'));
	            	if (isNaN(hoursMaxWidth)) {
	            		hoursMaxWidth = parseInt($(hoursBarSelector).width());
	            		$(hoursBarSelector).data('max-width', hoursMaxWidth);
	            	}
	            	
	            	var minutesMaxWidth = parseInt($(minutesBarSelector).data('max-width'));
	            	if (isNaN(minutesMaxWidth)) {
	            		minutesMaxWidth = parseInt($(minutesBarSelector).width());
	            		$(minutesBarSelector).data('max-width', minutesMaxWidth);
	            	}
	            	
	            	var secondsMaxWidth = parseInt($(secondsBarSelector).data('max-width'));
	            	if (isNaN(secondsMaxWidth)) {
	            		secondsMaxWidth = parseInt($(secondsBarSelector).width());
	            		$(secondsBarSelector).data('max-width', secondsMaxWidth);
	            	}	            	
	            	
	            	var stockMaxWidth = parseInt($(stockBarSelector).data('max-width'));
	            	if (isNaN(stockMaxWidth)) {
	            		stockMaxWidth = parseInt($(stockBarSelector).width());
	            		$(stockBarSelector).data('max-width', stockMaxWidth);
	            	}
	            	
	            	$(daysBarSelector).width(Math.floor((days / daysMax) * daysMaxWidth));
	            	$(hoursBarSelector).width(Math.floor(((hours + 1) / 24) * hoursMaxWidth));
	            	$(minutesBarSelector).width(Math.floor(((minutes +1) / 60) * minutesMaxWidth));
	            	$(secondsBarSelector).width(Math.floor(((ts +1) / 60) * secondsMaxWidth));
	            	
	            	if (isNaN(stockRel)) {
	            		$(stockBoxSelector).hide();            		
	            	} else {	            		
	            		$(stockSelector).html(stockRel < 10 ? "0" + stockRel : stockRel);
	            		$(stockBarSelector).width(Math.floor((stockRel / 100) * stockMaxWidth));
	            		$(stockBoxSelector).show();
	            	}
	            	
	            	go = true;
            	}
            	
            	switch(type) {
        			case -1: $('#'+id+'_promotion_run_time_future').show(); $('#'+id+'_promotion_run_time_current').hide(); $('#'+id+'_promotion_run_time_ended').hide(); $('#'+id+'_promotion_timer_stock_value').hide(); $('#'+id+'_promotion_timer_article_stock').hide(); break;
        			case 0: $('#'+id+'_promotion_run_time_future').hide(); $('#'+id+'_promotion_run_time_current').show(); $('#'+id+'_promotion_run_time_ended').hide(); $('#'+id+'_promotion_timer_stock_value').show(); $('#'+id+'_promotion_timer_article_stock').show(); break;
        			case 1: $('#'+id+'_promotion_run_time_future').hide(); $('#'+id+'_promotion_run_time_current').hide(); $('#'+id+'_promotion_run_time_ended').show(); $('#'+id+'_promotion_timer_stock_value').hide(); $('#'+id+'_promotion_timer_article_stock').hide(); break;
            	}       	
            }
        );
    }else{
        go = true;
    }
    if(go){
        window.setTimeout( function() {jQuery(rs).countdown(true);}, 500);
    }
    return this;
};
