// General globals
var gAddSection;
var gHistorySection;
var strRootDir = "TT";
var strMainAppAnchorColor = "white";
var strHighlightColor = "red";
var strSubMenuHighlightColor = "#add8e6";
var strMainAppVehAnchorColor = "#FCC65B"
var strMainAppBgColor = "#003399";
var strMainSuperLinkColor = "blue";
var strMenuBackgroundColor = "LightGrey";
var savedWSHeight = 200;
var strPVCountryCode = "US";
var bSVGImage = false;


// Vehicle Context global
CreateVehicleContext();

//User settings global
var gUserSettings = new ActiveXObject("Microsoft.XMLDOM");
ResetUserSettingsNode();

//Worksheet doc global
var gOWorksheetDoc = new ActiveXObject("Microsoft.XMLDOM"); // ODWeb only
var oElement = gOWorksheetDoc.createElement("WORKSHEET"); // ODWeb only
gOWorksheetDoc.appendChild(oElement); // ODWeb only

/******************************** Globals Variable Functions *******************************/

//Create additional section of variables,
function CreateAddSection()
{
	gAddSection = new ActiveXObject("Microsoft.XMLDOM");
	var oElement = gAddSection.createElement("AddSection");
	gAddSection.appendChild(oElement);

	var root = gAddSection.documentElement;

	gHistorySection = new ActiveXObject("Microsoft.XMLDOM");
	var oElement = gHistorySection.createElement("HISTORY_RECORDS");
	gHistorySection.appendChild(oElement);

	var root = gHistorySection.documentElement;

	setAddVar("TSB_COLLASCAPE", "0");
	setAddVar("REPAIR_COLLASCAPE", "0");
	setAddVar("QUOTES_COLLASCAPE", "0")
}

function setAddVar(varFilter, value)
{
	var nameVar = varFilter;

	varFilter = "/AddSection/" + varFilter;
	var node = gAddSection.selectSingleNode(varFilter);

	if (node == null)
	{
		try
		{
			var root = gAddSection.selectSingleNode("//AddSection");
			node = gAddSection.createElement(nameVar);
			root.appendChild(node);
		}
		catch(e)
		{
			alert(" ERROR SET VAR " + e.description);
		}
	}

	return node.text = (value == null ? "" : value);
}

function getAddVar(varFilter)
{
	varFilter = "/AddSection/" + varFilter;
	var node = gAddSection.selectSingleNode(varFilter);
	return node != null ? node.text : null;
}

function CreateVehicleContext()
{
	gVC = new ActiveXObject("Microsoft.XMLDOM");
	var oElement = gVC.createElement("VehicleContext");
	gVC.appendChild(oElement);

	var root = gVC.documentElement;
	// Create VehicleContext child nodes
	var oElement = gVC.createElement("READY");
	root.appendChild(oElement);
	oElement = gVC.createElement("MOD");
	root.appendChild(oElement);
	oElement = gVC.createElement("MODULE_ID");
	root.appendChild(oElement);
	oElement = gVC.createElement("VEHICLE_VIN"); //TechSpan : 13-10-2005 : Aarti/Vikas 
	root.appendChild(oElement); //TechSpan : 13-10-2005 : Aarti/Vikas 
	oElement = gVC.createElement("VEHICLE_TYPE"); //TechSpan : Vikas 
	root.appendChild(oElement); //TechSpan : 07-11-2005 : Vikas
	oElement = gVC.createElement("MAKE_ID"); //TechSpan : Vikas 
	root.appendChild(oElement);
	oElement = gVC.createElement("MODEL_ID"); //TechSpan : Vikas 
	root.appendChild(oElement);
	oElement = gVC.createElement("YEAR_ID"); //TechSpan : Vikas 
	root.appendChild(oElement);
	oElement = gVC.createElement("YEAR");
	root.appendChild(oElement);
	oElement = gVC.createElement("MAKE");
	root.appendChild(oElement);
	oElement = gVC.createElement("MS_MODEL");
	root.appendChild(oElement);
	oElement = gVC.createElement("MS_MODEL_ID");
	root.appendChild(oElement);
	oElement = gVC.createElement("GEN_MODEL_ID");
	root.appendChild(oElement);
	oElement = gVC.createElement("ENG");
	root.appendChild(oElement);
	oElement = gVC.createElement("DISP_LTR");
	root.appendChild(oElement);
	oElement = gVC.createElement("BLK_CYL");
	root.appendChild(oElement);
	oElement = gVC.createElement("CAT_NM");
	root.appendChild(oElement);
	oElement = gVC.createElement("GROUPS_NM");
	root.appendChild(oElement);
	oElement = gVC.createElement("SUBCAT_ID");
	root.appendChild(oElement);
	oElement = gVC.createElement("SUBCAT_NM");
	root.appendChild(oElement);
	oElement = gVC.createElement("SUBGROUPS_ID");
	root.appendChild(oElement);
	oElement = gVC.createElement("CONDITION");
	root.appendChild(oElement);
	oElement = gVC.createElement("INTERVAL");
	root.appendChild(oElement);
	oElement = gVC.createElement("FLUID_ID");
	root.appendChild(oElement);
	oElement = gVC.createElement("ARTICLE_GUID");
	root.appendChild(oElement);
	oElement = gVC.createElement("ARTICLE_ANCHOR");
	root.appendChild(oElement);
	oElement = gVC.createElement("IMAGE_GUID");
	root.appendChild(oElement);
	oElement = gVC.createElement("SRCHSTR");
	root.appendChild(oElement);
	oElement = gVC.createElement("ARTICLE_HEADING");//TechSpan:Aarti:25-11-2005
	root.appendChild(oElement);//TechSpan:Aarti:25-11-2005
	oElement = gVC.createElement("HISTORY");
	root.appendChild(oElement);
	oElement = gVC.createElement("SESSION_ID");
	root.appendChild(oElement);
	oElement = gVC.createElement("WORKSHEET_DIRTY"); // ODWeb only
	oElement.text = "FALSE";
	root.appendChild(oElement); // ODWeb only
	oElement = gVC.createElement("USER_TYPE"); // ODWeb only
	root.appendChild(oElement); // ODWeb only
	oElement = gVC.createElement("SHOW_ALL"); // ODWeb only
	root.appendChild(oElement); // ODWeb only
	oElement.text = "1";
	oElement = gVC.createElement("ALLOW_AUTOLOGIN"); // ODWeb only
	root.appendChild(oElement); // ODWeb only
	oElement.text = "Default";	
	oElement = gVC.createElement("CLICKED_BREADCRUMB");
	root.appendChild(oElement);
	oElement.text = "";
	
	CreateAddSection();
}

