function layer(layerName){
 //DOM1
  if(document.getElementById) return document.getElementById(layerName);
 //MSIE4
  if(document.all) return document.all[layerName];
 //Netscape 4
  if(document.layers) return document.layers[layerName];
 //неподдерживаемый браузер
  return null;
}

function publishSiteAlive()
{
var l = layer("site_alive");
l.innerHTML = "<b>" + calcSiteAlive() + "</b>";
}

	/*вычисляет сколько лет и месяцев работает данный сайт*/
function calcSiteAlive()
{
//alert(layer("req-msg"));
var d_str = document.forms['siteform'].elements['age'].value;
	if(d_str == "") return "";
	
var d_now = new Date();
var now_y = d_now.getFullYear();
var now_m = d_now.getMonth() + 1;

var n = d_str.indexOf("/");
	if(n < 0) return "Date format ERROR!";
	
var start_y = parseInt(d_str.substr(n+1));
var start_m = parseInt(d_str.substr(0, n));
	if(isNaN(start_y || isNaN(start_m)))  return "Date format ERROR!";
	
var alive_y = 0;
var alive_m = 0;

	if(now_y == start_y)
	{
	alive_m = now_m - start_m;
	}
	else if(start_m > now_m)
	{
	alive_m = 12 - start_m + now_m;
	alive_y = now_y - start_y - 1;
	}
	else
	{
	alive_m = now_m - start_m;
	alive_y = now_y - start_y;
	}

	if(alive_m < 0 || alive_y < 0)
	return "Date format ERROR!";	
		
//alert(start_y + " : " + now_y);
return "The blog has been active for " + alive_y + " years " + alive_m + " months";
}

function show_options(optlayer, checkbox)
{
optdom   = document.getElementById(optlayer);
checkdom = document.getElementById(checkbox);

	if(checkdom.checked)
	optdom.style.display = 'block';
	else
	optdom.style.display = 'none';
}

function trim(string_)
{
return string_.replace(/(^\s+)|(\s+$)/g, "");
}

function showDiv(id_div)
{	/* Если div спрятан - показываем его, иначе - прячем */
	
var ua = navigator.userAgent.toLowerCase();
isIE = (ua.indexOf("msie") != -1 && ua.indexOf("opera") == -1); 
var disp = 'table-cell';

	if(isIE) disp = 'inline';
	
var p = jQuery("#" + id_div);

	if(p.css('display') == 'none')
	p.css('display', disp);
	else
	p.css('display', 'none');

}

function SelectText(element) {
	/*
	выделяет все содержимое блока element
	*/

 var target = document.getElementById(element);
  var rng, sel;
  if ( document.createRange ) {
    rng = document.createRange();
    rng.selectNode( target )
    sel = window.getSelection();
    sel.removeAllRanges();
    sel.addRange( rng );
  } else {
    var rng = document.body.createTextRange();
    rng.moveToElementText( target );
    rng.select();
  }   
}

function textareaMaxLen(txtar, maxlen, msg_div)
{
		/*
		Устанавливает значение maxlen для эл-та ввода типа textarea. Нужно навешивать на событи keyup
			textar - целевой объект textarea
			maxlen - максимальная длинна ввоимых данных
			msg_div - необязательный параметр - div для вывода сообщений (jQuery)
		*/
len = txtar.value.length;

	if(len > maxlen)
	{
	txtar.value = txtar.value.substr(0, maxlen);
	
		if(msg_div)
		{
		msg_div.css('color', 'red');
		msg_div.html('<p>Too long message!</p>');
		}
	}
	else
	{
	msg_div.css('color', 'blue');
	msg_div.html('<p>We can enter '+ (maxlen - len) +' characters.</p>');	
	}
}

