/******************** Человеческий скрипт ********************/

var timer;

/////////////////////////////////////////////////////////////////////////////////////////////
//Все содержимое файла инкапсулируется в эту функцию, чтобы не засорять пространство имен  //
//и в случае ошибки функция просто незапустилась, а не вызвала каких-либо сообщений        //
/////////////////////////////////////////////////////////////////////////////////////////////

			function autopopup_insertion() {



/*************************** Определение переменных ***************************/

var verticalOffset = 50;
var selector = "a.thumbnail";

var thisFilePrefix;

var placement;
var my_caption;
var my_img;

var documentLoaded = false;

var illSmallCurrent = null;


/***************************  Определение функций   ***************************/

// Эта функция определяет путь к файлу с точки зрения подключающей нас html-странички
function guessFileAbsolutePrefix(prefix, base) {
	var ss = document.getElementsByTagName('script');
	for (i=0; i<ss.length; i++) {
		var name_re = new RegExp((prefix+'/'+base+'$').replace(/\/+/,'(?:/|/.)+'));
		//var base = name.match(/\/([^\/]*)$/)[1];
		var base_re = new RegExp(base+'$');
		if (ss[i].src.match(name_re)) {return ss[i].src.replace(base_re, '')};
	};
	return;
}


//Эта функция назначает обработчику событий документа onLoad указатель на ту функцию,
//которая была переданна в качестве аргумента.
//Пример вызова: addLoadHandler(function(){ documentLoaded = true; modifier(); });

function addLoadHandler(handler) {
	with (window) {
		if(window.addEventListener) {
			window.addEventListener("load",handler,false);
		}
		else if(attachEvent) {
			attachEvent("onload",handler);
		}
		else if(onload) {
			var oldHandler = onload;
			onload = function piggyback() {
				oldHandler();
				handler();
			};
		}
		else {
			onload = handler;
		}
	}
}


//Эта функция дописывает к документу код, неоходимый для работы скрипта:
//подключает таблицы стилей, дописывает теги div и table, ссылкам, заданного класса,
//назначает обработчик события onClick

function modifier() {
	if (!thisFilePrefix) {return}

	//Подключаем два css-файла
	var objHead = document.getElementsByTagName('head');
	var objCSS;

	objCSS = document.createElement('link');
	objCSS.href = thisFilePrefix+'style.css';
	objCSS.type = 'text/css';
	objCSS.rel = 'stylesheet';
	objHead[0].appendChild(objCSS);

	objCSS = document.createElement('link');
	objCSS.href = thisFilePrefix+'shadows/style.css';
	objCSS.type = 'text/css';
	objCSS.rel = 'stylesheet';
	objHead[0].appendChild(objCSS);

	//Дорисовываем необходимый код
	placement = document.createElement("div");
	placement.className = "ill-popup shadowed";
	document.getElementsByTagName('body')[0].appendChild(placement);
	placement.innerHTML =
		'<table class="ill" align="center">' +
			'<tr><td id=td0l><table style="height: 100%"><tr><td id=td1l class="lt"><tr><td id=td100l class="l" style="height: 100%"></table>' +
				'<td class="cont"><div>' +
					'<img id="my_img">' +
					'<img src="' + thisFilePrefix + 'ill-close.gif" alt="Закрыть" class="close" id="close">' +
					'<div id="my_caption" class="caption">123</div>' +
					'</div>' +
				'<td id=td0r><table><tr><td id=td1r class="rt"><tr><td id=td100r class="r" style="height: 100%"></table>' +
			'<tr><td class="lb"><td class="b"><td class="rb">' +
		'</table>';
	my_caption = document.getElementById('my_caption');
	my_img = document.getElementById('my_img');

	document.getElementById('close').onclick = (function(N) {return function() {closeIll(); return false}})();
	my_img.onresize = (function(N) {return function() {correctShadows(); return false}})();
	my_img.onload = (function(N) {return function() {correctShadows(); return false}})();

	//ссылкам заданного класса назначаем обработчик событий onClick
	var elements = getElementsBySelector(selector);
	if (elements.length > 0)
		for (var j=0;j<elements.length;j++)
			elements[j].onclick = (function(N) {return function() {showIll(this); return false}})(this);
}


//Функция возвращает массив элементов с заданным селектором (классом).
//Эта функция очень гибкая, она может различать даже очень сложные селекторы.

function getElementsBySelector(selector)
{
	var tokens = selector.split(' ');
	var currentContext = new Array(document);
	for(var i=0;i<tokens.length;i++)
	{
		token = tokens[i];//.replace(/^\s+/,'').replace(/\s+$/,'');
		if(token.indexOf('#') > -1)
		{
			var bits = token.split('#');
			var tagName = bits[0];
			var id = bits[1];
			var element = document.getElementById(id);
			if(tagName && element.nodeName.toLowerCase() != tagName)
				return new Array();
			currentContext = new Array(element);
			continue;
		}

		if(token.indexOf('.') > -1)
		{
			var bits = token.split('.');
			var tagName = bits[0];
			var className = bits[1];
			if(!tagName)
				tagName = '*';

			var found = new Array;
			var foundCount = 0;
			for(var h=0;h<currentContext.length;h++)
			{
				var elements;
				if(tagName == '*')
					elements = currentContext[h].all ? currentContext[h].all : currentContext[h].getElementsByTagName('*');
				else
					elements = currentContext[h].getElementsByTagName(tagName);

				for(var j=0;j<elements.length;j++)
					found[foundCount++] = elements[j];
			}

			currentContext = new Array;
			var currentContextIndex = 0;
			for(var k=0;k<found.length;k++)
			{
				if(found[k].className && found[k].className.match(new RegExp('\\b'+className+'\\b')))
					currentContext[currentContextIndex++] = found[k];
			}

			continue;
	    }

		if(token.match(/^(\w*)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/))
		{
			var tagName = RegExp.$1;
			var attrName = RegExp.$2;
			var attrOperator = RegExp.$3;
			var attrValue = RegExp.$4;
			if(!tagName)
				tagName = '*';

			var found = new Array;
			var foundCount = 0;
			for(var h=0;h<currentContext.length;h++)
			{
				var elements;
	        	if(tagName == '*')
					elements = currentContext[h].all ? currentContext[h].all : currentContext[h].getElementsByTagName('*');
				else
					elements = currentContext[h].getElementsByTagName(tagName);

				for(var j=0;j<elements.length;j++)
					found[foundCount++] = elements[j];
			}

			currentContext = new Array;
			var currentContextIndex = 0;
			var checkFunction;
			switch(attrOperator)
			{
				case '=':
					checkFunction = function(e) { return (e.getAttribute(attrName) == attrValue); };
					break;
				case '~':
					checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('\\b'+attrValue+'\\b'))); };
					break;
				case '|':
					checkFunction = function(e) { return (e.getAttribute(attrName).match(new RegExp('^'+attrValue+'-?'))); };
					break;
				case '^':
					checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) == 0); };
					break;
				case '$':
					checkFunction = function(e) { return (e.getAttribute(attrName).lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length); };
					break;
				case '*':
					checkFunction = function(e) { return (e.getAttribute(attrName).indexOf(attrValue) > -1); };
					break;
				default :
					checkFunction = function(e) { return e.getAttribute(attrName); };
			}

			currentContext = new Array;
			var currentContextIndex = 0;
			for(var k=0;k<found.length;k++)
			{
				if(checkFunction(found[k]))
					currentContext[currentContextIndex++] = found[k];
			}

			continue;
		}

		tagName = token;
		var found = new Array;
		var foundCount = 0;
		for(var h=0;h<currentContext.length;h++)
		{
			var elements = currentContext[h].getElementsByTagName(tagName);
			for(var j=0;j<elements.length; j++)
				found[foundCount++] = elements[j];
		}

		currentContext = found;
	}

	return currentContext;
}