function AppendNodeChildWithRemove(node, nameNode, sValue)
{

	var child = node.selectSingleNode("//" + nameNode);

	if (child != null)
	{
		var parent = child.parentNode;

		if (parent != null)
			parent.removeChild(child);
	}

	AppendNodeChild(node, nameNode, sValue);
}

function SetVehicleConfInTitle(obj)
{

	if (typeof(obj) != "object")
		return;

	var strVehicle = getVar("YEAR") + " "
		+ getVar("MAKE")
		+ " " + getVar("MS_MODEL")
		+ " " + getVar("ENG");

	if (obj.title != "")
		obj.title += " - ";


	obj.title += strVehicle;
}

function AppendNodeChild(node, nameNode, sValue)
{
	if (sValue != null)
	{
		var XmlDoc = new ActiveXObject("Microsoft.XMLDOM");
		var newNode = XmlDoc.createElement(nameNode);
		newNode.text = sValue;
		node.appendChild(newNode);
	}
}

function AppendHeadTrack(XmlDocument, type, withCat)
{
	XmlDocument.loadXML("<TRACK></TRACK>");

	var root = XmlDocument.documentElement;
	AppendNodeChild(root, "WF_TYPE", type);	
	AppendNodeChild(root, "SESSION_ID", getVar("SESSION_ID"));
	AppendNodeChild(root, "VIN", getVar("VEHICLE_VIN"));

	AppendNodeChild(root, "VEHICLE_TYPE_ID", getVar("VEHICLE_TYPE").toUpperCase());

	AppendNodeChild(root, "YEAR", getVar("YEAR"));
	AppendNodeChild(root, "MS_MODEL_ID",getVar("GEN_MODEL_ID"));
		
	if (type != '3')
	{
		AppendNodeChild(root, "SUBCAT_ID", getVar("SUBCAT_ID"));		
	}
	
	return root;
}

function SaveEtimateTrackInfo(isImage)
{
	var XmlDocument = new ActiveXObject("Microsoft.XMLDOM");

	var root = AppendHeadTrack(XmlDocument, 3, false);
	AppendNodeChild(root, "CAT_NM", getVar("CAT_NM"));
	AppendNodeChild(root, "SUBCAT_ID", getVar("SUBGROUPS_ID"));
	AppendNodeChild(root, "IMAGE_GUID", getAddVar("IMAGE_GUID"));
	AppendNodeChild(root, "COMPONENT_L", isImage ? "" : getAddVar("COMPONENT_L"));
	AppendNodeChild(root, "OPERATION_L", isImage ? "" : getAddVar("OPERATION_L"));
	AppendNodeChild(root, "COMPONENT_P", isImage ? "" : getAddVar("COMPONENT_P"));
	AppendNodeChild(root, "PART_NUMBER", isImage ? "" : getAddVar("PART_NUMBER"));
	AppendNodeChild(root, "APPLICATION", isImage ? "" : getAddVar("APPLICATION"));

	SaveTrackInfo(XmlDocument);
}

