$(function() {
	
	// init
	
	var title = $('#title');
	var afterTitle = $('#afterTitle');
	var hidden_title = $('.text P');
	var example = $('.text SMALL A');
	
	var date_str = $('#date_str');
	var time_inp = $('#time_inp');
	var calendar_btn = $('#call_calendar');
	
	var format_block = $('.format P');
	var embed_code = $('#code');
	
	format_block.find('input').attr('checked', true);
	
	
	
	// actions
	
	$('.output p input').attr('checked', true);
	disable_checkboxes();
	check_embed_enable();
	$('body').click(function(e) { // global check
		check_embed_enable();
		//e.preventDefault();
		//e.stopPropagation();
		//return false;
	});
	$('body').mouseup(function() { // global check
		check_embed_enable();
	});
	
	// ====================================================================
	//                           Widget's title
	// ====================================================================
	
	function check_embed_enable() {
		if (title.attr('value') == '') 
			embed_code.attr('disabled', 'disabled').attr('value','Ожидается ввод параметров');
		else {	 
			embed_code.attr('disabled', '').attr('value', getCode());
			embed_code.click(function(e){
				$(this).select();
				e.preventDefault();
				e.stopPropagation();
				return false;
			});
		}
	}
	
	title.keyup(function() {
		refresh_title( $(this).attr('value') );
		check_embed_enable();
	});
	
	title.keydown(function() {
		if ($(this).attr('value').length > 150)
			$(this).attr('value', $(this).attr('value').substr(0,150))
	});
	afterTitle.keydown(function() {
		if ($(this).attr('value').length > 150)
			$(this).attr('value', $(this).attr('value').substr(0,150))
	});
	
	function refresh_title(str) {	
		if (str.length > 150)
			str = str.substr(0,150);	
		params.title = str;
	}
	
	example.click(function() {						// default text fill
		title.attr('value', $(this).text());
		refresh_title($(this).text());
	});
	
	example.text(random_phrase());
	function random_phrase() {
		var phrases = [
			"Я не стригся",
			"Я не получал зарплату",
			"До следующей зарплаты",
			"До моего дня рождения",
			"Куплю баксы через",
			"Продам евро через",
			"До Нового года",
			"До Евровидения осталось",
			"До олимпиады в Сочи"
		];
		var index =  Math.floor ( Math.random()* phrases.length + 1 );
		return phrases[index];
	}
	
	// ====================================================================
	//                               Calendar
	// ====================================================================
	var months = ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'];
	
	// Set default calndar values
	$('#calendar input.y').attr('value', params.year);
	$('#calendar span.m').text(months[params.month]);
	time_inp.attr('value', '00:00' );
	
	// When press button, calendar changes visibility
	$('#calendar').hide();
	calendar_btn.click(function(e) {
		$('#calendar:visible').fadeOut('fast');
		if ($.browser.msie)
			$('#calendar:hidden').css({
				 left:  $(this).offset().left + 45 + 'px',
				 top: 	$(this).css('top')
				 		//e.pageY
				 		//$(this).offset().top
			 })
			 .fadeIn('fast');
		else
			$('#calendar:hidden').css({
				 left:  $(this).offset().left + 45 + 'px',
				 top: 	//e.pageY 
				 		$(this).css('top')  
				 		//$(this).offset().top + 'px' 
			 })
			 .fadeIn('fast');
	});
	
	// Year change buttons
	$('#years div.l').click(function() {
		$('#calendar input.y').attr('value', -- params.year );
	});
	$('#years div.r').click(function() {
		$('#calendar input.y').attr('value', ++ params.year );
	});
	
	// Month change buttons
	$('#months div.l').click(function() {
		if (params.month > 0)
			params.month -- ;
		else {
			params.month = 11;
			$('#calendar input.y').attr('value', -- params.year );
		}	
		$('#calendar span.m').text( months[ params.month ] );
	});
	$('#months div.r').click(function() {
		if (params.month < 11)
			params.month ++ ;
		else {
			params.month = 0;
			$('#calendar input.y').attr('value', ++ params.year );
		}	
		$('#calendar span.m').text( months[ params.month ] );
	});
	// fill days container
	$('#months DIV, #years DIV, #call_calendar').click(function() { fill_days() });
	$('#years INPUT').change(function() {	
		var value = $(this).attr('value');
		var regexp = /^[0-9]{4}$/;
		if (regexp.test(value)) {
			//$('#widget').data('data').year = value;
			params.year = value
			fill_days();
		} else
			$(this).attr('value', params.year);
	});
	
	function fill_days() {
		$('#calendar #days').html('');
		//  first fill with some empty blocks
		var date = new Date(params.year, params.month, 1);
		var day = date.getDay();
		day = day == 0 ? 7 : day;
		$('#days').append('<div></div>');
		var curDiv = $('#days div:first');
		for (var i = 1; i < day; i++) 
			curDiv.append('<span></span>');
		//  then fill with days
		var daysInMonth = d_in_my( params.month + 1, params.year );
		for (var i = 1; i <= daysInMonth; i++) {
			curDiv.append('<a>'+ i +'</a>');
			if (curDiv.find('a, span').length > 6) {
				curDiv.parent().append('<div></div>');
				curDiv = curDiv.parent().find('div:last');
			}
		}
		$('#days a').bind('click', define_date);
	}
	
	// Filling date span tag
	function define_date() {
		params.day = $(this).text();
		var months = ['января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря'];
		date_str.text( params.day + ' ' + months[params.month] + ' ' + params.year );
		$('#calendar:visible').fadeOut('fast');
		if (future()) 
			hidden_title.show();
		else
			hidden_title.hide();		
	}
	
	afterTitle.keyup(function() {
		params.after = $(this).attr('value');						   
		check_embed_enable();
	});
	
	
	// Checks if future date
	function future() {
		var now = new Date();
		var then = new Date(
			params.year,
			params.month, 	
			params.day, 	
			params.hour, 
			params.minute 	
		); 
		if (now.getTime() > then.getTime()) {
			params.event = 'past';
			return false;
		} 
		params.event = 'future';
		return true;
	}
	
	function d_in_my (m,y) {
		// leap year if its number is multiple 400 or multiple 4 and not multiple 100
		return (m!=2?((m%2)^(m>7))+30:(!(y%400)||!(y%4)&&(y%25)?29:28));
	} 
	
	
	// ====================================================================
	//                               Time
	// ====================================================================
	
	time_inp.mask("99:99");
	time_inp.change(function() {
		var value = $(this).attr('value');
		var regexp = /^[0-9]{2}:[0-9]{2}$/;
		if (regexp.test(value)) {
			var time = value.split(':');
			var h = time[0]; 
			var m = time [1];
			if (h < 24 && m <60) {
				params.hour =   h;
				params.minute = m;
				if (future()) 
					hidden_title.show();
				else
					hidden_title.hide();
			}
			else 
				$(this).attr('value', params.hour +':'+  params.minute );
		} else
			$(this).attr('value', params.hour +':'+  params.minute );
	});
	
	
	// ====================================================================
	//                               Output
	// ====================================================================

	format_block.click(function() {
		disable_checkboxes();
		var jQformats =  $(this).find('input:checked');
		params.format = [];
		for (var i = 0; i < jQformats.length; i++) 
			params.format[i] = jQformats.eq(i).attr('value');
	});
	
	function disable_checkboxes() {
		var boxes = format_block.find('input');
		boxes.attr('disabled','disabled');
		format_block.find('input:checked').attr('disabled','');
		
		for (var i = 0, length = boxes.length ; i < length; i++) {
			if (boxes.eq(i).attr('checked')) {
				// Shaman king
				if (boxes.eq(i+1).attr('checked') && boxes.eq(i-1).attr('checked') ) { 
					boxes.eq(i).attr('disabled', 'disabled');
				} else {
					boxes.eq(i).attr('disabled','');
					if (boxes.eq(i-2).attr('checked')) {
						boxes.eq(i-1).attr('disabled', boxes.eq(i-1).attr('checked'));
					}
					else 
						boxes.eq(i-1).attr('disabled', '');
					boxes.eq(i+1).attr('disabled', boxes.eq(i+1).attr('checked'));
				}
				
			}
		}
		if (format_block.find('input:checked').length == 0)
			boxes.attr('disabled','');
			
		format_block.find('input').next().removeClass('grey');	
		format_block.find('input[disabled]').next().addClass('grey');
	}
	
	// ====================================================================
	//                               Get code
	// ====================================================================
	// Getting insert code
	function getCode() {
		var data = get_base64_data(),
			domain = $('#domain').attr('value'),
			paramAttr = 'params='+ domain +'|'+ Widget_color +'|'+ data,
			ins = $('#widget')
			
		ins.find('param[name = "flashVars"]').attr('value', paramAttr)
		ins.find('embed').attr('FlashVars', paramAttr)
		
		return ins.parent().html().toString()
	}
	
	checkHash()
	check_embed_enable()
});

