function Utilities(){
	var _self = this;
	var _numCoversOpen = 0;
	this.findPos = function(obj){
		var curleft = curtop = 0;
		if (obj.offsetParent){
			curleft = obj.offsetLeft
			curtop = obj.offsetTop
			while (obj = obj.offsetParent) {
				curleft += obj.offsetLeft
				curtop += obj.offsetTop
			}
		}
		return [curleft,curtop];
	}
	
	this.saveWebPage = function(option){
		_self.saveNotes();
		_cssManager.saveCSS("websitePage");
		_pageManager.updateChangeLog();
		_elementsManager.selectElementById("mainPage");	
		displaySavingMessage(option);	
		var xmlData = _self.createPageXML();
		_ajax.ajaxCall_process("SaveWebsitePage",xmlData,"pageId=" + _pageInfo['pageId']+"&option="+option,"_utilities.saveWebPage_response")
	}
	this.saveAndReloadPage = function(){
		_self.saveNotes();
		_cssManager.saveCSS("websitePage");
		_pageManager.updateChangeLog();
		_elementsManager.selectElementById("mainPage");
		var xmlData = _self.createPageXML();
		_ajax.ajaxCall_process("SaveWebsitePage",xmlData,"pageId=" + _pageInfo['pageId']+"&option=draft","_utilities.saveAndReload_response")
	}
	this.saveTemplatePage = function(option){		
		_cssManager.saveCSS("community");				
		displaySavingMessage(option);
		var xmlData = _self.createPageXML();
		_ajax.ajaxCall_process("SaveTemplatePage",xmlData,"pageId=" + _pageInfo['pageId'],"_utilities.saveWebPage_response")
	}
	function displaySavingMessage(option){
		var savePageDiv = document.getElementById("savePage_div");
		savePageDiv.style.display = "block";
		if(option == "publish") savePageDiv.innerHTML = "<b>saving and publishing...</b>"
		else savePageDiv.innerHTML = "<b>saving draft...</b>"
		document.getElementById("savePageResponse_div").style.display = "none";
	}
	this.saveAndReload_response = function(responseText){		
		window.onbeforeunload = null;
		window.location.reload();
	}
	
	this.saveWebPage_response = function(responseText){
		//0-error,1-save+publish,2-save draft,3-no rights
		document.getElementById("savePage_div").style.display = "none";
		var responseDiv = document.getElementById("savePageResponse_div");
		_self.centerObject(responseDiv);
		responseDiv.style.display = "block";
		var responseTextDiv = document.getElementById("savePageResponse_text");
		
		switch(responseText){
			case "1": responseTextDiv.innerHTML = "Page was saved and all new changes were published online."; _self.displayLastSavedMessage("1");break;
			case "2": responseTextDiv.innerHTML = "A draft was saved with the new changes. If you'd like your changes to appear online click <b style='cursor:pointer;' onclick='savePage_main(\"publish\")'><u>Save</u></b>."; _self.displayLastSavedMessage("2");break;
			case "3": responseTextDiv.innerHTML = "You are not allowed to save this page";break;
			default: responseTextDiv.innerHTML = "There was a problem saving your page.";break;
		}
	}
	this.displayLastSavedMessage =function(option){
		var td = document.getElementById("savePageInfo_td");
		var stamp = new Date();
		var ampm = "am"
		var message = "Last saved: "
		var hour =stamp.getHours() 
		var minute =  stamp.getMinutes();
		if(parseInt(minute)<10)minute="0"+minute;		
		if(parseInt(hour)>=12) ampm = "pm";
		if(parseInt(hour)>12) hour = parseInt(hour) - 12;
		if(option=="2")message = "Draft saved: "
		if(option=="3")message = "Opened: "
		if(td != undefined && td !=null)td.innerHTML = message + hour+":" +  minute +" "+ ampm;
	}
	
	this.createPageXML = function(){
		var pageElements = _elementsManager.getElementFromElementsTable("mainPage").properties['children']
		var embedScripts = "<embedScripts>";
		var pageXML = "<pageXML>" + _siteSettings.createXML()+ _pageManager.toXML() + _siteSettings.createBGXML() +
					"<editorVersion>"+_editorVersion+"</editorVersion>" +					
					"<elements>";
		for (eachElement in pageElements){
			var element = pageElements[eachElement];
			if(element.properties["type"] == "embed" && element.properties["script"]=="true"){
				embedScripts+= element.toXML();
			}else{
				if(element.properties["type"] != "note")
					pageXML += element.toXML();
			}
		}
		pageXML+="</elements>"
		embedScripts+="</embedScripts>"
		pageXML+= embedScripts 
		pageXML+= _siteSettings.footerToXML()+ "</pageXML>";
		pageXML+= _siteSettings.getDesigners();
		//save ads if necessary 
		if(_adManager!=null){pageXML+="<ads>"+_adManager.toXML()+"</ads>";}
		return pageXML;
	}	
	
	this.saveNotes = function(notes){
		var saveNotesXML = _noteManager.saveNotes(); 
		if(saveNotesXML != 0){
			var notes = _noteManager.getPageNotes();
			var xml = "";
			for(eachNote in notes){
				xml+=notes[eachNote].toXML();
			}
			saveNotes(xml, saveNotesXML)
			//prompt("",xml);
		}//else alert("no save");		
	}
	
	function saveNotes(noteXML, notify){		
		_ajax.ajaxCall_process("SaveWebsiteNotes",noteXML,"pageId=" + _pageInfo['pageId']+"&notify="+notify,"_utilities.saveNotesResponse")
	}
	this.saveNotesResponse = function(responseText){
		if(responseText == "1"){_noteManager.notesSaved() };
	}
	
	this.centerObject = function(thisObject){		
		var topPos = (document.body.clientHeight/2 - parseInt(thisObject.style.height)/2) + document.body.scrollTop;
		var leftPos = (document.body.clientWidth/2  - parseInt(thisObject.style.width)/2)  + document.body.scrollLeft;
		thisObject.style.top  = Math.max(10,topPos);
		thisObject.style.left = Math.max(10,leftPos);
	}
	
	this.displayCover = function(){
		var cover = document.getElementById("mainPageCoverDiv");
		cover.style.display = "block";
		var cover_close = document.getElementById("mainPageCoverDiv_close");
		_self.centerObject(cover_close);
		cover_close.style.top = document.body.scrollTop;
		_numCoversOpen++;
	}
	this.hideCover =function(){
		_numCoversOpen--;
		if(_numCoversOpen <= 0){
			document.getElementById("mainPageCoverDiv").style.display = "none";
			_numCoversOpen =0;
		}		
	}
	this.forceHideCover = function(){
		_numCoversOpen = 0;
		document.getElementById("mainPageCoverDiv").style.display = "none";
		//get all possible input screens and close them
		document.getElementById("metadata_div").style.display="none";
		document.getElementById('imageLibrary').style.display = 'none';
		document.getElementById("linksMenu_div").style.display = "none";
		document.getElementById('rteFrame').style.display = "none";
		document.getElementById("relogin_div").style.display = "none";
		document.getElementById("deleteElementMenu").style.display = "none";		
	}	
	this.sessionTimeOut = function(){
		var login = document.getElementById("relogin_div");
		document.getElementById("reloginUsername_input").value = "";
		document.getElementById("reloginPassword_input").value = "";
		_self.showSavePublishMenu();
		_self.centerObject(login);
		login.style.display = "block";
		_self.displayCover();
	}
	this.showSavePublishMenu = function(){
		var savePageDiv = document.getElementById("savePage_div");
		if(savePageDiv!=null && savePageDiv!=undefined)savePageDiv.style.display = "none";
	}
	this.cancelReLogin = function(){
		document.getElementById("relogin_div").style.display = "none";
		_self.hideCover();
	}
	this.reLogin = function(){
		var username = document.getElementById("reloginUsername_input").value;
		var password = document.getElementById("reloginPassword_input").value;
		var projId = _pageInfo['projId'];
		var projType = _pageInfo['projType'];
		if(username !="" && password !="")
			_ajax.ajaxCall_process("EditorReLogin",null,"username=" + username + "&password="+password+"&projId="+projId+"&projType="+projType,"_utilities.reLogin_response")
		else
			alert("Username/Password cannot be blank.")
	}
	this.reLogin_response = function(responseText){
		if(responseText == "true"){
			alert("You were logged in successfully!");
			_self.cancelReLogin();
		}else{
			alert("Incorrect username/password.")
		}	
	}
	this.lTrim = function(sString){
		while ( sString.substring(0,1) == ' '){	sString = sString.substring(1, sString.length);}
		return sString;
	}
	this.rTrim = function(sString){
		while (sString.substring(sString.length-1, sString.length) == ' '){	sString = sString.substring(0,sString.length-1 );}
		return sString;
	}
	
	this.trimAll = function(sString){
	 	sString = _self.lTrim(sString);
	 	return _self.rTrim(sString);
	}
	
	this.fadeObject = function(id, direction,time){
			var obj = document.getElementById(id);
			if(obj!=undefined && obj!=null){
				obj.style.filter = "alpha(opacity:" + time+ ")";
				obj.style.MozOpacity = time/100;
				obj.style.opacity = time/100;
				if(direction == "out"){			
					if (time > 0){
						setTimeout(function(){_utilities.fadeObject(id,"out", time-5);}, 30);
					}
					else{	obj.style.display="none";	}
				}else{
					obj.style.display="block";
					if (time < 100){
						setTimeout(function(){_utilities.fadeObject(id,"in", time+5);}, 30);
					}					
				}
			}
		}
	
	
}