function SaveTrackInfoArt(withImage, type)
{
	var XmlDocument = new ActiveXObject("Microsoft.XMLDOM");	
	
	if (withImage && bSVGImage)
	{
		var root = AppendHeadTrack(XmlDocument, 4, true);
		type = 4;
	}
	else
	{
		var root = AppendHeadTrack(XmlDocument, type, true);
	}
	
	AppendNodeChild(root, "ARTICLE_GUID", getVar("ARTICLE_GUID"));
	AppendNodeChild(root, "ARTICLE_TITLE", getVar("ARTICLE_TITLE"));
	
	if (type == '1')
	{
		if (getVar("ARTICLE_HEADING") == null)
		{			
			AppendNodeChild(root, "ARTICLE_HEADING", "");
		}
		else
		{
			AppendNodeChild(root, "ARTICLE_HEADING", getVar("ARTICLE_HEADING"));
		}
		setVar("ARTICLE_HEADING","");
	}
	
	if (type != '6')
	{		
		if (getVar("SRCHSTR") == null)
		{			
			AppendNodeChild(root, "SRCHSTR", "");
		}
		else
		{
			AppendNodeChild(root, "SRCHSTR", getVar("SRCHSTR"));
		}
		
	}	
		
	if (type == '1' || type == '4')
	{
		if (withImage)	
		{
			AppendNodeChild(root, "IMAGE_CAPTION", getVar("IMAGE_CAPTION"));
			AppendNodeChild(root, "IMAGE_GUID", getVar("IMAGE_GUID"));	
		}	
		else
		{
			AppendNodeChild(root, "IMAGE_CAPTION", "");
			AppendNodeChild(root, "IMAGE_GUID", "");	
		}	
	}
		
	SaveTrackInfo(XmlDocument);
}

function SaveMaintInfoTrack()
{
	var XmlDocument = new ActiveXObject("Microsoft.XMLDOM");

	var root = AppendHeadTrack(XmlDocument, 4, false);
	var isFluid = getAddVar("MAINT_MODE") == "" ? true : false;
	AppendNodeChild(root, "FLUID_NAME", getAddVar("FLUID_NAME"));
	AppendNodeChild(root, "MAINT_MODE", getAddVar("MAINT_MODE"));
	AppendNodeChild(root, "MILEAGE", isFluid ? "" : getVar("MILEAGE"));
    AppendNodeChild(root, "APPLICATION", getAddVar("APPLICATION"));
	SaveTrackInfo(XmlDocument);
}

var trackHistory = null;
var XMLToSend = null;
var sendSuccesfully = true;

function SaveHistoryTrack()
{
	var strGuidArticle = getVar("ARTICLE_GUID");

	if (getAddVar("SAVED_ARTICLE_GUID") == strGuidArticle || getVar("MOD") == "RCL")
		return;
	else
		setAddVar("SAVED_ARTICLE_GUID", strGuidArticle);

	var objXMLDOM = new ActiveXObject("Microsoft.XMLDOM");
	var objElem = objXMLDOM.createElement("HISTORY");
    objXMLDOM.appendChild(objElem);
    var objRoot = objXMLDOM.documentElement;

	var objElem = objXMLDOM.createElement("SESSION");
	objRoot.appendChild(objElem);
	objElem.text = getVar("SESSION_ID");

	var nodeTrackReal = gVC.selectSingleNode("//VehicleContext");
	var nodeTrack = nodeTrackReal.cloneNode("TRUE");

	var dirty = nodeTrack.selectSingleNode("//WORKSHEET_DIRTY");

	if (dirty != null)
		dirty.text = "FALSE";

	if (nodeTrack != null)
	{
		var nodeWF = nodeTrack.selectSingleNode("//WF_TYPE");

		if (nodeWF != null)
		{
			var parent = nodeWF.parentNode;
			parent.removeChild(nodeWF);
		}

		AppendNodeChild(nodeTrack, "WF_TYPE", getAddVar("WF_TYPE"));
		objRoot.appendChild(nodeTrack);
		
		//TechSpan : 13-10-2005 : Aarti/Vikas 
		var nodeVIN = nodeTrack.selectSingleNode("//VEHICLE_VIN");

		if (nodeVIN != null)
		{
			var parent = nodeVIN.parentNode;
			parent.removeChild(nodeVIN);
		}		
		AppendNodeChild(nodeTrack, "VEHICLE_VIN", getVar("VEHICLE_VIN"));
		objRoot.appendChild(nodeTrack);												
		//TechSpan : 13-10-2005 : Aarti/Vikas 
		
		
		//TechSpan : 07-11-2005 : Vikas 
		var nodeVEHCILE_TYPE = nodeTrack.selectSingleNode("//VEHICLE_TYPE");

		if (nodeVEHCILE_TYPE != null)
		{
			var parent = nodeVEHCILE_TYPE.parentNode;
			parent.removeChild(nodeVEHCILE_TYPE);
		}		
		AppendNodeChild(nodeTrack, "VEHICLE_TYPE", getVar("VEHICLE_TYPE"));
		objRoot.appendChild(nodeTrack);												
		//TechSpan : 07-11-2005 : Vikas 
		
		//TechSpan : 07-11-2005 : Vikas 
		var nodeMAKE_ID = nodeTrack.selectSingleNode("//MAKE_ID");

		if (nodeMAKE_ID != null)
		{
			var parent = nodeMAKE_ID.parentNode;
			parent.removeChild(nodeMAKE_ID);
		}		
		AppendNodeChild(nodeTrack, "MAKE_ID", getVar("MAKE_ID"));
		objRoot.appendChild(nodeTrack);												
		
		var nodeMODEL_ID = nodeTrack.selectSingleNode("//MODEL_ID");

		if (nodeMODEL_ID != null)
		{
			var parent = nodeMODEL_ID.parentNode;
			parent.removeChild(nodeMODEL_ID);
		}		
		AppendNodeChild(nodeTrack, "MODEL_ID", getVar("MODEL_ID"));
		objRoot.appendChild(nodeTrack);	
		
		var nodeYEAR_ID = nodeTrack.selectSingleNode("//YEAR_ID");

		if (nodeYEAR_ID != null)
		{
			var parent = nodeYEAR_ID.parentNode;
			parent.removeChild(nodeYEAR_ID);
		}		
		AppendNodeChild(nodeTrack, "YEAR_ID", getVar("YEAR_ID"));
		objRoot.appendChild(nodeTrack);											
		//TechSpan : 07-11-2005 : Vikas 
		
		SendHistoryTrack(objXMLDOM);
	}
}

