<?xml version="1.0" encoding="UTF-8"?>
<rmml>
<!--
$RCSfile: rnmc_stdText.xml $
$Revision: 957 $

last change: $Date: 2009-02-17 14:00:06 +0300 (Вт, 17 фев 2009) $
             $Author: toha $

	Lacerta Project
	version 1.0.0.1
	Copyright (C) 2007-2009 RNMC
-->
<!--
====================================================================================================================
			Визуальный объект 'Текст'
====================================================================================================================
-->
<composition name="rnmc_stdText" class="rnmc_stdMediaObject">
<script><![CDATA[
	this.type = "rnmc_stdText"
	this.printFormat = null;


//	для каждого объекта необходимо определить
//	какие эффекты к нему применимы
	this.fadeEffectEnabled = true;
	this.moveEffectEnabled = true;
	this.scaleEffectEnabled = false;
	
	this.objectScroll    = true;
	this.scrollerIndent  = true;
	this.scrollerXOffset = 10;
	this.scrollerYOffset = 25;

	this.scrollerHeight = "-25";

	function initFromNode(srcNode){
		var xmlNode = null;
		var xmlAttributeMap = null;
		var xmlAttribute = null;

		xmlAttributeMap = srcNode.attributes;
		if (xmlAttributeMap){
			xmlAttribute = xmlAttributeMap.getNamedItem("id");
			if (xmlAttribute != null && xmlAttribute.specified)
				this.id = xmlAttribute.value;
			xmlAttribute = xmlAttributeMap.getNamedItem("visible");
			if (xmlAttribute != null && xmlAttribute.specified){
				if(xmlAttribute.value == "true")
					this.visibility = OBJECT_VISIBILITY_TRUE;
				else if(xmlAttribute.value == "false")
					this.visibility = OBJECT_VISIBILITY_FALSE;
			}
			xmlAttribute = xmlAttributeMap.getNamedItem("enabled");
			if (xmlAttribute != null && xmlAttribute.specified && xmlAttribute.value == "false")
				this.disabled = true;
			xmlAttribute = xmlAttributeMap.getNamedItem("format");
			if (xmlAttribute != null && xmlAttribute.specified)
				this.printFormat = xmlAttribute.value;
		}		
		
		//	считывание настроек по умолчанию
		if(scene.defaultSettings && scene.defaultSettings.stdText){
			this.objectScroll = scene.defaultSettings.stdText.objectScroll;
			this.scrollerIndent = scene.defaultSettings.stdText.scrollerIndent;
			this.scrollerXOffset = scene.defaultSettings.stdText.scrollerXOffset;
			this.scrollerYOffset = scene.defaultSettings.stdText.scrollerYOffset;
			this.scrollerHeight = scene.defaultSettings.stdText.scrollerHeight;
			this.titleStyle = scene.defaultSettings.stdText.titleStyle;
		}		
		
		
		xmlNode = srcNode.firstChild;
		while(xmlNode){
			if(xmlNode.nodeName == "value"){
				if(xmlNode.textContent){
					this.objectValue = xmlNode.textContent;
				}
			} else if(xmlNode.nodeName == "param"){
				this.parseParamNode(xmlNode);
			} else if(xmlNode.nodeName == "rollovermenu"){
				this.parseRolloverMenuNode(xmlNode);
			} else if(xmlNode.nodeName == "control"){
				this.parseControlNode(xmlNode);
			} else if(xmlNode.nodeName == "scroller"){
				this.parseScrollerNode(xmlNode);
			} else if(xmlNode.nodeName == "title"){
				this.parseTitleNode(xmlNode);
			} else if(xmlNode.nodeName == "actions"){
				//	стандартые события
				rnmc_stdMediaObject_parseActionsNode(xmlNode);			
			} else if(xmlNode.nodeName == "hint"){
				this.parseHintNode(xmlNode);
			} else if(xmlNode.nodeName == "attach"){
				this.parseAttachNode(xmlNode);
			} else if(xmlNode.nodeName == "effects"){
				this.parseEffectsNode(xmlNode);
			} else if(xmlNode.nodeName == "effect"){	//	старый вариант, NOT SAFE
				this.parseEffectNode(xmlNode);
			} else if(xmlNode.nodeName == "format"){
				if(xmlNode.textContent){
					this.printFormat = xmlNode.textContent;
				}
			} else if(xmlNode.nodeName == "drag"){ //	таскание медиа-объекта
				this.parseDraggingNode(xmlNode);
			} else if(xmlNode.nodeName == "objectives"){
				this.parseObjectivesNode(xmlNode);
			}			
			xmlNode = xmlNode.nextSibling;
		}
		return true;
	};

	function parseScrollerNode(srcNode){
		var xmlAttributeMap = null;
		var xmlAttribute = null;

		if(srcNode.nodeName == "scroller"){
			xmlAttributeMap = srcNode.attributes;
			if (xmlAttributeMap){
				xmlAttribute = xmlAttributeMap.getNamedItem("indent");
				if (xmlAttribute != null && xmlAttribute.specified){
					if((xmlAttribute.value).toLowerCase() == "false"){
						this.scrollerIndent = false;
					}				
				}
				xmlAttribute = xmlAttributeMap.getNamedItem("xOffset");
				if (xmlAttribute != null && xmlAttribute.specified){
					this.scrollerXOffset = parseInt(xmlAttribute.value);
				}
				xmlAttribute = xmlAttributeMap.getNamedItem("yOffset");
				if (xmlAttribute != null && xmlAttribute.specified){
					this.scrollerYOffset = parseInt(xmlAttribute.value);
				}
				xmlAttribute = xmlAttributeMap.getNamedItem("height");
				if (xmlAttribute != null && xmlAttribute.specified){
					this.scrollerHeight = xmlAttribute.value;
				}
				xmlAttribute = xmlAttributeMap.getNamedItem("depth");
				if (xmlAttribute != null && xmlAttribute.specified){
					this.scrollerDepth = parseInt(xmlAttribute.value);
				}
			}
		}
	}
	
	
	
	function loadObject(){
		if(!this.objectContent){
			this.objectContent = new Text();
			if(this.objectStyle)
				this.objectContent.style = this.objectStyle;
			if(this.objectSrc)
				this.objectContent.src = this.objectSrc;
			else if(this.objectValue)
				this.objectContent.value = this.objectValue;
			if (this.objectHitArea != null)
				this.objectContent.hitArea = this.objectHitArea;
			this.objectContent.parent = this;
		}
	}

	function unloadObject(){
		this.effectsTarget = null;
		if(this.objectContent){
			if(this.objectContent.scroller){
				this.objectContent.scroller.parent = null;
				delete this.objectContent.scroller;
			}
			this.objectContent.parent = null;
			this.objectContent = null;
		}
	}

	function showObject(){
		this.x = 0;
		this.y = 0;
		this.loadObject();
		if(this.objectContent){
			if(this.objectStyle)
				this.objectContent.style = this.objectStyle;
			var objectPosition = this.getPosition();
			this.setPosition(objectPosition[0], objectPosition[1], objectPosition[2], objectPosition[3], this.objectDepth);
			this.objectContent.opacity = this.objectOpacity;
			if(this.objectBgColor)
				this.objectContent.bkgColor = this.objectBgColor;
		// обработка ссылок
			this.objectContent.onPressLink = linkPress;
			this.objectContent.onRollOutLink = linkRollout;
		}
		//	перебор присоединённых эффектов для показа
		this.effectsTarget = this.objectContent;
		var showEffectsCount = this.startEffects(EVENT_ON_SHOW);
		if(showEffectsCount == 0){
			this.objectContent.visible = true;
		}
		if(this.objectScroll){
			if (this.objectContent.getMediaSize().height > this.objectContent.height
				&& this.objectContent.pageSize > 0 && this.objectContent.textSize > 0){
				// необходимо поставить скроллинг
				if(!this.objectContent.scroller){
					this.objectContent.scroller = new Composition();
					this.objectContent.scroller._class = "ui_CScrollerVertical";
					this.objectContent.scroller.name = "scroller";
//					this.objectContent.scroller.depth = this.objectDepth + 99;
					this.objectContent.scroller.depth = this.objectDepth - 1;
					this.objectContent.scroller.parent = this;
				}
				
				if(this.scrollerIndent){
					this.objectContent.width -= this.scrollerXOffset;
					this.objectContent.width -= this.objectContent.scroller.width;
				}
				this.objectContent.scroller.initialize(
					this.objectContent, this.objectContent.pageSize,
					this.objectContent.textSize + this.objectContent.pageSize, 1);
				this.objectContent.scroller.attachToObject();
				this.objectContent.scroller.resizeScroller(this.objectContent.height - 25);
				if(this.scrollerHeight.indexOf("%") >= 0){
					//	если указано в процентах
					var scrollerActualHeight = Math.abs(parseInt(this.objectContent.height * (parseInt(this.scrollerHeight))/100));
					this.objectContent.scroller.resizeScroller(scrollerActualHeight);
				} else {
					if(parseInt(this.scrollerHeight) <= 0){
						//	вычитаем из высоты объекта эту величину и получаем высоту скроллера
						var scrollerActualHeight = this.objectContent.height + parseInt(this.scrollerHeight);
						this.objectContent.scroller.resizeScroller(scrollerActualHeight);
					} else {
						this.objectContent.scroller.resizeScroller(this.scrollerHeight);
					}				
				}
				this.objectContent.scroller.x += this.scrollerXOffset;
				this.objectContent.scroller.y += this.scrollerYOffset;
				this.objectContent.scrollTo = function(scrollPos, is_horizontal)
				{
					if (!is_horizontal)
						this.scrollToLine(scrollPos);
				}
				// Для постраничной прокрутки текста
				this.objectContent.scroller.scrollPageUp  = function()
				{
					objectContent.scrollToPrevPage();
					this.currentScrollPos = objectContent.scrollTop;
					this.setSliderPos(this.currentScrollPos/this.scrollMax);
				}
				this.objectContent.scroller.scrollPageDown  = function()
				{
					objectContent.scrollToNextPage();
					this.currentScrollPos = objectContent.scrollTop;
					this.setSliderPos(this.currentScrollPos/this.scrollMax);
				}
			}
			else if (this.objectContent.scroller != undefined)
			{
				this.objectContent.scroller.parent = null;
				delete this.objectContent.scroller;
			};
		};
		this.objectContent.onMouseWheel = function()
		{
			if (Mouse.target == objectContent
				&& this.scrollTo != undefined
				 && this.scrollTo != null)
			{
				var scroll_pos = this.scrollTop - parseInt(Mouse.delta/120);
				if (this.scroller)
 					this.scroller.setClientPos(scroll_pos);
 				else
 					this.scrollTo(scroll_pos, false);
 				if (this.scroller)
 					this.scroller.setSliderPos(this.scrollTop/scroller.scrollMax);
			}
		}

		rnmc_stdMediaObject_showObject();
	}

	function hideObject(){
		if (this.objectContent && this.objectContent.scroller){
			this.objectContent.scroller.parent = null;
			delete this.objectContent.scroller;
		};
		rnmc_stdMediaObject_hideObject();
	};
	
//	Переопределение getPosition() (только rnmc_stdText!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)
	function getPosition(){
		var positionArray = new Array();
		if(this.objectContent){	//	объект создан
			var containerX = 0;
			var containerY = 0;
			var offsetX = 0;
			var offsetY = 0;
			var newWidth = 0;
			var newHeight = 0;
			
			if(this.autoAttachTarget){	//	объект к чему то присоединён
				var attachCoords = this.getAttachPosition();
				containerX = attachCoords[0];
				containerY = attachCoords[1];
			} else {
				containerX = this.objectX;
				containerY = this.objectY;			
			}
			
			if(this.objectWidth > 0){
				this.objectContent.width = this.objectWidth;
			}
			if(this.objectHeight > 0){
				this.objectContent.height = this.objectHeight;
			}
			
			var mediaSize = this.objectContent.getMediaSize();
			
      if(this.objectWidth == 0){
        newWidth = mediaSize.width;
      } else {
        newWidth = this.objectWidth;
      }
      
			if(this.objectHeight == 0){
				newHeight = mediaSize.height;
			} else {
				//	Никита: пока закомментировал, посмотрим что будет дальше
				//if(mediaSize.height > this.objectHeight){
					newHeight = this.objectHeight;
				//} else if(mediaSize.height <= this.objectHeight){
				//	newHeight = mediaSize.height;
				//}
			}
			
			switch(this.horizontalAlign){
			case H_ALIGN_LEFT:
				offsetX = 0;
				break;
			case H_ALIGN_CENTER:
				offsetX = parseInt((this.objectWidth - newWidth)/2);
				break;
			case H_ALIGN_RIGHT:
				offsetX = this.objectWidth - newWidth;
				break;
			}
			switch(this.verticalAlign){
			case V_ALIGN_TOP:
				offsetY = 0;
				break;
			case V_ALIGN_CENTER:
				offsetY = parseInt((this.objectHeight - newHeight)/2);
				break;
			case V_ALIGN_BOTTOM:
				offsetY = this.objectHeight - newHeight;
				break;
			}
			positionArray.push(containerX + offsetX);
			positionArray.push(containerY + offsetY);
			positionArray.push(newWidth);
			positionArray.push(newHeight);			
		} else {	//	значит объект еще не создан
			var realX = this.objectX;
			var realY = this.objectY;
			var realWidth = 0;
			var realHeight = 0;
			if(this.autoAttachTarget){
				var attachCoords = this.getAttachPosition();
				realX = attachCoords[0];
				realY = attachCoords[1];
				realWidth = 0;
				realHeight = 0;
			}
			positionArray.push(realX, realY, realWidth, realHeight);
		}
		return positionArray;
	}
	
	
	
	function setTextValue(newTextValue){
		this.objectValue = newTextValue;
		if(this.objectContent){
			this.objectContent.value = newTextValue;
		}
	}

	function saveAs(){
		if(this.objectContent){
			this.objectContent.saveAs();
		}
	}

// обработка хинтов
	function linkPress(){
		if (objectContent.scroller != null) {
			objectContent.scroller.currentScrollPos = objectContent.scrollTop;
			objectContent.scroller.setSliderPos(objectContent.scroller.currentScrollPos/objectContent.scroller.scrollMax);
		}
		scene.Utils.fireLink(this.getLinkInfo().href, this);
	};

	function linkRollout(){
		if (scene.Hint)
			scene.Hint.hideHint();
	};	

	function buttonDispatcher(btnId){
		switch(btnId){
		default:
			rnmc_stdMediaObject_buttonDispatcher(btnId);
		}
	}
]]></script>
</composition>
</rmml>
