
/*************************************************************************************************/
__OPACITY_FLAT_MASK__		= "0.4";
__OPACITY_FLOOR_MASK__		= "0.4";
__OPACITY_ROOM_MASK__		= "0.4";
/*************************************************************************************************/
__CLASSNAME_FLAT_MASK__ 	= "flat_mask"
__CLASSNAME_FLOOR_MASK__ 	= "floor_mask"
__CLASSNAME_ROOM_MASK__ 	= "room_mask"
/*************************************************************************************************/
__FLOOR_DEFAULT_INDEX__		= 0;	
__FLAT_DEFAULT_INDEX__		= 0;	
__ROOM_DEFAULT_INDEX__		= 0;
/*************************************************************************************************/
__BANNER_MEDIA_WIDTH__    	= 916;
__BANNER_MEDIA_HEIGHT__    	= 185;
__OUTPUT_MEDIA_WIDTH__    	= 710;
__OUTPUT_MEDIA_HEIGHT__    	= 550;
__TIZER_WIDTH__				= 150;
__TIZER_HEIGHT__			= 180;
__TOUR_WIDTH__				= 710;
__TOUR_HEIGHT__				= 550;
__MENU_BKG_WIDTH__			= 178;
__MENU_BKG_HEIGHT__			= 30;
/*************************************************************************************************/
// 	Режим вывода контента       
__MODE_CONTENT_INDEXPAGE__	 = 1;
__MODE_CONTENT_MENU__ 		 = 2;
__MODE_CONTENT_MENU_BY_TAG__ = 3;
__MODE_CONTENT_PLAN__ 	 	 = 4;
__MODE_CONTENT_SECTION__ 	 = 5;
__MODE_CONTENT_FLAT__ 	     = 6;
__MODE_CONTENT_ROOM__ 	     = 7;
__MODE_CONTENT_MAP__ 	     = 8;
__MODE_CONTENT_GALLERY__	 = 13;
__MODE_CONTENT_PROJECTS__	 = 14;
/*************************************************************************************************/
__OUPUT_INDEXPAGE_FLASH__	= "/userfiles/Image/swf/index.swf";
__OUPUT_INDEXPAGE_PIC__		= "/userfiles/Image/common/index.jpg"
__OUPUT_MAP_FLASH__			= "/userfiles/Image/swf/map.swf";
__BANNER_FLASH__			= "/userfiles/Image/swf/banner.swf";
__BANNER_PIC__				= "/userfiles/Image/common/banner.jpg";
__PLAN_FLASH__				= "/userfiles/Image/plan/plan.swf";
__PLAN_PIC__				= "/userfiles/Image/common/noflash_plan.jpg";
__MENU_BKG_FLASH_0__		= "/userfiles/Image/swf/menu_item_bkg_0.swf";
__MENU_BKG_FLASH_1__		= "/userfiles/Image/swf/menu_item_bkg_1.swf";
__MENU_BKG_FLASH_FOCUS__	= "/userfiles/Image/swf/menu_f.swf";
__PATH_TO_IMAGES__			= "/userfiles/Image/common/"
__TIZER_NOFLASH_PIC__ 		= "/userfiles/Image/common/noflash_plan.jpg";
__MAP_NOFLASH_PIC__			= "/userfiles/Image/common/noflash_map.jpg"
/*************************************************************************************************/
__TRANSPARENT_IMG_1x1__		= "/userfiles/Image/common/1x1.png";
__WARNING__AREA__			= 'warning';
__URL_LOAD_CONTENT__		= 'http://' + location.host + '/content.php';
__NOFLASH_TAG_PLAN__		= 'plan';
/*************************************************************************************************/
// Маска
var objMask = Class.create();
objMask.prototype = {
	/*********************************************************************************************/
	// Конструктор
	_constructor: function(target, src, options) {
		this.target = $(target);
		this.options = options;
		this.src = src;
		this.cache = null;
		this.target.setStyle({opacity:this.options['__MASK_OPACITY__']});
	},
	/*********************************************************************************************/
	// Инициализация
	initialize: function(target, src, options) {
		this._constructor(target, src, options);
	},
	/*********************************************************************************************/
	// Загрузить в кеш
	loaded: function() {
		this.cache = new Image();
		this.cache.src = this.src;
	},
	/*********************************************************************************************/
	// Показать маску 
	show: function() {
		(!this.cache) ?	this.loaded() : false;
		this.target.src = this.cache.src;
	},
	/*********************************************************************************************/
	// Спрятать маску
	hide: function() {
		this.target.src = __TRANSPARENT_IMG_1x1__;
	}
}

