//************************************
function highlight(text, elem)
{
	if (elem && text.match(/[а-я\s0-9]+/gi))
		elem.innerHTML = elem.innerHTML.replace(new RegExp(text, "gi"), highlight_backend)
}

function highlight_backend(matches)
{
	return "<b style='font-size: 100%;'>" + matches + "</b>";
}
//*****************client map************************
//***************************************************
function show_map_client_results()
{
	var mapContainer = getElem("mapContainer");
	show_elem(mapContainer);
	if(mapContainer.style.display != "none")
	{
		if(buildFoundInfo.length == 0)
		{
			if (blocksFound.length > 0)
				getBlocksFoundInfo();
			else
				return false;
		}
	}
}
//************************************
function getBlocksFoundInfo()
{
	if (blocksFound.length > 0)
	{
		ajax("/ajax_functions.php", "function=getBlocksFoundInfo&blocksID=" + blocksFound.join(','), 
				function(result)
				{
					if (result['success'])
					{
						buildFoundInfo = result.buildFoundInfo;
						drawClientSearchInfo();
					}
					else if(result['text'])
						alert(result['text']);
				}
			);
	}
}
//************************************
function drawClientSearchInfo()
{
	for (var i = 0; i < buildFoundInfo.length; i++)
	{
		addBuildMarker(new GLatLng(buildFoundInfo[i].X, buildFoundInfo[i].Y), drawClientMapBuildInfo(buildFoundInfo[i]), false);
	}
}
//************************************
function drawClientMapBuildInfo(build)
{
	build.Blocks = build.Blocks.split(',');
	build.BlocksInfo = build.BlocksInfo.split(',');
	build.BlocksFavorite = build.BlocksFavorite.split(',');
	
	var colspan = 1;
	var width = "420px";
	var text = "<table class='mapBuild' style='width: " + width + "'><tr>";
	if (build.Photo)
	{
		text += "<td style='width: 80px;'><img src='" + build.Photo + "' title=''/></td>";
		colspan = 2;
		width = "340px";
	}
	text += "<td style='width: " + width + "'><div class='mapBuildID'>" + build.BuildID + "</div><a href='/moscow/" + build.BuildID + "/' target='_blank' class='mapWinLink'>" + build.BuildName + "</a><div class='mapBuildAddress'>" + build.BuildType + "</div></td></tr><tr><td colspan='" + colspan + "' id='map_build_" + build.BuildID + "_blocks'>";
	for (var i = 0; i < build.Blocks.length; i++)
	{
		text += "<div class='mapBlock' onmouseover='this.className=\"mapBlock_over\"' onmouseout='this.className = \"mapBlock\";'>";
		if (build.BlocksFavorite[i] == 0)
			text += "<img src='/img/icons/favourite.gif' class='img_link' id='map_favorite_btn_" + build.Blocks[i] + "' style='vertical-align: middle;' alt='Добавить в избранное' title='Добавить в избранное' onclick='add_favourite_block(" + build.Blocks[i] + ", this, 1, \"table_favorite_btn_" + build.Blocks[i] + "\");' />"
		text += "<img src='/img/icons/favourite_disabled.gif' alt='Блок добавлен в избранное' title='Блок добавлен в избранное' style='display: " + ( (build.BlocksFavorite[i] == 0) ? "none" : "" ) + "; vertical-align: middle;' />"
		text += " " + build.BlocksInfo[i] + "</div>";
	}
	text += "</td></tr></table>";
	return text;
}
//***************************************************
//***************************************************
function show_elem(elem, isClose)
{
	if(elem)
	{
		isClose = (isClose) ? isClose : false;
		elem.style.display = ( (elem.style.display == "none") && !isClose) ? "block" : "none";
	}
}

