	jQuery.fn.countdown = function (date, options, dateparse) {
		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);
				}
			},*/
			/*lang: {
				years:   ['year', 'years'],
				months:  ['month', 'months'],
				days:    ['day', 'days'],
				hours:   ['hour', 'hours'],
				minutes: ['minute', 'minutes'],
				seconds: ['second', 'seconds'],
				plurar:  function(n) {
					return (n == 1 ? 0 : 1);
				}
			},*/
			lang: {
				years:   [' year, ', ' years, '],
				months:  [' month, ', ' months, '],
				days:    [' day, ', ' days, '],
				hours:   [':', ':'],
				minutes: [':', ':'],
				seconds: ['', ''],
				plurar:  function(n) {
					return (n == 1 ? 0 : 1);
				}
			},
			prefix: "end: ",
			finish: "End!",
			redirect: '',
			dateparse: "2050-01-01 00:00:00" 
		}, options);
		//var timestamp		= options.dateparse;
		var timestamp		= Date.parse(options.dateparse);

		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()-1, 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;
				if(i=='days' && diff[i][0]<0){ //28,29+year
					diff['days'][0]=Math.abs(1+diff['days'][0]);
					diff['months'][0]++;
				}
				if(i=='years' && diff[i][0]<0)
					return '';
				if(i=='seconds' && diff[i][0]<10)
					diff[i][0]	= '0' + diff[i][0];
				if(i=='minutes' && diff[i][0]<10)
					diff[i][0]	= '0' + diff[i][0];
				//alert(i + ' - ' + diff[i][0]);
				if(diff[i][0]!=0)
				result.push(diff[i][0] + '' + options.lang[i][options.lang.plurar(diff[i][0])]);
			}
			return result.reverse().join('');
		};
		var elem		= $(this);
		var timeUpdate	= function(){
			dateJS		= new Date();
			//alert(timestamp + ' - ' + parseInt(timestamp));
			timestamp	= parseInt(timestamp) + 1000;
			dateJS.setTime(timestamp);
			var s = timeDifference(dateJS, date);
			if(s.length){
				elem.html(options.prefix + s);
			}else{
				clearInterval(timer);
				elem.html(options.finish);
				if(options.redirect != '')
					window.location.href	= options.redirect;
			}		
		};
		timeUpdate();
		var timer = setInterval(timeUpdate, 1000);		
	};