/*************************************************************************************************/
// Менеджер масок
var objMaskDispatcher = Class.create()
objMaskDispatcher.prototype = {
	/*********************************************************************************************/
	// Конструктор
	_objMaskDispatcher: function(id, masks_data, options) {
		this.id = id;
		this.options = options;
		this.selected = null;
		this.oMasks = new Array();
		var maskid = this.id + '_mask';
		this.masks_data = masks_data
		this.bhmouseover = Array();
		this.bhmouseout = Array();
		this.bhclick = Array();
		/* Назначим события для каждой маски */
		var owner = this;
		this.masks_data.each(function(mask) {
			var i =	owner.oMasks.length;
			owner.oMasks[i] = new objMask(maskid, mask.src, options);
			owner.oMasks[i].loaded();
		});
		this.startObserving();
	},
	// Инициализация	
	initialize: function(id, masks_data, options) {
		this._objMaskDispatcher(id, masks_data, options);
	},
	// Обработчик события: мышь над элементом
	hmouseover: function(event) {
		(e = this.getElementEvent(event)) ? this.mouseover(e.index) : false;
		Event.stop(event);
	},
	// Обработчик события: мышь покинула элемент
	hmouseout: function(event) {
		(e = this.getElementEvent(event)) ? this.mouseout(e.index) : false;
		Event.stop(event);
	},
	// Обработчик события: клик
	hclick: function(event) {
		(e = this.getElementEvent(event)) ? this.click(e.index) : false;
	},
	// Событие: мышь над маской
	mouseover: function(index) {
		this._selectMask(index);		
	},
	// Событие: мышь покинула маску
	mouseout: function(index) {
		this._unselectMask(index)
	},
	// Событие: клик - абстрактный метод
	click: function(index) {
		true;
	},
	startObserving: function() {
		for(i=0; i < this.masks_data.length; i++) {
			var mapid = this.masks_data[i].id + '_map';
			$(mapid).index = i;
			this.bhmouseover[i] = this.hmouseover.bindAsEventListener(this);
			Event.observe(mapid, 'mouseover', this.bhmouseover[i]);
				
			this.bhmouseout[i] = this.hmouseout.bindAsEventListener(this);
			Event.observe(mapid, 'mouseout', this.bhmouseout[i]);
			
			this.bhclick[i] = this.hclick.bindAsEventListener(this);
			Event.observe(mapid, 'click', this.bhclick[i]);
		};
	},
	stopObserving: function() {
		for(i=0; i < this.masks_data.length; i++) {
			var mapid = this.masks_data[i].id + '_map';
			$(mapid).index = i;
			Event.stopObserving(mapid, 'mouseover', this.bhmouseover[i]);
			Event.stopObserving(mapid, 'mouseout', this.bhmouseout[i]);
			Event.stopObserving(mapid, 'click', this.bhclick[i]);
			
		};
	},
	// Получить єлемент, где произошло событие
	getElementEvent: function(event) {
		if( typeof Event != "undefined" &&	typeof Event.element == "function" && 
																	typeof Event.element(event) != "undefined" ) {
			
			return 	$(Event.element(event));
		}
		return null;
	},
	// Выбор маски
	_selectMask: function(index) {
		if (index != null) {
			this.selected = index;
			this.oMasks[index].show();
		}
	},
	// Отменить выбор маски
	_unselectMask: function(index) {
		if(index != null) {
			this.oMasks[index].hide();
			this.selected = null;
		}
	}
};


/*************************************************************************************************/
// Указатель этажа
var objFloorRef = Class.create();
objFloorRef.prototype = {
	/*********************************************************************************************/
	// Инициализация
	initialize: function(id, x,y, text) {
		this.e = $(id);
		this.e.update(text);
		this.e.setStyle({top:(y + 'px'), left:(x + 'px'), visibility:'hidden'});
		this.e.show();
	},
	/*********************************************************************************************/
	show: function() {
		this.e.setStyle({visibility:'visible'});
	},
	hide: function() {
		this.e.setStyle({visibility:'hidden'});
	}
}
	