//***************map******************
var map;
var baseIcon;
var markerOptions;
//************************************
function load_gmap(site_mode, site_uiMode) 
{
	site_mode = (site_mode) ? site_mode : false;
	site_uiMode = (site_uiMode) ? site_uiMode : "small";
	
	if (GBrowserIsCompatible()) 
	{
		//**********************************
		baseIcon = new GIcon(G_DEFAULT_ICON);
		baseIcon.shadow = "/img/gmarkers/shadow50.png";
		baseIcon.iconSize = new GSize(20, 34);
		baseIcon.shadowSize = new GSize(37, 34);
		baseIcon.iconAnchor = new GPoint(9, 34);
		baseIcon.infoWindowAnchor = new GPoint(9, 2);
		//**************
		var mapOptions = (site_mode) ? {} : { googleBarOptions : 	{ style : "new"	} };
		/* Создать точку - центр */
		var center = new GLatLng(55.7558, 37.6177);
		/* Создать основной объект карты */
		map = new GMap2(getElem("mapContainer"), mapOptions);
		
		//map.addControl(map_scale_ctrl);
		map.setCenter(center, 11, G_NORMAL_MAP);
		if (!site_mode)
		{
			map.setUIToDefault();
			map.enableGoogleBar();
		}
		else
		{
			if(site_uiMode == "small")
				map.addControl(new GSmallZoomControl3D);
			else
				map.setUIToDefault();
			getElem("mapContainer").style.display = "none";
		}
	}
}

function addBuildMarker(point, buildInfo, isBuildProfile) 
{
	var marker = new GMarker(point);
	GEvent.addListener(marker, "click", function() 
	{
		if (isBuildProfile)
			marker.openInfoWindowHtml(buildInfo, {maxWidth: 180});
		else
			marker.openInfoWindowHtml(buildInfo);
	});
	map.addOverlay(marker);
	if (isBuildProfile)
		map.setCenter(point, 14, G_NORMAL_MAP);
}
//*****************************************************
//*****************************************************

function hide_video()
{
	getElem('videoContainerShadow').style.display = "none";
	var container = getElem('videoContainer');
	container.innerHTML = "";
	container.style.display = "none";
}

function show_video(link)
{
	var shadowContainer = getElem('videoContainerShadow');
	shadowContainer.style.display = "block";
	shadowContainer.style.height = getClientHeight() + defScroll().y + 'px';
	var container = getElem('videoContainer');
	container.innerHTML = "<div id='videoPlayer' class='player'></div>";
	container.style.display = "block";
	if(navigator.userAgent.indexOf("iPhone") != -1 || navigator.userAgent.indexOf("iPad") != -1)
	{
		this.player = new Uppod({"m" : "video", "uid": "videoPlayer", "file" : link});
	}
	else
	{
		var flashvars = {"comment" : "test", "st": "/flash/video107-579.txt", "file" : link};
		var params = {bgcolor : "#ffffff",  allowFullScreen : "true", allowScriptAccess : "always", id: "videoPlayer"}; 
		new swfobject.embedSWF("/flash/uppod.swf", "videoPlayer", "500", "375", "9.0.115.0", false, flashvars, params);
	}
	
	update_video_container();
}

function update_video_container()
{
	var shadowContainer = getElem('videoContainerShadow');
	var container = getElem('videoContainer');
	if ( (container.style.display != "") && (shadowContainer.style.display != "") )
	{
		shadowContainer.style.height = getClientHeight() + defScroll().y + 'px';
		container.style.left = (getClientWidth() - container.offsetWidth)/2 + defScroll().x + 'px';
		container.style.top = (getClientHeight() - container.offsetHeight)/2 + defScroll().y + 'px';
	}
}

function delClientFavorite(form)
{
	var blocks = new Array();
	for (var i = 0; i < form.length; i++)
		if( (form[i].type == "checkbox") && form[i].checked )
		{
			blocks.push(form[i].value);
			form[i].checked = false;
			form[i].parentNode.parentNode.style.display = "none";
		}
	if (blocks.length > 0)
	{
		ajax("/ajax_functions.php", "function=del_client_favorite&blocksID=" + blocks.join(','), 
				function(result)
				{
					if (!result['success'])
						alert(result['text']);
				}
			);
	
	}
}

function getClientPDF(form)
{
	var blocks = new Array();
	for (var i = 0; i < form.length; i++)
		if( (form[i].type == "checkbox") && form[i].checked )
			blocks.push(form[i].value);
	if (blocks.length > 0)
		window.open('/files/pdf/blocks.pdf?blocksID=' + blocks.join(','), '_blank');
	return false;
}

//******** compare *************
function getComparePDF(form)
{
	var blocks = (form.blocks.value != "") ? form.blocks.value.split(",") : new Array();
	if (blocks.length > 1)
		window.open('/files/pdf/blocks_compare.pdf?blocks=' + blocks.join(','), '_blank');
	return false;
}

