// === Общие функции ===
// (c) Corelogic, 2006-2007

// объявление псевдонимов
var main_addevent = main_addEvent;
var main_setcookie = main_setCookie;
var main_getcookie = main_getCookie;
var main_setprojectcookie = main_setProjectCookie;
var main_getprojectcookie = main_getProjectCookie;
var main_getscrollleft = main_getScrollLeft;
var main_getscrolltop = main_getScrollTop;
var main_setscrolltop = main_setScrollTop;
var main_setscrollleft = main_setScrollLeft;
var main_getelementtop = main_getElementTop;
var main_getelementleft = main_getElementLeft;
var main_addjs = main_addJS;

var main_global = new Object;
main_global.version = '3.0.3';
main_global.releaseDate = '2007.12.05';
main_global.scrollTop = 0;

// установка флага загрузки документа
main_addEvent(window, 'load', new Function("try {project_global.documentLoaded = true;} catch(e) {documentLoaded = true};"));
main_addEvent(window, 'stop', new Function("try {project_global.documentLoaded = true;} catch(e) {documentLoaded = true};"));

// назначение функции событию
function main_addEvent(el, evtType, fnName)
{
	var arr = main__getElsArray(el);
	for (var i=0, imax=arr.length; i<imax; i++)
	{
		if (arr[i])
		{
			if (arr[i].addEventListener)
	    	{arr[i].addEventListener(evtType, fnName, false)}
	    	else if (arr[i].attachEvent)
	    	{arr[i].attachEvent('on'+evtType, fnName)}
	    	else {arr[i]['on'+evtType] = fnName};
		}	
	}
}

// удаление функции события
function main_removeEvent(el, evtType, fnName)
{
	var arr = main__getElsArray(el);
	for (var i=0, imax=arr.length; i<imax; i++)
	{
		if (arr[i])
		{
			if (arr[i].removeEventListener)
			{arr[i].removeEventListener(evtType, fnName, false)}
			else if (arr[i].detachEvent)
			{arr[i].detachEvent('on' + evtType, fnName)};
		}
	}
}

// установка cookie
function main_setCookie(name, value, expires, path, domain, secure)
{
	var curCookie = name + "=" + escape(value) + ((expires) ? "; expires=" + expires : "") + ((path) ? "; path=" + path : "") + ((domain) ? "; domain=" + domain : "") + ((secure) ? "; secure" : "");
	document.cookie = curCookie;
}

// возвращение cookie
function main_getCookie(name)
{
	var prefix = name + "=";
	var cookieStartIndex = document.cookie.indexOf(prefix);
	if (cookieStartIndex == -1) return '';
	var cookieEndIndex = document.cookie.indexOf(";", cookieStartIndex + prefix.length);
	if (cookieEndIndex == -1) cookieEndIndex = document.cookie.length;
	return unescape(document.cookie.substring(cookieStartIndex + prefix.length, cookieEndIndex));
}

// запоминание параметра в cookie проекта 
function main_setProjectCookie(paramName, paramValue)
{ 
	var cookFullName = project_global.prefix+'-corelogic';
	var cookieFull = main_getCookie(cookFullName);
	var reg = new RegExp("(^|;)("+paramName+"=)([^;]*);", "ig");
	if (cookieFull.search(reg)!=-1) {cookieFull = cookieFull.replace(reg, '$1$2'+paramValue+';')}
	else {cookieFull += paramName+'='+paramValue+';'}
	main_setCookie(cookFullName, cookieFull, 'Wed Jun 26 21:46:19 3000');
}

// возвращение значения параметра из cookie проекта 
function main_getProjectCookie(paramName)
{
	var cookFullName = project_global.prefix+'-corelogic';
	var cookieFull = main_getCookie(cookFullName);
	var paramValue = '';
	var reg = new RegExp("(^|;)("+paramName+"=)([^;]*);", "ig");
	if (cookieFull.search(reg)!=-1) {paramValue = RegExp.$3};
	return paramValue;
}