/*************************************************************************************************/
// Секция 
var objSection = Class.create();
Object.extend(Object.extend(objSection.prototype, objMaskDispatcher.prototype), {
	initialize: function(id, sectionData, floorsData) {
		this._objMaskDispatcher(id, sectionData.floorMasks, {'__MASK_OPACITY__':__OPACITY_FLOOR_MASK__});
		// Данные секции
		this.sectionData = sectionData;
		// Данные планов этажей
	  	this.floorsData = floorsData;
		// Планы этажей
	  	this.oFloorPlans = [];
		var owner = this;
	  	// Планы этажей создаем
		this.floorsData.each(function(floor) {
								if(floor) {
									owner.oFloorPlans[owner.oFloorPlans.length] = new objFloorPlan("floor_plan", "flatref", floor);	
								}		
							});

		this.oFloorRefs = [];
		// Указатели этажей					
		this.sectionData.floorMasks.each(function(floorMask){
								owner.oFloorRefs[owner.oFloorRefs.length] = new objFloorRef(floorMask.id + '_ref', 
															 floorMask.refX, floorMask.refY, floorMask.refText);
							});
	},
	// Событие: мышь над маской
	mouseover: function(index) {
		this.unselectMask(this.selected);		
		this.selectMask(index);
	},
	// Событие: мышь покинула маску
	mouseout: function(index) {
		true;
	},
	// Выбор маски
	selectMask: function(index) {
		// Выбор маски
		this._selectMask(index);
		this.oFloorRefs[index].show();		
		if (index != null) {
			// План этажа
			var floorid = this.sectionData.floorMasks[index].id; 
			// Показать информацию о этаже
			(this.oFloorPlans[index]) ?  this.oFloorPlans[index].show() : false;
	//		if($(floorid + "_info")) $(floorid + "_info").show();							
		}
	},
	// Отменить выбор маски
	unselectMask: function(index) {
	this._unselectMask(index);
		this.oFloorRefs[index].hide();	
		// План этажа
		var floorid = this.sectionData.floorMasks[index].id; 
		var owner = this;
		// Информация об этаже
		if(owner.oFloorPlans[index])owner.oFloorPlans[index].hide();
//		if($(floorid + "_info")) $(floorid + "_info").hide();
	},
	// Получить индекс этажа по ай-ди
	getIndexFloorById: function(id) {
		for(var i=0; i<this.floorsData.length; i++) {
			if(this.floorsData[i].id == id) {
				return i;
			}
		}
		return null;
	}
});	

/*************************************************************************************************/
// Менджер масок с указателем
var objMaskRefDispatcher = Class.create();
Object.extend(Object.extend(objMaskRefDispatcher.prototype, objMaskDispatcher.prototype), {
	_objMaskRefDispatcher: function(id, refid, masks_data, options) {
		this._objMaskDispatcher(id, masks_data, options);		
		this.masks_data = masks_data;
		this.ref = $(refid);
		this.reftext = $(refid + "_text");
	},
	initialize: function(id, refid, masks_data, options) {
		this._objMaskRefDispatcher(id, refid, masks_data, options);
	},
	// Событие: мышь над маской
	mouseover: function(index) {
		this._selectMask(index);
		this.showRef(index);
	},
	// Событие: мышь покинула маску
	mouseout: function(index) {
		this._unselectMask(index);
		this.hideRef();
	},
	// Показать указатель
	showRef: function(index) {
		this.ref.setStyle({top:this.masks_data[index].refY + 'px', left:this.masks_data[index].refX + 'px'});	
		this.reftext.update(this.masks_data[index].refText);
		this.ref.show();
	},
	// Спрятать указатель	
	hideRef: function() {
		this.ref.hide();		
	}
});

	
/*************************************************************************************************/
// План этажа
var objFloorPlan = Class.create();
objFloorPlan.prototype = {
	initialize: function(id, refid, data) {
		this.id = id;
		this.refid = refid;
		this.infoid = $(data.id + '_info');
		this.dispatcher = null;
		this.flat_masks = data.flatMasks;
		this.flat_info = data.flatInfo;
		this.imgsrc  = data.img;
		this.imgbase = $(id + '_img');
		this.cache = null;
		this.map = $(id + '_event_map');
	},
	show: function() {
		(!this.cache) ? this.loadbase() : false;
		this.imgbase.src = this.cache.src;
		this.clearMaskCoords();
		this.updateMaskCoords();
		(!this.dispatcher) ? this.dispatcher = 	new objMaskRefDispatcher(this.id, this.refid, this.flat_masks, 
														{'__MASK_OPACITY__':__OPACITY_FLAT_MASK__})
						   : this.dispatcher.startObserving();	;
		//this.infoid.show();
		this.showFlatInfo();
	},
	hide: function() {
//		this.imgbase.src = __TRANSPARENT_IMG_1x1__;
		this.dispatcher.stopObserving();
	},
	loadbase: function() {
		this.cache = new Image();
		this.cache.src = this.imgsrc;
	},
	clearMaskCoords: function() {
		for(var c=0; c < this.map.childNodes.length; c++)  {
			this.map.childNodes[c].coords = "0,0,0,0";
			this.map.childNodes[c].href = "";
		}
	},
	updateMaskCoords: function() {
		for(var c=0; c < this.flat_masks.length; c++) {
			this.map.childNodes[c].coords = this.flat_masks[c].coords;
			this.map.childNodes[c].href = "index.php?mtag=plan&s=" + 
							this.flat_masks[c].s +  "&fl=" + this.flat_masks[c].fl + 
							"&f=" + this.flat_masks[c].f;
			this.map.childNodes[c].id = this.flat_masks[c].id + "_map";
		}
	},
	showFlatInfo: function() {
		var floorInfo = document.getElementById(this.id + "_info");
		while (floorInfo.rows.length > 0) {
			floorInfo.deleteRow(floorInfo.rows.length-1);
		}
		for(var i=0; i < this.flat_info.length; i++) {
			var tr = floorInfo.insertRow(floorInfo.rows.length);
			var td = tr.insertCell(tr.cells.length);
					td.className = "left";
					td.innerHTML = "&nbsp;";
				td = tr.insertCell(tr.cells.length);
					td.className = "nom";
					td.innerHTML = this.flat_info[i].nm;
				td = tr.insertCell(tr.cells.length);
					td.className = "rooms";
					td.innerHTML = this.flat_info[i].rooms;
				td = tr.insertCell(tr.cells.length);
					td.className = "sq";
					td.innerHTML = this.flat_info[i].ta + '&nbsp;/&nbsp;' + this.flat_info[i].la;
				td = tr.insertCell(tr.cells.length);
					td.className = "pricem";
					//td.innerHTML = this.flat_info[i].pricem;
					td.innerHTML = "<a href='index.php?mid=36&amp;mtag=vart'><sub>*</sub></a>";
				td = tr.insertCell(tr.cells.length);
					td.className = "pricea";
					//td.innerHTML = this.flat_info[i].pricea;
					td.innerHTML = "<a href='index.php?mid=36&amp;mtag=vart'><sub>**</sub></a>";
				td = tr.insertCell(tr.cells.length);
					td.className = "right";
					td.innerHTML = "&nbsp;";
		}	
	}
};