var sendingXML = null;

function SendHistoryTrack(XmlDocument)
{
	if (sendSuccesfully)
	{
		trackHistory = new ActiveXObject("microsoft.xmlhttp");
		trackHistory.open("POST", "/TT/common/asp/historysaver.asp", true);
		isAlreadySaved = false;
		trackHistory.onreadystatechange = HistoryTrackSaved;
		trackHistory.send(XmlDocument);
		XMLToSend = null;
		sendSuccesfully = false;
		sendingXML = XmlDocument.cloneNode(true);
	}
}

function RestoreHistoryRecord(ID)
{
	var filterTemplate = "//VehicleContext[@ID = '&ID']";
    var filter = filterTemplate.replace(/&ID/, ID);

    var oNode = null;

    if (gHistorySection != null)
		oNode = gHistorySection.selectSingleNode(filter);

    checkWorksheet();

    resetWorksheet();

    if (oNode != null)
    {
		var sessionID = getVar("SESSION_ID");
		var allow_auto = getVar("ALLOW_AUTOLOGIN");
		var show_all = getVar("SHOW_ALL");
		var theme_path = getVar("THEME_PATH");
		//var subcat_name = getVar("SUBCAT_NM");
		
		//Techspan Vikrant 13 Oct 2005
		/* this is becasue we need to preserve the corporate brand logo path as we are preserving the session id
		/ after we load the gVC again for the history record
		*/
		var imgCorporate = getVar("imgCorporate");
		
		//Techspan Vikrant 13 Oct 2005

		gVC.loadXML(oNode.xml);
		
		setVar("SESSION_ID", sessionID);
		setVar("ALLOW_AUTOLOGIN", allow_auto);
		setVar("SHOW_ALL", show_all);
		setVar("THEME_PATH", theme_path);
		//setVar("SUBCAT_NM", subcat_name);
		
		//Techspan Vikrant 13 Oct 2005
		setVar("imgCorporate", imgCorporate);
		//Techspan Vikrant 13 Oct 2005

		var article_guid = oNode.selectSingleNode("ARTICLE_GUID");

		if (article_guid != null)
			setAddVar("CURRENT_ART_GUID", article_guid.text);
		else
			setAddVar("CURRENT_ART_GUID", "");

		setVar("HISTORY", "TRUE");		
		//TechSpan:WF Event:Reapir History: 14-11-2005		
		setVar("WF_TYPE", 5);
		if (fraTTBar != null)
		{
			fraTTBar.onClickRepair();
			setAddVar("RESTORE_HISTORY", "TRUE");
		}
	}
    else
    {
		alert("Can not restore this record.");
    }
}


