/******************************************************************
	common.js
	common.js contains common javascript variables or functions
	which are used by a lot of other javascript files;
	Generally, common.js will be referred by all top-level XSL files;
	HTML URL or HTML FORM SUBMIT target:
	(1) _top; (2) _blank; (3) _self; (4) user's window's or frame's name
 ******************************************************************/
/*************Debug flag***********************/
function visualizza(){

	window.top.frames[0].document.getElementById('immagine').style.display = 'block';

}



function nascondi() {

	window.top.frames[0].document.getElementById('immagine').style.display = 'none';

}
//Debug is used to make decision if some javascript results are shown
//to developers for debugging purpose
var Debug = false;
//set up Debug variable used in common.xsl
//<afmXmlView debug="true|false"> will enable or disable the debug
//feature in client-side
//bDebug: the value from <afmXmlView debug="true|false">
function SetDebugVariable(bDebug)
{
	Debug = bDebug;
}
//XXX:
var moziallFireFoxBrowser=(navigator.userAgent.toUpperCase()).indexOf("FIREFOX")>0;

/************************************************/
/***********a form(method:POST) with a hidden input ***/
//the form with a hidden field is used to send client-side
//request data to server in xml-formatted string
//<form name="afmHiddenForm" method="POST">
//<input type="hidden" name="xml" value="..."/>
//</form>
var afmHiddenFormName = "afmHiddenForm";
var xmlName = "xml";
/******************************************************/
/**********A common form's name for users's data inputs*****/
//user inputs form's name
var afmInputsFormName = "afmInputsForm";
/************************************************************/
//sending xml data string from hidden form with POST method to server
//strHiddenFormName is the hidden form's name: sending xml data
//strViewDefinitionFormName is the form's name to hold user's inputs
var strSerializedStartTag = "<";				//do not use &lt;
var strSerializedCloseTag = ">";				//do not use &gt;
var strSerializedInsertingDataFirstPart = "";	//<afmAction ....>
var strSerializedInsertingDataRestPart	= "";    //...</afmAction>
/********************************************************/
//set up from common.xsl
var strPdfAfmActionSerialized = "";
/********************************************************/
///strUrl: url link to server, currently this value is always "dump.axvw"
//strSerialized: xml string to communicate with server, coming from action
//strTarget: request's target
//subFrameName: the frame's names will be refreshed following this request
//bData:if inserting client's data into strSerialized(xml string)
function sendingDataFromHiddenForm(strUrl, strSerialized, strTarget, subFrameName ,bData, newWindowSettings)
{
	
	var objHiddenForm = document.forms[afmHiddenFormName];
	var strData = "";
	var strXMLValue = "";
	//if bData is true, insert client data into xml string

	if(bData)
	{
		setSerializedInsertingDataVariables(strSerialized);
		//gettingRecordsData() is defined in corresponding JS file
		//which XSL is calling sendingDataFromHiddenForm
		strData = gettingRecordsData();
		if(strData != "")
			strXMLValue = strSerializedInsertingDataFirstPart + strData +  strSerializedInsertingDataRestPart;
		else
			strXMLValue = strSerialized;
	}
	else{
		strXMLValue = strSerialized;
	}

	if(objHiddenForm != null)
	{
		//a new window is opened
		if(strTarget == "_blank" || strTarget == "blank")
		{
			var newTargetWindowName		= "newTargetWindow";
			var newTargetWindowSettings = "titlebar=no,toolbar=no,menubar=no,resizable=yes,scrollbars=yes,status=yes,width=1000,height=650";
			if(newWindowSettings != "")
				newTargetWindowSettings = newWindowSettings;
			var newWindowObj			= window.open("", newTargetWindowName,newTargetWindowSettings);
			//avoid the some part of new window is hidden form screen,
			//move it to the left top of screen
			newWindowObj.moveTo(10,10);
			strTarget					= newTargetWindowName;
		}
		//using "dump.axvw" as url
		//if Cancun's core doesn't change this kind of implementation,
		//please always use "dynamic-content.axvw"
		if(strUrl == "")
			strUrl = "login.axvw";
			//strUrl = "dynamic-content.axvw";
		objHiddenForm.elements[xmlName].value = strXMLValue;
		objHiddenForm.target = strTarget;
		objHiddenForm.action = strUrl;

		// Show url, target, and sending data for debugging.  Use simple for for login action,
		// dialog for others.  See comments in show-afm-action.htm.
		
		//if( bDebug ) 				
/*		{
			if ( strXMLValue.search( "login.axvw" ) != -1 ) {
				alert("action's target: "+strTarget);
				alert("action's url: "+strUrl);
				alert("sending xml: "+ strXMLValue );
			}
			else {
				var strParameters = "target=" + strTarget + "&url=" + strUrl + "&action=" + strXMLValue + "" ;

				window.showModalDialog(
					"schema/ab-system/html/show-afm-action.htm",
					strParameters,
					"status:no; center:yes ; resizeable: yes ;  dialogHeight: 800 px ; dialogWidth: 1000 px" ) ;
			}
		}
		*/
		
		//sending the hidden form to server
		objHiddenForm.submit();
		//refreshing sub frame if thare is subFrame conent in XML
		if(subFrameName != '')
			reloadFrameWindow(subFrameName);
	}
}