/*************************************************************************************************/
// План Квартиры
var objFlat= Class.create();
Object.extend(Object.extend(objFlat.prototype, objMaskDispatcher.prototype), {
	initialize: function(id,refid, flatsData) {
		this._objMaskDispatcher(id, flatsData.roomMasks,  {'__MASK_OPACITY__':__OPACITY_ROOM_MASK__});
		this.ref = $(refid);				  
	},
	// Событие: мышь над маской
	mouseover: function(index) {
		this._selectMask(index);
		this.showRef(index);
	},
	// Событие: мышь покинула маску
	mouseout: function(index) {
		this._unselectMask(index);
		this.hideRef();
	},
	// Показать указатель
	showRef: function(index) {
		var top = flatsData.roomMasks[index].refY, left = flatsData.roomMasks[index].refX;
		this.ref.setStyle({top:top + 'px', left:left + 'px'});	
		this.ref.show();
	},
	// Спрятать указатель	
	hideRef: function() {
		this.ref.hide();		
	}
});

/*************************************************************************************************/
// Галерея
var objGallery = Class.create();
objGallery.prototype = {
	initialize: function(galleryData) {
		this.galleryData = galleryData;
		/*******************************************/
		this.section_postfix = '_gsec';
		this.section_count = this.galleryData.length;
		/*******************************************/
		this.preview_img_postfix = '_pimg';
		this.preview_img_class   = 'previewimg';
		this.preview_img_count   = 7;
		/*******************************************/
		this.preview_page = 0;
		this.preview_page_area	 = 'gpreviewpg';
		this.preview_page_count  = 7;
		this.preview_page_postfix = '_previewpg';
		/*******************************************/
		this.fullview_img = 'fullimg';
		/*******************************************/
		this.gsign  = 'gsign';
		/*******************************************/
		this.create_handlers();
		// По умолчанию сделаем выбор секции
		if(this.section_count > 0) {
			this.section_selected(0);
		}
	},
	create_handlers: function() {
		// обработчики превьюх
		for(var i=0; i < this.preview_img_count; i++) {
			Event.observe(i + this.preview_img_postfix, 'click', this.preview_img_event_click.bindAsEventListener(this));
		}
		// обработчики выбора секции
		for(var i=0; i < this.section_count; i++ ) {
			Event.observe(i + this.section_postfix, 'click', this.section_event_click.bindAsEventListener(this));
		}
		// обработчики выбора страниц превьюх
		for(var i=0; i < this.preview_page_count; i++ ) {
			Event.observe(i + this.preview_page_postfix, 'click', this.preview_page_event_click.bindAsEventListener(this));
		}
	},
	// обработчик клика по превьюхе
	preview_img_event_click: function(event)	{
		var preview_index = (xDef(event,Event.element(event),Event.element(event).id)) ? parseInt(Event.element(event).id) : -1;
		if(preview_index != -1) {
			// Рабочий индекс
			var data_index = (this.preview_page*this.preview_page_count + preview_index);
			this.fullview_show(data_index);
			this.gsign_show(data_index);
		}
	},
	// обработчик клика по выбору страниц
	preview_page_event_click: function(event) {
		var preview_page_index = (xDef(event,Event.element(event),Event.element(event).id)) ? parseInt(Event.element(event).id) : -1;
		if(preview_page_index != -1) {
			this.preview_show_page(preview_page_index);
		}
	},
	// обработчик клика по ссылки секции
	section_event_click: function(event)	{
		var section_index = (xDef(event,Event.element(event),Event.element(event).id)) ? parseInt(Event.element(event).id) : -1;
		if(section_index != -1) {
			this.section_selected(section_index);	
		}
	},
	// подсветка секции в GUI: turn - 0 выключить, 1-включить
	section_highlight: function(index,turn) {
		if (xDef(index)) {
			var gsid = index + this.section_postfix;
			(turn) ? $(gsid).addClassName('activep') : $(gsid).removeClassName('activep');
		}
	},
	// сделан выбор секции
	section_selected: function(index) {
		this.section_highlight(this.section_index, false);	
		this.section_index = index;	
		this.section_highlight(index, true);
		this.preview_prepaid();
	},
	// прячем все картинки превьюх
	preview_hide_img: function() {
		for(var i=0; i < this.preview_img_count; i++) {
			$(i + this.preview_img_postfix).src = __TRANSPARENT_IMG_1x1__;
			$(i + this.preview_img_postfix).hide();
		}
	},
	// прячем большую картинку
	fullview_hide_img: function() {
		$(this.fullview_img).src = __TRANSPARENT_IMG_1x1__;
	},
	// подготовить превьюхи в соотв с секцией
	preview_prepaid: function() {
		this.preview_hide_img();
		this.preview_update_page_area();
		this.preview_show_page(0);
	},
	// область страниц
	preview_update_page_area: function() {
		for(var i=0; i < this.preview_page_count; i++) {
			$(i + this.preview_page_postfix).hide();
		}
		var preview_pages = Math.ceil(this.galleryData[this.section_index].length / this.preview_img_count);
		if (preview_pages > 1) {
			for(i=0; i < preview_pages ; i++) {
				$(i + this.preview_page_postfix).show();
			}
		}	
	},
	// показать страницу превьюх
	preview_show_page: function(page) {
		var img = 0;
		this.preview_hide_img();
		this.fullview_hide_img();
		for(var i=page*this.preview_img_count; 
			i < Math.min((page + 1)*this.preview_img_count, this.galleryData[this.section_index].length) ;  i++) {
			$(img + this.preview_img_postfix).src = this.galleryData[this.section_index][i].s;
			$(img + this.preview_img_postfix).show();
			// Для первой превьюхи покажем большую картинку
			if (!img) {
				this.fullview_show(i);
				this.gsign_show(i);
			}
			img++;
		}
		// установим активной страницу
		$(this.preview_page + this.preview_page_postfix).removeClassName('activep');
		$(page  + this.preview_page_postfix).addClassName('activep');
		this.preview_page = page;
		
	},
	// большая картинка - показать
	fullview_show: function(index) {
		$(this.fullview_img).src = this.galleryData[this.section_index][index].b;
	},
	// подпись к картинке
	gsign_show: function(index) {
		$(this.gsign).update(this.galleryData[this.section_index][index].text);
	}
};

