	window.onresize = resizeDark;

	var nbColumns = 3;
	function resizeDark()
	{
		var Dark = document.getElementById('Dark');
		if(/*navigator.appName == 'Microsoft Internet Explorer' &&*/ isOptionsDisplayed )
		{
			Dark.style.width = max(document.body.scrollWidth,document.documentElement.clientWidth) +'px';
			Dark.style.height = max(document.body.scrollHeight+20,document.documentElement.clientHeight)+'px';
		}
	}
	function ShowIt(itId,size)
	{
		if(size==null || size==0)
			size=20;
		it = document.getElementById(itId);
		it.style.opacity=1;
		if(navigator.appName == 'Microsoft Internet Explorer')
			it.style.filter='progid:DXImageTransform.Microsoft.Alpha(opacity=100)';

		if(navigator.appName == 'Microsoft Internet Explorer')
			it.style.margin = '14px 0 0 0';
		else
			it.style.margin = '16px 0 0 0';
		it.style.height = size+'px';
	}
	function HideIt(itId)
	{
		it = document.getElementById(itId);
		it.style.opacity=0;
		if(navigator.appName == 'Microsoft Internet Explorer')
			it.style.filter='progid:DXImageTransform.Microsoft.Alpha(opacity=0)';
		it.style.margin = '0 0 0 0';
		it.style.height='8px';
	}
	function max(val1,val2)
	{
		if (val1 > val2)
			return val1;
		else
			return val2;
	}
	function min(list1,list2)
	{
		if (document.getElementById(list1).offsetHeight > document.getElementById(list2).offsetHeight)
			return list2
		else
			return list1
	}
	function getMinList()
	{
		var minVal = 'BlockList_0';
		for(var i=1;i<nbColumns;i++)
		{
			minVal = min('BlockList_'+i,minVal);
		}
		return minVal;
	}
	function listBlockLength(listBlockName)
	{
		var length = 0;
		eval("x = document.getElementById('"+listBlockName+"').childNodes");
		for(i=0;i< x.length;i++)
		{
			blockId = x[i].id;
			if (blockId.substr(0,5) == 'Block')
			{
				blockId = x[i].id;
				if (!isFaded(blockId.substr(6,10)))
					length++;
			}
		}
		return length;
	}
	function ShowEm(size)
	{
		for(var i=0;i<nbColumns;i++)
		{
			if (listBlockLength('BlockList_'+i)==0)
				ShowIt('Empty_'+i,size);
		}
	}
	function HideEm()
	{
		for(var i=0;i<nbColumns;i++)
		{
			HideIt('Empty_'+i);
		}
	}
	function ShowUiMessage(title,message)
	{
		document.getElementById('homepage-options-ui-message').style.display = 'block';
		document.getElementById('homepage-options-ui-message').innerHTML=message;
		document.getElementById('BlockOptionsTitle').innerHTML = title;
		document.getElementById('BlockOptionsContent').innerHTML = '';
		ShowOptions();
	}
	function HideUiMessage()
	{
		HideOptions();
		document.getElementById('homepage-options-ui-message').style.display = 'none';
		document.getElementById('BlockOptionsTitle').innerHTML = 'Options';
	}
	/**
	 *
	 * @access public
	 * @return void
	 **/
	function getWindowSize(){
		var x,y;
		if (self.innerHeight) // all except Explorer
		{
			x = self.innerWidth;
			y = self.innerHeight;
		}
		else if (document.documentElement && document.documentElement.clientHeight)
			// Explorer 6 Strict Mode
		{
			x = document.documentElement.clientWidth;
			y = document.documentElement.clientHeight;
		}
		else if (document.body) // other Explorers
		{
			x = document.body.clientWidth;
			y = document.body.clientHeight;
		}
		var result = Array();
		result[0]=x;
		result[1]=y;
		return result;
	}
	var isOptionsDisplayed = false;
	function ShowOptions()
	{
		isOptionsDisplayed = true;
		var Dark = document.getElementById('Dark');
		Dark.style.top = '0px';
		Dark.style.left = '0px';
		Dark.style.width = '100%';//max(document.body.scrollWidth,document.documentElement.clientWidth) +'px';
		Dark.style.height =  '100%';//max(document.body.scrollHeight,document.documentElement.clientHeight)+'px';
		Dark.style.opacity = 0.5;
		if(navigator.appName == 'Microsoft Internet Explorer')
			Dark.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity=50)';


		var Options = document.getElementById('Options');
		Options.style.width = '500px';
		Options.style.opacity = 1;
		if(navigator.appName == 'Microsoft Internet Explorer')
			Options.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity=100)';

		windowSize = getWindowSize();
		x = windowSize[0];
		y = windowSize[1];

		if(navigator.appName == 'Microsoft Internet Explorer')
			Options.style.top=((y/2) - (Options.offsetHeight/2))+'px';
		else
			Options.style.top=((y/3) - (Options.offsetHeight/2))+'px';

		Options.style.left=((document.body.clientWidth/2) - (Options.offsetWidth/2))+'px';
		resizeDark();
	}
	function HideOptions()
	{
		isOptionsDisplayed = false;
		var Dark = document.getElementById('Dark');
		Dark.style.top = '-1000px';
		Dark.style.left = '-1000px';
		Dark.style.width = 1;
		Dark.style.height = 0;
		Dark.style.opacity = 0;
		if(navigator.appName == 'Microsoft Internet Explorer')
			Dark.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity=0)';
		var Options = document.getElementById('Options');
		Options.style.width = 1;
		Options.style.opacity = 0;
		if(navigator.appName == 'Microsoft Internet Explorer')
			Options.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity=0)';
		Options.style.top='-1000px';
		Options.style.left='-1000px';
	}

	var isFadedList = new Array();
	isFadedList[0]=null;

	function isFaded(id)
	{
		for(var i=1;i<isFadedList.length;i++)
		{
			if(isFadedList[i][0] == id)
			{
				return isFadedList[i][1];
			}
		}
		alert('isFade Error');
	}
	function FadeIt(id)
	{
		HandleDeleteBlockRequest(id);
		Effect.Fade('Block_'+id);
		for(var i=1;i<isFadedList.length;i++)
		{
			if(isFadedList[i][0] == id)
			{
				isFadedList[i][1]=true;
				break;
			}
		}

	}

	var listBlockVisible = false;
	function switchAddBlockListVisibility()
	{
		if (!listBlockVisible)
		{
			document.getElementById('addBlockListTD').style.borderRight = '1px solid rgb(100,100,100)';
			document.getElementById('addBlockList').style.width = '22em';	
			//new Effect.Scale('addBlockList',100,{scaleX: true, scaleY: false,scaleFrom: 0, scaleMode: { originalWidth: 230 }});
			document.getElementById('AddBlockButton').innerHTML = '<a href="javascript:void(0);">'+msgHideBlockList+'</a>'
			listBlockVisible = true;
		}else{
			document.getElementById('addBlockList').style.width = '1px';
			//new Effect.Scale('addBlockList',0,{scaleX: true, scaleY: false,scaleFrom: 100, scaleMode: { originalWidth: 230 },afterFinish: function (obj){document.getElementById('addBlockListTD').style.borderRight = '';}});
			document.getElementById('AddBlockButton').innerHTML = '<a href="javascript:void(0);">'+msgAddBlock+'</a>'
			document.getElementById('addBlockListTD').style.borderRight = '';
			listBlockVisible = false;
		}
	}

	function launchJavascript(responseText) {
	  // RegExp from prototype.sonio.net
	  var ScriptFragment = "(?:<script.*?>)((\n|.)*?)(?:<\/script>)";

	  var match    = new RegExp(ScriptFragment, 'img');
	  var scripts  = responseText.match(match);

	    if(scripts) {
	        var js = '';
	        for(var s = 0; s < scripts.length; s++) {
	            var match = new RegExp(ScriptFragment, 'im');
	            js += scripts[s].match(match)[1];
	        }
	        eval(js);
	    }
	}

	function updateLoadingMessage()
	{
		if(isLoadingStack>1)
			document.getElementById('homepage-ui-message').innerHTML=msgPleaseWait+' '+isLoadingStack+' '+msgBlocksAreLoading;
		else
			document.getElementById('homepage-ui-message').innerHTML=msgPleaseWait+' '+isLoadingStack+' '+msgBlockIsLoading;
	}

	function errorUiMessageUpdate()
	{
		isLoadingStack--;
		updateLoadingMessage();
		if(isLoadingStack == 0)
			document.getElementById('homepage-ui-message').style.display = 'none';
	}

	function HandleGetBlockRequest(id)
	{
		var ajaxCallbackHomepageGetblock = {
			getblock: function (response) {
				document.getElementById(getMinList()).innerHTML += response;
				makeSortables();
				HideEm();
				isLoadingStack--;
				updateLoadingMessage();
				if(isLoadingStack == 0)
					document.getElementById('homepage-ui-message').style.display = 'none';
		    },
			getblockError: function (e) {
				alert(e.response);
				errorUiMessageUpdate();
		    }
		}
		ajaxHomepageGetblockServer = new homepageblockmanager(ajaxCallbackHomepageGetblock);
		ajaxHomepageGetblockServer.getblock(id);
		ajaxHomepageGetblockServer.applicationErrorFunc = function(e) {
			alert(e.response);
			errorUiMessageUpdate();
		}
		ajaxHomepageGetblockServer.serverErrorFunc = function(e) {
			alert(e.response);
			errorUiMessageUpdate();
		}
		ajaxHomepageGetblockServer.clientErrorFunc = function(e) {
			alert(e.response);
			errorUiMessageUpdate();
		}
	}
	var isLoadingStack = 0;
	function HandleAddBlockRequest(kind){
			var ajaxCallbackHomepageAddblock = {
				addblock: function (response) {
					isFadedList[isFadedList.length]=new Array();
					isFadedList[isFadedList.length-1][0]=response;
					isFadedList[isFadedList.length-1][1]=false;
					HandleGetBlockRequest(response);
			    },
				addblockError: function (e) {
					alert(e.response);
					errorUiMessageUpdate();
			    }
			}
			var ajaxHomepageAddblockServer = new homepageblockmanager(ajaxCallbackHomepageAddblock);
			isLoadingStack++;
			updateLoadingMessage();
			document.getElementById('homepage-ui-message').style.display = 'block';
			document.getElementById('homepage-ui-message').style.width = '222px';
			ajaxHomepageAddblockServer.applicationErrorFunc = function(e) {
				alert(e.response);
				errorUiMessageUpdate();
			}
			ajaxHomepageAddblockServer.serverErrorFunc = function(e) {
				alert(e.response);
				errorUiMessageUpdate();
			}
			ajaxHomepageAddblockServer.clientErrorFunc = function(e) {
				alert(e.response);
				errorUiMessageUpdate();
			}

			ajaxHomepageAddblockServer.addblock(kind);
	}
	function HandleSaveHomePageRequest(){
			var ajaxCallbackHomepageSave = {
				savehomepage: function (response) {
					if (response != "Done")
					{
						alert(response);
					}else{
						HideUiMessage();
						alert(msgSucessSave);
					}
			    },
				savehomepageError: function (e) {
					alert(e.response);
			    }
			}
			ShowUiMessage(msgSave,msgWaitSave);
			var ajaxHomepageSaveServer = new homepageblockmanager(ajaxCallbackHomepageSave);
			ajaxHomepageSaveServer.applicationErrorFunc = function(e) {
				alert(e.response);
			}
			ajaxHomepageSaveServer.serverErrorFunc = function(e) {
				alert(e.response);
			}
			ajaxHomepageSaveServer.clientErrorFunc = function(e) {
				alert(e.response);
			}

			var Result = Array();
			for(var i = 0;i<nbColumns;i++)
			{
				Result[i] = Sortable.serialize('BlockList_'+i);
			}
			ajaxHomepageSaveServer.savehomepage(Result);
	}
	function HandleDeleteBlockRequest(id){
			var ajaxCallbackDeleteBlock = {
				deleteblock: function (response) {
					//alert(response);
			    },
				deleteblockError: function (e) {
					alert(e.response);
			    }
			}
			var ajaxDeletePageServer = new homepageblockmanager(ajaxCallbackDeleteBlock);
			ajaxDeletePageServer.applicationErrorFunc = function(e) {
				alert(e.response);
			}
			ajaxDeletePageServer.serverErrorFunc = function(e) {
				alert(e.response);
			}
			ajaxDeletePageServer.clientErrorFunc = function(e) {
				alert(e.response);
			}

			ajaxDeletePageServer.deleteblock(id);
	}
	var currentOptionsId = 0;
	function HandleGetOptionsRequest(id){
			var ajaxCallbackGetOptions = {
				getoptions: function (response) {
					document.getElementById('homepage-options-ui-message').style.display = 'none';
					document.getElementById('BlockOptionsContent').innerHTML = response;
					document.getElementById('BlockOptionsContent').innerHTML += '<form><div style="width: 100%;text-align: right;"><input type="button" onClick="HandleSaveOptionsRequest();" value="'+msgOk+'"/>&nbsp;<input type="button" onClick="HideOptions();" value="'+msgCancel+'"/>&nbsp;</div><form>';
					launchJavascript(response);
					currentOptionsId = id;
			    },
				getoptionsError: function (e) {
					alert(e.response);
					HideUiMessage();
			    }
			}
			var ajaxGetOptionsServer = new homepageblockmanager(ajaxCallbackGetOptions);
			document.getElementById('homepage-options-ui-message').innerHTML = msgWaitOptionsLoad;
			document.getElementById('homepage-options-ui-message').style.display = 'Block';
			document.getElementById('BlockOptionsContent').innerHTML = '';
			ShowOptions();
			ajaxGetOptionsServer.applicationErrorFunc = function(e) {
				alert(e.response);
				HideUiMessage();
			}
			ajaxGetOptionsServer.serverErrorFunc = function(e) {
				alert(e.response);
				HideUiMessage();
			}
			ajaxGetOptionsServer.clientErrorFunc = function(e) {
				alert(e.response);
				HideUiMessage();
			}

			ajaxGetOptionsServer.getoptions(id);
	}
	function HandleSaveOptionsRequest(){
			var ajaxCallbackSaveOptions = {
				saveoptions: function (response) {
					if (response != 'Done')
					{
						alert(response);
						HideUiMessage();
					}else{
						ShowUiMessage(msgUpdateContent,msgWaitUpdate);
						HandleUpdateBlockRequest();
					}
			    },
				saveoptionsError: function (e) {
					alert(e.response);
					HideUiMessage();
			    }
			}
			var ajaxSaveOptionsServer = new homepageblockmanager(ajaxCallbackSaveOptions);
			ajaxSaveOptionsServer.applicationErrorFunc = function(e) {
				alert(e.response);
				HideUiMessage();
			}
			ajaxSaveOptionsServer.serverErrorFunc = function(e) {
				alert(e.response);
				HideUiMessage();
			}
			ajaxSaveOptionsServer.clientErrorFunc = function(e) {
				alert(e.response);
				HideUiMessage();
			}
			ajaxSaveOptionsServer.saveoptions(currentOptionsId,Form.serialize('form_options'));
			ShowUiMessage(msgSaveOptions,msgWaitOptionsSave);
	}
	function HandleUpdateBlockRequest(){
			var ajaxCallbackUpdateBlock = {
				getupdatedcontent: function (response) {
					lineArray = response.split("\n");
					response = '';
					for(var i=1;i<lineArray.length-1;i++)
						response += lineArray[i] + "\n";
					document.getElementById('Block_'+ currentOptionsId).innerHTML = response;
					makeSortables();
					HideUiMessage();
			    },
				getupdatedcontentError: function (e) {
					alert(e.response);
					HideUiMessage();
			    }
			}
			var ajaxUpdateContentServer = new homepageblockmanager(ajaxCallbackUpdateBlock);
			ajaxUpdateContentServer.applicationErrorFunc = function(e) {
				alert(e.response);
				HideUiMessage();
			}
			ajaxUpdateContentServer.serverErrorFunc = function(e) {
				alert(e.response);
				HideUiMessage();
			}
			ajaxUpdateContentServer.clientErrorFunc = function(e) {
				alert(e.response);
				HideUiMessage();
			}

			ajaxUpdateContentServer.getupdatedcontent(currentOptionsId);
	}
	function HandleClearRequest(){
		if (confirm(msgConfirmClear)) {
			var ajaxCallbackClear = {
				clear: function (response) {
					if (response != 'Done') {
						alert(response);
					}
			    },
				clearError: function (e) {
					alert(e.response);
			    }
			}
			var ajaxClearServer = new homepageblockmanager(ajaxCallbackClear);
			ajaxClearServer.applicationErrorFunc = function(e) {
				alert(e.response);
			}
			ajaxClearServer.serverErrorFunc = function(e) {
				alert(e.response);
			}
			ajaxClearServer.clientErrorFunc = function(e) {
				alert(e.response);
			}

			ajaxClearServer.clear();

			for(i=1;i<isFadedList.length;i++)
			{
				Effect.Fade('Block_'+isFadedList[i][0]);
				isFadedList[i][1]=true;
			}
			makeSortables();
		}
	}
	function makeSortables()
	{
		var columnList = '"BlockList_0"';
		for(i=1;i<nbColumns;i++)
		{
			columnList += ',"BlockList_' + i +'"';
		}
		for(i=0;i<nbColumns;i++)
		{
			eval('Sortable.create("BlockList_"+i,{tag: "div", only: "Block", handle: "BlockTitle", dropOnEmpty:true, containment:['+columnList+'],constraint:false})');
		}
	}


	// MultiList Javascript
	function SelectOption(ID, Name,ProjectId)
	{
		this.ID = ID;
		this.Name = Name;
		this.ProjectId = ProjectId;
	}
	function getProjectItems(Select,List,ProjectId)
	{
		var SL = document.getElementById(Select)
		SL.options.length=0;
		for(i in List)
		{
			if(List[i].ProjectId==ProjectId || ProjectId==0)
			{
				SL.options[SL.length] = new Option(List[i].Name,List[i].ID);
				if(List[i].ID == SelectedId)
				{
				 	SL.options[SL.length-1].selected = 'selected';
				}
			}
		}
		if(SL.options.length==0)
			SL.options[SL.length] = new Option(" -- "+msgEmpty+" -- ",0);
	}
	var SelectList = new Array();
	var SelectedId = 0;

	// MultiCheckBow Javascript
	function CheckBoxItem(ID, Name,ProjectId,Checked)
	{
		this.ID = ID;
		this.Name = Name;
		this.ProjectId = ProjectId;
		if (Checked==1) {
			this.Checked = true;
		}else{
			this.Checked = false;
		}
	}
	function getProjectBoxes(Div,List,ProjectId)
	{
		var D = document.getElementById(Div)
		D.innerHTML = '';
		for(i in List)
		{
			if (List[i].ProjectId == ProjectId) {
				if (List[i].Checked) {
					isChecked = ' checked';
				}else{
					isChecked = '';
				}
				D.innerHTML += '<label><input type="checkbox" name="'+Div+'" value="'+List[i].ID+'"'+isChecked+'/>'+List[i].Name+'</label><br/>';
			}
		}
	}
	var CheckBoxList = new Array();

	// ToolTip
	function findPosX(obj)
	{
		var curleft = 0;
		if (obj.offsetParent)
		{
			while (obj.offsetParent)
			{
				curleft += obj.offsetLeft
				obj = obj.offsetParent;
			}
		}
		else if (obj.x)
			curleft += obj.x;
		return curleft;
	}

	function findPosY(obj)
	{
		var curtop = 0;
		if (obj.offsetParent)
		{
			while (obj.offsetParent)
			{
				curtop += obj.offsetTop
				obj = obj.offsetParent;
			}
		}
		else if (obj.y)
			curtop += obj.y;
		return curtop;
	}

	function xstooltip_show(index,id)
	{
	    it = document.getElementById('RSSToolTip');
	    it2 = document.getElementById('RSSToolTip_'+id+'_'+index);
	    lnk = document.getElementById('RSSLink_'+id+'_'+index);

	    it.innerHTML = it2.innerHTML;

		lnkXPos = findPosX(lnk);
		lnkYPos = findPosY(lnk);

		windowSize = getWindowSize();
		x = windowSize[0];
		y = windowSize[1];

		it.style.left = 0;
		it.style.top = 0;
		if ((lnkXPos+545) < x || lnkXPos-260 < document.documentElement.scrollLeft) {
			it.style.left = lnkXPos+295+'px';
		}else{
			it.style.left = lnkXPos-260+'px';
		}
		it.style.display = 'block';
		if ((lnkYPos+it.offsetHeight) < y+document.documentElement.scrollTop || lnkYPos-it.offsetHeight < document.documentElement.scrollTop){
			it.style.top = (lnkYPos-10)+'px';
		}else{
			it.style.top = lnkYPos-it.offsetHeight+'px';
		}


	}

	function xstooltip_hide()
	{
		it = document.getElementById('RSSToolTip');
		it.style.display = 'none';
	}

	// translation var
	var msgAddBlock = 'Add Block';
	var msgHideBlockList = 'Hide Block List';
	var msgEmpty = 'Empty';
	var msgSaveOptions = 'Save options';
	var msgWaitOptionsSave = 'Please wait while options are being save ...';
	var msgUpdateContent = 'Update content';
	var msgWaitUpdate = 'Please wait, your block content is being updated ...';
	var msgConfirmClear = 'Do you really want to clear your home page (it will not be saved) ?';
	var msgWaitOptionsLoad = 'Please wait while options are loading ...';
	var msgOk = 'Ok';
	var msgCancel = 'Cancel';
	var msgWaitSave = 'Please wait while it is saving ...';
	var msgSave = 'Save';
	var msgSucessSave = 'Your settings have been successfully saved';
	var msgPleaseWait = 'Please wait, ';
	var msgBlocksAreLoading = ' blocks are loading...';
	var msgBlockIsLoading = ' block is loading...';