//Показывает иллюстрацию
function showIll(ill) {
	ill.className = 'ill_small_active';
	if(illSmallCurrent)illSmallCurrent.className = 'ill_small_normal';
	illSmallCurrent=ill;

	placement.style.display = 'none';
	my_img.src = ill.href;
	my_caption.innerHTML = ill.title || ill.href;
	placement.style.top = (ill.getElementsByTagName('img').length ? getPos(ill.getElementsByTagName('img')[0]).top : getPos(ill).top)+verticalOffset + 'px';
	placement.style.display = 'block';

	correctShadows();
	if (!timer) {timer=window.setInterval("correctShadows()", 1000)};
}


//Закрывает илюстрацию
function closeIll() {
	placement.style.display = 'none';
	window.clearInterval(timer); timer=false;
	my_img.src = "";
	illSmallCurrent.className = 'ill_small_normal';
}


// Пытаемся получить абсолютную позицию элемента
function getPos() {
	var scrOfX = 0;
	var scrOfY = 0;
	with (document) {
		if( typeof( window.pageYOffset ) == 'number' ) {
			//Netscape compliant
			scrOfY = window.pageYOffset;
			scrOfX = window.pageXOffset;
		} else if( body && ( body.scrollLeft || body.scrollTop ) ) {
			//DOM compliant
			scrOfY = body.scrollTop;
			scrOfX = body.scrollLeft;
		} else if( documentElement && ( documentElement.scrollLeft || documentElement.scrollTop ) ) {
			//IE6 standards compliant mode
			scrOfY = documentElement.scrollTop;
			scrOfX = documentElement.scrollLeft;
		}
	}
	return {left: scrOfX, top: scrOfY};
}


/***************************    Начало действий     ***************************/

//Узнаем префикс этого файла с точки зрения подключающей страницы
thisFilePrefix = guessFileAbsolutePrefix('autopopup/', 'modify.js');

//Назначаем document.onLoad = modifier();
addLoadHandler(function(){ documentLoaded = true; modifier(); });




/////////////////////////////////////////////////////////////////////////////////////////////
// Это конец большой функции, в которую инкапсулированно все содержимое файла.             //
/////////////////////////////////////////////////////////////////////////////////////////////
			}



//Функция корректировки тени либо после смены картинки, либо изменения ее размеров.
function correctShadows() {
	with (document) {
		var l     = getElementById('td100l');
		var lAndT = getElementById('td0l');
		var lT    = getElementById('td1l');
		var r     = getElementById('td100r');
		var rAndT = getElementById('td0r');
		var rT    = getElementById('td1r');
	}	
	l.style.height = lAndT.offsetHeight - lT.offsetHeight + 'px';
	r.style.height = rAndT.offsetHeight - rT.offsetHeight + 'px';
	// на всякий случай (konqueror, например): 
	if (timer && l.style.height != lAndT.offsetHeight - lT.offsetHeight + 'px') {clearInterval(timer); timer=false}
}



if(document.createElement && document.getElementsByTagName && !navigator.userAgent.match(/opera\/?6/i))
	autopopup_insertion();