/*************************************************************************************************/
// Выбор проектов - галерея
var objProjects = Class.create();
objProjects.prototype = {
	initialize: function() {
		this.selectors = ['zhitlovi','socialni','ozdob','proektni'];	
		this.postfixa = '_a.jpg';
		this.postfixp = '_p.jpg';
		this.imagesa = {};
		this.imagesp = {};
		this.loadimages();
		this.create_handlers();
	},
	create_handlers: function() {
		for(var i=0; i < this.selectors.length; i++) {
			Event.observe(this.selectors[i], 'mouseover', this.selectors_event_over.bindAsEventListener(this));
			Event.observe(this.selectors[i], 'mouseout', this.selectors_event_out.bindAsEventListener(this));
		}
	},
	loadimages: function() {
		for(var i=0; i < this.selectors.length; i++) {
			var selector = this.selectors[i];
			this.imagesa[selector] = new Image;
			this.imagesa[selector].src = __PATH_TO_IMAGES__ + selector + this.postfixa;
			this.imagesp[selector] = new Image;
			this.imagesp[selector].src = __PATH_TO_IMAGES__ + selector + this.postfixp;
		}
	},
	selectors_event_over: function(event) {
		var e = (xDef(event,Event.element(event))) ? Event.element(event) : null;
		if(e) {
			e.src = this.imagesa[e.id].src
		}
	},
	selectors_event_out: function(event) {
		var e = (xDef(event,Event.element(event))) ? Event.element(event) : null;
		if(e) {
			e.src = this.imagesp[e.id].src
		}	
	}
};


