function textObject(){
	var _self = this;
	this.properties = new Object();
	_self.properties['self'] = _self;
	_self.properties['type'] = "text";
	
	this.appendTo      = function(parentObject)	{parentObject.appendChild(_self.properties["holderDiv"]);}
	this.changeName	   = function(newName)		{_self.properties['name'] = newName};
	this.select 	   = function()				{_textAreaManager.selectedText = _self;_textAreaManager.selectTextArea()};
	this.unSelect 	   = function()				{_textAreaManager.unSelectTextArea(_self)};
	this.startResize   = function()				{_textAreaManager.startResize(_self);};
	this.resizeUp      = function(differenceY)	{_textAreaManager.selectedText = _self;_textAreaManager.resizeUp(differenceY)};
	this.resizeDown    = function(differenceY)	{_textAreaManager.selectedText = _self;_textAreaManager.resizeDown(differenceY)};
	this.resizeRight   = function(differenceX)	{_textAreaManager.selectedText = _self;_textAreaManager.resizeRight(differenceX)};
	this.resizeLeft    = function(differenceX)	{_textAreaManager.selectedText = _self;_textAreaManager.resizeLeft(differenceX)};
	this.endResize     = function()				{_textAreaManager.endResize(_self)};
	this.toXML		   = function()				{_textAreaManager.selectedText = _self;return _textAreaManager.toXML()}
	this.changeColor   = function(color)		{_textAreaManager.selectedText = _self;_textAreaManager.changeColor(color)}
	this.setPosition   = function(topPos,leftPos){_self.properties['holderDiv'].style.top = topPos;_self.properties['holderDiv'].style.left = leftPos;}
	this.copyElement   = function()				{_textAreaManager.selectedText = _self;return _textAreaManager.copyElement()}
	this.setSize	   = function(height,width)	{_textAreaManager.selectedText = _self; _textAreaManager.setSize(height,width) }
	this.setInnerHTML  = function(html)			{_textAreaManager.selectedText = _self; _textAreaManager.setInnerHTML(html)}	
	this.changeBorder  = function(borderObj)	{if(!_elementsManager.isElementSelected(_self.properties["id"])){_self.properties['holderDiv'].style.border = "0px dashed black";}_objectManager.changeBorder(_self.properties['contentsDiv'],borderObj); _self.properties['borderObj'] = borderObj;};
	this.getInnerHTML  = function()				{alert(_self.properties['contentsDiv'].innerHTML)}
	this.setScrollBars = function(bars)			{_textAreaManager.selectedText = _self; _textAreaManager.setScrollBars(bars)}
	this.setCursor	   = function(cursor)		{_textAreaManager.selectedText = _self; _textAreaManager.setCursor(cursor)}
	this.setFont	   = function(fontTitle)	{_textAreaManager.selectedText = _self; _textAreaManager.setFont(fontTitle)}
	this.setTextSize   = function(size)			{_textAreaManager.selectedText = _self; _textAreaManager.setTextSize(size)}
	this.setTextColor  = function(color)		{_textAreaManager.selectedText = _self; _textAreaManager.setTextColor(color)}
	this.setTextBold   = function(style)		{_textAreaManager.selectedText = _self; _textAreaManager.setTextBold(style)}
	this.setTextUnderline = function(style)		{_textAreaManager.selectedText = _self; _textAreaManager.setTextUnderline(style)}
	this.setTextItalics = function(style)		{_textAreaManager.selectedText = _self; _textAreaManager.setTextItalics(style)}
	this.setBGImage    = function(bgImg, bgRepeat){_textAreaManager.selectedText = _self; _textAreaManager.setBGImage(bgImg, bgRepeat)}
	this.removeBGImage = function()				{_textAreaManager.selectedText = _self; _textAreaManager.removeBGImage()}
	this.getText = function(){return _self.properties['contentsDiv'].innerHTML};
	this.changeCSS = function(cssId)		{_textAreaManager.selectedText = _self; _textAreaManager.changeCSS(cssId)}
	this.deleteElement  = function()	{};		
}