// позиция горизонтальной прокрутки
function main_getScrollLeft()
{
	var left = 0;
	if (document.documentElement && document.documentElement.scrollLeft)
	{left = document.documentElement.scrollLeft}
	else if (document.body)
	{left = document.body.scrollLeft};
	return left;
}

// позиция вертикальной прокрутки
function main_getScrollTop()
{
	var top = 0;
	if (document.documentElement && document.documentElement.scrollTop)
	{top = document.documentElement.scrollTop}
	if (document.body)
	{top = document.body.scrollTop};
	return top;
}

//  установка позиции вертикальной прокрутки
function main_setScrollTop(top, count)
{
	if (top<0) {return false};
	if (!count && main_global.scrollTop!=0) {main_global.scrollTop=top; return false};
	if (!count) {main_global.scrollTop=top; var count = 0};
	if (count==6) {var point = main_global.scrollTop; main_global.scrollTop=0}
	else if (count>0) {var point = main_global.scrollTop + Math.round((main_getScrollTop() - main_global.scrollTop)/2)};
	if (count>0 && main_getScrollTop()!=point)
	{
		if (document.documentElement && document.documentElement.scrollTop)
		{document.documentElement.scrollTop = point}
		else if (document.body)
		{document.body.scrollTop = point};
	};
	if (count<6) {count++; setTimeout("main_setScrollTop("+top+", "+count+")", 50)};
}

// установка позиции горизонтальной прокрутки
function main_setScrollLeft(left)
{
	if (document.documentElement && document.documentElement.scrollLeft)
	{document.documentElement.scrollLeft = left}
	else if (document.body)
	{document.body.scrollLeft = left};
}

// получение вертикальной координаты элемента
function main_getElementTop(el)
{
	var top = 0;
	do
	{
		top += el.offsetTop;
		el = el.offsetParent;
	}
	while (el);
	return top;
}

// получение горизонтальной координаты элемента
function main_getElementLeft(el)
{
	var left = 0;
	do
	{
		left += el.offsetLeft;
		el = el.offsetParent;
	}
	while (el);
	return left;
}

// подключение js-библиотеки
function main_addJS(scriptPath, scriptName)
{
	if (!scriptName)
	{
		var scriptName = scriptPath.replace(/.*\/(.+)/g, '$1').replace(/(.+)\.js/g, '$1');
	};
	try
	{
		if (scriptName) {window.eval('project_global.includedLibrary.'+scriptName+' = true')};
	}
	catch (e) {};
	var script = document.createElement('script');
	script.setAttribute('type', 'text/javascript');
	script.setAttribute('src', project_global.path+scriptPath);
	if (main_$T('head').length==0) {document.appendChild(document.createElement('head'))};
	main_$T('head')[0].appendChild(script);
}

// получение элемента по id
function main_$(elId)
{
	return document.getElementById(elId);
}

// получение массива элементов по имени элемента
function main_$N(elName)
{
	return document.getElementsByName(elName);
}

// получение массива элементов по имени тега
function main_$T(tgName, parentEl)
{
	if (tgName!='')
	{
		var parentEl = parentEl || document;
		var inarr = false;
		try {if (parentEl.length && !parentEl.tagName) {inarr = true};}
		catch(e) {};
		var tagarray = tgName.split('|');
		var els = [];
		for (var i=0, imax=tagarray.length; i<imax; i++)
		{
			if (inarr)
			{
				for (var j=0, jmax=parentEl.length; j<jmax; j++)
				{
					if (parentEl[j].tagName == tagarray[i].toUpperCase())
					{els[els.length] = parentEl[j]};
				};
			}
			else
			{
				var elsadd = parentEl.getElementsByTagName(tagarray[i]);
				for (var j=0, jmax=elsadd.length; j<jmax; j++)
				{els[els.length]=elsadd[j]};
			};
		};
		return els;
	};
}

