function divObject(){
	var _self = this;
	this.properties = new Object();
	_self.properties['self'] = _self;
	_self.properties['type'] = "div";
	
	this.select 	   = function()				{_divManager.selectedDiv = _self; if(_objectManager.needToHighlightElement(_self)) _self.properties["holderDiv"].style.border = "1px dashed black";} 
	this.unSelect 	   = function()				{_divManager.unSelectDiv(_self)}
	this.startResize   = function()				{};
	this.resizeUp      = function(differenceY)	{_divManager.selectedDiv = _self;_divManager.resizeUp(differenceY)}
	this.resizeDown    = function(differenceY)	{_divManager.selectedDiv = _self;_divManager.resizeDown(differenceY)}
	this.resizeRight   = function(differenceX)	{_divManager.selectedDiv = _self;_divManager.resizeRight(differenceX)}
	this.resizeLeft    = function(differenceX)	{_divManager.selectedDiv = _self;_divManager.resizeLeft(differenceX)}
	this.endResize     = function()				{_objectManager.endResize(_self);}	
	this.getCorners    = function()				{return _self.properties['corners']}
	this.changeCorner  = function(corner,value)	{_divManager.selectedDiv = _self; _divManager.changeCorner(corner,value)}
	this.changeColor   = function(color)		{_divManager.selectedDiv = _self; _divManager.changeColor(color)}
	this.copyElement   = function()				{_divManager.selectedDiv = _self;return _divManager.copyElement()}
	this.appendTo      = function(parentObject)	{parentObject.appendChild(_self.properties["holderDiv"]);}
	this.toXML		   = function()				{_divManager.selectedDiv = _self;return _divManager.toXML()}
	this.setPosition   = function(topPos,leftPos){_self.properties['holderDiv'].style.top = topPos;_self.properties['holderDiv'].style.left = leftPos;}
	this.changeName	   = function(newName)		{_self.properties['name'] = newName};
	this.setSize	   = function(height,width)	{_divManager.selectedDiv = _self; _divManager.setSize(height,width) }
	this.changeBorder  = function(borderObj)	{_divManager.selectedDiv = _self; _divManager.changeBorder(borderObj)};
	this.setBGImage    = function(bgImg, bgRepeat){_divManager.selectedDiv = _self; _divManager.setBGImage(bgImg, bgRepeat)}
	this.removeBGImage = function()				{_divManager.selectedDiv = _self; _divManager.removeBGImage()}
	this.setCursor 	   = function(cursor)		{_divManager.selectedDiv = _self; _divManager.setCursor(cursor)}
	this.getCursor     = function()				{return _self.properties['cursor'];}
	this.getWidth 	   = function()				{return _self.properties['holderDiv'].parentNode.style.width}
	this.getBGColor	   = function()				{return _self.properties['roundedDiv'].style.background}
	this.setCornerColor =function(color)		{_divManager.selectedDiv = _self; _divManager.setCornerColor(color)}
	this.deleteElement  = function()	{};
}