//set up related javascript varaibles
//strSerializedStartTag, strSerializedCloseTag,
//strSerializedInsertingDataFirstPart, strSerializedInsertingDataRestPart = "";    //...</afmAction>
//strSerialized: xml string from action
function setSerializedInsertingDataVariables(strSerialized)
{
	var numPos1 = 0;
	var numPos2 = 0;
	//since the format of strSerialized is dependent on how to pass it
	//to javascript in XSLT, two tag cases must be included.
	var strCloseTag1 = ">";
	var strStartTag1 = "<";
	var strCloseTag2 = "&gt;";
	var strStartTag2 = "&lt;";
	numPos1 = strSerialized.indexOf(strCloseTag1);
	if(numPos1 > 0)
	{
		strSerializedInsertingDataFirstPart = strSerialized.substring(0, numPos1 + strCloseTag1.length);
		//strSerializedInsertingDataRestPart = strSerialized.substring(numPos1 + 1 + strCloseTag1.length);
		strSerializedInsertingDataRestPart = strSerialized.substring(numPos1  + strCloseTag1.length);
	}
	else{
		numPos2 = strSerialized.indexOf(strCloseTag2);
		if(numPos2 > 0){
			strSerializedInsertingDataFirstPart = strSerialized.substring(0, numPos2 + strCloseTag2.length);
			//strSerializedInsertingDataRestPart = strSerialized.substring(numPos2 + 1 + strCloseTag2.length);
			strSerializedInsertingDataRestPart = strSerialized.substring(numPos2 + strCloseTag2.length);
		}
	}
}

//sending afmAction request with client-side data string to the server
function sendingAfmActionRequestWithClientDataXMLString2Server(targetName, afmActionSerializedXSLString, clientDataXMLString)
{
	var strXML = "";
	//parsing afmActionSerializedXSLString into two parts
	setSerializedInsertingDataVariables(afmActionSerializedXSLString);
	//inserting client-side data
	strXML = strSerializedInsertingDataFirstPart + clientDataXMLString + strSerializedInsertingDataRestPart;
	//sending to server
	sendingDataFromHiddenForm('',strXML, targetName, '', false, '');
}

//reloading specified frame window by name
function reloadFrameWindow(frameName)
{
	var objFrame  = null;
	//passing window as initial object
	objFrame = getFrameObject(window, frameName);
	if(objFrame != null)
	{
		if(Debug)
		{
			//showing frame's url
			alert(objFrame.name +" href: " + objFrame.location.href);
		}
		if (document.images)
		{
			//browsers support reload();
			objFrame.location.reload();
		}
		else
		{
			//browsers don't support reload();
			objFrame.location.href = objFrame.location.href;
		}
	}
	else
	{
		if(Debug)
		{
			alert("Cannot find frame named by " + frameName);
		}
	}
}

//looking up to search a specified frame object by its name
function getFrameObject(parentObj,frameName)
{
	var returnedFrameObj = null;
	if(parentObj != null)
	{
		var obj = parentObj.parent;
		if(obj != null)
		{
			if(obj.frames != null)
			{
				for(var i=0; i< obj.frames.length; i++)
				{
					var arr = new Array();
					if(obj.frames[i].name != null || obj.frames[i].name != "")
					{
						arr = (obj.frames[i].name).match(frameName);
					}
					if(arr != null)
					{
						//finding a name-matched frame object
						returnedFrameObj = obj.frames[i];
						break;
					}
				}
			}
		}
		//researching its parent object
		if(returnedFrameObj == null)
		{
			if(obj!=window.top)
				returnedFrameObj = getFrameObject(obj, frameName);
		}
	}
	return returnedFrameObj;
}

