
	//context menus
	
	var ContextMenu = new Array();
	var ContextMenu1 = new Array();
	
	//functions to get the co-ordinates of the iframe
	function DL_GetElementLeft(eElement)
	{
		var nLeftPos = eElement.offsetLeft;          // initialize var to store calculations
		var eParElement = eElement.offsetParent;     // identify first offset parent element  
		while (eParElement != null)
		{                                            // move up through element hierarchy
			nLeftPos += eParElement.offsetLeft;      // appending left offset of each parent
			eParElement = eParElement.offsetParent;  // until no more offset parents exist
		}
		return nLeftPos;                             // return the number calculated
	}
	
	function DL_GetElementTop(eElement)
	{
		var nTopPos = eElement.offsetTop;            // initialize var to store calculations
		var eParElement = eElement.offsetParent;     // identify first offset parent element  
		while (eParElement != null)
		{                                            // move up through element hierarchy
			nTopPos += eParElement.offsetTop;        // appending top offset of each parent
			eParElement = eParElement.offsetParent;  // until no more offset parents exist
		}
		return nTopPos;                              // return the number calculated
	}

	
	//functions for the mouse over on the context menus
	function mouseOver(ctrl)
	{
		ctrl.style.cursor = 'hand';
		ctrl.style.background = menu_over_col;
		ctrl.style.border = menu_border_col + " 1px solid";
	}
	
	function mouseOverDis(ctrl)
	{
		//do nothing!
	}
	
	function mouseOut(ctrl)
	{
		ctrl.style.background = "";
		ctrl.style.border = "1px solid " + menu_bg_col;
	}

	
	//set some global vars for the menus
	menu_seperator 	= "<div style='width:130'><div style='background-color:" + menu_seperator + ";margin:2px'><img src='editor/images/spacer.gif' height='1' unselectable='on'></div><div>";
	menu_open1		= "<div style='width=130; text-align=left; border: 1px solid " + menu_bg_col + ";'"; //this is left open for the function 
	menu_open2		= "onMouseOver=\"mouseOver(this)\" onMouseOut=\"mouseOut(this)\"><div style='margin: 2px;' unselectable='on'><span style=\"font-size: 11px\"><font face=\"Arial\">&nbsp;&nbsp;&nbsp;";
	menu_open_dis   = "<div style='width=130; text-align=left; border: 1px solid " + menu_bg_col + ";' onMouseOver=\"mouseOverDis(this)\" onMouseOut=\"mouseOut(this)\"><div style='margin: 2px;'><span style=\"font-size: 11px\"><font face=\"Arial\" disabled unselectable='on'>&nbsp;&nbsp;&nbsp;";
	menu_normal     = "<div style='width=130; text-align=left; border: 1px solid " + menu_bg_col + ";' onMouseOver=\"mouseOverDis(this)\" onMouseOut=\"mouseOut(this)\"><div style='margin: 2px;'><span style=\"font-size: 11px; font-weight:bold\"><font face=\"Arial\" unselectable='on'>&nbsp;&nbsp;&nbsp;";
	menu_close		= "</font></span></div></div>";
	menu_closeWsub	= "</font></span><img src='editor/images/buttons/right_arrow.gif'></div></div>"; //menu with a sub menu attached

	//table menu
	var table_menu = new Array()
	table_menu[0] 	= new Array ("Inserisci Tabella"				,		"insertTable()");
	table_menu[1] 	= new Array ("Toggle Table Borders"		,		"toggleTableBorders()");
	table_menu[2] 	= new Array ("SEPERATOR"				,		"");
	table_menu[3] 	= new Array ("Table Properties"			,		"modifyTable()");
	table_menu[4]	= new Array ("Cell Properties"			,		"modifyCell()");
	table_menu[5] 	= new Array ("SEPERATOR"				,		"");
	table_menu[6] 	= new Array ("Insert Row Above"			,		"insertRow('above')");
	table_menu[7] 	= new Array ("Insert Row Below"			,		"insertRow('below')");
	table_menu[8] 	= new Array ("Insert Column to Left"	,		"insertCol('left')");
	table_menu[9] 	= new Array ("Insert Column to Right"	,		"insertCol('right')");
	table_menu[10] 	= new Array ("SEPERATOR"				,		"");
	table_menu[11] 	= new Array ("Delete Row"				,		"removeRow()");
	table_menu[12] 	= new Array ("Delete Column"			,		"removeCol()");
	
	//form menu
	var form_menu = new Array()
	form_menu[0]	= new Array ("Insert Form"				,		"doForms()");
	form_menu[1]	= new Array ("Toggle Form Borders"		,		"toggleFormBorders()");
	form_menu[2]	= new Array ("SEPERATOR"				,		"");
	form_menu[3]	= new Array ("Form Properties"			,		"doForms()");
	form_menu[4]	= new Array ("SEPERATOR"				,		"");
	form_menu[5]	= new Array ("Insert Textfield"			,		"formTextfield()");
	form_menu[6]	= new Array ("Insert Textarea"			,		"formTextArea()");
	form_menu[7]	= new Array ("Insert Checkbox"			,		"formCheck()");
	form_menu[8]	= new Array ("Insert Radio button"		,		"formRadio()");
	form_menu[9]	= new Array ("Insert Button"			,		"formButton()");
	form_menu[10]	= new Array ("Insert Hidden field"		,		"formHidden()");
	
	//custom insert menu - do not remove these. If you do not want an option to appear, please use the config file and disable them there.
	//if you remove elements from below - it will cause an error.
	//to add your own custom inserts, simply add a new array below and link to a function in profunctions.js
	var custom_inserts = new Array()
	custom_inserts[0] = new Array("Special characters"	        ,	"doChar()");
	custom_inserts[1] = new Array("Insert current date"			,	"insertDate('date')");
	custom_inserts[2] = new Array("Insert current time"			,	"insertDate('time')");
	custom_inserts[3] = new Array("Insert scrolling text"		,	"doScrolling()");
	
	
	//general context menu
	var GeneralContextMenu = new Array()
	GeneralContextMenu[0] =  new Array("Cut" 				,		"cmdExec('cut')") ;
 	GeneralContextMenu[1] =  new Array("Copy" 				,		"cmdExec('copy')") ;
  	GeneralContextMenu[2] =  new Array("Paste" 				,		"cmdExec('paste')") ;
	
	//table context menu
	var TableContextMenu 	= new Array()
	TableContextMenu[0]  	= new Array("SEPERATOR"			,		"");
	TableContextMenu[1] 	= new Array("Table Properties"	,		"modifyTable()");
	TableContextMenu[2]		= new Array("Cell Properties"	,		"modifyCell()");
	TableContextMenu[3] 	= new Array("SEPERATOR"			,		"");
	TableContextMenu[4] 	= new Array("Insert Row Above"	,		"insertRow('above')");
	TableContextMenu[5] 	= new Array("Insert Row Below"	,		"insertRow('below')");
	TableContextMenu[6] 	= new Array("Insert Column to Left"  ,	"insertCol('left')");
	TableContextMenu[7] 	= new Array("Insert Column to Right" ,  "insertCol('right')");
	TableContextMenu[8] 	= new Array("SEPERATOR"			,		"");
	TableContextMenu[9] 	= new Array("Delete Row"		,		"removeRow()");
	TableContextMenu[10] 	= new Array("Delete Column"		,		"removeCol()");


	//image context menu
	var ImageContextMenu = new Array()
	ImageContextMenu[0]  = new Array("SEPERATOR"			,		"");
	ImageContextMenu[1]  = new Array("Properties"		,		"doImage()");
	
	//hyperlink context menu
	var LinkContextMenu = new Array()
	LinkContextMenu[0] 	= new Array("SEPERATOR"				,		"");
	LinkContextMenu[1] 	= new Array("Properties"	,		"doLink()");
	LinkContextMenu[2] 	= new Array("Properties"	,		"doEmail()");
  
  	//form context menu
	var FormContextMenu = new Array()
	FormContextMenu[0] 	= new Array("SEPERATOR"				,		"");
	FormContextMenu[1] 	= new Array("Form Properties"		,		"doForms()");
	FormContextMenu[2] 	= new Array("Properties"	,		"controlProperties()");
	
	//HR context menu
	var HrContextMenu 	= new Array()
	HrContextMenu[0]	= new Array("SEPERATOR"				,		"");
	HrContextMenu[1]	= new Array("Properties"			,		"doRule()");
	
	//preview size menu
	var previewSizes 	= new Array()
	previewSizes[0]		= new Array ("640x480" 	, "openPreview('640x480')");
	previewSizes[1]		= new Array ("800x600" , "openPreview('800x600')");
	previewSizes[2]		= new Array ("1024x768" , "openPreview('1024x768')");		
	
  
	
	function showContextMenu()
	{
		//function to show the context menu
		
		var menuStrings = new Array();
		var menuStates  = new Array();
		var state;
		var i;
		var idx = 0;
		var idx1 = 0;
		var menuheight = 0;
		
		// Rebuild the context menu. 
		ContextMenu.length = 0;
		ContextMenu1.length = 0;
		
		ContextMenu1[idx1++] = "<table class='menu_main'>";
		
		// Always show general menu
		if ((iView.document.selection.type == "Text") || (iView.document.selection.type == "Control")) {
			ContextMenu[idx++] = menu_open1 + " onMouseDown=\"" + GeneralContextMenu[0][1] + "\"" + menu_open2 + GeneralContextMenu[0][0] + menu_close;
			ContextMenu[idx++] = menu_open1 + " onMouseDown=\"" + GeneralContextMenu[1][1] + "\"" + menu_open2 + GeneralContextMenu[1][0] + menu_close;
			ContextMenu[idx++] = menu_open1 + " onMouseDown=\"" + GeneralContextMenu[2][1] + "\"" + menu_open2 + GeneralContextMenu[2][0] + menu_close;
			menuheight += 3 * 22;
		} else {
			ContextMenu[idx++] = menu_open_dis + GeneralContextMenu[0][0] + menu_close; //disable cut
			ContextMenu[idx++] = menu_open_dis + GeneralContextMenu[1][0] + menu_close; //disable copy
			ContextMenu[idx++] = menu_open1 + " onMouseDown=\"" + GeneralContextMenu[2][1] + "\"" + menu_open2 + GeneralContextMenu[2][0] + menu_close;
			menuheight += 3 * 22;
		}
		
		//is the selection inside another attribute?
		var isTable = false;			
		var isImage = false;
		var isLink  = false;
		var isForm  = false;
		var isRule	= false;
		var isFormControl = false;
		
		var cursor = iView.document.selection.createRange();
		
		//see if its a form control
		if (iView.document.selection.type == "Control") {
			var re_1 = /INPUT/i;
			var re_2 = /SELECT/i;
			var re_3 = /TEXTAREA/i;
			if (cursor(0).outerHTML.search(re_1) >=0 ||
			cursor(0).outerHTML.search(re_2) >=0 ||
			cursor(0).outerHTML.search(re_3) >=0 )
			{
				//alert(cursor(0).outerHTML)
				isFormControl = true;
			}
			if (cursor(0).tagName.toUpperCase() == "HR") {
			isRule = true;
			}
			
		}

		if (cursor!=null && cursor.parentElement!=null)
		{
			var el = cursor.parentElement();
			
			//bug when the parent element is a p or strong etc...
			//need to loop around until we find one of the following elements.
			//if we dont, make sure it stops at HTML otherwise it'll loop forever! :\
			while (el.nodeName.toLowerCase() != "body") 
			{
				
				if (el.nodeName.toLowerCase() == "td" ) {
					isTable = true;
					break;
				}
				if (el.nodeName.toLowerCase() == "a" ) {
					isLink = true;
					break;
				}
				if (el.nodeName.toLowerCase() == "form" ) {
					isForm = true;
					break;
				}
				if (el.nodeName.toLowerCase() == "hr" ) {
					isRule = true;
					break;
				}
				
				el = el.parentNode;
			}
		}
		
		//now search for any image types
		var range;
		if (iView.document.selection.type == "Control") {
			var itself = iView.document.selection.createRange();
			if (itself(0).tagName.toUpperCase() == "IMG") {
		 	 isImage = true;
			}
		}
		
		//table
		if (isTable) {
			if (allowTableEdit)
			{
				for (i=0; i<TableContextMenu.length; i++) {
					if (TableContextMenu[i][1] == ""){
						ContextMenu[idx++] = menu_seperator;
						menuheight += 1;
					} else {	
						ContextMenu[idx++] = menu_open1 + " onMouseDown=\"" + TableContextMenu[i][1] + "\"" + menu_open2 + TableContextMenu[i][0] + menu_close;
						menuheight += 22;
					}
				}
				
				//add help text?
				if (allowContextHelp) {
					if (helpTables != "") {
						ContextMenu[idx++] = menu_seperator;
						ContextMenu[idx++] = menu_open1 + " onMouseDown=\"window.open('" + helpTables + "');hideMenu()\"" + menu_open2 + helpTablesLabel + menu_close;
						menuheight += 22;
						menuheight += 1;
					}
				}
				
			}
		}
		
		//Images
		if (isImage) {
			for (i=0; i<ImageContextMenu.length; i++) {
				if (ImageContextMenu[i][1] == ""){
					ContextMenu[idx++] = menu_seperator;
					menuheight += 1;
				} else {	
					ContextMenu[idx++] = menu_open1 + " onMouseDown=\"" + ImageContextMenu[i][1] + "\"" + menu_open2 + ImageContextMenu[i][0] + menu_close;
					menuheight += 22;
				}
			}
			//add help text?
			if (allowContextHelp) {
				if (helpImages != "") {
					ContextMenu[idx++] = menu_seperator;
					ContextMenu[idx++] = menu_open1 + " onMouseDown=\"window.open('" + helpImages + "');hideMenu()\"" + menu_open2 + helpImagesLabel + menu_close;
					menuheight += 1;
					menuheight += 22;
				}
			}
		}
		
		//Horizontal Rules
		if (isRule) {
			for (i=0; i<HrContextMenu.length; i++) {
				if (HrContextMenu[i][1] == ""){
					ContextMenu[idx++] = menu_seperator;
					menuheight += 1;
				} else {	
					ContextMenu[idx++] = menu_open1 + " onMouseDown=\"" + HrContextMenu[i][1] + "\"" + menu_open2 + HrContextMenu[i][0] + menu_close;
					menuheight += 22;
				}
			}
			//add help text?
			if (allowContextHelp) {
				if (helpRule != "") {
					ContextMenu[idx++] = menu_seperator;
					ContextMenu[idx++] = menu_open1 + " onMouseDown=\"window.open('" + helpRule + "');hideMenu()\"" + menu_open2 + helpRuleLabel + menu_close;
					menuheight += 2;
					menuheight += 22;
				}
			}
		}
		
		//Links
		if (isLink) {
			for (i=0; i<LinkContextMenu.length; i++) {
				if (LinkContextMenu[i][1] == ""){
					ContextMenu[idx++] = menu_seperator;
					menuheight += 1;
				} else {	
					
					//is it an email link? we can test this by looking for the mailto link
					if (cursor.parentElement().href.indexOf("mailto:") == -1) {
						//this is a mail link
						ContextMenu[idx++] = menu_open1 + " onMouseDown=\"" + LinkContextMenu[1][1] + "\"" + menu_open2 + LinkContextMenu[1][0] + menu_close;
						menuheight += 22;
						break;
					} else {
						ContextMenu[idx++] = menu_open1 + " onMouseDown=\"" + LinkContextMenu[2][1] + "\"" + menu_open2 + LinkContextMenu[2][0] + menu_close;
						menuheight += 22;
						break;
					}
				}
			}
			//add help text?
			if (allowContextHelp) {
				if (helpLinks != "") {
					ContextMenu[idx++] = menu_seperator;
					ContextMenu[idx++] = menu_open1 + " onMouseDown=\"window.open('" + helpLinks + "');hideMenu()\"" + menu_open2 + helpLinksLabel + menu_close;
					menuheight += 2;
					menuheight += 22;
				}
			}
		}
		
		//form
		if (isForm || isFormControl ) {
			
			if (allowFormEdit)
			{
				for (i=0; i<FormContextMenu.length; i++) {
						switch (i) {
						 case 1    : 	if (isForm)        
										{
											ContextMenu[idx++] = menu_seperator;
											ContextMenu[idx++] = menu_open1 + " onMouseDown=\"" + FormContextMenu[i][1] + "\"" + menu_open2 + FormContextMenu[i][0] + menu_close;
											menuheight += 1; 
											menuheight += 22; 
										}
										break;
						 
						 
						 
						 case 2	   : 	if (isFormControl)
										{
											ContextMenu[idx++] = menu_seperator;
											ContextMenu[idx++] = menu_open1 + " onMouseDown=\"" + FormContextMenu[i][1] + "\"" + menu_open2 + FormContextMenu[i][0] + menu_close;
											menuheight += 1; 
											menuheight += 22; 
										}
										break;
										
						
						}
				}
				//add help text?
				if (allowContextHelp) {
					if (helpForms != "") {
						ContextMenu[idx++] = menu_seperator;
						ContextMenu[idx++] = menu_open1 + " onMouseDown=\"window.open('" + helpForms + "');hideMenu()\"" + menu_open2 + helpFormsLabel + menu_close;
						menuheight += 2; 
						menuheight += 22; 
					}
				}
			}
		}
		
		theMenu = "";
		
		ContextMenu1[idx1++] = "</table>";
		
		for (var i = 0; i < ContextMenu.length; i++) {
				theMenu += ContextMenu[i];
		}

		//draw the menu to the editor
		//document.all['tr_iView_menu'].innerHTML = theMenu;
		document.all['tr_iView_menu'].innerHTML = theMenu;
		
		
		var cursorx = iView.event.clientX;
		var cursory = iView.event.clientY;
	
		var menuLeft = DL_GetElementLeft(document.all['iView']) + cursorx;
		var menuTop = DL_GetElementTop(document.all['iView']) + cursory;
		
		var rightedge = iView.document.body.clientWidth - iView.event.clientX;
		var bottomedge = iView.document.body.clientHeight - iView.event.clientY;
		
		if (rightedge < 140) {
			menuLeft = iView.document.body.scrollLeft + menuLeft - 130; 
		} 
		
		if (bottomedge < menuheight) {
			menuTop = iView.document.body.scrollTop + (menuTop - (menuheight-10)); 
		} 
		
		document.all['tr_iView_menu'].style.left = menuLeft + "px";
		document.all['tr_iView_menu'].style.top =  menuTop + "px";
		
		hideMenu();		//hide any other menus which might be showing
		
		document.all['tr_iView_menu'].style.display = "block"; //show the menu
		
		//now do the shadow
		if ((menu_shadowSize > 0) && (menu_shadowSize <= 10))
		{
			//draw the shadow
			strength = 40;
			number = 1;
			intervals = strength / menu_shadowSize;
			
			//how many spacers are in the menu?
			for (x=0;x<ContextMenu.length;x++)
			{
				if (ContextMenu[x] == "menu_seperator") {
					alert("sep");
				}
			}
			
			for (x=0;x<menu_shadowSize;x++)
			{
				//if the menu has been created once, its already there... so just show it rather than create it
				if (!eval('document.all["shadow_' + x + '"];')) {
					eval('shad_'+ x +' = document.createElement("DIV");');
					eval('shad_'+ x +'.id = "shadow_' + x + '";');
				}
				
				eval('shad_'+ x +'.style.position = "absolute";');
				eval('shad_'+ x +'.style.cursor = "";');
				eval('shad_'+ x +'.unselectable = "on";');
				eval('shad_'+ x +'.style.height = menuheight');
				eval('shad_'+ x +'.style.width = "135px";');
				eval('shad_'+ x +'.style.top  = ' + number + ' + menuTop + "px";');
				eval('shad_'+ x +'.style.left = ' + number + ' + menuLeft + "px";');
				eval('shad_'+ x +'.style.background = menu_shadowCol;');
				eval('shad_'+ x +'.style.display = "block";');
				eval('shad_'+ x +'.style.filter = "alpha(opacity=' + strength + ')";');
				eval('document.body.appendChild(shad_'+x+');')
				strength = strength - intervals;
				number++;
			}
		}
		
		var ifr = "<iframe id=\"frameId\" src=\"\" frameborder=\"0\" scrolling=\"no\" style=\"position:absolute;top:0x;left:0px;z-index:100;display:none\" ></iframe>";
		document.all['tr_iView_menu'].insertAdjacentHTML('beforeBegin', ifr);
		document.all('frameId').style.top = menuTop + "px";
		document.all('frameId').style.left = menuLeft + "px";
		document.all('frameId').style.width = '133'; //allow for the border
		document.all('frameId').style.height = menuheight;
		document.all('frameId').style.display = 'block';
		document.all('frameId').style.filter = 'progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)';

		iView.event.cancelBubble = true;	//stop the default IE menu from appearing
		iView.event.returnValue = false;
	
	
	
	} //end context menu function
	