String.prototype.replaceAll = function(search, replace){
  return this.split(search).join(replace);
}

var date = new Date();
var params =  { 
	year: 	date.getFullYear(), 
	month:	date.getMonth(),
	day: 	date.getDate(),
	hour: 	0,
	minute: 0,
	title : 'Заголовок виджета',
	after:	'',
	color: 	'#EE0000',
	event: 	'past',
	format: ['years', 'months', 'days', 'hours', 'minutes', 'seconds']
};
function get_base64_data() {
	// value devider is '<'	
	params.title = params.title.replace('<', '&lt;'); // screening
	params.after = params.after.replace('<', '&lt;'); // screening too
	var data = 								
		params.year 	+ '<' +
		params.month 	+ '<' +
		params.day 		+ '<' +
		params.hour 	+ '<' +
		params.minute 	+ '<' +
		params.title 	+ '<' +
		params.after	+ '<' +
		params.color 	+ '<' +
		params.event	+ '<' +
		params.format.toString()
	;
	data = encodeBase64(urlEncode(data));
	data = data.replace(/(\n(\r)?)/g, ''); // delete \n
	return data;
}

function checkHash() {
	//#10.9.2009-до_днюхи_осталось
	var hash  = document.location.hash.replace('#','')
	if ( (/\d{1,2}\.\d{1,2}\.\d{4}-.+/).test(hash) ) { 
		var	dStr  = hash.split('-')[0].split('.'),
			title = hash.split('-')[1].replaceAll('_',' '),
			date  = new Date(dStr[2],dStr[1] - 1,dStr[0])
		params.year = date.getFullYear()
		params.month = date.getMonth()
		params.day = date.getDate()
		params.title = unescape(title)
		
		$('#title').attr('value',params.title)
	//	refresh_title( title );
	//	check_embed_enable();
	}
} 