function AddHistoryRecord(ID, dateSave)
{
	var root = sendingXML.selectSingleNode("//VehicleContext");

	if (root != null)
	{
		root.setAttribute("ID", ID);
		AppendNodeChildWithRemove(root, "DATE_SAVE", getDateString(dateSave));
	}

	if (gHistorySection != null)
	{
		var historyRecords = gHistorySection.documentElement;

		if (historyRecords != null)
		{
			historyRecords.appendChild(root);
		}
	}
}

function RemoveHistoryRecordDOM(ID)
{
	var root = gHistorySection.documentElement;
	var filterTemplate = "//VehicleContext[@ID = '&ID']";
	var filter = filterTemplate.replace(/&ID/, ID);

	var nodeToRemove = root.selectSingleNode(filter);

	if (nodeToRemove != null)
	{
		root = nodeToRemove.parentNode;

		if (root != null)
			root.removeChild(nodeToRemove);
	}
}

function DeleteHistoryRecords(strParam)
{
	var str = new String(strParam);
	var arrDeleteIds = str.split(",");

	for (i = 0; i < arrDeleteIds.length; i ++)
	{
		RemoveHistoryRecordDOM(arrDeleteIds[i]);
	}
}

var isAlreadySaved = false;

function HistoryTrackSaved()
{
	if (trackHistory.readyState == 4 && !isAlreadySaved)
	{
		isAlreadySaved = true;
		sendSuccesfully = true;
		var root = trackHistory.responseXML.documentElement;

		var nodeResult = null;

		if (root != null)
			nodeResult = root.selectSingleNode("HISTORY_ID");

		var dateSave = 	root.selectSingleNode("DATE_SAVE");

		var dt = new Date();

		if (dateSave != null)
		{
			dt = new Date(eval(dateSave.text));
		}

		if (nodeResult != null && nodeResult.text != "-1")
			AddHistoryRecord(nodeResult.text, dt);

		nodeResult = null;

		if (root != null)
			nodeResult = root.selectSingleNode("DELETED_IDS");

		if (nodeResult != null && nodeResult.text != "-1")
			DeleteHistoryRecords(nodeResult.text);
	}
}

function SaveTSBTrackInfo(withImage)
{
	SaveTrackInfoArt(withImage, getAddVar("WF_TYPE"));
	SaveHistoryTrack();
}

function SaveArticleTrackInfo(withImage)
{
	
	if (getAddVar("EXTERNAL_LINK") ==  "TRUE" && getAddVar("WF_TYPE") == '6')
	{
		SaveTrackInfoArt(withImage,"6");
	}
	else if (getVar("WF_TYPE") == "5")	
	{		
		SaveTrackInfoArt(withImage,"5");
	}
	else	
	{
		SaveTrackInfoArt(withImage,"1");
	}		
	setVar("WF_TYPE", 1);	
	
	if (getAddVar("WF_TYPE") != '6')
		SaveHistoryTrack();
}

function SaveTrackInfo(XmlDocument)
{
	var xmlRequest = new ActiveXObject("microsoft.xmlhttp");
	xmlRequest.open("POST", "/TT/common/asp/tracksaver.asp", true);
	xmlRequest.send(XmlDocument);
}

function LoadHistoryRecords(HistoryRecords)
{
	var loadedHistory = HistoryRecords.selectSingleNode("//HISTORY_RECORDS");
	var oldHistory = gHistorySection.selectSingleNode("//HISTORY_RECORDS");

	if (loadedHistory != null && gHistorySection != null)
	{
		gHistorySection.loadXML(loadedHistory.xml);
		var nodes = gHistorySection.selectNodes( "//VehicleContext" ) ;
		CreateRepairTSBSortDates( nodes ) ;
	}
}

function setVar(varFilter, value)
{
	var nameVar = varFilter;

	varFilter = "/VehicleContext/" + varFilter;
	var node = gVC.selectSingleNode(varFilter);

	if (node == null)
	{
		try
		{
			var root = gVC.selectSingleNode("//VehicleContext");
			node = gVC.createElement(nameVar);
			root.appendChild(node);
		}
		catch(e)
		{
			//alert(" ERROR SET VAR " + e.description);
		}
	}

	return node.text = value;
}

function getVar(varFilter)
{
	varFilter = "/VehicleContext/" + varFilter;
	var node = gVC.selectSingleNode(varFilter);
	
	return node != null ? node.text : null;
}

/******************************** User Settings Functions *******************************/

function GetUserSettingsNode()
{
	var sid = getVar("SESSION_ID");
	if (!isGUID(sid))
		return null;

	var url = "/" + strRootDir + "/usersettings/getUserSettings.asp?USER_SESSION_ID=" + sid;
	var oNode = new ActiveXObject("Microsoft.XMLDOM");
   	oNode.async = false;
   	oNode.load(url);
   	
	if (isValid(oNode))
	{
		return oNode;
	}
	else
	{
		return null;
	}
}