function sprintf( ) {	// Return a formatted string
	// 
	// +   original by: Ash Searle (http://hexmen.com/blog/)
	// + namespaced by: Michael White (http://crestidg.com)

	var regex = /%%|%(\d+\$)?([-+#0 ]*)(\*\d+\$|\*|\d+)?(\.(\*\d+\$|\*|\d+))?([scboxXuidfegEG])/g;
	var a = arguments, i = 0, format = a[i++];

	// pad()
	var pad = function(str, len, chr, leftJustify) {
		var padding = (str.length >= len) ? '' : Array(1 + len - str.length >>> 0).join(chr);
		return leftJustify ? str + padding : padding + str;
	};

	// justify()
	var justify = function(value, prefix, leftJustify, minWidth, zeroPad) {
		var diff = minWidth - value.length;
		if (diff > 0) {
			if (leftJustify || !zeroPad) {
			value = pad(value, minWidth, ' ', leftJustify);
			} else {
			value = value.slice(0, prefix.length) + pad('', diff, '0', true) + value.slice(prefix.length);
			}
		}
		return value;
	};

	// formatBaseX()
	var formatBaseX = function(value, base, prefix, leftJustify, minWidth, precision, zeroPad) {
		// Note: casts negative numbers to positive ones
		var number = value >>> 0;
		prefix = prefix && number && {'2': '0b', '8': '0', '16': '0x'}[base] || '';
		value = prefix + pad(number.toString(base), precision || 0, '0', false);
		return justify(value, prefix, leftJustify, minWidth, zeroPad);
	};

	// formatString()
	var formatString = function(value, leftJustify, minWidth, precision, zeroPad) {
		if (precision != null) {
			value = value.slice(0, precision);
		}
		return justify(value, '', leftJustify, minWidth, zeroPad);
	};

	// finalFormat()
	var doFormat = function(substring, valueIndex, flags, minWidth, _, precision, type) {
		if (substring == '%%') return '%';

		// parse flags
		var leftJustify = false, positivePrefix = '', zeroPad = false, prefixBaseX = false;
		for (var j = 0; flags && j < flags.length; j++) switch (flags.charAt(j)) {
			case ' ': positivePrefix = ' '; break;
			case '+': positivePrefix = '+'; break;
			case '-': leftJustify = true; break;
			case '0': zeroPad = true; break;
			case '#': prefixBaseX = true; break;
		}

		// parameters may be null, undefined, empty-string or real valued
		// we want to ignore null, undefined and empty-string values
		if (!minWidth) {
			minWidth = 0;
		} else if (minWidth == '*') {
			minWidth = +a[i++];
		} else if (minWidth.charAt(0) == '*') {
			minWidth = +a[minWidth.slice(1, -1)];
		} else {
			minWidth = +minWidth;
		}

		// Note: undocumented perl feature:
		if (minWidth < 0) {
			minWidth = -minWidth;
			leftJustify = true;
		}

		if (!isFinite(minWidth)) {
			throw new Error('sprintf: (minimum-)width must be finite');
		}

		if (!precision) {
			precision = 'fFeE'.indexOf(type) > -1 ? 6 : (type == 'd') ? 0 : void(0);
		} else if (precision == '*') {
			precision = +a[i++];
		} else if (precision.charAt(0) == '*') {
			precision = +a[precision.slice(1, -1)];
		} else {
			precision = +precision;
		}

		// grab value using valueIndex if required?
		var value = valueIndex ? a[valueIndex.slice(0, -1)] : a[i++];

		switch (type) {
			case 's': return formatString(String(value), leftJustify, minWidth, precision, zeroPad);
			case 'c': return formatString(String.fromCharCode(+value), leftJustify, minWidth, precision, zeroPad);
			case 'b': return formatBaseX(value, 2, prefixBaseX, leftJustify, minWidth, precision, zeroPad);
			case 'o': return formatBaseX(value, 8, prefixBaseX, leftJustify, minWidth, precision, zeroPad);
			case 'x': return formatBaseX(value, 16, prefixBaseX, leftJustify, minWidth, precision, zeroPad);
			case 'X': return formatBaseX(value, 16, prefixBaseX, leftJustify, minWidth, precision, zeroPad).toUpperCase();
			case 'u': return formatBaseX(value, 10, prefixBaseX, leftJustify, minWidth, precision, zeroPad);
			case 'i':
			case 'd': {
						var number = parseInt(+value);
						var prefix = number < 0 ? '-' : positivePrefix;
						value = prefix + pad(String(Math.abs(number)), precision, '0', false);
						return justify(value, prefix, leftJustify, minWidth, zeroPad);
					}
			case 'e':
			case 'E':
			case 'f':
			case 'F':
			case 'g':
			case 'G':
						{
						var number = +value;
						var prefix = number < 0 ? '-' : positivePrefix;
						var method = ['toExponential', 'toFixed', 'toPrecision']['efg'.indexOf(type.toLowerCase())];
						var textTransform = ['toString', 'toUpperCase']['eEfFgG'.indexOf(type) % 2];
						value = prefix + Math.abs(number)[method](precision);
						return justify(value, prefix, leftJustify, minWidth, zeroPad)[textTransform]();
					}
			default: return substring;
		}
	};

	return format.replace(regex, doFormat);
}

function html_entity_decode(str) {
  var tarea=content.document.createElement('textarea'); // the "content" part is needed in buttons
  tarea.innerHTML = str;
  return tarea.value;
}