function DivManager(){
	var _self = this
	this.selectedDiv = null;
	
	var _toolkitOptions = new Object();
	_toolkitOptions['bgColor'] = 'bgColor';
	_toolkitOptions['border'] = 'border';
	_toolkitOptions['corners'] = 'corners';
	_toolkitOptions['bgImg'] = 'bgImg';
	_toolkitOptions['cursor'] = 'cursor';
	_toolkitOptions['link'] = 'link';
	_toolkitOptions['elementSize'] = 'elementSize';
	_toolkitOptions['elementPosition'] = 'elementPosition';
	
	var _itemMenuOptions = new Object()
	_itemMenuOptions['addElement'] = 'addElement';
	
	var _videos = new Object();
	_videos["3750805"]="Div 101";
	
   this.unSelectDiv = function(div){
   		//alert("high: " + _objectManager.needToHighlightElement(div))
   		if(_objectManager.needToHighlightElement(div)){
   			if(div.properties["holderDiv"] != undefined)
   				div.properties["holderDiv"].style.border = "1px dashed #666666";
   		}else{
   			var holderDiv = div.properties["holderDiv"]
   			if(holderDiv != undefined && !_elementsManager.isElementSelected(div.properties["id"]))holderDiv.style.border = "0px dashed black";
   		}
   			
   }
	
	this.createDiv = function(height, width, divColor, borderObj ,cornersStr, bars){
		_self.selectedDiv = new divObject();
		setProperty("id",_objectManager.createId("div"));
		setProperty("bgColor",divColor);
		
		setProperty("borderObj",borderObj);
		setProperty("visibility","visible");
		setProperty("locked",false);
		setProperty("show",true);
		setProperty("link","");
		setProperty("bars",bars);	//resize bar string	
		setProperty("itemMenu",copyOptions("itemMenu"));
		setProperty("toolkit",copyOptions("toolkit"));
		setProperty("videos",_videos);			
		setCorners(cornersStr);		
		createHolderDiv(height, width, bars);
		if(cornersStr == "0000")
			createSquareDiv(divColor)
		else
			createRoundedDiv(divColor, cornersStr)
	
		return _self.selectedDiv;	
	}
	
	function copyOptions(option){
		var options = new Object();
		if(option == "toolkit") return _objectManager.cloneObject(_toolkitOptions);
		else return _objectManager.cloneObject(_itemMenuOptions);
	}
	
	function setProperty(property,value){_self.selectedDiv.properties[property] = value;}
	function getProperty(propertyName){	return _self.selectedDiv.properties[propertyName];}
	
	function setCorners(cornerString){
		var corners = new Object
		corners['tl'] = cornerString.substring(0,1);
		corners['tr'] = cornerString.substring(1,2);
		corners['bl'] = cornerString.substring(2,3);
		corners['br'] = cornerString.substring(3,4);
		setProperty("corners", corners);
		
	}
	
	function createHolderDiv(height,width,bars){
		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;")
		holderDiv.onmousedown = function(e){if (!e) var e = window.event;
											_elementsManager.selectElement(this,e.ctrlKey);
											_dragSelect.startDragSelect(e);
											e.cancelBubble = true;} 
		setProperty("holderDiv", holderDiv);
		setProperty("bgImg", "");
	}
	
	function createSquareDiv(divColor){
		var roundedDiv = document.createElement('div');
		var toolkitOptions = getProperty("toolkit");
		toolkitOptions['border'] = 'border';
		roundedDiv.id = getProperty('id');
		//roundedDiv.innerHTML = getProperty('id');
		roundedDiv.cancelBubble = true;
		_pm.setStyle(roundedDiv,"position:absolute;width:100%; height:100%; top:0; left:0;z-index:0; overflow:hidden; background:" + divColor +";")
		var divFirstChild = getProperty("holderDiv").firstChild 
		getProperty("holderDiv").insertBefore(roundedDiv,divFirstChild);
		setProperty("roundedDiv", roundedDiv);
		setProperty("shape" , "square");
		setImageForBackground();
		_self.setCursor(getProperty("cursor"));
		_objectManager.changeBorder(roundedDiv, getProperty("borderObj"));
	}	
	
	function createRoundedDiv(divColor, corners){
		var borderObj = getProperty("borderObj");
		var border = "1px solid black";
		if(borderObj['all']!= undefined)border = borderObj['all']["weight"] + " " + borderObj['all']["style"]+" " + borderObj['all']["color"];
		else{
			border = "1px " + borderObj['top']["style"]+" " + borderObj['top']["color"];
			for(eachBorder in borderObj){
				borderObj[eachBorder] = null;
				delete borderObj[eachBorder]
			}
			//alert(_objectManager.createBorderObj(border)['all']['weight'])
			setProperty("borderObj",_objectManager.createBorderObj(border))
		}
		var cornerColor = "";
		if(getProperty("bgImg") != "" && getProperty("bgImg")!= undefined){
			var toolkitOptions = getProperty("toolkit");
			toolkitOptions['border'] = null;
			delete toolkitOptions['border'];
			if(getProperty("cornerColor")!=undefined)
				cornerColor = getProperty("cornerColor")
			else{
				setProperty("cornerColor","white")
				cornerColor = "white";
			}
		}
		var roundedDiv = _og.createRoundObject(divColor,border, corners, cornerColor);
		
		roundedDiv.style.zIndex = 1;
		roundedDiv.style.top = 0;
		roundedDiv.style.left = 0;
		getProperty("holderDiv").appendChild(roundedDiv);
		setProperty("roundedDiv", roundedDiv);
		setProperty("shape" , "round");
		setImageForBackground();
		_self.setCursor(getProperty("cursor"));
	}
	
	this.appendTo = function(parentObject){	parentObject.appendChild(getProperty("holderDiv"));}
	
	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;
   		}		         
   }
   
   	function getCornersString(){
		var corners = getProperty('corners');
		return "" + corners['tl'] + corners['tr']+ corners['bl']+ corners['br'];
	}
	
	function deleteRoundDiv(){   		   		
   		getProperty("roundedDiv").parentNode.removeChild(getProperty("roundedDiv"));
   		setProperty("roundedDiv", null);   				
    }
    function reCreateRoundedDiv(){
    	deleteRoundDiv();
		createRoundedDiv(getProperty('bgColor'),getCornersString());
    }
   
	this.changeCorner = function(corner,value){
		getProperty('corners')[corner] = value;
		//from sqaure to round
		if(getProperty("shape") == "square" && getCornersString() != "0000"){reCreateRoundedDiv();}
		//from round to round
		else if(getProperty("shape") == "round" && getCornersString() != "0000"){reCreateRoundedDiv();}
		//from round to square
		else{
			deleteRoundDiv();
			createSquareDiv(getProperty('bgColor'));
		}		
	}
	this.changeBorder = function(borderObj){
		setProperty("borderObj",borderObj);
		
		if(getProperty("shape") == "square")
			_objectManager.changeBorder(getProperty('roundedDiv'),borderObj);
		else{reCreateRoundedDiv();}
		if(!_elementsManager.isElementSelected(getProperty("id")))
			getProperty("holderDiv").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);
		if(getProperty("shape") == "square"){
			getProperty("roundedDiv").style.background = color;
			_self.setBGImage(getProperty("bgImg"), getProperty("bgRepeat"));
		}
		else{
			if(getProperty("bgImg") != "" && getProperty("bgImg") != undefined)
				_self.setBGImage(getProperty("bgImg"), getProperty("bgRepeat"));
			else{reCreateRoundedDiv();}
		}
	}
	
	this.copyElement = function(){
		var copyFromDiv = _self.selectedDiv;
		var borderObj = _objectManager.cloneObject(getProperty("borderObj"));
		var newDiv = _self.createDiv(getProperty("holderDiv").style.height, getProperty("holderDiv").style.width, copyFromDiv.properties['bgColor'], borderObj,getCornersString(),getProperty("bars"));		
		newDiv.setPosition(copyFromDiv.properties['holderDiv'].style.top,copyFromDiv.properties['holderDiv'].style.left);
		/* Copy specific properties here */
		newDiv.properties['visibility'] = copyFromDiv.properties['visibility'];
		
		/* Copy the Children here*/
		var copyChildren = copyFromDiv.properties['children'];
		newDiv.properties['children'] = new Object();
		for (eachChild in copyChildren){
			var newChild = copyChildren[eachChild].copyElement();
			
			newChild.appendTo(newDiv.properties['holderDiv']);
			newDiv.properties['children'][newChild.properties['id']] = newChild;
			newChild.properties['parent'] = newDiv;
			newChild.properties['parentId'] = newDiv.properties['id'];
			_elementsManager.addToAllElementsTable(newChild);	
		}
		newDiv.setBGImage(copyFromDiv.properties['bgImg'],copyFromDiv.properties['bgRepeat']);
		return newDiv;
	}
	this.toXML = function(){
		var dimensions = _objectManager.getProperDimensions(_self.selectedDiv)
		var type = "squareDiv";
		var corners = getProperty('corners');
		for(eachCorner in corners)
					if (corners[eachCorner]==1) type = "roundedDiv";
				
		var xml = "<element>" 
		xml+= xmlTag("type",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"])
		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("display",getProperty('display'));
		xml+= xmlTag("backgroundColor",getProperty('bgColor'));
		xml+= xmlTag("bgImg",getProperty('bgImg'));
		xml+= xmlTag("cornerColor",getProperty('cornerColor'));
		xml+= xmlTag("bgRepeat",getProperty('bgRepeat'));
		xml+= xmlTag("cursor",getProperty('cursor'));
		xml+= xmlTag("bars",getProperty('bars'));				
		if(getProperty('holderDiv').style.zIndex == "") 
			xml+= xmlTag("zindex","0");
		else
			xml+= xmlTag("zindex",getProperty('holderDiv').style.zIndex);
			
		if(type == "roundedDiv"){
			xml+= xmlTag("border",getProperty('borderObj')['all']['weight']+ " " + getProperty('borderObj')['all']['style'] + " " + getProperty('borderObj')['all']['color'])
			var topCorners = xmlTag("left",corners['tl'])
			topCorners+= xmlTag("right",corners['tr'])
			var bottomCorners = xmlTag("left",corners['bl'])
			bottomCorners+= xmlTag("right",corners['br'])	
			xml+= xmlTag("topCorners",topCorners)
			xml+= xmlTag("bottomCorners",bottomCorners)
		}else{
			xml+= xmlTag("border", _objectManager.borderToString(getProperty("borderObj")));
		}
		var children = getProperty('children')
		for(eachChild in children){	xml+= children[eachChild].toXML();	}
		xml+="</element>";
		return xml;	
	}	
	function xmlTag(tagName,tagData){return "<" + tagName +">" + tagData + "</" + tagName + ">"}
	
	this.loadDiv = function(height, width, divColor, border,cornersStr,id,parentId,topPos,leftPos,visibility,zindex,link,bgImg,bgRepeat,bars,cursor,cornerColor,linkTarget){
		if(cornersStr == "") cornersStr = "0000";
		var borderObj = _objectManager.loadBorderObj(border);
		var newElement = _self.createDiv(height, width, divColor, borderObj,cornersStr,bars);
		_objectManager.changeId(newElement,id);
		newElement.setCornerColor(cornerColor);
		newElement.properties['holderDiv'].id = id;
		newElement.properties['holderDiv'].style.zIndex = zindex;		
		newElement.setPosition(topPos,leftPos);
		newElement.properties['parentId'] = parentId;
		newElement.properties['link'] = link;
		newElement.properties['linkTarget'] = linkTarget;
		newElement.properties['visibility'] = visibility;
		newElement.setBGImage(bgImg,bgRepeat);
		newElement.setCursor(cursor);
		newElement.unSelect();
		if(_objectManager.needToHighlightElement(newElement)){
			topPos=topPos-1;
			leftPos=leftPos-1;
		}
		if(parentId!="undefined" && parentId!="" && parentId!=undefined){
			_objectManager.loadElement(newElement);
		}else{		
			_elementsManager.addToAllElementsTable(newElement);
		}			
	}
	
	this.setSize = function(height,width){
		getProperty("holderDiv").style.height = height;
	    getProperty("holderDiv").style.width = width;
   		_self.selectedDiv.endResize();
	}
	
	this.setBGImage = function(bgImg, repeat){	
		if(bgImg != "" && bgImg != undefined){
			setProperty('bgImg',bgImg);
			setProperty('bgRepeat',repeat);
			if(getProperty('shape') == "round")
				reCreateRoundedDiv();
			else
				setImageForBackground();
		}
	}
	function setImageForBackground(){
		if(getProperty("bgImg") != "" && getProperty("bgImg")!= undefined){
			var roundedDiv = getProperty("roundedDiv")
			roundedDiv.style.background = getProperty("bgColor")
			roundedDiv.style.backgroundImage = "url("+ getProperty("bgImg") +")";
			roundedDiv.style.backgroundRepeat = getProperty("bgRepeat");
		}	
	}
	
	this.removeBGImage = function(){
		getProperty('roundedDiv').style.backgroundImage = "";
		setProperty('bgImg','');
		setProperty('bgRepeat','');
		if(getProperty('shape') == "round")
			reCreateRoundedDiv();		
	}
	
	this.setCursor = function(cursor){
		if(cursor != "" && cursor != undefined){
			getProperty("roundedDiv").style.cursor = cursor;
			setProperty("cursor",cursor);	   
		}
	}
	this.setCornerColor = function(color){
		if(color!= undefined && color!= "undefined" && color != ""){			
			setProperty("cornerColor",color)
			reCreateRoundedDiv();
		}
	}	
	
}