// получение массива элементов по имени класса
function main_$C(clName, parentEl)
{
	if (clName)
	{
		var parentEl = parentEl || document.body;
		var inarr = false;
		try {if (parentEl.length && !parentEl.tagName) {inarr = true};}
		catch(e) {};
		var els = [];
		if (inarr)
		{
			var reg = new RegExp('(?:^| )(?:'+clName+')(?: |$)', 'i');
			for (var i=0, imax=parentEl.length; i<imax; i++)
			{
				if (reg.test(parentEl[i].className))
				{els[els.length] = parentEl[i]};
			};
		}
		else
		{els = main__attrCycle(parentEl, 'class', clName, els)};
		return els; 
	};
}

// получение массива элементов по имени атрибута
function main_$A(attrName, attrValue, parentEl)
{
	if (attrName && attrValue)
	{
		var parentEl = parentEl || document.body;
		var inarr = false;
		try {if (parentEl.length && !parentEl.tagName) {inarr = true};}
		catch(e) {};
		var els = [];
		if (inarr)
		{
			var reg = new RegExp('(?:^| )(?:'+attrValue+')(?: |$)', 'i');
			for (var i=0, imax=parentEl.length; i<imax; i++)
			{
				var atr = parentEl[i].getAttribute(attrName);
				if (reg.test(atr)) {els[els.length] = parentEl[i]};
			};
		}
		else
		{els = main__attrCycle(parentEl, attrName, attrValue, els)};
		return els;
	};
}

// является ли элемент тем же или дочерним
function main_isIn(el, inEl, attrName)
{
	if (attrName)
	{
		attrName = attrName.toUpperCase();
		var reg = new RegExp('(?:^| )(?:'+inEl+')(?: |$)', 'i');
	};
	do
	{
		if (attrName)
		{
			var attrValue = '';
			if (attrName=='CLASS' || attrName=='CLASSNAME')
			{attrValue = el.className}
			else if (attrName=='TAG' || attrName=='TAGNAME')
			{attrValue = el.tagName}
			else
			{attrValue = el.getAttribute(attrName)};
			if (reg.test(attrValue)) {return el};
		}
		else if (el == inEl) {return el};
		el = el.parentNode;
	}
	while (el && el.tagName);
	return false;
}

// добавляем класс
function main_addClass(el, clName)
{
	var arr = main__getElsArray(el);
	var reg = RegExp("(^| )("+clName+")(?: |$)", "ig");
	for (var i=0, imax=arr.length; i<imax; i++)
	{
		if (arr[i] && typeof(arr[i].className)=='string')
		{
			if (!reg.test(arr[i].className))
			{arr[i].className+=' '+clName;};
		}
	}
}

// удаление класса
function main_removeClass(el, clName)
{
	var arr = main__getElsArray(el);
	var reg = RegExp("(^| )("+clName+")(?: |$)", "ig");
	for (var i=0, imax=arr.length; i<imax; i++)
	{
		if (arr[i] && typeof(arr[i].className)=='string')
		{
			var s = arr[i].className;
			while (s.search(reg)!=-1)
			{s = s.replace(reg, ' ');};
			arr[i].className = s.replace(/ {2,}/g, ' ');
		}
	}
}


// Внутренние функции
// =========

// цикл по элементам с поиском по аттрибуту
function main__attrCycle(parentEl, attrName, attrValue, els)
{
	var el;
	var els = els || [];
	if (!parentEl || !parentEl.childNodes) {return els};
	reg = new RegExp('(?:^| )('+attrValue+')(?:$| )', 'i');
	for (var i=0; el=parentEl.childNodes[i]; i++)
	{
        if (attrName.toUpperCase()=='CLASS')
		{
			if (el.tagName && el.className && el.className.search(reg)>-1)
			{els[els.length] = el};
		}
		else
		{
			if (el.tagName)
			{
				var atr = el.getAttribute(attrName);
				if (reg.test(atr)) {els[els.length] = el};
			};
		};
		els = main__attrCycle(el, attrName, attrValue, els);
    }
	return els;
}

// массивизация объекта
function main__getElsArray(el)
{
	var arr = [];
	try {if (el.length && !el.tagName) {arr = el} else {arr[0]=el};}
	catch(e) {arr[0]=el};
	return arr;
}