
var cacheMechanism = new RestrictedCachingMechanism();
cacheMechanism.setDelay(600000);

var homePageLoaded = false;


function initializePage()
{
	initializeContentActionProcessor();
	
}

function displayHomepageItems()
{
	HomepageManagement.getSingleton().displayActiveContent();
}

function clearInput(input)
{
	input.value = "";
}


function hoverImage(img)
{

	var transDiv = document.createElement("div");
	transDiv.setAttribute("id", "transDiv");
	transDiv.className = "imgHoverEffect";
	
	transDiv.style.height = img.height + "px";
	transDiv.style.width = img.width + "px";
	
	
	transDiv.style.left = img.offsetLeft + "px";
	transDiv.style.top = img.offsetTop + "px";

	transDiv.onclick = function() { img.onclick(); };

	
	var containerDiv = document.getElementById("menucontent");


	if(containerDiv == null)
		containerDiv = document.getElementById("middlecontent");

	transDiv.onmouseout = function()
	{
		containerDiv.removeChild(transDiv);
	}

	containerDiv.appendChild(transDiv);
	

}
									
function disHoverImage(img)
{

}

function clickImage(img)
{

	var div = document.createElement("div");
    
    
	var newImg = document.createElement("img");
    newImg.src = img.src;
	newImg.setAttribute("class", "gallery_image");

	div.appendChild(newImg);
	
	var lbox = new Lightbox();
	lbox.menuClass = "light_photo";
	
	lbox.setContext(div.innerHTML);
	lbox.display();


	lbox.contentDiv.style.width = newImg.width + "px";
	lbox.contentDiv.style.height = newImg.height + "px";

	lbox.contentDiv.style.left = Math.max( ((lbox.getPageSize().width - newImg.width) / 2), 20 ) + "px"; 

	lbox.contentDiv.style.top = Math.max( ((lbox.getPageSize().height - newImg.height) / 2 ), 20) + "px";

}


function instantiateBuilder()
{

	var buiInstantiator = new RInstantiator("ComponentBuilder");
	buiInstantiator.instantiate(function(builder) { PageComponentProcessor.getSingleton().setBuilder(builder); displayHomepageItems(); });
}

function displayRegisterForm()
{
	var regFormInstantiator = new RInstantiator("RegisterForm");
	regFormInstantiator.instantiate(function(form) { var caller = new RPCaller(new CallbackStandardization().getStandardGroup(function(mo, mr) {document.getElementById("middlecontent").innerHTML = mo; }), form); form.display(caller); }); 
}

function handleRegister(htmlForm, regFormJSON)
{

	
	
	var regForm = eval(regFormJSON);
	
	var user = new Object;
	user.object = new Object;
	user.className = "User";
	user.accessors = new Array();

	user.object.name = htmlForm['input_name'].value;
	user.object.surname = htmlForm['input_surname'].value;
	user.object.email = htmlForm['input_email'].value;
	user.object.password = htmlForm['input_password'].value;
	regForm.accessors["user"] = user;

	var caller = new RPCaller(new CallbackStandardization().getStandardGroup(function(mo, mr) { document.getElementById("middlecontent").innerHTML = mo; }), regForm);
	regForm.handleSubmit(caller);
	
}

function initializeContentActionProcessor()
{

	// instantiate processor  if it does not exist.
	var processor = ContentActionProcessor.getSingleton();
	var retInstantiator = new RInstantiator("ContentOperator");
	retInstantiator.instantiate(function(contentOp) { processor.setContentOperator(contentOp); });
	instantiateBuilder();
}

function displayContent(id)
{
	var actionProcessor = ContentActionProcessor.getSingleton();
	actionProcessor.retrieveContentFromId(id, function(contentObj) { actionProcessor.displayContentPanel(contentObj); });
}

function displayEditor()
{
	var actionProcessor = ContentActionProcessor.getSingleton();
	actionProcessor.displayEditor();

}
		 /*
function displayContentInfoPopup(id, sender)
{
	var actionProcessor = ContentActionProcessor.getSingleton();
	
	if (actionProcessor.popupManager.getPopup(sender) == null)
	{
	
		var popup = new HoverMenu();
		actionProcessor.popupManager.addToList(sender, popup);
		var callback = function(contentObj)
		{
		   actionProcessor.displayPopup(contentObj, sender, popup);
		}

		actionProcessor.retrieveContentFromId(id, callback);
	}
}

function closePopup(sender)
{
	var actionProcessor = ContentActionProcessor.getSingleton();
	var popup = actionProcessor.popupManager.getPopup(sender);
	if (popup != null)
	{
		
		popup.close();
		actionProcessor.popupManager.removeFromList(sender);
	}
} */

function makeHomepage()
{
	var instantiator = new RInstantiator("HomepageManager");
	var callback = function(manager) 
	{
		var cG = new CallbackStandardization().getStandardGroup(function(mo, mr) { alert(mo); });
		var caller = new RPCaller(cG, manager);
		manager.setMiddleActiveContent(ContentActionProcessor.getSingleton().activeContent, caller);
	};

	instantiator.instantiate(callback);
}