//called when users push selectV button
function OpenSelectVWindow(strXMLData)
{
	//open a new browser window
	var selectValueWindowName		= "selectValueWindow";
	var selectValueWindowSettings	= "toolbar=no,menubar=no,resizable=yes,scrollbars=yes,status=yes,width=500,height=600";
	var selectValueWindow			= window.open("", selectValueWindowName,selectValueWindowSettings);
	//call sendingDataFromHiddenForm(strUrl, strSerialized, strTarget,
	//subFrameName ,bData) to target selectValueWindow
	sendingDataFromHiddenForm("dynamic-content.axvw", strXMLData, selectValueWindowName, "", false);
}

//????how to handle a few localized strings?????
//opening a separation window to show server-side error message
var objErrorMsgWindow = null;
function OpenErrorMessageWindow(window_title, show_detail_button, original_exception, stack_trace, close_window, form_name, originalException_input_name,stackTrace_input_name,stackTraceAllowed_input_name, message, abSchemaSystemJavascriptFolder, previousPage)
{
	//???formating html???
	if(objErrorMsgWindow == null || objErrorMsgWindow.closed)
	{
		objErrorMsgWindow = window.open("","errorMessageDisplayWindow","menubar=no,scrollbars=yes,resizable=yes,status=yes,width=300,height=300");
	}
	var temp_string = '<html><head><title>'+window_title+'<\/title>';
	//js variable schemaPath will look like "/archibus/schema".
	//ab-trigger-close-dialog.js is making error dialog window look
	//like modal window
	//temp_string = temp_string + '<script language="JavaScript" src="'+abSchemaSystemJavascriptFolder+'/ab-trigger-close-dialog.js"><\/script>';
	temp_string = temp_string + '<script language="JavaScript">function showMessage(){var obj_originalException=document.getElementById("originalException");obj_originalException.style.display="";var obj_stackTrace=document.getElementById("stackTrace");obj_stackTrace.style.display="";}; self.moveTo(0,0); setInterval("popupItself()",100); self.focus(); function popupItself(){self.focus();};<\/script>';
	temp_string = temp_string + '<\/head><body  leftmargin="0" rightmargin="0" topmargin="0" bottomMargin="0">';
	temp_string = temp_string + '<div><table  bgcolor="cornsilk" border="0" cellspacing="0" align="center" valign="top"><tr aligh="center"><td align="center"><b>' + message + '</b></td></tr></table></div>';
	temp_string = temp_string + '<div><table border="0" cellspacing="0" align="center" valign="top"><tr align="center">';
        temp_string = temp_string + '<td align="center"><input name="detailButton" style="cursor:hand; background-color: #E0E0E0 ;border: border-style; font-size: 9pt ;vertical-align: middle ;border-style: outset ; border-width: 1px 2px 2px 1px ;  border-color: #91B3D0 #000000 #000000 #91B3D0 ;font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;"  type="button" value="'+show_detail_button+'" onclick="showMessage();"></td>';

        temp_string = temp_string + '<script language="JavaScript">if(opener!=null){var stackTraceAllowed=opener.document.forms["'+form_name+'"].elements["'+stackTraceAllowed_input_name+'"].value;var detailButtonObj=document.getElementById("detailButton");if(stackTraceAllowed=="true"){detailButtonObj.style.display="";} else {detailButtonObj.style.display="none";}}<\/script>';
        temp_string = temp_string + '<td align="center"><input style="cursor:hand; background-color: #E0E0E0 ;border: border-style; font-size: 9pt ;vertical-align: middle ;border-style: outset ; border-width: 1px 2px 2px 1px ;  border-color: #91B3D0 #000000 #000000 #91B3D0 ;font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;" type="button" value="'+close_window+'" onclick="window.close()"></td></tr></table></div>';
	temp_string = temp_string + '<div id="originalException" style="display:none"><table width="100%" bgcolor="white"><tr><td style="font-size:12;font-weight:bold;font-family:arial,geneva,helvetica,sans-serif;">'+original_exception+':</td></tr><tr><td style="font-size:10;font-family:arial,geneva,helvetica,sans-serif;"><script language="JavaScript">if(opener!=null)document.write(opener.document.forms["'+form_name+'"].elements["'+originalException_input_name+'"].value);<\/script></td></tr></table><\/div>';
	temp_string = temp_string + '<div id="stackTrace" style="display:none"><table width="100%"  bgcolor="white"><tr><td  style="font-size:12;font-weight:bold;font-family:arial,geneva,helvetica,sans-serif;">'+stack_trace+':</td></tr><tr><td style="font-size:10;font-family:arial,geneva,helvetica,sans-serif;"><script language="JavaScript">if(opener!=null)document.write(opener.document.forms["'+form_name+'"].elements["'+stackTrace_input_name+'"].value);<\/script></td></tr></table><\/div><\/body><\/html>';

	objErrorMsgWindow.document.write(temp_string);
	if(previousPage=='true')
		window.history.go(-1);
}