function scrollCompare(scrollContainer)
{
	var compareContainer = getElem('compareContainer');
	compareContainer.scrollLeft = scrollContainer.scrollLeft;
}

function updateScrollCompareWidth()
{
	var width = getElem('compareTable').offsetWidth;
	if (width <= getElem('compareContainerCopy').offsetWidth)
		getElem('compareContainerCopy').children[0].style.display = "none";
	else
	{
		getElem('compareContainerCopy').children[0].style.display = "";
		getElem('compareContainerCopy').children[0].style.width = width + 'px';
	}
}

function removeBlockCompare(blockID)
{
	var form = getElem('blocksCompareCheckbox');
	var blocks = (form.blocks.value != "") ? form.blocks.value.split(",") : new Array();
	var result = new Array();
	if (blocks.length > 0)
	{
		for (var i = 0; i < blocks.length; i++)
			if (blocks[i] != blockID)
				result.push(blocks[i]);
	}
	form.blocks.value = result.join(",");
}

function remove_column(clicked_td)
{
	if(clicked_td)
	{
		var TDs = clicked_td.parentNode.children;
		var TDsCnt = TDs.length;
		var pos = -1;
		for (var i = 0; i < TDsCnt; i++)
		{
			if (clicked_td == TDs[i])
				pos = i;
		}
		if (pos >= 0)
		{
			var TRs = clicked_td.parentNode.parentNode.children;
			var table = clicked_td.parentNode.parentNode.parentNode;
			
			if (TDsCnt <= 1) //если блок последний - скрываем все
			{
				table.parentNode.style.display = "none";
				getElem('compareHeader').style.display = "none";
			}
			else
			{
				for (var i = 0; i < TRs.length; i++)
					TRs[i].removeChild(TRs[i].children[pos]);				
				updateScrollCompareWidth();
			}
		}
	}
}

function checkCompareCondition(form)
{
	var blocks = new Array();
	for (var i = 0; i < form.length; i++)
		if( (form[i].type == "checkbox") && form[i].checked )
			blocks.push(form[i].value);
	if(blocks.length <= 1) 
		return false; 
	form.action = "/brokerage/myfavorite/compare/?blocks=" + blocks.join(",");
}

function aggregateBlocks(node, isHide)
{
	var blocks = new Array();
	if(node)
	{
		var inputs = node.getElementsByTagName('input');
		for (var i = 0; i < inputs.length; i++)
			if( (inputs[i].type == "checkbox") && (inputs[i].checked) )
			{
				blocks.push(inputs[i].value);			
				if (isHide)
				{
					inputs[i].checked = false;
					inputs[i].style.display = "none";
				}
			}
	}
	return blocks;
}