function ResetUserSettingsNode()
{
	//update gUserSettings
	var oUserSettingsNode = GetUserSettingsNode();
	if (!oUserSettingsNode)
		return;

	var oClonedUserSettingsNode = oUserSettingsNode.documentElement.cloneNode(true);
	if (gUserSettings.documentElement) //replace
		oClonedUserSettingsNode = gUserSettings.replaceChild(oClonedUserSettingsNode, gUserSettings.documentElement);
	else //append
		oClonedUserSettingsNode = gUserSettings.appendChild(oClonedUserSettingsNode);

	//update worksheet
	if ((typeof(fraMain) == "object") && (typeof(fraMain.fraWorksheet) == "object"))
	{
		if (typeof(fraMain.fraWorksheet.updateUserSettings) == "function")
		{
			fraMain.fraWorksheet.updateUserSettings();
		}

	}
}

/******************************** Graphics Functions *******************************/

function loadSecureTIFF(strTIFFGUID, strModule, bViewSvg )
{
	if (strModule == 'REPTIFF')
	{
		strModule = "TTREPTIFF";
	}	
	
	bSVGImage = bViewSvg;//TechSpan: SVG Event: 16-11-2005
	
	if (isReleaseVer())
	{
		//-----------------------------------------------|
		// set IMAGE_GUID, MOD and MODULE_ID gVC members |
		//-----------------------------------------------|
		setVar("IMAGE_GUID", strTIFFGUID);
		setVar("MOD", strModule);
		setVar("VIEW_SVG", bViewSvg);
		
		var PrintSvgBwNode = top.gUserSettings.selectSingleNode("//INFO_MACHINE_SETTINGS[@MACHINE_WD_PRINT_OPT = '1']");
		setVar("PRINT_BW", PrintSvgBwNode ? "1" : "0");

		var nModID;
		if (strModule.toUpperCase() == "TTREPTIFF")
			nModID = 1;
		else if (strModule.toUpperCase() == "PLTIFF")
			nModID = 3;
		else
		{
			alert("Unable to load figure: Invalid module was specified.");
			return;
		}
		setVar("MODULE_ID", nModID);

		// Use loader.htm to securely load the TIFF in an external window
		if( bViewSvg == 1 )
		{
			window.open("/" + strRootDir + "/common/html/loadframe.htm", "winFigDisplay",
				"height=520,width=720,location=no,resizable=yes,scrollbars=yes,status=yes");
				
		}
		else
		{
			var wnd = window.open("/" + strRootDir + "/common/html/loadframe.htm", "winFigDisplay",
				"height=520,width=720,location=no,resizable=yes,scrollbars=yes,status=yes");
		}
	}
	else
	{
		var strErr = "Unable to load figure: ";
		var strURL = "//DevSQL/ODWebSecureData/";
		if (strModule.toUpperCase() == "TTREPTIFF")
		{
			strURL += "ttreptiff";
			var nLevels = 3;
		}
		else if (strModule.toUpperCase() == "PLTIFF")
		{
			strURL += "pltiff";
			var nLevels = 2;
		}
		else
		{
			alert(strErr + "Invalid module was specified.");
			return;
		}

		var strTemp = getMultiLevelWebPath(strTIFFGUID, nLevels);
		if (strTemp == "")
		{
			alert(strErr + "Invalid filename.");
			return;
		}

		strURL += (strTemp + strTIFFGUID + ".odw");	
		window.open(strURL, strTIFFGUID, "height=650,width=720,location=no,resizable=yes,scrollbars=yes,status=yes");
	}
}
	
/******************************** Utility Functions *******************************/

function isGUID(strGUID)
{
	if (typeof(strGUID) != "string")
		strTemp = new String(strGUID).toUpperCase();
	else
		strTemp = strGUID.toUpperCase();

	// Regular Expression searches for hex digits in the following pattern {8-4-4-4-12}
	var re = /^\{[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}\}$/;
	var aryResults = strTemp.match(re);
	if (aryResults)
	{
			return(true);
	}
	return(false);
}

function isValid(oXMLDoc)
{
   var bRet = false;
   if (oXMLDoc)
	if (oXMLDoc.documentElement)
		if (oXMLDoc.documentElement.hasChildNodes())
			bRet = true;

   return (bRet);
}

/************************** Module Loading Functions *******************************/

function notLoaded(fraTarget, strFileName)
{
	if (typeof(fraTarget) != "object")
	{
		alert("The frame being referenced cannot be found");
		return(false);
	}

	var re = new RegExp(strFileName);

	// Back button was hit
	//alert("typeof(fraTarget.location.href)==" + typeof(fraTarget.location.href));
	if (typeof(fraTarget.location.href) != "string")
		return(true);
	//else
		//alert("fraTarget.location.href==" + fraTarget.location.href);

	var loc = fraTarget.location.href;
	return(!loc.match(re));
}