/*************************************************************************************************/
// xDef r1, Copyright 2001-2007 Michael Foster (Cross-Browser.com)
// Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL

function xDef()
{
  for(var i=0; i<arguments.length; ++i){if(typeof(arguments[i])=='undefined') return false;}
  return true;
}

/*************************************************************************************************/
// xClientHeight r5, Copyright 2001-2007 Michael Foster (Cross-Browser.com)
// Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL

function xClientHeight()
{
  var v=0,d=document,w=window;
  if((!d.compatMode || d.compatMode == 'CSS1Compat') && !w.opera && d.documentElement && d.documentElement.clientHeight)
    {v=d.documentElement.clientHeight;}
  else if(d.body && d.body.clientHeight)
    {v=d.body.clientHeight;}
  else if(xDef(w.innerWidth,w.innerHeight,d.width)) {
    v=w.innerHeight;
    if(d.width>w.innerWidth) v-=16;
  }
  return v;
}

/*************************************************************************************************/
// xHeight r6, Copyright 2001-2007 Michael Foster (Cross-Browser.com)
// Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL

function xHeight(e,h)
{
  if(!(e=xGetElementById(e))) return 0;
  if (xNum(h)) {
    if (h<0) h = 0;
    else h=Math.round(h);
  }
  else h=-1;
  var css=xDef(e.style);
  if (e == document || e.tagName.toLowerCase() == 'html' || e.tagName.toLowerCase() == 'body') {
    h = xClientHeight();
  }
  else if(css && xDef(e.offsetHeight) && xStr(e.style.height)) {
    if(h>=0) {
      var pt=0,pb=0,bt=0,bb=0;
      if (document.compatMode=='CSS1Compat') {
        var gcs = xGetComputedStyle;
        pt=gcs(e,'padding-top',1);
        if (pt !== null) {
          pb=gcs(e,'padding-bottom',1);
          bt=gcs(e,'border-top-width',1);
          bb=gcs(e,'border-bottom-width',1);
        }
        // Should we try this as a last resort?
        // At this point getComputedStyle and currentStyle do not exist.
        else if(xDef(e.offsetHeight,e.style.height)){
          e.style.height=h+'px';
          pt=e.offsetHeight-h;
        }
      }
      h-=(pt+pb+bt+bb);
      if(isNaN(h)||h<0) return;
      else e.style.height=h+'px';
    }
    h=e.offsetHeight;
  }
  else if(css && xDef(e.style.pixelHeight)) {
    if(h>=0) e.style.pixelHeight=h;
    h=e.style.pixelHeight;
  }
  return h;
}

/*************************************************************************************************/
// xTop r2, Copyright 2001-2007 Michael Foster (Cross-Browser.com)
// Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL

function xTop(e, iY)
{
  if(!(e=xGetElementById(e))) return 0;
  var css=xDef(e.style);
  if(css && xStr(e.style.top)) {
    if(xNum(iY)) e.style.top=iY+'px';
    else {
      iY=parseInt(e.style.top);
      if(isNaN(iY)) iY=xGetComputedStyle(e,'top',1);
      if(isNaN(iY)) iY=0;
    }
  }
  else if(css && xDef(e.style.pixelTop)) {
    if(xNum(iY)) e.style.pixelTop=iY;
    else iY=e.style.pixelTop;
  }
  return iY;
}

/*************************************************************************************************/
// xPageY r4, Copyright 2001-2007 Michael Foster (Cross-Browser.com)
// Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL

function xPageY(e)
{
  var y = 0;
  e = xGetElementById(e);
  while (e) {
    if (xDef(e.offsetTop)) y += e.offsetTop;
    e = xDef(e.offsetParent) ? e.offsetParent : null;
  }
  return y;
}

/*************************************************************************************************/
// xGetElementById r2, Copyright 2001-2007 Michael Foster (Cross-Browser.com)
// Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL

function xGetElementById(e)
{
  if(typeof(e)=='string') {
    if(document.getElementById) e=document.getElementById(e);
    else if(document.all) e=document.all[e];
    else e=null;
  }
  return e;
}

/*************************************************************************************************/
// xNum r2, Copyright 2001-2007 Michael Foster (Cross-Browser.com)
// Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL

function xNum()
{
  for(var i=0; i<arguments.length; ++i){if(isNaN(arguments[i]) || typeof(arguments[i])!='number') return false;}
  return true;
}

/*************************************************************************************************/
// xStr r1, Copyright 2001-2007 Michael Foster (Cross-Browser.com)
// Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL

function xStr(s)
{
  for(var i=0; i<arguments.length; ++i){if(typeof(arguments[i])!='string') return false;}
  return true;
}