function hideSelBlocks(node)
{
	var blocks = new Array();
	if(node)
	{
		var inputs = node.getElementsByTagName('input');
		for (var i = 0; i < inputs.length; i++)
			if( (inputs[i].type == "checkbox") && (inputs[i].checked) )
				inputs[i].parentNode.removeChild(inputs[i]);		
	}
	return blocks;
}
//********* favorite *************
function add_favourite_block(blockID, btn, changeOnlyImg, doubleBtnID)
{
	var doubleBtn = getElem(doubleBtnID);
	ajax("/ajax_functions.php", "function=add_favourite_block&blockID=" + blockID, 
				function(result)
				{
					if (!result['success'])
						alert(result['text']);
					else
					{
						if (!changeOnlyImg)
						{
							var fields = btn.parentNode.parentNode.children;
							for (var i = 0; i < fields.length; i++)
							{
								if (i == 1)
									fields[i].children[0].style.color = "#C5C6C8";
								else
									fields[i].style.color = "#C5C6C8";
							}
						}
						btn.style.display = "none";
						btn.parentNode.children[1].style.display = "";
						if (doubleBtn)
						{
							doubleBtn.style.display = "none";
							doubleBtn.parentNode.children[1].style.display = "";
						}
					}
				}
			);
}
//*****************************
function loadAjaxSelect(selectName, params)
{
	if (!selectName || !params)
		return;
	var paramStr = "";
	for (param in params)
		paramStr += ( (paramStr) ? "&" : "" ) + param + "=" + params[param];
	ajax("/admin/ajax_functions.php", paramStr, 
				function(result)
				{
					var select;
					if (select = getElem(selectName))
					{
						select.options.length = 0;
						select[0] = new Option("-", "", false, true);
						if (result['debug'])
							alert(result['debug']);
						if (!result['success'])
							alert(result['errors']);
						else
						{
							select = fillAjaxSelect(select, result['items'], 0, true);	
						}
					}
					else
						alert("Ошибка! Не найден элемент " + selectName);
				}
			);
}
//*****************************
function fillAjaxSelect(select, items, selectedIndex, canBeEmpty)
{
	selectedIndex = (selectedIndex) ? selectedIndex : 0;
	canBeEmpty = (canBeEmpty) ? 1 : 0;
	select.options.length = 0;
	var cnt = 0;
	if (canBeEmpty)
		select[cnt++] = new Option("-", "", false, !(selectedIndex));
	for (var i = 0; i < items.length; i++, cnt++)
		select[cnt] = new Option(items[i][1], items[i][0], false, false);
	return select;
}
//*****************************
function cheackIn(id) //Толян - мастер называть функции ))
{
	checkIn(id);
}
//*****************************
function getElem(id)
{
	return document.getElementById(id);
}
//*****************************
function checkMetroIn(id)
{
	var input = getElem('metro_search');
	if (input.form.buildnum)
		input.form.buildnum.value = 'ID';
	var metros = (input.value != '') ? input.value.split(';') : [];
	if (!inArray(id, metros))
	{
		metros.push(id);
		input.value = metros.join(';');
	}
	updateMetroCntStr(input.value);
}
//*****************************
function inArray(val, arr)
{
	for (var i = 0; i < arr.length; i++)
		if (val == arr[i])
			return true;
	return false;
}
//*****************************
function checkMetroOut(id)
{
	var input = getElem('metro_search');
	var metros = (input.value != '') ? input.value.split(';') : [];
	for (var i = 0; i < metros.length; i++)
		if(metros[i] == id)
		{
			metros.splice(i, 1);
			break;
		}
	input.value = metros.join(';')
	updateMetroCntStr(input.value);
}
//*****************************
function initMetroMap()
{
	removeAllMetroMarkers();
	var metros = (getElem('metro_search').value != '') ? getElem('metro_search').value.split(';') : {};
	for (var i = 0; i < metros.length; i++)
	{
		if (getElem('marker_' + metros[i]) && getElem('marker_' + metros[i]).coords)
		{
			var coords = getElem('marker_' + metros[i]).coords.split(',');
			addMetroMarker(coords[0], coords[1], metros[i]);
		}
	}
}
//*****************************
function nullMetroData()
{
	var input = getElem('metro_search');
	input.value = "";
	removeAllMetroMarkers();
	updateMetroCntStr(input.value);
}
//*****************************
function showMetroMap(parent)
{
	var pos = getElementObjPosition(parent);
	windows.metromapContainer.setWidth(700);
	windows.metromapContainer.setHeight(900);
	windows.metromapContainer.show();
	windows.metromapContainer.setCenter();
	initMetroMap();
}
//*****************************
function updateMetroCntStr(metros)
{
	var length = (metros) ? metros.split(';').length : 0;
	var metroCntHint = getElem('metro_selected_cnt');
	metroCntHint.title = "Станций выбрано: " + length;
	metroCntHint.innerHTML = '(' + length + ')';
}
//*****************************************
	function getElementObjPosition(elem)   
	{   
	   
		var w = elem.offsetWidth;   
		var h = elem.offsetHeight;   
		   
		var l = 0;   
		var t = 0;   
		   
		while (elem)   
		{   
			l += elem.offsetLeft;   
			t += elem.offsetTop;   
			elem = elem.offsetParent;   
		}   
	  
		return {"left":l, "top":t, "width": w, "height":h};   
	}
	
	var isIE = checkBrowser();	
	function checkBrowser() 
	{
		if (navigator.appName.indexOf ("Microsoft") !=-1) 
		{
			return true //IE
		}	
		return false;
	}
	
//******************************************
	function visual(_targ, _show)
	{
		if (!_show)
			_show = "auto";
		var target = getElem(_targ);
		if (target)
		{
			if (_show == "auto")
			{
				if (target.style.display == "none")
					target.style.display = "";
				else
					target.style.display = "none";
			}
			else
			{
				target.style.display = _show;					
			}
		}
	}