//javascript to set up cookie
function setCookie(name, value, expire)
{
	var today = new Date() ;
	if(expire == null)
		today.setTime(today.getTime() - 1);
	document.cookie = name + "=" + escape(value) + ((expire == null) ? ("; expires="+today.toGMTString()) : ("; expires=" + expire.toGMTString()))
}
//javascript to get cookie
function getCookie(name)
{
	var re = new RegExp(name + "=([^;]+)");
	var value = re.exec(document.cookie);
	return (value != null) ? unescape(value[1]) : null;
}
//trim left side of input string
function trimLeft(str)
{
	//remove all whitespaces from str's left side
	return str.replace(/^\s+/,'');
}
//trim right side of input string
function trimRight(str)
{
	//remove all whitespaces from str's right side
	return str.replace(/\s+$/,'');
}
//trim left and right sides of input string
function trim(str)
{
	var temp_str = trimLeft(str);
	return trimRight(temp_str);
}

//open content
function openNewContent(requestUrl, target)
{
	openNewContent(requestUrl, target, "");
}
function openNewContent(requestUrl, target, selectValueWindowconfig)
{
	var selectValueWindowSettings	= "toolbar=no,menubar=no,resizable=yes,scrollbars=yes,status=yes,width=450,height=450";
	if(selectValueWindowconfig!=null && selectValueWindowconfig!="")
		selectValueWindowSettings = selectValueWindowconfig;

	if(Debug)
	{
		alert("Request URL: " + requestUrl);
	}
	if(target=="_blank" || target=="")
	{
		var selectValueWindowName = "newWindow";

		var selectValueWindow = window.open(requestUrl, selectValueWindowName,selectValueWindowSettings);
		selectValueWindow.moveTo(10,10);
		// return new window object so caller can set focus if desired
		return selectValueWindow;
	}
	else
	{
		//target to frame
		var objHiddenForm = document.forms[afmHiddenFormName];
		objHiddenForm.target = target;
		objHiddenForm.action = requestUrl;
		objHiddenForm.submit();
	}
}
//working in IE and NN7.1
//usage: <input type="text" value="" name="" onkeypress="return disableInputEnterKeyEvent( event)"/>
function disableInputEnterKeyEvent(event)
{
	var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
	if (keyCode == 13)
		return false;
	else
		return true;
}
//changing five special characters into valid XML characters
/*
 >     => &gt;
 <	   => &lt;
 "     => &quot;
 '	   => &apos;
 &     => &amp;
*/
 //make sure that never convert any field values more than one times
 //otherwise, five special characters will be messed up.
 function convert2validXMLValue(fieldValue)
 {
	////must first convert & character////
	//make sure that existing "&amp;" in user's input will not become "&amp;amp;"!!!
	fieldValue = fieldValue.replace(/&amp;/g, '&')
	fieldValue = fieldValue.replace(/&/g, '&amp;')
	/////////////////////////////////////////////
	fieldValue = fieldValue.replace(/>/g, "&gt;");
	fieldValue = fieldValue.replace(/</g, "&lt;");
	fieldValue = fieldValue.replace(/\'/g, "&apos;");
	fieldValue = fieldValue.replace(/\"/g, '&quot;');
	return fieldValue;
 }
 //AND literalize Value for sql statement
 function convert2validXMLValueAndLiteralizeValue(fieldValue)
 {
	////must first convert & character////
	//make sure that existing "&amp;" in user's input will not become "&amp;amp;"!!!
	 fieldValue = fieldValue.replace(/&amp;/g, '&')
	 fieldValue = fieldValue.replace(/&/g, '&amp;')
	/////////////////////////////////////////////
	 fieldValue = fieldValue.replace(/>/g, "&gt;");
	 fieldValue = fieldValue.replace(/</g, "&lt;");
	//double ' for SQL statement
	 fieldValue = fieldValue.replace(/\'/g, "&apos;&apos;");
	 fieldValue = fieldValue.replace(/\"/g, '&quot;');
	 return fieldValue;
 }
 //handling memo field value when being sent to server
 //make sure that never convert any field values more than one times
 //otherwise, five special characters will be messed up.
 function convertMemo2validateXMLValue(fieldValue)
 {
	 //normal convertion
	 fieldValue = convert2validXMLValue(fieldValue);
	 //handling new line feeding characters: \r\n
	 var regular_expression = new RegExp ('\r\n', 'gi') ;
	 //never change the name "#AFM_FLAG_NEWLINE#"!!!!!
	 fieldValue = fieldValue.replace(regular_expression,"#AFM_FLAG_NEWLINE#");
	 //handling new line feeding characters: \n
	 var regular_expression_n = new RegExp ('\n', 'gi') ;
	 fieldValue = fieldValue.replace(regular_expression_n,"#AFM_FLAG_NEWLINE#");
	 //handling new line feeding characters: \r
	 var regular_expression_r = new RegExp ('\r', 'gi') ;
	 fieldValue = fieldValue.replace(regular_expression_r,"#AFM_FLAG_NEWLINE#");

	 return fieldValue;
 }

 function insertRenderedAXVWFile2AfmAction(strAfmActionSerialized, renderedAXVWFileName)
 {
	 var returnedString = "";
	 var iPos = strAfmActionSerialized.indexOf("state=%22");
	 if(iPos > 0)
	 {
		//change attr state in serialized
		 iPos = iPos + "state=%22".length;
		 returnedString = strAfmActionSerialized.substring(0,iPos) + renderedAXVWFileName + strAfmActionSerialized.substring(iPos,strAfmActionSerialized.length);
	 }
	 else
	 {
		 iPos = strAfmActionSerialized.indexOf("afmAction");
		 if(iPos >= 0)
		 {
			 //insert a attr state=%22filename%
			 iPos = iPos + "afmAction".length;
			 returnedString = strAfmActionSerialized.substring(0,iPos) + " state=%22" + renderedAXVWFileName +"%22 " + strAfmActionSerialized.substring(iPos,strAfmActionSerialized.length);

		 }

	 }
	 return returnedString;
 }

 //opening none axvw files such as html, PDF, and MS Word/EXCEL/PPT
 //when URL comes from two different domain, new window must be used
 //projectGraphicsFolder: archibus/../.../ in which folder the opened file is
 //located;
 //referredFileName: opened file name;
 //bNewWindow: true|false
 function openNoneAXVWFile(relativeWebRootFolderName, referredFileName, bNewWindow)
 {
	 if(relativeWebRootFolderName != "" && referredFileName != "")
	 {
		 //weblogic server: ?a=1;?????
		 var urlLink =  relativeWebRootFolderName + "/" + referredFileName + "?a=1";
		 if(bNewWindow)
		 {
			 var newWindowName		= "newWindow";
			 var newWindowSettings	= "toolbar=no,menubar=no,resizable=yes,scrollbars=yes,status=yes,width=450,height=450";
			 var newWindowObject = window.open(urlLink, newWindowName,newWindowSettings);
		 }
		 else
		 {
			 window.location.href = urlLink;
		 }
	 }
 }
 
  //opening the printable pdf report
 var loadingPdfGeneratingView = false;
 function openPdfGeneratingView(pdfAfmActionSerialized)
 {
	 if(pdfAfmActionSerialized!=null && pdfAfmActionSerialized!="")
	 {
		 loadingPdfGeneratingView = true;
		 strPdfAfmActionSerialized = pdfAfmActionSerialized;
		 var selectValueWindowSettings	= "toolbar=no,menubar=no,resizable=yes,scrollbars=yes,status=yes,width=800,height=600";
		 var pdfGeneratingViewUrl="ab-generating-pdf.axvw";
		 openNewContent(pdfGeneratingViewUrl, "_blank", selectValueWindowSettings);
	 }
 }