function loadRepair(bExternal)
{
	// switch to repair
	if (notLoaded(fraMain, "repair.htm") | bExternal)
	{
     	var loc = "/" + strRootDir + "/repair/repair.htm";
    	fraMain.location.href = loc;
	}	
}

function loadRepairForce()
{
    var loc = "/" + strRootDir + "/repair/repair.htm";
    fraMain.location.href = loc;
}

function loadEstimating()
{
    // switch to estimating
	if (notLoaded(fraMain, "estimating.htm"))
	{
		var loc = "/" + strRootDir + "/estimating/estimating.htm";
     	fraMain.location.href = loc;
	}
}

function loadTSB(bExternal)
{
    // go to tsb
	if (notLoaded(fraMain, "tsbframe.htm") | bExternal)
	{
     	var loc = "/" + strRootDir + "/tsb/tsbframe.htm";
     	fraMain.location.href = loc;
	}
}

function ResetTSBToggleArea()
{
	fraTTBar.resetTSBToggle();
}

function loadMaintenance(nInterval)
{
	var cond;
	if (nInterval == 0)
	{
		cond = "N";
	}
	else if (nInterval == 1)
	{
		cond = "S";
	}
	else if (nInterval == 2)
	{
		cond = "I";
	}

	var bMustChangeCond = (getVar("CONDITION") != cond);
	if (notLoaded(fraMain, "maintframe.htm") || bMustChangeCond)
	{
		setVar("CONDITION", cond);
		var loc = "/" + strRootDir + "/maintenance/maintframe.htm";
		fraMain.location.href = loc;
	}
}

//----------------------------------------------------------------------+
// loadFluidCapacities is a subitem of maintenance and logically should |
// be included somewhere within Maintenance.  However, integrating it   |
// into maintframe would make any future separation difficult.          |
//----------------------------------------------------------------------+
function loadFluidCapacities(txt)
{
   	// go to fluid capacities
	if (notLoaded(fraMain, "fluidframe.htm"))
	{
     	var loc = "/" + strRootDir + "/fluidcap/fluidframe.htm";
    	fraMain.location.href = loc;
		txt.innerHTML="Show Worksheet";
		txt.title = "Click to show the Worksheet";
	}
}

function loadQuote(bForce)
{
	if (bForce)
	{
		//-------------------------------------------------------------+
		// This block of code executes when Quote View detects that it |
		// was loaded due to the Back button being hit. Blank is put   |
		// into fraMain so that the location check in quoteframe.js::  |
		// loadQuoteInfo will fail & allow quote data to be reloaded   |
		// setTimeout is key because, the location change to blank,htm |
		// will not take effect until this function thread ends.       |
		//-------------------------------------------------------------+
		fraMain.location.href = "/" + strRootDir + "/common/html/blank.htm";
		setTimeout("loadQuote()", 1);
		return;
	}

	if (notLoaded(fraMain, "quoteframe"))
	{
		var loc = "/" + strRootDir + "/quote/quoteframe.htm";
     	fraMain.location.href = loc;
	}
}

function loadNewVehicle()
{
	//LoadVehicleContextfromUserData();
	//alert(getVar("SESSION_ID"));
	if (notLoaded(fraMain, "vehframe.htm"))
	{
		var loc = "/" + strRootDir + "/vehicle/vehframe.asp?sessionid=" + getVar("SESSION_ID");
		fraMain.location.href = loc;
	}
}

function toggleWorksheet(txt)
{
	try
	{
		var fraWorksheet = fraMain.fraWorksheet;
		if (typeof(fraWorksheet.idTotalsBar) != "object")
		{
			alert("The worksheet is not currently displayed.");
			return;
		}

		var wsHeight = fraWorksheet.document.body.clientHeight;
		var totalsBarHeight = fraWorksheet.idTotalsBar.clientHeight + 5;
		var bShow = (wsHeight > totalsBarHeight) ? true : false;
		var oldRows = fraMain.document.all.tags("frameset")[0].rows;
		var aryRows = oldRows.split(",");
		aryRows[0] = "*";
		var newRows;
		if (!bShow)
		{
			aryRows[1] = savedWSHeight;
			txt.innerHTML="Hide Worksheet";
			txt.title = "Click to hide the Worksheet";
		}
		else
		{
			savedWSHeight = wsHeight;
			aryRows[1] = totalsBarHeight;
			txt.innerHTML="Show Worksheet";
			txt.title = "Click to show the Worksheet";
		}

		// Set new frame sizes
		newRows = aryRows[0] + "," + aryRows[1];
		fraMain.document.all.tags("frameset")[0].rows = newRows;
	}
	catch(e)
	{
		alert("Error: unable to open/close worksheet!  Try dragging the worksheet open or closed.");
	}
}