function TextAreaManager()
{
	var _self = this
	this.selectedText = null;
	
	var _toolkitOptions_text = new Object();	
	_toolkitOptions_text['bgColor'] = 'bgColor';
	_toolkitOptions_text['border'] = 'border';
	_toolkitOptions_text['bgImg'] = 'bgImg';
	_toolkitOptions_text['cursor'] = 'cursor';
	_toolkitOptions_text['scroll'] = 'scroll';
	_toolkitOptions_text['link'] = 'link';
	_toolkitOptions_text['elementSize'] = 'elementSize';
	_toolkitOptions_text['elementPosition'] = 'elementPosition';
	_toolkitOptions_text['editCSS'] = 'editCSS';
	
	var _itemMenuOptions_text = new Object();
	_itemMenuOptions_text['editText']  = 'editText';
	
	var _itemMenuOptions_simpleText = new Object();
	_itemMenuOptions_simpleText['editSimpleText']  = 'editSimpleText';
	
	
	var _toolkitOptions_simpleText = new Object();	
	_toolkitOptions_simpleText['bgColor'] = 'bgColor';
	_toolkitOptions_simpleText['border'] = 'border';
	_toolkitOptions_simpleText['bgImg'] = 'bgImg';
	_toolkitOptions_simpleText['cursor'] = 'cursor';
	_toolkitOptions_simpleText['link'] = 'link';
	_toolkitOptions_simpleText['setText'] = 'setText';
	_toolkitOptions_simpleText['textProperties'] = 'textProperties';
	_toolkitOptions_simpleText['textColor'] = 'textColor';
	_toolkitOptions_simpleText['elementSize'] = 'elementSize';
	_toolkitOptions_simpleText['elementPosition'] = 'elementPosition';
	
	var _videos = new Object();
	_videos["3726197"]="Text 101";
	_videos["3752312"]="Text Classes";	
	
	function setProperty(property,value){_self.selectedText.properties[property] = value;}
	function getProperty(propertyName){	return _self.selectedText.properties[propertyName];}

	this.createTextArea = function(height, width, divColor, borderObj, type, cssId){
		_self.selectedText = new textObject();
		setProperty("id",_objectManager.createId("text"));
		setProperty("type", type)		
		setProperty("borderObj", borderObj);
		setProperty("visibility","visible");
		setProperty("bgColor",divColor)
		setProperty("link","")
		setProperty("show",true);
		setProperty("cssId",cssId)
		setProperty("videos",_videos);
		if(type == "simpleText"){			
			setProperty("toolkit",_toolkitOptions_simpleText);
			setProperty("itemMenu",_itemMenuOptions_simpleText);	
			setProperty("textFont", "Times New Roman")
			setProperty("textSize", "16")
			setProperty("textColor", "black")
		}
		else{	
			setProperty("itemMenu",_itemMenuOptions_text);	
			setProperty("toolkit",_toolkitOptions_text);
		}	
		createHolderDiv(height, width);
		createContentsDiv(divColor)
		_objectManager.changeBorder(getProperty("contentsDiv"),borderObj)
		return _self.selectedText;	
	}
	
	function createHolderDiv(height,width){
		var holderDiv = document.createElement('div');
		holderDiv.id = getProperty('id');
		holderDiv.cancelBubble = true;
		_pm.setStyle(holderDiv,"position:absolute;width:"+width+"; height:"+height+"; top:0; left:0; overflow:hidden;background:transparent;")
		holderDiv.onmousedown = function(e){if (!e) var e = window.event;
											_elementsManager.selectElement(this,e.ctrlKey);
											e.cancelBubble = true;
											}
		if(getProperty("type") != "simpleText"){		
			holderDiv.ondblclick = function(e){_elementsManager.showTextEditor();
											if (!e) var e = window.event;
											e.cancelBubble = true;
											}		 
		}else{
			holderDiv.ondblclick = function(e){_toolkit.editSimpleText();
											if (!e) var e = window.event;
											e.cancelBubble = true;
											}
		}
		 
		setProperty("holderDiv", holderDiv);
	}
	
	function createContentsDiv(divColor){
		var contentsDiv = document.createElement('div');
		_pm.setStyle(contentsDiv,"position:absolute;width:100%;height:100%; top:0; left:0; overflow:hidden; background: "+divColor +"; zindex:2;")
		contentsDiv.innerHTML = "Double click to insert text.";
		var cssId = getProperty("cssId")
		if(cssId!="" && cssId!="undefined" && cssId!=undefined) contentsDiv.className = cssId+"_text";		
		getProperty("holderDiv").appendChild(contentsDiv);
		setProperty("contentsDiv", contentsDiv);				
	}
	
	this.startResize = function(textArea){
		if(_objectManager.noBorderPresent(textArea)){
			textArea.properties['holderDiv'].style.border="1px dashed #B8B8B8";
		}
	}
	this.resizeDown = function(differenceY){
   		if(parseInt(getProperty("holderDiv").style.height) + differenceY > 1){
           getProperty("holderDiv").style.height = parseInt(getProperty("holderDiv").style.height) + differenceY;
   		}
   	}
   this.resizeUp = function(differenceY){
   		if(parseInt(getProperty("holderDiv").style.height)- differenceY > 1){
   		   getProperty("holderDiv").style.top = parseInt( getProperty("holderDiv").style.top ) + differenceY;
           getProperty("holderDiv").style.height = parseInt(getProperty("holderDiv").style.height)- differenceY;
   		}
   }
   this.resizeRight = function(differenceX){
   		if(parseInt(getProperty("holderDiv").style.width) + differenceX >1){
           getProperty("holderDiv").style.width = parseInt(getProperty("holderDiv").style.width) + differenceX;
   		}
   }

   this.resizeLeft = function(differenceX){
   		if(parseInt(getProperty("holderDiv").style.width) - differenceX >1){
        	getProperty("holderDiv").style.left = parseInt( getProperty("holderDiv").style.left ) + differenceX;
        	getProperty("holderDiv").style.width = parseInt(getProperty("holderDiv").style.width) - differenceX;
   		}
   }
   this.endResize = function(textArea){
		var holderDiv = textArea.properties["holderDiv"];
		if(holderDiv!=undefined && holderDiv!=null) holderDiv.style.border="0px solid #F1F1F1";
		_objectManager.endResize(textArea);
   }
   
   this.selectTextArea = function(){   
   		if(!_elementsManager.isElementSelected(getProperty("id"))){
   			getProperty("holderDiv").style.border = "0px dashed black";
   		}   		
   }
   this.unSelectTextArea = function(textArea)  {
   		if(!_elementsManager.isElementSelected(textArea.properties["id"])){   			
	   		if(textArea.properties["contentsDiv"].innerHTML == "" || textArea.properties["contentsDiv"].innerHTML == "<br>")	   		{
	   			textArea.properties["contentsDiv"].innerHTML = "Double click to insert text."
	   		}
	   		if(textArea.properties["contentsDiv"].innerHTML == "Double click to insert text."){
	   			if(textArea.properties["holderDiv"] != undefined){
	   				if(!_elementsManager.isElementSelected(getProperty("id"))){
			   			if(_objectManager.noBorderPresent(textArea)){
	   							textArea.properties["holderDiv"].style.border = "1px dashed #666666";
			   			}
	   					else{
	   						textArea.properties["holderDiv"].style.border = "0px dashed black";
	   					}
	   				}
	   			}			
	   		}
	   		else{
	   			var textAreaDiv = textArea.properties["holderDiv"]
	   			if(textAreaDiv != undefined)textAreaDiv.style.border = "0px dashed black";
	   		}
   		}
   }
	
	this.changeColor = function(color){
		if(color == "old"){
			if(getProperty("oldbgColor")!= undefined)color = getProperty("oldbgColor");
			else color = "#F1F1F1";
		}
		if(color!="transparent")setProperty('oldbgColor',color);
		setProperty('bgColor',color);
		getProperty('contentsDiv').style.background = color;
		_self.setBGImage(getProperty("bgImg"),getProperty("bgRepeat"));
	}
	
	this.copyElement = function()	{
		var copyFromTextArea = _self.selectedText;
		var borderObj = _objectManager.cloneObject(getProperty("borderObj"));
		var newTextArea = _self.createTextArea(getProperty("holderDiv").style.height, getProperty("holderDiv").style.width, copyFromTextArea.properties['bgColor'], borderObj, getProperty("type"),getProperty("cssId"));		
		newTextArea.setPosition(copyFromTextArea.properties['holderDiv'].style.top,copyFromTextArea.properties['holderDiv'].style.left);
		/* Copy specific properties here */
		newTextArea.properties['subType'] = copyFromTextArea.properties['subType'];
		newTextArea.properties['visibility'] = copyFromTextArea.properties['visibility'];
		newTextArea.properties['contentsDiv'].innerHTML = copyFromTextArea.properties['contentsDiv'].innerHTML;
		if(getProperty("type") == "simpleText") _self.setSimpleTextProperties(newTextArea,copyFromTextArea.properties["textColor"],copyFromTextArea.properties["fontTitle"],copyFromTextArea.properties["textSize"],copyFromTextArea.properties["textBold"],copyFromTextArea.properties["textUnderline"],copyFromTextArea.properties["textItalics"])
		return newTextArea;
	}
   
   	this.toXML = function(){
   		var dimensions = _objectManager.getProperDimensions(_self.selectedText)
		var xml = "<element>" 
		xml+= xmlTag("type",getProperty('type'))
		xml+= xmlTag("id",getProperty('id'));
		xml+= xmlTag("top",dimensions["top"])
		xml+= xmlTag("left",dimensions["left"])
		xml+= xmlTag("width",dimensions["width"])
		xml+= xmlTag("height",dimensions["height"])
		if(getProperty('holderDiv').style.zIndex == "") 
			xml+= xmlTag("zindex","0");
		else
			xml+= xmlTag("zindex",getProperty('holderDiv').style.zIndex);
		xml+= xmlTag("link","<![CDATA[" +getProperty('link')+"]]>");
		var linkTarget = "_parent";
		if(getProperty('linkTarget') != undefined && getProperty('linkTarget')!="") linkTarget = getProperty('linkTarget');
		xml+= xmlTag("linkTarget",linkTarget);  
		xml+= xmlTag("parentId",getProperty('parentId'));
		xml+= xmlTag("visibility",getProperty('visibility'));
		xml+= xmlTag("cssId",getProperty('cssId'));
		xml+= xmlTag("backgroundColor",getProperty('bgColor'))
		xml+= xmlTag("cursor",getProperty('cursor'))
		xml+= xmlTag("border", _objectManager.borderToString(getProperty("borderObj")));
		xml+= xmlTag("bgImg",getProperty('bgImg'));
		xml+= xmlTag("bgRepeat",getProperty('bgRepeat'));
		xml+= xmlTag("scroll",getProperty('scroll'));
		xml+= xmlTag("subType",getProperty('subType'));
		xml+= xmlTag("siblingId",getProperty('siblingId'));
		if(getProperty('type') == "simpleText"){
			xml+= xmlTag("textColor",getProperty('textColor'));
			xml+= xmlTag("fontTitle",getProperty('fontTitle'));
			xml+= xmlTag("textSize",getProperty('textSize'));
			xml+= xmlTag("textBold",getProperty('textBold'));
			xml+= xmlTag("textUnderline",getProperty('textUnderline'));
			xml+= xmlTag("textItalics",getProperty('textItalics'));
		}
		xml+= xmlTag("text","<![CDATA[" + getProperty('contentsDiv').innerHTML +"]]>")							
		xml+="</element>"		
		return xml;	
	}
	function xmlTag(tagName,tagData){
		if(tagData == "undefined")tagData = "";
		return "<" + tagName +">" + tagData + "</" + tagName + ">"
	}
	
	this.loadText = function(height, width, divColor, border,id,parentId,topPos,leftPos,visibility,text,zindex,link,type,bgImg,bgRepeat,cursor,scrollBars,subType,siblingId,linkTarget,cssId){
		var borderObj = _objectManager.loadBorderObj(border);
		var newElement = _self.createTextArea(height, width, divColor, borderObj,type,cssId);
		_objectManager.changeId(newElement,id);
		newElement.properties['holderDiv'].id = id;
		newElement.properties['holderDiv'].style.zIndex = zindex;
		newElement.properties['contentsDiv'].innerHTML = text;
		newElement.setPosition(topPos,leftPos);
		newElement.properties['parentId'] = parentId;
		newElement.properties['link'] = link;
		newElement.properties['linkTarget'] = linkTarget;
		newElement.properties['visibility'] = visibility;
		newElement.properties['subType'] = subType;		
		newElement.setBGImage(bgImg,bgRepeat)
		newElement.setCursor(cursor)
		newElement.setScrollBars(scrollBars)
		_objectManager.loadElement(newElement);	
		
		var sibling = _elementsManager.getElementFromElementsTable(siblingId);
		if(sibling != undefined){
			if(siblingId != sibling.properties.id){
				sibling.properties['siblingId'] = newElement.properties['id'];
				siblingId = sibling.properties['id']
			}
		}
		newElement.properties['siblingId'] = siblingId;				
	}
	this.loadSimpleTextProperties = function(id,textColor,fontTitle,textSize,textBold,textUnderline,textItalics)
	{
		var element = _elementsManager.getElementFromElementsTable(id);
		_self.setSimpleTextProperties(element,textColor,fontTitle,textSize,textBold,textUnderline,textItalics)
	}
	this.setSimpleTextProperties  = function(element,textColor,fontTitle,textSize,textBold,textUnderline,textItalics)
	{
		element.setFont(fontTitle);
		element.setTextSize(textSize)	
		element.setTextColor(textColor) 
		element.setTextBold(textBold)
		element.setTextUnderline(textUnderline)
		element.setTextItalics(textItalics) 
	}
	
	this.setSize = function(height,width){
		getProperty("holderDiv").style.height = height;		
		getProperty("holderDiv").style.width = width;
   		_self.selectedText.endResize();
	}
	
    this.setScrollBars = function(bars)
	{
		_objectManager.setScrollBars(getProperty("contentsDiv"),bars); 
		setProperty("scroll",bars);
		
	}
	this.setCursor = function(cursor)
	{
		getProperty("contentsDiv").style.cursor = cursor;
		setProperty("cursor",cursor);
	    
	}
	this.setInnerHTML =function(html)
	{
		getProperty('contentsDiv').innerHTML = html;
		var siblingId = getProperty('siblingId');
		if(siblingId != undefined)
		{
			var sibling = _elementsManager.getElementFromElementsTable(siblingId);
			if( sibling != undefined)
				sibling.properties['contentsDiv'].innerHTML = html;
		}
	}	

	/* for simple text stuff*/
	this.setFont = function(fontTitle)
	{
		if(fontTitle != undefined && fontTitle != "undefined"){
			getProperty('contentsDiv').style.fontFamily = fontTitle;
			setProperty('fontTitle',fontTitle);
		}
	}
	this.setTextSize = function(size)
	{
		if(size != undefined && size != "undefined"){
			getProperty('contentsDiv').style.fontSize = size;
			setProperty('textSize',size);
		}
	}
	this.setTextColor = function(color)
	{
		if(color != undefined && color != "undefined"){
			getProperty('contentsDiv').style.color = color;
			setProperty('textColor',color);
		}
	}
	this.setTextBold = function(style)
	{
		if(style != undefined && style != "undefined"){
			getProperty('contentsDiv').style.fontWeight = style;
			setProperty('textBold',style);
		}
	}
	this.setTextUnderline = function(style)
	{
		if(style!= undefined && style != "undefined"){
			getProperty('contentsDiv').style.textDecoration = style;
			setProperty('textUnderline',style);
		}
	}
	this.setTextItalics = function(style)
	{
		if(style != undefined && style != "undefined"){
			getProperty('contentsDiv').style.fontStyle = style;
			setProperty('textItalics',style);
		}
	}
	this.setBGImage = function(bgImg, repeat)
	{	
		if(bgImg != "" && bgImg != undefined)
		{
			setProperty('bgImg',bgImg);
			setProperty('bgRepeat',repeat);
			var contentsDiv = getProperty("contentsDiv")
			contentsDiv.style.background = getProperty("bgColor")
			contentsDiv.style.backgroundImage = "url("+ bgImg +")";
			if(repeat != "undefined" && repeat != undefined)
				contentsDiv.style.backgroundRepeat = repeat;
		}
	}
	this.removeBGImage = function(){
		getProperty('contentsDiv').style.backgroundImage = "";
		setProperty('bgImg','');
		setProperty('bgRepeat','');		
	}
	this.changeCSS = function(cssId){
		contentsDiv = getProperty("contentsDiv");
		if(cssId!="" && cssId!="undefined" && cssId!=undefined && cssId!="notSet"){
			 contentsDiv.className = cssId+"_text";
			 setProperty("cssId",cssId);
		}
	}
}