/*************************************************************************************************/
// xGetComputedStyle r7, Copyright 2002-2007 Michael Foster (Cross-Browser.com)
// Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL

function xGetComputedStyle(e, p, i)
{
  if(!(e=xGetElementById(e))) return null;
  var s, v = 'undefined', dv = document.defaultView;
  if(dv && dv.getComputedStyle){
    s = dv.getComputedStyle(e,'');
    if (s) v = s.getPropertyValue(p);
  }
  else if(e.currentStyle) {
    v = e.currentStyle[xCamelize(p)];
  }
  else return null;
  return i ? (parseInt(v) || 0) : v;
}

/*************************************************************************************************/
// xCamelize r1, Copyright 2007 Michael Foster (Cross-Browser.com)
// Part of X, a Cross-Browser Javascript Library, Distributed under the terms of the GNU LGPL

function xCamelize(cssPropStr)
{
  var i, c, a = cssPropStr.split('-');
  var s = a[0];
  for (i=1; i<a.length; ++i) {
    c = a[i].charAt(0);
    s += a[i].replace(c, c.toUpperCase());
  }
  return s;
}

/*************************************************************************************************/
// Установить для картинки текущий файл в зависимости от индекса
function set_img_src(e, i) {
	$(e).src = $(e).src.replace(/(_\d)?(.png|jpg|gif)$/, "_" + i + "$2");
}

/*************************************************************************************************/
// Установить для картинки текущий файл в зависимости от индекса
function set_status(e) {
	window.status = $(e).title;
}

/*************************************************************************************************/
// Запустить флеш
function showFlash(element, fileswf, fileimg, w, h) {
	var so = new SWFObject(fileswf, '', w, h, '6', '#efeeef');
	if (so.installedVer.major >= 6) {
		$(element).show();			
	    so.addParam('quality', 'high');
	    // transparent, opaque
		so.addParam('wmode', 'opaque');
	    so.addParam('salign', 't');
	    so.write(element);		
	}
	else {
		$(element).innerHTML = '<img src="' + fileimg  + '" style="width:' + w + 'px;height:'+ h +'px;" />';
	}
}

/*************************************************************************************************/
// Проверка - флеш-плейр установлен или нет
function existFlashPlayer() {
	var so = new SWFObject();
	return (so.installedVer.major >= 6);
	
}

/*************************************************************************************************/
// Запустить картинку
function showPic(element, fileimg, w, h) {
	$(element).innerHTML = '<img src="' + fileimg  + '" style="width:' + w + 'px;height:'+ h +'px;" />';
}

/*************************************************************************************************/
// Выдать сообщение, что флеш не установлен
function showNoFlashWarning(e) {
	if (xDef(e) && $(e)) {
		var html = "Для ефективного використання сайту необхідно встановити" +
				" <a class='warning' href='http://www.adobe.com/go/getflashplayer' target='_blank'>" +
				"Adobe Flash Player</a>&nbsp;" +
				"<a class='warning' href='http://www.adobe.com/go/getflashplayer' target='_blank'>" +
				"<img id='getadobeflash' src='/userfiles/Image/common/getadobeflash.jpg' alt='Download Adobe Flash Player'>";
		//<img src='/userfiles/Image/common/getadobeflash.jpg' alt='Download Adobe Flash Player' />				
		$(e).innerHTML = html;
		$(e).show();
	}	
}

/*************************************************************************************************/
// Контент
function showNoFlashContent(e, tag) {

}

/*************************************************************************************************/
// Очистики флеша, картинок 
function cleanMedia(element) {
	$(element).innerHTML = '';
}