//****************************
//*********img preload********
//****************************
var shadowOpacity = 1;
var imgShadowFrames = 20;
var imgShadowAnimationTime = 500;
var deltaShadowWidth = 0;
var deltaShadowHeight = 0;
var oldShadowWidth = 0;
var oldShadowHeight = 0;
var scrollLeft = 0;
var scrollTop = 0;
function setImg(src, alt, event, img)
{
	src = (src) ? src : "";
	alt = (alt) ? alt : "";
	var shadow = getElem('static_window_shadow');
	var myScreen = getElem('screen');
	var window_container = getElem('static_window_container');
	var imgWin = getElem('img_win');
	var imgContainer = getElem('img_container');
	var imgShadow = getElem('img_shadow');
	
	scrollLeft = (isIE) ? document.documentElement.scrollLeft : ( (event) ? event.pageX - event.clientX : scrollLeft);
	scrollTop = (isIE) ? document.documentElement.scrollTop : ( (event) ? event.pageY - event.clientY : scrollLeft);
	
	var screenCenterY = detectIE6() ? scrollTop + ( (event) ? event.clientY : 0 ) : scrollTop + myScreen.offsetHeight/2;
	var screenCenterX = scrollLeft + myScreen.offsetWidth/2;
	
	imgShadow.style.display = "";
	imgContainer.style.zIndex = -1;
	shadowOpacity = 1;
	if (!isIE)
		imgShadow.style.opacity = shadowOpacity;
	else
		imgShadow.style.filter = "Alpha(opacity=" + shadowOpacity*100 + ")";
	//******BIG SHADOW*********************
	shadow.style.left = scrollLeft + 'px';
	shadow.style.top = scrollTop + 'px';
	shadow.style.width = myScreen.offsetWidth + 'px';
	shadow.style.height = myScreen.offsetHeight + 'px';
	//******STATIC WINDOW CONTAINER********
	window_container.style.left = scrollLeft + 'px';
	window_container.style.top = scrollTop + 'px';
	window_container.style.width = myScreen.offsetWidth + 'px';
	window_container.style.height = myScreen.offsetHeight + 'px';
	//******IMAGE WINDOW*******************
	imgWin.style.width = myScreen.offsetWidth + 'px';
	imgWin.style.height = myScreen.offsetHeight + 'px';
	
	var images = img.parentNode.getElementsByTagName('img');
	var imagesCnt = images.length;
	var imgPos = 0;
	for (var i = 0; i < imagesCnt; i++)
		if (images[i] == img)
		{
			imgPos = i + 1;
			break;
		}
	var imgControls = "none";
	if (imagesCnt > 1)
	{
		switch (imgPos)
		{
			case 1:
				imgControls = "right";
				break;
			case imagesCnt:
				imgControls = "left";
				break;
			default:
				imgControls = "both";
				break;
		}
	}
	imgContainer.innerHTML = "<img src='" + src +"' alt='" + alt + "' title='" + alt + "' onload='runOnImgLoad(\"" + src + "\", \"" + imgControls + "\", \"" + imgPos + "\", \"" + img.parentNode.id + "\");' class='imgPreload'/>";
	imgShadow.title = alt;
	imgContainer.title = alt;
}

function runOnImgLoad(src, imgControls, imgPos, parentID)
{
	var imgShadow = getElem('img_shadow');
	var imgContainer = getElem('img_container');
	deltaShadowWidth = (imgContainer.children[0].offsetWidth - imgShadow.offsetWidth)/20;
	deltaShadowHeight = (imgContainer.children[0].offsetHeight - imgShadow.offsetHeight)/20;
	oldShadowWidth = imgShadow.offsetWidth;
	oldShadowHeight = imgShadow.offsetHeight;
	imgContainer.style.backgroundImage = "url('" + src + "')";
	imgContainer.style.backgroundPosition = "center center";
	imgContainer.style.backgroundRepeat = "no-repeat";
	var text =  "<table style='width: 100%;'><tr><td colspan='3' style='text-align: right; height: 20px;'><img src='/img/icons/close.png' class='img_link' onclick='hide_img();' title='Закрыть' alt='Закрыть'/></td></tr><tr><td style='width: 20px;'>&nbsp;";
	if ( (imgControls == "both") || (imgControls == "left") )
		text += "<img src='/img/icons/prev.png' class='img_link' onclick='hide_img(); getElem(\"" + parentID + "\").children[\"" + (imgPos-2) + "\"].onclick();' title='Предыдущая' alt='Предыдущая'/>";
	text += "</td><td>&nbsp;</td><td style='width: 20px; text-align: right;'>";
	if ( (imgControls == "both") || (imgControls == "right") )
		text += "<img src='/img/icons/next.png' class='img_link' onclick='hide_img(); getElem(\"" + parentID + "\").children[\"" + imgPos + "\"].onclick();' title='Следующая' alt='Следующая'/>&nbsp;";
	text += "</td></tr></table>";
	imgContainer.innerHTML = text;
	imgShadow.innerHTML = "";
	setTimeout(hideShadow, imgShadowAnimationTime/imgShadowFrames);
}