function initCountryCode()
{
	try
	{
		var oShopInfoNode = gUserSettings.selectSingleNode("//INFO_SHOP");
		if ((typeof(oShopInfoNode) != "object") || (oShopInfoNode == null))
			return;

		var strZipCode = oShopInfoNode.getAttribute("SHOP_ZIP");
		if (strZipCode != null)
			setCountryCode(strZipCode, true);
	}
	catch(e)
	{
		return;
	}
}

var oXmlRequest;

//Loading quotes from database.
function LoadQuotesFromDatabase()
{
	if (getAddVar("LOAD_QUOTES_COMPLETE") == "TRUE")
		return;

	var objXMLDOM = new ActiveXObject("Microsoft.XMLDOM");

	var objElem = objXMLDOM.createElement("ESTIMATION");
		objXMLDOM.appendChild(objElem);

	var objRoot = objXMLDOM.documentElement;
    var objElem = objXMLDOM.createElement("SESSION_ID");
    objRoot.appendChild(objElem);

    objElem.text = getVar("SESSION_ID");

    var objElem = objXMLDOM.createElement("SHOW");
    objRoot.appendChild(objElem);

    objElem.text = getVar("SHOW_ALL") == null ? "1" : getVar("SHOW_ALL");

   oXmlRequest = new ActiveXObject("microsoft.xmlhttp");

	oXmlRequest.open("POST", "/" + strRootDir + "/common/asp/quoteloader.asp", true);
	oXmlRequest.onreadystatechange = CompleteLoadingFromDatabase;
	oXmlRequest.send(objXMLDOM);
}

var XmlEstimations;

//If loading quotes is completed then refresh view quotes screen.
function CompleteLoadingFromDatabase()
{
	if (oXmlRequest.readyState == 4 && getAddVar("LOAD_QUOTES_COMPLETE") != "TRUE")
	{
		var estResponseXML = null;
		estResponseXML = oXmlRequest.responseXML;

		XmlEstimations = estResponseXML.selectNodes("//ESTIMATE");

		setAddVar("LOAD_QUOTES_COMPLETE", "TRUE");

		RefreshQuotesWithAdded();
		CreateQuotesSortDates( XmlEstimations );

		if (fraMain.fraEstHistory)
			fraMain.fraEstHistory.Update();
	}
}

//Refresh view quotes screen.
function RefreshQuotesWithAdded()
{
	ClearOMainFrame();

	var oNode = oMAINFRAME.XMLDocument.selectSingleNode("//ESTHIST");

	var listEstimations = XmlEstimations;

	if (listEstimations != null && listEstimations.length != 0)
	{
		for (i = 0; i < listEstimations.length; i ++)
				oNode.appendChild(listEstimations[i]);
	}
}

//Clear OMainFrame object. Remove all quotes.
function ClearOMainFrame()
{
	var oNode = oMAINFRAME.XMLDocument.selectSingleNode("//ESTHIST");

	var numChildren = oNode.childNodes.length;
	var oTemp = null;

	while (oNode.childNodes.length != 0)
	{
			oTemp = oNode.removeChild(oNode.childNodes.item(0));
	}
}

function FrontPad( num, chr, len )
{
	var tmp = num + "" ;
	while( tmp.length < len )
	{
		tmp = chr + tmp ;
	}

	return tmp ;
}

function CreateQuotesSortDates( nodes )
{
	for( var i=0; i<nodes.length; i++ )
	{
		var dtAttr = nodes[i].getAttribute( "LAST_SAVE_DATE" ) ;
		if( dtAttr != null )
		{
			var vc = nodes[i].selectSingleNode("VehicleContext");
			vc.setAttribute( "GREGORIAN_SAVE_DATE", ConvertToGregorian( dtAttr ) ) ;
		}
	}
}

function CreateRepairTSBSortDates( nodes )
{
	for( var i=0; i<nodes.length; i++ )
	{
		var node = nodes[i].selectSingleNode( "DATE_SAVE" ) ;
		if( node != null )
		{
			nodes[i].setAttribute( "GREGORIAN_SAVE_DATE", ConvertToGregorian( node.text ) ) ;
		}
	}
}

function ConvertToGregorian( dateStr )
{
	var dt = new Date( dateStr ) ;

	// Have to use getFullYear to guarantee that we get the four digit year.  FrontPad() will format date digits correctly.
	return dt.getFullYear()  + "/" + FrontPad(dt.getMonth()+1,'0',2) + "/" + FrontPad(dt.getDate(),'0',2) + " " +
	       FrontPad(dt.getHours(),'0',2) + ":" + FrontPad(dt.getMinutes(),'0',2) + ":" + FrontPad(dt.getSeconds(),'0',2) ;
}



 