/*************************************************************************************************/
// Страницы загружены 
function loaded() {
	// Контент
	switch (content_mode) {
		case __MODE_CONTENT_PLAN__ : 
			showFlash('output', __PLAN_FLASH__, __PLAN_PIC__,__OUTPUT_MEDIA_WIDTH__, __OUTPUT_MEDIA_HEIGHT__);
			if(!existFlashPlayer()) {
				 showNoFlashWarning(__WARNING__AREA__);
				load_content(__NOFLASH_TAG_PLAN__, 'output');
			}
			break;
		// Флеш первой страницы
		case __MODE_CONTENT_INDEXPAGE__ : 
			showFlash('output_swf', __OUPUT_INDEXPAGE_FLASH__, __OUPUT_INDEXPAGE_PIC__,__OUTPUT_MEDIA_WIDTH__, __OUTPUT_MEDIA_HEIGHT__);
			(!existFlashPlayer()) ? showNoFlashWarning(__WARNING__AREA__) : false;
			break;
		// Секция
		case __MODE_CONTENT_SECTION__ : 
			if ($('section')) {
				oSection = new objSection('section', sectionData, floorsData);
				floorindex = (flooractive != null)? oSection.getIndexFloorById(flooractive) : __FLOOR_DEFAULT_INDEX__;
				oSection.selectMask(floorindex);
			}
			break;
		// Квартира
		case __MODE_CONTENT_FLAT__ : 
			oFlat = new objFlat('flat', 'roomRef', flatsData);
			$('tizer_floor_mask').show();
			$('tizer_floor_mask').setStyle({opacity:0.6});
			$('tizer_section_mask').show();
			$('tizer_section_mask').setStyle({opacity:0.6});
			break;
		// Мапа	
		case __MODE_CONTENT_MAP__ : 
			showFlash('output', __OUPUT_MAP_FLASH__, __MAP_NOFLASH_PIC__,__OUTPUT_MEDIA_WIDTH__, __OUTPUT_MEDIA_HEIGHT__);
			(!existFlashPlayer()) ? showNoFlashWarning(__WARNING__AREA__) : false;
			break;
		// Галерея 
		case __MODE_CONTENT_GALLERY__ : 			
			oGallery = new objGallery(galleryData);
			break;
		// Выбор проектов
		case __MODE_CONTENT_PROJECTS__ : 
			oProjects = new objProjects();
			break;	
	}

	// Обработчики меню
	for(var i=0; i < menu.length; i++) {
		var menuid = 'me' + menu[i];
		Event.observe(menuid, 'mouseover', function(event){
										if( typeof Event != "undefined" &&
																typeof Event.element == "function" &&
																typeof Event.element(event) != "undefined" ) {
								
											var e = Event.element(event);
											showFlash(e.id + '_flash', __MENU_BKG_FLASH_FOCUS__, null,__MENU_BKG_WIDTH__,__MENU_BKG_HEIGHT__);
										}
		});
		Event.observe(menuid, 'mouseout', function(event){
										if( typeof Event != "undefined" &&
																typeof Event.element == "function" &&
																typeof Event.element(event) != "undefined" ) {
											var e = Event.element(event);
											cleanMedia(e.id + '_flash');
										}	
		});
	}	
	// Основной баннер
	if (content_mode != __MODE_CONTENT_INDEXPAGE__) {
		showFlash('banner', __BANNER_FLASH__, __BANNER_PIC__,__BANNER_MEDIA_WIDTH__, __BANNER_MEDIA_HEIGHT__);	
	}
	else {
		showPic('banner', __BANNER_PIC__,__BANNER_MEDIA_WIDTH__, __BANNER_MEDIA_HEIGHT__);
	}
	
	jQuery("#tbl_gal .fancy").fancybox({'zoomSpeedIn':	0, 'zoomSpeedOut':	0,  'overlayShow':	true}); 
	jQuery(".bigfoto").fancybox({'zoomSpeedIn':	0, 'zoomSpeedOut':	0,  'overlayShow':	true}); 		
		
	// Выравниваем высоту столбцов
	fixHeightColumns();
}	

/*************************************************************************************************/
// Вырованять высоту столбцов:
// левая часть (меню), средняя часть (контент), правая часть (новости)
function fixHeightColumns() {
	//	Event.stopObserving(window,'resize', function(){fixHeightColumns();});
	// поправка - 255px - высота шапки, 20px - отступы
	var hOutput = 0; //$('output').getHeight() + 20; 
	//($('output_header')) ? hOutput += $('output_header').getHeight() + 15 : false;
	//($('warning').getHeight() > 0) ? hOutput += 60  : false;



	//var maxHeight = Math.max(xClientHeight()-252, hOutput, $('menu').getHeight()+ $('recl').getHeight() + 20);
	//var maxHeight = Math.max(xClientHeight()-252, hOutput, $('menu').getHeight()+  20);

	//$('content').setStyle({height:(maxHeight + "px"),'min-height':(maxHeight + "px")});
//	$('selector').setStyle({height:(maxHeight + "px"),'min-height':(maxHeight + "px")});
}

/*************************************************************************************************/
// Изменение размера окна
function onResizeWindow() {
	if (!blockfixHeight) {
		fixHeightColumns();
	}
	return;
}

/*************************************************************************************************/
// Открыть тур в новом окне
function openTour(url) {
	windowTour = window.open(url,"_blank","height=336, width=440, top=100, left=250");
	windowTour.window.focus();
	return false;	
}

/*************************************************************************************************/
// Подгрузить контент
function load_content(tag, container) {
	var url = __URL_LOAD_CONTENT__;
	loader_content = new Ajax.Request(url + '?content=' + tag, {
		method: 'get',
		onSuccess: function(transport) {
			$(container).innerHTML = transport.responseText;
			fixHeightColumns();
		}
	});
}