function hideShadow()
{
	var imgShadow = getElem('img_shadow');
	var imgContainer = getElem('img_container');
	if (shadowOpacity > 0)
	{
		if (!isIE)
			imgShadow.style.opacity = shadowOpacity;
		else
			imgShadow.style.filter = "Alpha(opacity=" + shadowOpacity*100 + ")";
		
		var step = imgShadowFrames - Math.round(shadowOpacity*imgShadowFrames) + 1;
		
		imgShadow.style.width = (oldShadowWidth + Math.floor(deltaShadowWidth*step)) + 'px';
		imgShadow.style.height = (oldShadowHeight + Math.floor(deltaShadowHeight*step)) + 'px';
		
		imgContainer.style.left = imgShadow.offsetLeft + 'px';
		imgContainer.style.top = imgShadow.offsetTop + 'px';
		imgContainer.style.width = imgShadow.offsetWidth + 'px';
		imgContainer.style.height = imgShadow.offsetHeight + 'px';
		imgContainer.children[0].style.height = imgContainer.style.height;
		
		shadowOpacity -= 1/imgShadowFrames;
		setTimeout(hideShadow, imgShadowAnimationTime/imgShadowFrames);
	}
	else
	{
		imgShadow.style.display = 'none';
		imgContainer.style.zIndex = 9999;
	}
}

function hide_img()
{
	getElem('static_window_shadow').style.left = '-10000px';
	getElem('static_window_shadow').style.top = '-10000px';
	getElem('static_window_container').style.left = '-10000px';
	getElem('static_window_container').style.top = '-10000px';
	getElem('img_container').style.left = '-10000px';
	getElem('img_container').style.top = '-10000px';
}

function changeProjectImg(imgSrc, alt)
{
	var imgPreload = getElem('img_preload');
	imgPreload.innerHTML = "<img src='" + imgSrc +"' xwidth='900' xheight='506' onload='onProjectImgLoad(\"" + imgSrc + "\", \"" + alt + "\")' title='" + alt + "' alt='" + alt + "'/>";
}

function onProjectImgLoad(imgSrc, alt)
{
	var imgWin = getElem('project_img');
	var imgTitle = getElem('project_img_title');
	imgWin.src = imgSrc;
	imgWin.alt = alt;
	imgWin.title = alt;
	imgTitle.innerHTML = alt + '&nbsp;';
}

function onPromoImgLoad(imgSrc)
{
	document.body.style.backgroundImage = "url(" + imgSrc + ")";
	document.body.style.backgroundPosition = "center top";
	document.body.style.backgroundRepeat = "no-repeat";
}

function detectIE6(){
  var browser = navigator.appName;
  if (browser == "Microsoft Internet Explorer"){
    var b_version = navigator.appVersion;
    var re = /\MSIE\s+(\d\.\d\b)/;
    var res = b_version.match(re);
    if (res[1] <= 6){
      return true;
    }
  }
  return false;
}

function check_genForm()
{
	var name = getElem('name');
	var email = getElem('email');
	var body = getElem('body');
	if (name.value && email.value && body.value)
		return true;
	else
		return false;
}

function check_orderForm()
{
	var name = getElem('name');
	var email = getElem('email');
	var phone = getElem('phone');
	if (name.value && (email.value || phone.value))
		return true;
	else
		return false;
}

function getClientWidth()
{
  return document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientWidth:document.body.clientWidth;
}

function getClientHeight()
{
  return document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientHeight:document.body.clientHeight;
}

function defScroll() 
{
      var x = y = 0;
      // Gecko поддерживает свойства scrollX(scrollY)
      // Для IE & Opera приходится идти в обход
      x = (window.scrollX) ? window.scrollX : document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft;
      y = (window.scrollY) ? window.scrollY : document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop;
      return {x : x, y : y};
}
