﻿// обратный отсчет
(function($) {
	$.fn.countdown = function (date, options) {
		options = jQuery.extend({
			lang: {
				years: ['год', 'года', 'лет'], months: ['месяц', 'месяца', 'месяцев'], days: ['день', 'дня', 'дней'],
				hours: ['час', 'часа', 'часов'], minutes: ['минута', 'минуты', 'минут'], seconds: ['секунда', 'секунды', 'секунд'],
				plurar: function(n) { return (n % 10 == 1 && n % 100 != 11 ? 0 : n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 10 || n % 100 >= 20) ? 1 : 2); }
			}, 
			prefix: 'Осталось ', finish: 'Поехали!'			
		}, 
		options); 
		var timeDifference = function(begin, end) {		    
			if (end < begin) { return false; }
			var diff = {
				seconds: [end.getSeconds() - begin.getSeconds(), 60],
				minutes: [end.getMinutes() - begin.getMinutes(), 60],
				hours: [end.getHours() - begin.getHours(), 24],
				days: [end.getDate()  - begin.getDate(), new Date(begin.getYear(), begin.getMonth() + 1, 0).getDate() - 1],
				months: [end.getMonth() - begin.getMonth(), 12],
				years: [end.getYear()  - begin.getYear(), 0]
			};		    
			var result = new Array();
			var flag = false;		    
			for (i in diff) {
				if (flag) { diff[i][0]--; flag = false; }    	
				if (diff[i][0] < 0) { flag = true; diff[i][0] += diff[i][1]; }
				if (!diff[i][0]) continue;		    	
				result.push(diff[i][0] + '<small>' + options.lang[i][options.lang.plurar(diff[i][0])] + '</small>');
			}
			return result.reverse().join(' ');
		};
		var elem = $(this);
		var timeUpdate = function () {
			var s = timeDifference(new Date(), date);
			if (s.length) { elem.html(options.prefix + s); } 
			else { clearInterval(timer); elem.html(options.finish); }		
		};
		timeUpdate();
		var timer = setInterval(timeUpdate, 1000);		
	};
})(jQuery);

// анимация фона
(function($) {	
	if(!document.defaultView || !document.defaultView.getComputedStyle){
		var oldCurCSS = jQuery.curCSS;
		jQuery.curCSS = function(elem, name, force){
			if(name === 'background-position'){ name = 'backgroundPosition'; }
			if(name !== 'backgroundPosition' || !elem.currentStyle || elem.currentStyle[ name ]){ return oldCurCSS.apply(this, arguments); }
			var style = elem.style;
			if ( !force && style && style[ name ] ){ return style[ name ]; }
			return oldCurCSS(elem, 'backgroundPositionX', force) +' '+ oldCurCSS(elem, 'backgroundPositionY', force);
		};
	}
	var oldAnim = $.fn.animate;
	$.fn.animate = function(prop){
		if('background-position' in prop){ prop.backgroundPosition = prop['background-position']; delete prop['background-position']; }
		if('backgroundPosition' in prop){ prop.backgroundPosition = '('+ prop.backgroundPosition; }
		return oldAnim.apply(this, arguments);
	};
	function toArray(strg){
		strg = strg.replace(/left|top/g,'0px');
		strg = strg.replace(/right|bottom/g,'100%');
		strg = strg.replace(/([0-9\.]+)(\s|\)|$)/g,"$1px$2");
		var res = strg.match(/(-?[0-9\.]+)(px|\%|em|pt)\s(-?[0-9\.]+)(px|\%|em|pt)/);
		return [parseFloat(res[1],10),res[2],parseFloat(res[3],10),res[4]];
	}
	$.fx.step. backgroundPosition = function(fx) {
		if (!fx.bgPosReady) {
			var start = $.curCSS(fx.elem,'backgroundPosition');
			if(!start){ start = '0px 0px'; }
			start = toArray(start);
			fx.start = [start[0],start[2]];
			var end = toArray(fx.options.curAnim.backgroundPosition);
			fx.end = [end[0],end[2]];
			fx.unit = [end[1],end[3]];
			fx.bgPosReady = true;
		}
		var nowPosX = [];
		nowPosX[0] = ((fx.end[0] - fx.start[0]) * fx.pos) + fx.start[0] + fx.unit[0];
		nowPosX[1] = ((fx.end[1] - fx.start[1]) * fx.pos) + fx.start[1] + fx.unit[1];           
		fx.elem.style.backgroundPosition = nowPosX[0]+' '+nowPosX[1];
	};	