function deleteActiveContent()
{
	var approval = confirm("Are you sure you want to delete this ?");
	if (!approval)
	{
		return;
	}
	var processor = ContentActionProcessor.getSingleton();
	processor.deleteActiveContent();

}


// called when the editor is submitted
function submitEditor(editorObjJSON,  divName, formName)
{
	var editorObj = eval(editorObjJSON);
	

	var div = document.getElementById(divName);
	var form = document.getElementById(formName);
	var callback = function(methodOutput, methodResult)
	{
		div.innerHTML = methodOutput;	
	
//		PageComponentProcessor.singleton.displayLeftMenu();

		cacheMechanism.flush();
	};
	
	var caller = new RPCaller(new CallbackStandardization().getStandardGroup(callback), editorObj);
	var fckEditor = FCKeditorAPI.GetInstance( "contentEditor" );
	editorObj.accessors['content'].object.txtcontent = fckEditor.GetHTML();
	editorObj.accessors['content'].object.title = form['contenttitle'].value;
		
		
	editorObj.accessors['content'].object.description = form['contentdescription'].value;
	editorObj.handleSubmit(caller);	

}

function scaleContent()
{
	var div = document.getElementById("middlecontent");
	
	var lbox = new Lightbox();
	lbox.setContext(div.innerHTML);
	lbox.display();
}

function handleLogout()
{
	var instantiator = new RInstantiator("UserPanel");
	var callback = function(usrPanel)
	{
		var caller = new RPCaller(new CallbackStandardization().getStandardGroup(function(mo, mr) { cacheMechanism.flush(); PageComponentProcessor.getSingleton().displayUserSection(); document.getElementById("middlecontent").innerHTML = mo; }), usrPanel);
		usrPanel.processLogout(caller);
	};

	instantiator.instantiate(callback);
}
	
function handleLogin( loginFormJSON)
{
	
	var email = document.getElementById("input_email").value;
	var password = document.getElementById("input_password").value;
	
	// we do not need to use RInstantiator since this will be an anonymous php obj.
	var user = new Object;	
	user.object = new Object;
	user.className = "stdClass";
	user.accessors = new Array();
	user.object.email = email;
	user.object.password = password;
	var loginForm = eval(loginFormJSON);
	var caller = new RPCaller(new CallbackStandardization().getStandardGroup(function(mo, mr) { cacheMechanism.flush(); PageComponentProcessor.getSingleton().displayUserSection(); document.getElementById("middlecontent").innerHTML = mo; }), loginForm);
	loginForm.handleSubmit(user, caller);
}

function displayMessageBox()
{
	var mController = new MessageController.getSingleton();
	mController.displayMessageBoxPanel();

	// also, don't forget to instantiate a message operator obj.
	var instantiator = new RInstantiator("MessageOperator");
	var callback = function(messageOperator)
	{
		MessageController.getSingleton().setMessageOperator(messageOperator);
	};

	instantiator.instantiate(callback);

}

function addMenuItem()
{
	var itemName = prompt("Please enter a name for the new menu item.");
	if (itemName != null)
	{
		HomepageManagement.getSingleton().addMenuItem(itemName);
	}
}

function displayMessageSendingForm(replyToMessageJSON)
{
	var replyToMessage = eval(replyToMessageJSON);
	
	var mController = new MessageController.getSingleton();
	mController.displayMessageSendingForm(replyToMessage);
}

function submitMessageSendingForm(form)
{
	var messageObj = new Object;
	messageObj.object = new Object;
	messageObj.accessors = new Array();
	messageObj.className = "stdClass";
	messageObj.object.receiverid = form['receiver'].value;
	messageObj.object.subject = form['messageSubject'].value;


	var fckEditor = FCKeditorAPI.GetInstance( "txtMessageEditor" );
	messageObj.object.messagetext = fckEditor.GetHTML();
	
	var mController = new MessageController.getSingleton();
	mController.submitMessageSendingForm(messageObj);
}


function messageActionById(id, callback)
{
	MessageController.getSingleton().retrieveMessageFromId(id, function(messageObj) { callback(messageObj); });
}

function displayMessage(id)
{
	
	var callback = function(messageObj)
	{
		MessageController.getSingleton().displayMessage(messageObj);
	};

	messageActionById(id, callback);

}

function deleteMessage(id)
{
	var callback = function(messageObj)
	{
		MessageController.getSingleton().deleteMessage(messageObj);
	};

	messageActionById(id, callback);
}



function getY( oElement )
{
	var iReturnValue = 0;
	
	while( oElement != null ) {
		iReturnValue += oElement.offsetTop;
		oElement = oElement.offsetParent;
	}
	
	return iReturnValue;
}

function getX( oElement )
{
	var iReturnValue = 0;
	while( oElement != null ) {
		iReturnValue += oElement.offsetLeft;
		oElement = oElement.offsetParent;
	}
	return iReturnValue;
}

