﻿var PROJECT_bEnableAllOperationsAndAllObjects = false;
var PROJECT_bEnableCompareButtonsInExperimentsListPage = true;
var PROJECT_bEnableCompareButtonsInShearchPage = true;
var PROJECT_bShowConfirmMessageToSeeTheServletErrorHTMLOutput = false;

var PROJECT_sApplicationRootLocation = "/Projects/web/Procognia/";

var PROJECT_sServletLocation = "/Projects/web/Procognia/servlet/ProcogniaServlet/index.asp";
var PROJECT_sServletPicturesLocation = "/Projects/web/Procognia/servlet/ProcogniaServlet/index.asp";

/**************************************************************************
START SERVLET_ACTIONS PAGE Scripts
**************************************************************************/

//project
var PROJECT_ACTION_MaterialsList = "getMaterialList";
var PROJECT_ACTION_ExperimentsList = "getExperimentList";
var PROJECT_ACTION_UsersList = "getUserList";
var PROJECT_ACTION_ReImportKit = "reimport";
var PROJECT_ACTION_Compare = "getCompare";
var PROJECT_ACTION_CompareToStandard = "getCompareToStandard";

//results.html
var RESULTS_ACTION_GetGraphImage = "getGraphImage";

//search.html
var SEARCH_ACTION_GetSearch = "getSearchResults";

//experiments.html
var EXPERIMENTS_ACTION_OpenExperiment = "getExperiment";
var EXPERIMENTS_ACTION_DeleteExperiment = "setFailedStatus";
var EXPERIMENTS_ACTION_NewExperiment = "importKitCreateGMID";
var EXPERIMENTS_ACTION_Search = "getSearchPage";
var EXPERIMENTS_ACTION_CompareExperiments = "compareExperiments";
var EXPERIMENTS_ACTION_GetExperimentProperties = "getExperimentProperties";


//experiment-new.html
var EXPERIMENT_NEW_ACTION_SetExperimentStatus = "updateExperiment";

//paw-message.html
var PAW_ACTION_SetExperimentStatus = "setStatusToBeforeScanner";

//centrifuge-message.html
var CENTRIFUGE_ACTION_SetExperimentStatus = "getScanner";

//scanner.html
var SCANNER_ACTION_SetExperimentStatus = "setStatusToBeforeAnalysis";

//scanner-message.html
var SCANNER_MESSAGE_ACTION_SetExperimentStatus = "getAnalysis";
var SCANNER_MESSAGE_ACTION_GoBack = "getScanner";

//materials.html
var MATERIALS_ACTION_OpenMaterial = "getMaterial";
var MATERIALS_ACTION_DeleteMaterial = "deleteMaterial";

//material-properties.html
var MATERIAL_PROPERTIES_ACTION_OK = "updateMaterial";

//users.html
var USERS_ACTION_OpenUser = "getUser";
var USERS_ACTION_DeleteUser = "removeUser";

//user-properties.html
var USER_PROPERTIES_ACTION_OK = "updateUserProperties";

/**************************************************************************
END SERVLET_ACTIONS Scripts
**************************************************************************/

/**************************************************************************
START XML_MAPPING PAGE Scripts
**************************************************************************/

//project
var PROJECT_PATH_Object_InputXMLDBKey = '<tici.glycodata.common.DBKey/>//';

var PROJECT_PATH_Value_InputXMLDBKey = 'value';
var PAW_PATH_DescriptorID = '<tici.glycodata.common.Descriptor>//<tici.glycodata.common.DBKey obj-name="key"/>//value';
var PAW_PATH_DescriptorName = '<tici.glycodata.common.Descriptor>//<java.lang.String obj-name="name"/>//valueOf';

//results.html
var RESULTS_PATH_Object_Result = '<glycopro.common.ResultsToView>//';
var RESULTS_PATH_Object_UnitList = '<java.util.ArrayList obj-name="interpreterUTDObj">//';

var RESULTS_PATH_Value_UtdLevel = 'utd_level';

var RESULTS_PATH_ExperimentStatus = '<java.lang.String obj-name="qcComments"/>//valueOf';

//results-comparison.html
var RESULTS_COMPARE_PATH_Object_Result = '<procognia.glycopro.jni.CompareTwoExperiments>//';
var RESULTS_COMPARE_PATH_Object_UnitList1 = '<procognia.glycopro.jni.DiffProfilesToView obj-name="m_Profiles">//<procognia.glycopro.jni.LRProfileToView obj-name="mFirstMinusSecond">//<ArrayOf-procognia.glycopro.jni.LRResToView obj-name="m_RepUnitProf">//';
var RESULTS_COMPARE_PATH_Object_UnitList2 = '<procognia.glycopro.jni.DiffProfilesToView obj-name="m_Profiles">//<procognia.glycopro.jni.LRProfileToView obj-name="mSecondMinusFirst">//<ArrayOf-procognia.glycopro.jni.LRResToView obj-name="m_RepUnitProf">//';

var RESULTS_COMPARE_PATH_Name1 = '<java.lang.String obj-name="firstExperiment">//valueOf';
var RESULTS_COMPARE_PATH_Name2 = '<java.lang.String obj-name="secondExperiment">//valueOf';
var RESULTS_COMPARE_PATH_Correlation = '<procognia.glycopro.jni.ComparRes obj-name="m_DisProfile"/>//m_R2';
var RESULTS_COMPARE_PATH_NormalVariance = '<procognia.glycopro.jni.ComparRes obj-name="m_DisProfile"/>//m_NormVar';
var RESULTS_COMPARE_PATH_MaximalDvideviation = '<procognia.glycopro.jni.ComparRes obj-name="m_DisProfile"/>//m_NMaxDev';
var RESULTS_COMPARE_PATH_Unit0 = '<procognia.glycopro.jni.LRResToView m_UnitID="0">//m_Level';
var RESULTS_COMPARE_PATH_Unit1 = '<procognia.glycopro.jni.LRResToView m_UnitID="1">//m_Level';
var RESULTS_COMPARE_PATH_Unit2 = '<procognia.glycopro.jni.LRResToView m_UnitID="2">//m_Level';
var RESULTS_COMPARE_PATH_Unit3 = '<procognia.glycopro.jni.LRResToView m_UnitID="3">//m_Level';
var RESULTS_COMPARE_PATH_Unit4 = '<procognia.glycopro.jni.LRResToView m_UnitID="4">//m_Level';
var RESULTS_COMPARE_PATH_Unit5 = '<procognia.glycopro.jni.LRResToView m_UnitID="5">//m_Level';
var RESULTS_COMPARE_PATH_Unit6 = '<procognia.glycopro.jni.LRResToView m_UnitID="6">//m_Level';
var RESULTS_COMPARE_PATH_Unit7 = '<procognia.glycopro.jni.LRResToView m_UnitID="7">//m_Level';
var RESULTS_COMPARE_PATH_Unit8 = '<procognia.glycopro.jni.LRResToView m_UnitID="8">//m_Level';
var RESULTS_COMPARE_PATH_Unit9 = '<procognia.glycopro.jni.LRResToView m_UnitID="9">//m_Level';
var RESULTS_COMPARE_PATH_Unit10 = '<procognia.glycopro.jni.LRResToView m_UnitID="10">//m_Level';
var RESULTS_COMPARE_PATH_Unit11 = '<procognia.glycopro.jni.LRResToView m_UnitID="11">//m_Level';
var RESULTS_COMPARE_PATH_Unit12 = '<procognia.glycopro.jni.LRResToView m_UnitID="12">//m_Level';
var RESULTS_COMPARE_PATH_Unit13 = '<procognia.glycopro.jni.LRResToView m_UnitID="13">//m_Level';
var RESULTS_COMPARE_PATH_Unit14 = '<procognia.glycopro.jni.LRResToView m_UnitID="14">//m_Level';
var RESULTS_COMPARE_PATH_Unit15 = '<procognia.glycopro.jni.LRResToView m_UnitID="15">//m_Level';
var RESULTS_COMPARE_PATH_Unit16 = '<procognia.glycopro.jni.LRResToView m_UnitID="16">//m_Level';
var RESULTS_COMPARE_PATH_Unit17 = '<procognia.glycopro.jni.LRResToView m_UnitID="17">//m_Level';
var RESULTS_COMPARE_PATH_Unit18 = '<procognia.glycopro.jni.LRResToView m_UnitID="18">//m_Level';
var RESULTS_COMPARE_PATH_Unit19 = '<procognia.glycopro.jni.LRResToView m_UnitID="19">//m_Level';

//search.html
var SEARCH_PATH_Object_Search = '<glycopro.common.SearchCombo>//';
var SEARCH_PATH_Object_TemplatesList = '<java.util.ArrayList obj-name="templateList">//';
var SEARCH_PATH_Object_UsersList = '<java.util.ArrayList obj-name="researcherList">//';
var SEARCH_PATH_Object_ExperimentsList = '<java.util.ArrayList obj-name="experimentList">//';
var SEARCH_PATH_Object_MaterialsList = '<java.util.ArrayList obj-name="sampleNameList">//';
var SEARCH_PATH_Object_SearchCriteria = '<glycopro.common.SearchCriteria>//';
var SEARCH_PATH_Object_SearchAdmin = '<glycopro.common.SearchAdmin obj-name="mAdmin">//';
var SEARCH_PATH_Object_SearchAlgorithmic = '<glycopro.common.SearchAlgorithmic obj-name="mAlgorithm">//';
var SEARCH_PATH_Object_TemplateDBKey = '<tici.glycodata.common.Descriptor obj-name="templateDesc">//<tici.glycodata.common.DBKey obj-name="key"/>//';
var SEARCH_PATH_Object_SearchExperimentsList = '<java.util.ArrayList obj-name="experimentList"/>//';
var SEARCH_PATH_Object_FromDate = '<java.sql.Timestamp obj-name="startDateFrom"/>//';
var SEARCH_PATH_Object_ToDate = '<java.sql.Timestamp obj-name="startDateTo"/>//';
var SEARCH_PATH_Object_SearchUsersList = '<java.util.ArrayList obj-name="userList"/>//';
var SEARCH_PATH_Object_MaterialDBKey = '<tici.glycodata.common.Descriptor obj-name="sampleMaterialDesc">//<tici.glycodata.common.DBKey obj-name="key"/>//';
var SEARCH_PATH_Object_ExperimentDBKey = '<tici.glycodata.common.DBKey obj-name="mGmidExpID"/>//';
var SEARCH_PATH_Object_Name = '<java.lang.String obj-name="name"/>//';
var SEARCH_PATH_Object_DBKey = '<tici.glycodata.common.DBKey obj-name="key"/>//';

var SEARCH_PATH_Value_SearchAlgorithmicUpper = 'mUpperLimit';
var SEARCH_PATH_Value_SearchAlgorithmicLower = 'mLowerLimit';
var SEARCH_PATH_Value_TemplateDBKey = 'value';
var SEARCH_PATH_Value_FromDate = '_.0';
var SEARCH_PATH_Value_ToDate = '_.0';
var SEARCH_PATH_Value_MaterialDBKey = 'value';
var SEARCH_PATH_Value_ExperimentDBKey = 'value';
var SEARCH_PATH_Value_Name = 'valueOf';
var SEARCH_PATH_Value_DBKey = 'value';
var SEARCH_PATH_Value_ListSize = 'size';
var SEARCH_PATH_Value_ListSize2 = '_.0';

var SEARCH_PATH_Name = '<java.lang.String obj-name="name"/>//valueOf';
var SEARCH_PATH_DBKey = '<tici.glycodata.common.DBKey obj-name="key"/>//value';

//experiment-new.html, experiment-properties.html
var EXPERIMENT_NEW_PATH_Object_Experiment = '<tici.glycodata.common.GMIDReaction>//';
var EXPERIMENT_NEW_PATH_Object_SampleMaterialsList = '<java.util.ArrayList>//';
var EXPERIMENT_NEW_PATH_Object_SampleControlMaterialsList = '<java.util.ArrayList>//';
var EXPERIMENT_NEW_PATH_Object_GoalsList = '<java.util.ArrayList>//';
var EXPERIMENT_NEW_PATH_Object_PatentNotebookList = '<java.util.ArrayList>//';
var EXPERIMENT_NEW_PATH_Object_ExperimentName = '<tici.glycodata.common.Descriptor obj-name="GMIDReactionDesc">//<java.lang.String obj-name="name"/>//';
var EXPERIMENT_NEW_PATH_Object_ExperimentNotebookDBKey = '<tici.glycodata.common.Descriptor obj-name="patentNotebookDesc">//<tici.glycodata.common.DBKey obj-name="key"/>//';
var EXPERIMENT_NEW_PATH_Object_ExperimentConcentrationSample = '<tici.glycodata.common.MaterialForUse obj-name="slideSample_S_MFU">//';
var EXPERIMENT_NEW_PATH_Object_ExperimentConcentrationControl = '<tici.glycodata.common.MaterialForUse obj-name="slideSample_C_MFU">//';
var EXPERIMENT_NEW_PATH_Object_ExperimentGoalsDescription = '<java.lang.String obj-name="goalsDescription"/>//';
var EXPERIMENT_NEW_PATH_Object_BatchesList = '<java.util.ArrayList obj-name="batchList">//';
var EXPERIMENT_NEW_PATH_Object_ExperimentCurrentMaterialDBKey = '<tici.glycodata.common.MaterialForUse obj-name="slideSample_S_MFU">//<tici.glycodata.common.Descriptor obj-name="materialDescriptor">//<tici.glycodata.common.DBKey obj-name="key"/>//';
var EXPERIMENT_NEW_PATH_Object_ExperimentCurrentBatchDBKey = '<tici.glycodata.common.MaterialForUse obj-name="slideSample_S_MFU">//<tici.glycodata.common.BatchID obj-name="batchID">//<java.lang.String obj-name="value"/>//';
var EXPERIMENT_NEW_PATH_Object_ExperimentCurrentMaterialControlDBKey = '<tici.glycodata.common.MaterialForUse obj-name="slideSample_C_MFU">//<tici.glycodata.common.Descriptor obj-name="materialDescriptor">//<tici.glycodata.common.DBKey obj-name="key"/>//';
var EXPERIMENT_NEW_PATH_Object_ExperimentCurrentBatchControlDBKey = '<tici.glycodata.common.MaterialForUse obj-name="slideSample_C_MFU">//<tici.glycodata.common.BatchID obj-name="batchID">//<java.lang.String obj-name="value"/>//';
var EXPERIMENT_NEW_PATH_Object_ExperimentCurrentConcentrationSampleDBKey = '<tici.glycodata.common.MaterialForUse obj-name="slideSample_S_MFU">//<tici.glycodata.common.Descriptor obj-name="concentrationUnitsDescriptor">//<tici.glycodata.common.DBKey obj-name="key"/>//';
var EXPERIMENT_NEW_PATH_Object_ExperimentCurrentConcentrationSampleName = '<tici.glycodata.common.MaterialForUse obj-name="slideSample_S_MFU">//<tici.glycodata.common.Descriptor obj-name="concentrationUnitsDescriptor">//<java.lang.String obj-name="name"/>//';
var EXPERIMENT_NEW_PATH_Object_ExperimentCurrentConcentrationControlDBKey = '<tici.glycodata.common.MaterialForUse obj-name="slideSample_C_MFU">//<tici.glycodata.common.Descriptor obj-name="concentrationUnitsDescriptor">//<tici.glycodata.common.DBKey obj-name="key"/>//';
var EXPERIMENT_NEW_PATH_Object_ExperimentCurrentConcentrationControlName = '<tici.glycodata.common.MaterialForUse obj-name="slideSample_C_MFU">//<tici.glycodata.common.Descriptor obj-name="concentrationUnitsDescriptor">//<java.lang.String obj-name="name"/>//';
var EXPERIMENT_NEW_PATH_Object_ExperimentCurrentGoalDBKey = '<tici.glycodata.common.Descriptor obj-name="goalsDescriptor">//<tici.glycodata.common.DBKey obj-name="key"/>//';
var EXPERIMENT_NEW_PATH_Object_ExperimentCurrentGoalName = '<tici.glycodata.common.Descriptor obj-name="goalsDescriptor">//<java.lang.String obj-name="name"/>//';

var EXPERIMENT_NEW_PATH_Value_ExperimentNotebookPage = 'notebookPage';
var EXPERIMENT_NEW_PATH_Value_ExperimentName = 'valueOf';
var EXPERIMENT_NEW_PATH_Value_ExperimentNotebookDBKey = 'value';
var EXPERIMENT_NEW_PATH_Value_ExperimentConcentrationSample = 'concentration';
var EXPERIMENT_NEW_PATH_Value_ExperimentConcentrationControl = 'concentration';
var EXPERIMENT_NEW_PATH_Value_ExperimentGoalsDescription = 'valueOf';
var EXPERIMENT_NEW_PATH_Value_ExperimentCurrentMaterialControlDBKey = 'value';
var EXPERIMENT_NEW_PATH_Value_ExperimentCurrentBatchControlDBKey = 'valueOf';
var EXPERIMENT_NEW_PATH_Value_ExperimentCurrentMaterialDBKey = 'value';
var EXPERIMENT_NEW_PATH_Value_ExperimentCurrentBatchDBKey = 'valueOf';
var EXPERIMENT_NEW_PATH_Value_ExperimentCurrentConcentrationSampleDBKey = 'value';
var EXPERIMENT_NEW_PATH_Value_ExperimentCurrentConcentrationSampleName = 'valueOf';
var EXPERIMENT_NEW_PATH_Value_ExperimentCurrentConcentrationControlDBKey = 'value';
var EXPERIMENT_NEW_PATH_Value_ExperimentCurrentConcentrationControlName = 'valueOf';
var EXPERIMENT_NEW_PATH_Value_ExperimentCurrentGoalDBKey = 'value';
var EXPERIMENT_NEW_PATH_Value_ExperimentCurrentGoalName = 'valueOf';

var EXPERIMENT_NEW_PATH_ExperimentID = '<tici.glycodata.common.Descriptor obj-name="GMIDReactionDesc">//<tici.glycodata.common.DBKey obj-name="key"/>//value';
var EXPERIMENT_NEW_PATH_ExperimentName = '<tici.glycodata.common.Descriptor obj-name="GMIDReactionDesc">//<java.lang.String obj-name="name"/>//valueOf';
var EXPERIMENT_NEW_PATH_ExperimentTemplate = '<java.lang.String obj-name="templateName"/>//valueOf';
var EXPERIMENT_NEW_PATH_ExperimentNotebookDBKey = '<tici.glycodata.common.Descriptor obj-name="patentNotebookDesc">//<tici.glycodata.common.DBKey obj-name="key"/>//value';
var EXPERIMENT_NEW_PATH_ExperimentNotebookName = '<tici.glycodata.common.Descriptor obj-name="patentNotebookDesc">//<java.lang.String obj-name="name"/>//valueOf';
var EXPERIMENT_NEW_PATH_ExperimentConcentrationSample = '<tici.glycodata.common.MaterialForUse obj-name="slideSample_S_MFU">//concentration';
var EXPERIMENT_NEW_PATH_ExperimentConcentrationControl = '<tici.glycodata.common.MaterialForUse obj-name="slideSample_C_MFU">//concentration';
var EXPERIMENT_NEW_PATH_ExperimentGoalsDescription = '<java.lang.String obj-name="goalsDescription"/>//valueOf';
var EXPERIMENT_NEW_PATH_ExperimentCurrentMaterialDBKey = '<tici.glycodata.common.MaterialForUse obj-name="slideSample_S_MFU">//<tici.glycodata.common.Descriptor obj-name="materialDescriptor">//<tici.glycodata.common.DBKey obj-name="key"/>//value';
var EXPERIMENT_NEW_PATH_ExperimentCurrentMaterialName = '<tici.glycodata.common.MaterialForUse obj-name="slideSample_S_MFU">//<tici.glycodata.common.Descriptor obj-name="materialDescriptor">//<java.lang.String obj-name="name"/>//valueOf';
var EXPERIMENT_NEW_PATH_ExperimentCurrentBatchDBKey = '<tici.glycodata.common.MaterialForUse obj-name="slideSample_S_MFU">//<tici.glycodata.common.BatchID obj-name="batchID">//<java.lang.String obj-name="value"/>//valueOf';
var EXPERIMENT_NEW_PATH_ExperimentCurrentMaterialControlDBKey = '<tici.glycodata.common.MaterialForUse obj-name="slideSample_C_MFU">//<tici.glycodata.common.Descriptor obj-name="materialDescriptor">//<tici.glycodata.common.DBKey obj-name="key"/>//value';
var EXPERIMENT_NEW_PATH_ExperimentCurrentMaterialControlName = '<tici.glycodata.common.MaterialForUse obj-name="slideSample_C_MFU">//<tici.glycodata.common.Descriptor obj-name="materialDescriptor">//<java.lang.String obj-name="name"/>//valueOf';
var EXPERIMENT_NEW_PATH_ExperimentCurrentBatchControlDBKey = '<tici.glycodata.common.MaterialForUse obj-name="slideSample_C_MFU">//<tici.glycodata.common.BatchID obj-name="batchID">//<java.lang.String obj-name="value"/>//valueOf';
var EXPERIMENT_NEW_PATH_ExperimentCurrentConcentrationSampleDBKey = '<tici.glycodata.common.MaterialForUse obj-name="slideSample_S_MFU">//<tici.glycodata.common.Descriptor obj-name="concentrationUnitsDescriptor">//<tici.glycodata.common.DBKey obj-name="key"/>//value';
var EXPERIMENT_NEW_PATH_ExperimentCurrentConcentrationSampleName = '<tici.glycodata.common.MaterialForUse obj-name="slideSample_S_MFU">//<tici.glycodata.common.Descriptor obj-name="concentrationUnitsDescriptor">//<java.lang.String obj-name="name">//valueOf';
var EXPERIMENT_NEW_PATH_ExperimentCurrentConcentrationControlDBKey = '<tici.glycodata.common.MaterialForUse obj-name="slideSample_C_MFU">//<tici.glycodata.common.Descriptor obj-name="concentrationUnitsDescriptor">//<tici.glycodata.common.DBKey obj-name="key"/>//value';
var EXPERIMENT_NEW_PATH_ExperimentCurrentConcentrationControlName = '<tici.glycodata.common.MaterialForUse obj-name="slideSample_C_MFU">//<tici.glycodata.common.Descriptor obj-name="concentrationUnitsDescriptor">//<java.lang.String obj-name="name"/>//valueOf';
var EXPERIMENT_NEW_PATH_ExperimentCurrentGoalDBKey = '<tici.glycodata.common.Descriptor obj-name="goalsDescriptor">//<tici.glycodata.common.DBKey obj-name="key"/>//value';
var EXPERIMENT_NEW_PATH_ExperimentCurrentGoalName = '<tici.glycodata.common.Descriptor obj-name="goalsDescriptor">//<java.lang.String obj-name="name"/>//valueOf';
var EXPERIMENT_NEW_PATH_MaterialDBKey = '<tici.glycodata.common.Descriptor obj-name="materialDescriptor">//<tici.glycodata.common.DBKey obj-name="key"/>//value';
var EXPERIMENT_NEW_PATH_MaterialName = '<tici.glycodata.common.Descriptor obj-name="materialDescriptor">//<java.lang.String obj-name="name"/>//valueOf';
var EXPERIMENT_NEW_PATH_BatchDBKey = '<tici.glycodata.common.BatchID obj-name="batchID">//<java.lang.String obj-name="value"/>//valueOf';
var EXPERIMENT_NEW_PATH_MaterialControlDBKey = '<tici.glycodata.common.Descriptor obj-name="materialDescriptor">//<tici.glycodata.common.DBKey obj-name="key"/>//value';
var EXPERIMENT_NEW_PATH_MaterialControlName = '<tici.glycodata.common.Descriptor obj-name="materialDescriptor">//<java.lang.String obj-name="name"/>//valueOf';
var EXPERIMENT_NEW_PATH_BatchControlDBKey = '<tici.glycodata.common.BatchID obj-name="batchID">//<java.lang.String obj-name="value"/>//valueOf';
var EXPERIMENT_NEW_PATH_GoalName = '<java.lang.String obj-name="name"/>//valueOf';
var EXPERIMENT_NEW_PATH_GoalDBKey = '<tici.glycodata.common.DBKey obj-name="key"/>//value';
var EXPERIMENT_NEW_PATH_NotebookName = '<java.lang.String obj-name="name"/>//valueOf';
var EXPERIMENT_NEW_PATH_NotebookDBKey = '<tici.glycodata.common.DBKey obj-name="key"/>//value';

//experiments.html
var EXPERIMENTS_PATH_Object_ExperimentsList = '<java.util.ArrayList>//';
var EXPERIMENTS_PATH_Object_Compare = '<procognia.glycopro.jni.ExperimentsIDToCompare>//';
var EXPERIMENTS_PATH_Object_CompareDBKey1 = '<tici.glycodata.common.DBKey obj-name="m_FstExperiment"/>//';
var EXPERIMENTS_PATH_Object_CompareDBKey2 = '<tici.glycodata.common.DBKey obj-name="m_ScdExperiment"/>//';

var EXPERIMENTS_PATH_Value_CompareInputXMLDBKey1 = 'value';
var EXPERIMENTS_PATH_Value_CompareInputXMLDBKey2 = 'value';

var EXPERIMENTS_PATH_ExperimentID = '<tici.glycodata.common.Descriptor obj-name="GMIDReactionDesc">//<tici.glycodata.common.DBKey obj-name="key"/>//value';
var EXPERIMENTS_PATH_ExperimentName = '<tici.glycodata.common.Descriptor obj-name="GMIDReactionDesc">//<java.lang.String obj-name="name"/>//valueOf';
var EXPERIMENTS_PATH_User = '<tici.glycodata.common.Descriptor obj-name="createdBy">//<java.lang.String obj-name="name"/>//valueOf';
var EXPERIMENTS_PATH_Template = '<java.lang.String obj-name="GMIDTemplateName"/>//valueOf';
var EXPERIMENTS_PATH_MaterialName = '<tici.glycodata.common.Descriptor obj-name="sampleMaterialDesc">//<java.lang.String obj-name="name"/>//valueOf';
var EXPERIMENTS_PATH_Batch = '<tici.glycodata.common.BatchID obj-name="sampleBatchID">//<java.lang.String obj-name="value"/>//valueOf';
var EXPERIMENTS_PATH_Date = '<java.sql.Timestamp obj-name="createdDate"/>//_.0';
var EXPERIMENTS_PATH_Status = '<tici.glycodata.common.Descriptor obj-name="status">//<tici.glycodata.common.DBKey obj-name="key"/>//value';

//paw.html
var PAW_PATH_Object_Experiment = '<tici.glycodata.common.GMIDReaction>//';
var PAW_PATH_Object_SlidesList = '<java.util.ArrayList obj-name="GMIDSlidesList">//';

var PAW_PATH_ExperimentID = '<tici.glycodata.common.Descriptor obj-name="GMIDReactionDesc">//<tici.glycodata.common.DBKey obj-name="key"/>//value';
var PAW_PATH_ExperimentName = '<tici.glycodata.common.Descriptor obj-name="GMIDReactionDesc">//<java.lang.String obj-name="name"/>//valueOf';
var PAW_PATH_SlideID = '<tici.glycodata.common.DBKey obj-name="GMIDSlidesKey"/>//value';
var PAW_PATH_SlidePreTreatmentName = '<tici.glycodata.common.ExportedGMIDSlideMaterial obj-name="exportPart">//<tici.glycodata.common.Descriptor obj-name="pretreatmentDesc">//<java.lang.String obj-name="name"/>//valueOf';
var PAW_PATH_SlideReactionDescName = '<tici.glycodata.common.ExportedGMIDSlideMaterial obj-name="exportPart">//<tici.glycodata.common.Descriptor obj-name="reactionDesc">//<java.lang.String obj-name="name"/>//valueOf';
var PAW_PATH_SlideAgentName = '<tici.glycodata.common.ExportedGMIDSlideMaterial obj-name="exportPart">//<tici.glycodata.common.MaterialForUse obj-name="materialForUse">//<tici.glycodata.common.Descriptor obj-name="materialDescriptor">//<java.lang.String obj-name="name"/>//valueOf';

//materials.html
var MATERIALS_PATH_Object_MaterialsList = '<java.util.ArrayList>//';

var MATERIALS_PATH_Value_Toxic = 'toxic';
var MATERIALS_PATH_Value_NumberOfBatches = 'numberOfBatches';

var MATERIALS_PATH_DBKey = '<tici.glycodata.common.Descriptor obj-name="materialDescriptor">//<tici.glycodata.common.DBKey obj-name="key"/>//value';
var MATERIALS_PATH_MaterialName = '<tici.glycodata.common.Descriptor obj-name="materialDescriptor">//<java.lang.String obj-name="name"/>//valueOf';
var MATERIALS_PATH_Description = '<java.lang.String obj-name="description"/>//valueOf';

//material-properties.html
var MATERIAL_PROPERTIES_PATH_Object_Material = '<tici.glycodata.common.SampleMaterial>//';
var MATERIAL_PROPERTIES_PATH_Object_BatchesList = '<java.util.ArrayList obj-name="batchList">//';
var MATERIAL_PROPERTIES_PATH_Object_MaterialName = '<tici.glycodata.common.Descriptor obj-name="materialDescriptor">//<java.lang.String obj-name="name"/>//';
var MATERIAL_PROPERTIES_PATH_Object_MaterialDescription = '<java.lang.String obj-name="description"/>//';
var MATERIAL_PROPERTIES_PATH_Object_BatchShipmentDate = '<java.sql.Timestamp obj-name="shipmentDate"/>//';
var MATERIAL_PROPERTIES_PATH_Object_BatchExpiryDate = '<java.sql.Timestamp obj-name="expiryDate"/>//';
var MATERIAL_PROPERTIES_PATH_Object_BatchID = '<tici.glycodata.common.BatchID obj-name="batchID">//<java.lang.String obj-name="value"/>//';
var MATERIAL_PROPERTIES_PATH_Object_BatchMaterialDBKey = '<tici.glycodata.common.Descriptor obj-name="materialDescriptor">// <tici.glycodata.common.DBKey obj-name="key"/>//';
var MATERIAL_PROPERTIES_PATH_Object_BatchCatalogNumber = '<java.lang.String obj-name="catalogNumber"/>//';
var MATERIAL_PROPERTIES_PATH_Object_BatchCurrentVolumeUnits = '<tici.glycodata.common.Descriptor obj-name="currentVolumeUnitsDesc">//<tici.glycodata.common.DBKey obj-name="key"/>//';
var MATERIAL_PROPERTIES_PATH_Object_BatchCurrentVolumeUnitsText = '<tici.glycodata.common.Descriptor obj-name="currentVolumeUnitsDesc">//<java.lang.String obj-name="name"/>//';
var MATERIAL_PROPERTIES_PATH_Object_BatchVolumeProducerUnits = '<tici.glycodata.common.Descriptor obj-name="purchasedVolumeUnitsDesc">//<tici.glycodata.common.DBKey obj-name="key"/>//';
var MATERIAL_PROPERTIES_PATH_Object_BatchVolumeProducerUnitsText = '<tici.glycodata.common.Descriptor obj-name="purchasedVolumeUnitsDesc">//<java.lang.String obj-name="name"/>//';
var MATERIAL_PROPERTIES_PATH_Object_BatchComment = '<java.lang.String obj-name="comments"/>//';

var MATERIAL_PROPERTIES_PATH_Value_BatchesListSize = 'size';
var MATERIAL_PROPERTIES_PATH_Value_BatchesListSize2 = '_.0';
var MATERIAL_PROPERTIES_PATH_Value_MaterialToxic = 'toxic';
var MATERIAL_PROPERTIES_PATH_Value_MaterialName = 'valueOf';
var MATERIAL_PROPERTIES_PATH_Value_MaterialDescription = 'valueOf';
var MATERIAL_PROPERTIES_PATH_Value_BatchVolumeProducer = 'purchasedVolume';
var MATERIAL_PROPERTIES_PATH_Value_BatchCurrentVolume = 'currentVolume';
var MATERIAL_PROPERTIES_PATH_Value_BatchShipmentDate = '_.0';
var MATERIAL_PROPERTIES_PATH_Value_BatchExpiryDate = '_.0';
var MATERIAL_PROPERTIES_PATH_Value_BatchID = 'valueOf';
var MATERIAL_PROPERTIES_PATH_Value_BatchMaterialDBKey = 'value';
var MATERIAL_PROPERTIES_PATH_Value_BatchCatalogNumber = 'valueOf';
var MATERIAL_PROPERTIES_PATH_Value_BatchCurrentVolumeUnits = 'value';
var MATERIAL_PROPERTIES_PATH_Value_BatchCurrentVolumeUnitsText = 'valueOf';
var MATERIAL_PROPERTIES_PATH_Value_BatchVolumeProducerUnits = 'value';
var MATERIAL_PROPERTIES_PATH_Value_BatchVolumeProducerUnitsText = 'valueOf';
var MATERIAL_PROPERTIES_PATH_Value_BatchComment = 'valueOf';

var MATERIAL_PROPERTIES_PATH_MaterialName = '<tici.glycodata.common.Descriptor obj-name="materialDescriptor">//<java.lang.String obj-name="name"/>//valueOf';
var MATERIAL_PROPERTIES_PATH_MaterialDBKey = '<tici.glycodata.common.Descriptor obj-name="materialDescriptor">//<tici.glycodata.common.DBKey obj-name="key"/>//value';
var MATERIAL_PROPERTIES_PATH_MaterialDescription = '<java.lang.String obj-name="description"/>//valueOf';
var MATERIAL_PROPERTIES_PATH_BatchShipmentDate = '<java.sql.Timestamp obj-name="shipmentDate"/>//_.0';
var MATERIAL_PROPERTIES_PATH_BatchExpiryDate = '<java.sql.Timestamp obj-name="expiryDate"/>//_.0';
var MATERIAL_PROPERTIES_PATH_BatchID = '<tici.glycodata.common.BatchID obj-name="batchID">//<java.lang.String obj-name="value"/>//valueOf';
var MATERIAL_PROPERTIES_PATH_BatchCatalogNumber = '<java.lang.String obj-name="catalogNumber"/>//valueOf';
var MATERIAL_PROPERTIES_PATH_BatchCurrentVolumeUnits = '<tici.glycodata.common.Descriptor obj-name="currentVolumeUnitsDesc">//<tici.glycodata.common.DBKey obj-name="key"/>//value';
var MATERIAL_PROPERTIES_PATH_BatchCurrentVolumeUnitsText = '<tici.glycodata.common.Descriptor obj-name="currentVolumeUnitsDesc">//<java.lang.String obj-name="name"/>//valueOf';
var MATERIAL_PROPERTIES_PATH_BatchVolumeProducerUnits = '<tici.glycodata.common.Descriptor obj-name="purchasedVolumeUnitsDesc">//<tici.glycodata.common.DBKey obj-name="key"/>//value';
var MATERIAL_PROPERTIES_PATH_BatchVolumeProducerUnitsText = '<tici.glycodata.common.Descriptor obj-name="purchasedVolumeUnitsDesc">//<java.lang.String obj-name="name"/>//valueOf';
var MATERIAL_PROPERTIES_PATH_BatchComment = '<java.lang.String obj-name="comments"/>//valueOf';

//users.html
var USERS_PATH_Object_UsersList = '<java.util.ArrayList>//';

var USERS_PATH_UserID = '<tici.glycodata.common.DBKey obj-name="userID"/>//value';
var USERS_PATH_FirstName = '<java.lang.String obj-name="userFirstName"/>//valueOf';
var USERS_PATH_LastName = '<java.lang.String obj-name="userLastName"/>//valueOf';
var USERS_PATH_Administrator = '<tici.glycodata.common.User>//isSuperUser';
var USERS_PATH_Researcher = '<tici.glycodata.common.User>//analysisPrivilege';
var USERS_PATH_LabTechnician = '<tici.glycodata.common.User>//experimentPrivilege';
var USERS_PATH_Login = '<java.lang.String obj-name="loginName"/>//valueOf';

//user-properties.html
var USER_PROPERTIES_PATH_Object_User = '<tici.glycodata.common.User>//';
var USER_PROPERTIES_PATH_Object_FirstName = '<java.lang.String obj-name="userFirstName"/>//';
var USER_PROPERTIES_PATH_Object_LastName = '<java.lang.String obj-name="userLastName"/>//';
var USER_PROPERTIES_PATH_Object_Password = '<java.lang.String obj-name="password"/>//';
var USER_PROPERTIES_PATH_Object_Login = '<java.lang.String obj-name="loginName"/>//';

var USER_PROPERTIES_PATH_Value_UserAdministrator = 'isSuperUser';
var USER_PROPERTIES_PATH_Value_UserLabTechnician = 'experimentPrivilege';
var USER_PROPERTIES_PATH_Value_UserResearcher = 'analysisPrivilege';
var USER_PROPERTIES_PATH_Value_FirstName = 'valueOf';
var USER_PROPERTIES_PATH_Value_LastName = 'valueOf';
var USER_PROPERTIES_PATH_Value_Login = 'valueOf';
var USER_PROPERTIES_PATH_Value_Password = 'valueOf';

var USER_PROPERTIES_PATH_UserID = '<tici.glycodata.common.DBKey obj-name="userID"/>//value';
var USER_PROPERTIES_PATH_FirstName = '<java.lang.String obj-name="userFirstName"/>//valueOf';
var USER_PROPERTIES_PATH_LastName = '<java.lang.String obj-name="userLastName"/>//valueOf';
var USER_PROPERTIES_PATH_Login = '<java.lang.String obj-name="loginName"/>//valueOf';
var USER_PROPERTIES_PATH_Password = '<java.lang.String obj-name="password"/>//valueOf';

/**************************************************************************
END XML_MAPPING Scripts
**************************************************************************/

/**************************************************************************
START GENERAL Scripts
**************************************************************************/
	
function IsValidString(sString, sChars, bGoodChars)
{
	var iLength;
	
	if(sString == "")
	{
		return "";
	}

	sString = sString.replace(/\s/g, "");

	if(bGoodChars == false)
	{
		iLength = sChars.length;
		
		for(i = 0;i < iLength; i++)
		{
			cChar = sChars.charAt(i);
			
			if (sString.indexOf(cChar,0) != -1)
			{
				return cChar;
			}
		}
	}
	else if(bGoodChars == true)
	{
		iLength = sString.length;
		
		for(i = 0;i < iLength; i++)
		{
			cChar = sString.charAt(i);
			
			if (sChars.indexOf(cChar,0) == -1)
			{
				return cChar;
			}
		}	
	}
	
	return "";
}

function ReverseTable(oTable)
{
	var oCollRows = oTable.rows;	
	var iLength = oCollRows.length;

	for(var i = 0; i < iLength / 2; i++)
	{
		oCollRows(i).swapNode(oCollRows(iLength - i - 1));
	}
}

function ShowAllRows(oCollRows)
{
	var iLen = oCollRows.length;
	
	for(var i = 0; i < iLen; i++)
	{
		ShowObject(oCollRows(i));
	}
}

function IsAnyRowVisible(oCollRows)
{
	var iLen = oCollRows.length;
	
	for(var i = 0; i < iLen; i++)
	{
		if(IsObjectDisplay(oCollRows(i)) == true)
		{
			return true;
		}
	}
	
	return false;	
}

function IsAllRowsVisible(oCollRows)
{
	var iLen = oCollRows.length;
	
	for(var i = 0; i < iLen; i++)
	{
		if(IsObjectDisplay(oCollRows(i)) != true)
		{
			return false;
		}
	}
	
	return true;	
}

function CenterObject(oObj)
{
	var iLeft, iTop;	
	var iWidth = parseInt(oObj.style.width);
	var iHeight = parseInt(oObj.style.height);

	iLeft = (screen.width / 2) - (iWidth / 2);
	iTop = (screen.height / 2) - (iHeight / 2);

	oObj.style.left = iLeft;
	oObj.style.top = iTop;
}

function ViewObject(oObj)
{
	oObj.scrollIntoView(true);
}

function GetTRIndex(oTR)
{
	return oTR.sectionRowIndex;
}

function PrintWindow(oWindow)
{
	if(oWindow == undefined)
	{
		oWindow = window;
	}
	
	oWindow.print();
}

function ClearSelectList(oSelect, iStopAtBOFIndex)
{
	var iArraySize;
	
	if(iStopAtBOFIndex == undefined)
	{
		iStopAtBOFIndex = 0;
	}
	
	iArraySize = oSelect.options.length;
	
	for(var i = iArraySize - 1; i >= iStopAtBOFIndex; i--)
	{
		oSelect.options.remove(i);
	}
}

function GetWindowSearch(sAttribute)
{
	var sSearch = document.location.search;
	var oArray = new Array();
	var oArray2 = new Array();

	sSearch = sSearch.replace("?", "");

	if(sAttribute == undefined)
	{
    	return sSearch;
	}
	else
	{
		oArray = sSearch.split("&");

		for(var i = 0; i < oArray.length; i++)
		{
			oArray2 = oArray[i].split("=");

			if(oArray2[0] == sAttribute)
			{
				return oArray2[1];
			}
		}
	}
	return "";
}

function FormatText(sString)
{
	return ("\"" + sString + "\"");
}

function CancelOperation()
{
	event.returnValue = false;
	event.cancelBubble = true;
	return false;
}

function GoToLocation(sLocation)
{
	window.location.href = sLocation;
}

function IsObjectDisplay(oObj)
{
	if(oObj.style.display == "none")
	{
		return false;
	}
	else if(oObj.style.display == "")
	{
		return true;
	}
}

function HideObject(oObj)
{
	oObj.style.display = "none";
}

function ShowObject(oObj)
{
	oObj.style.display = "";
}

function ReplaceSrc(oImg, sText, sReplace)
{
	var sSrc;

	sSrc = oImg.src;
	sSrc = sSrc.replace(sText, sReplace);
	oImg.src = sSrc;
}

function ReplaceBackground(oTD, sText, sReplace)
{
	var sSrc;
		
	sSrc = oTD.background;
	sSrc = sSrc.replace(sText, sReplace);
	oTD.background = sSrc;
}

function OpenWindow(sURL, iWidth, iHeight, sHTML)
{
	var iLeft, iTop, oWindow, bFullscreen, bHideWindow;	

	if(iWidth == 0 && iHeight == 0)
	{
		bHideWindow = true;
	}
	else
	{
		bHideWindow = false;
	}

	if(bHideWindow == true)
	{
		bFullscreen = 1;
	}
	else
	{
		bFullscreen = 0;
	}
	
	sFeatures = "channelmode=0, directories=0, fullscreen=" + bFullscreen + ", location=0, menubar=0, status=0, titlebar=0, toolbar=0, resizable=0, scrollbars=0";
	
	oWindow = window.open(sURL, "", sFeatures);
	
	if(iWidth == -1 && iHeight == - 1)
	{
		MaximizeWindow(oWindow, true);
	}
	else if(bHideWindow == true)
	{
		HideWindow(oWindow);
	}
	else
	{
		oWindow.resizeTo(iWidth, iHeight);
		CenterWindow(oWindow, iWidth, iHeight);
	}	
	
	if(sHTML != undefined && sHTML != "")
	{
		WriteHtmlToWindow(oWindow, sHTML);
	}
	
	if(bHideWindow == true)
	{
		oWindow.blur();
	}
	else
	{
		oWindow.focus();
	}
	
	return oWindow;
}

function MaximizeWindow(oWindow, bCenterWindow)
{
	var iWidth, iHeight;
	
	if(bCenterWindow == undefined)
	{
		bCenterWindow = true;
	}
	
	iWidth = screen.availWidth;
	iHeight = screen.availHeight;

  //oWindow.resizeTo(iWidth, iHeight);
	
	oWindow.moveTo(0,0);oWindow.resizeTo(screen.availWidth,screen.availHeight);
	
	if(bCenterWindow == true)
	{
		CenterWindow(oWindow, iWidth, iHeight);
	}
}

function CenterWindow(oWindow, iWidth, iHeight)
{
	var iLeft, iTop;

	iLeft = (screen.availWidth / 2) - (iWidth / 2);
	iTop = (screen.availHeight / 2) - (iHeight / 2);	
	
	oWindow.moveTo(iLeft, iTop);
}

function HideWindow(oWindow)
{
	oWindow.moveTo(-10000, -10000);
}

function ShowModalDialog(sUrl, sArguments, iWidth, iHeight)
{
	sFeatures = "unadorned:Yes; status:No; help:No; status:No; dialogWidth:" + iWidth + "px; dialogHeight:" + (iHeight + 20) + "px";	

	if(sUrl == "")
	{
		sUrl = "about:blank";
	}
	
	return(showModalDialog(sUrl, sArguments, sFeatures));
}

function WriteHtmlToWindow(oWindow, sHTML)
{
	oWindow.document.close();
	oWindow.document.write (sHTML);
}

function SetWindowTitle(sTitle)
{
	document.title = sTitle;
}

function GetDialogArguments()
{
	var sArguments = window.dialogArguments;
	
	if(sArguments == undefined)
	{
		sArguments = "";
	}
	
	return sArguments;
}

function GetUserKeystroke()
{
	return event.keyCode;
}

function IsCtrlPressed()
{
	return event.ctrlKey;
}

function IsAltPressed()
{
	return event.altKey;
}

function IsShiftPressed()
{
	return event.shiftKey;
}

function CloseWindowOnEscapeKeyStroke(bEnterToo)
{
	if(bEnterToo == undefined)
	{
		bEnterToo = false;
	}
	
	if(DoActionOnKeyStroke(27, "CloseWindow(window)") == true)
	{
		return true;
	}
	else if(bEnterToo == true)
	{
		if(DoActionOnKeyStroke(13, "CloseWindow(window)") == true)
		{
			return true;
		}
	}
	else
	{
		PROJECT_DisableOperation();
	}
}

function DoActionOnKeyStroke(iKey, sAction)
{
	if(GetUserKeystroke() == iKey)
	{
		if(sAction != undefined)
		{
			eval(sAction);
			return true;
		}
	}
	return false;
}

function CloseWindow(oWindow)
{
	if(oWindow == undefined)
	{
		oWindow = window;
	}
	
	if(oWindow != null)
	{
		oWindow.close();
	}
}

function SetWindowTitle(sTitle)
{
	document.title = sTitle;
}

/**************************************************************************
END GENERAL Scripts
**************************************************************************/

/**************************************************************************
START PROJECT Scripts
**************************************************************************/

var PROJECT_sButtonNormalText = "_n.gif";
var PROJECT_sButtonPressedText = "_p.gif";
var PROJECT_sButtonDisableText = "_d.gif";
var PROJECT_iMoveButtonSize = 1;
var PROJECT_sDateSeperator = "-";//must be '-' or '/' only, to convert back to milliseconds
var PROJECT_sTimeSeperator = ":";
var PROJECT_sPathSeparator = "//";
var PROJECT_sAttributesSeparator = " ";
var PROJECT_sAttributeSeparator = "=";
var PROJECT_sReturnAllChar = "*";
var PROJECT_sPageErrorString = "<XML id=\"XML_ERROR\">";
var PROJECT_sPageErrorString2 = "<XML id=XML_ERROR>";
var PROJECT_iShowInSelfWindow = 1;
var PROJECT_iShowInNewWindow = 2;
var PROJECT_iShowInOpenerWindow = 3;
var PROJECT_sDocumentCookie = "";//must init to ""
var PROJECT_iResultsGridLineHight = 4;
var PROJECT_sResultsGridLineColor = "#A79B47";
var PROJECT_sResultsGridLineOpacityPrecents = 3;
var PROJECT_iImportWindowWidth = 410;
var PROJECT_iImportWindowHeight = 255;
var PROJECT_sWindowsTitle = "U-c Fingerprint";
var PROJECT_sDataListTablesColor2 = "#FAF9F2";
var PROJECT_sDataListTablesColor1 = "#F4F2E1";
var PROJECT_sDataListTablesColor3 = "#E1DED2";
var PROJECT_sBadChar = "╙";//this char never wont be found on any text (used where need to use any char that couldn't be found anywhere)
var PROJECT_iExperimentFailedStatus1 = 6;
var PROJECT_iExperimentFailedStatus2 = 7;
var PROJECT_iExperimentDoneStatus = 5;
var PROJECT_sExperimentStatus_1_Text = "In Process - Before Paw";
var PROJECT_sExperimentStatus_2_Text = "In Process - In Paw";
var PROJECT_sExperimentStatus_3_Text = "In Process - Before Scanner";
var PROJECT_sExperimentStatus_4_Text = "In Process - Before Analysis";
var PROJECT_sExperimentStatus_5_Text = "Done";
var PROJECT_sExperimentStatus_6_Text = "Failed - From analyzer";
var PROJECT_sExperimentStatus_7_Text = "Failed - Manual";
var PROJECT_sValidInput = "אבגדהוזחטיכלמנסעפצקרשתךםןףץabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890-_+()? "

document.onselectstart = PROJECT_DisableOperation;
document.oncontextmenu = PROJECT_DisableOperation;
document.onkeydown = PROJECT_DisableOperation;

window.onerror = PROJECT_ErrorTrap;

SetWindowTitle(PROJECT_sWindowsTitle);

function Project_IsValidString(sString)
{
	return IsValidString(sString, PROJECT_sValidInput, true);
}

function PROJECT_FormatOutputXmlValue(sText)
{
	if(sText == " " || sText == "-1" || sText == -1 | sText == "*" || sText == "~")
	{
		sText = "";
	}
	
	if(sText != "")
	{
		sText = sText.replace(/&amp;/g, "&");
		sText = sText.replace(/&quot;/g, '"');
		sText = sText.replace(/&quot;/g, "'");		
		sText = sText.replace(/&lt;/g, "<");
		sText = sText.replace(/\\u00b5/g, "µ");
	}
	
	return sText;
}

function PROJECT_FormatInputXmlValue(sText, bIsNumeric)
{
	if(bIsNumeric == undefined)
	{
		bIsNumeric = false;
	}

	if(sText == "")
	{
		if(bIsNumeric == true)
		{
			sText = -1;
		}
		else
		{
			sText = " ";
		}
	}
	
	if(bIsNumeric != true && sText != " ")
	{
		//this line must be before ...

		sText = sText.replace(/&/g, "&amp;");
		sText = sText.replace(/"/g, "&quot;");
		sText = sText.replace(/'/g, "&quot;");		
		sText = sText.replace(/</g, "&lt;");
	}
	
	return sText;
}

function PROJECT_IsStatusFaild(sStatus)
{
	if(sStatus == PROJECT_iExperimentFailedStatus1 || sStatus == PROJECT_iExperimentFailedStatus2)
	{
		return true;
	}
	else
	{
		return false;
	}
}

function PROJECT_ErrorTrap(sMsg, sUrl, sLine)
{
	var sErrorMsg = "";//must init to ""
	
	sErrorMsg += "Javascript Error:\n\n"
	sErrorMsg += "Error: " + sMsg + "\n";
	sErrorMsg += "Line: " + sLine + "\n";
	sErrorMsg += "URL: " + sUrl;
	
	PROJECT_AlertMessage(sErrorMsg);
	
	return true;
}

function PROJECT_AlertServletErrorMessage(sErrorMsg)
{
	sErrorMsg += "Servlet Error:\n\n"
	sErrorMsg += "Error Description: " + sErrorMsg;
	
	PROJECT_AlertMessage(sErrorMsg);
}

function PROJECT_AlertMessage(sMessage)
{
	var oMessage = new Message(sMessage, 1);

	PROJECT_ShowMessageDialog(oMessage);
}

function PROJECT_ConfirmMessage(sMessage)
{
	var oMessage = new Message(sMessage, 2);

	return PROJECT_ShowMessageDialog(oMessage);
}

function PROJECT_AbortMessage(sMessage)
{
	var oMessage = new Message(sMessage, 3);

	return PROJECT_ShowMessageDialog(oMessage);
}

function PROJECT_ShowMessageDialog(oMessage)
{
	var vValue;
	
	vValue = ShowModalDialog(PROJECT_sApplicationRootLocation + "message-dialog.html", oMessage, 378, 230);
	
	if(vValue == undefined)
	{
		vValue = false;
	}
	
	return vValue;
}

function PROJECT_SetWindowSearch(oWindow, sText, bReplace)
{
	var sSearch;
	
	if(bReplace == undefined)
	{
		bReplace = true;
	}
	
	if(bReplace == true)
	{
		sSearch = "?" + sText;
	}
	else
	{
		sSearch = oWindow.document.location.search + "&" + sText;
	}
	
	oWindow.document.location.search = sSearch;	
}

function PROJECT_DataListTableFillZebraColors(oTableSelectedRow, oTableSelectedRow2)
{
	var oTable = DataListTable;
	var iTotalRows;
	var oCollRows;
	var oTR;
	var bOrder = 1;//must init to 1
	
	oCollRows = oTable.rows;
	iTotalRows = oCollRows.length;	
	
	for(var i = 1; i <= iTotalRows; i++)
	{
		oTR = oCollRows(i - 1);
		
		if(IsObjectDisplay(oTR) == true)
		{
			if(bOrder > 0)
			{
				oTR.style.background = PROJECT_sDataListTablesColor1;
			}
			else
			{
				oTR.style.background = PROJECT_sDataListTablesColor2;
			}
			
			oTR.NormalColor = oTR.style.background;
			
			bOrder *= -1;
		}		
	}
	
	if(oTableSelectedRow2 == undefined)
	{
		oTableSelectedRow2 = null;
	}
	
	if(oTableSelectedRow != null)
	{
		oTableSelectedRow.style.background = PROJECT_sDataListTablesColor3;
	}
	if(oTableSelectedRow2 != null)
	{
		oTableSelectedRow2.style.background = PROJECT_sDataListTablesColor3;
	}
}

function PROJECT_DataListTableUserKeyPress(oTableSelectedRow, sTableRowClick, sTableRowOpen, sTableRowDelete)
{
	var iKey = GetUserKeystroke();
	var bValidKey;
	var oTable = DataListTable;
	var iTotalRows;
	var oCollRows;	
	var iDirection;
	var oTR = null;//must init to null
	var iStartIndex = -1;
	var iLastIndex;
	var iPageSize;
	var iLoop = 0;	
	
	oCollRows = oTable.rows;
	iTotalRows = oCollRows.length;
	iLastIndex = iTotalRows - 1;
	iPageSize = oTable.ScrollSize * 1;

	//if(iKey == 38 || iKey == 40 || iKey == 35 || iKey == 36 || iKey == 13 || iKey == 46 || iKey == 33 || iKey == 34)//up, down, end, home, enter, delete, pageup, pagedown
	if(iKey == 38 || iKey == 40 || iKey == 35 || iKey == 36 || iKey == 33 || iKey == 34)//up, down, end, home, pageup, pagedown
	{
		bValidKey = true;
	}
	else
	{
		bValidKey = false;
	}

	if(iTotalRows < 0 || bValidKey != true)
	{
		return oTR;
	}
	
	if(sTableRowOpen == undefined)
	{
		sTableRowOpen = "";
	}
	if(sTableRowDelete == undefined)
	{
		sTableRowDelete = "";
	}
	
	if(oTableSelectedRow == null)
	{
		if(iKey == 13 || iKey == 46)
		{
			return oTR;
		}
		else
		{
			if(iKey == 35 || iKey == 38)//end, up
			{
				iStartIndex = iLastIndex;
				iDirection = 2;
			}
			else if(iKey == 36 || iKey == 40)//home, down
			{
				iStartIndex = 0;
				iDirection = 1;
			}
		}
	}
	else if(oTableSelectedRow != null)
	{
		if(iKey == 35 || iKey == 38 || iKey == 33)//end, up, pageup
		{
			iDirection = 2;
		}
		else if(iKey == 36 || iKey == 40 || iKey == 34)//home, down, pagedown
		{
			iDirection = 1;
		}

		if(iKey == 38 || iKey == 40 || iKey == 33 || iKey == 34)//up, down, pageup, pagedown
		{
			iStartIndex = GetTRIndex(oTableSelectedRow);
			
			if(iKey == 38 || iKey == 33)//up, pageup
			{
				iStartIndex--;
			}
			else if(iKey == 40 || iKey == 34)//down, pagedown
			{
				iStartIndex++;
			}
			
			if(iKey == 33 || iKey == 34)//pageup, pagedown
			{
				iLoop = iPageSize - 1;
			}
		}
		else if(iKey == 35)//end
		{
			iStartIndex = iLastIndex;
		}
		else if(iKey == 36)//home
		{
			iStartIndex = 0;
		}
		else if(iKey == 13 && sTableRowOpen != "")//enter
		{
			eval(sTableRowOpen);
		}
		else if(iKey == 46 && sTableRowDelete != "")//delete
		{
			eval(sTableRowDelete);
		}
	}	
	
	if(iStartIndex != -1)
	{
		oTR = PROJECT_GetNextDisplayTR(oCollRows, iStartIndex, iDirection, iLoop);
	
		if(oTR != null)
		{
			eval(sTableRowClick)(oTR);
			ViewObject(oTR)
			CancelOperation();
		}
	}

	return oTR;
}

//iDirection 1 = forward
//iDirection 2 = back
function PROJECT_GetNextDisplayTR(oCollRows, iStartIndex, iDirection, iLoop, bIncludeFail)
{
	var oTR, oReturnTR = null;
	var iTotalRows;
	
	if(bIncludeFail == undefined)
	{
		bIncludeFail = false;
	}
	
	iTotalRows = oCollRows.length;
	
	if(iLoop < 1)
	{	
		if(iDirection == 1)//forward
		{
			for(var i = iStartIndex; i < iTotalRows; i++)
			{
				oTR = oCollRows(i);
				
				if(IsObjectDisplay(oTR) == true && (bIncludeFail == true || (PROJECT_IsStatusFaild(oTR.Status) == false)))
				{
					oReturnTR = oTR;
					break;
				}
			}
		}
		else if(iDirection == 2)//back
		{
			for(var i = iStartIndex; i >= 0; i--)
			{
				oTR = oCollRows(i);
				
				if(IsObjectDisplay(oTR) == true && (bIncludeFail == true || (PROJECT_IsStatusFaild(oTR.Status) == false)))
				{
					oReturnTR = oTR;
					break;
				}
			}
		}
	}
	else
	{
		var j = iLoop;
		
		if(iDirection == 1)//forward
		{
			for(var i = iStartIndex; i < iTotalRows; i++)
			{
				oTR = oCollRows(i);
				
				if(IsObjectDisplay(oTR) == true && (bIncludeFail == true || (PROJECT_IsStatusFaild(oTR.Status) == false)))
				{
					oReturnTR = oTR;
					
					if(j == 0)
					{						
						break;
					}
					else
					{
						j--;
					}
				}
			}
		}
		else if(iDirection == 2)//back
		{
			for(var i = iStartIndex; i >= 0; i--)
			{
				oTR = oCollRows(i);
				
				if(IsObjectDisplay(oTR) == true && (bIncludeFail == true || (PROJECT_IsStatusFaild(oTR.Status) == false)))
				{
					oReturnTR = oTR;
					
					if(j == 0)
					{						
						break;
					}
					else
					{
						j--;
					}
				}
			}
		}	
	}
	
	return oReturnTR;
}

//iDrawOpacityType 0 = none
//iDrawOpacityType 1 = left & right
//iDrawOpacityType 2 = left
//iDrawOpacityType 3 = right
function PROJECT_FillTDWithLine(oTD, iPrecentsStart, iPrecentsEnd, iDrawOpacityType)
{
	var iLineHight = PROJECT_iResultsGridLineHight;
	var sLineColor = PROJECT_sResultsGridLineColor;
	var sLineOpacityPrecents = PROJECT_sResultsGridLineOpacityPrecents;
	var iPrecents = iPrecentsEnd - iPrecentsStart;
	var iRealPrecent = iPrecents / 100;
	var iOpacitySize = iRealPrecent * sLineOpacityPrecents;
	var iLineCenterSize = iRealPrecent * (100 - sLineOpacityPrecents * 2);
	var sLineHTML = "";
	var sLineHTMLStart = "\n\n<span style=\"margin:0;padding:0;font-size:1px;height:" + iLineHight + "px;background-color:" + sLineColor + ";width:";
	var sLineHTMLEnd = "%;\"></span>\n\n";
	var sOpacityLeftHTMLEnd = "%;FILTER:progid:DXImageTransform.Microsoft.Alpha(style=1,opacity=25,finishOpacity=100,startX=50,finishX=100,startY=0,finishY=0);\"></span>";
	var sOpacityRightHTMLEnd = "%;FILTER:progid:DXImageTransform.Microsoft.Alpha(style=1,opacity=100,finishOpacity=25,startX=0,finishX=50,startY=0,finishY=0);\"></span>";
	var sBeforeHTML, sCenterHTML, sAfterHTML;

	if(iPrecentsStart != 0)
	{
		sLineHTML = "<span style=\"font-size:1px;height:" + iLineHight + "px;width:" + iPrecentsStart + "%\"></span>";
	}
	
	if(iDrawOpacityType == undefined)
	{
		iDrawOpacityType = 1;
	}
	
	if(iDrawOpacityType == 0)
	{
		sBeforeHTML = sLineHTMLStart + iOpacitySize + sLineHTMLEnd;
		sAfterHTML = sLineHTMLStart + iOpacitySize + sLineHTMLEnd;
	}
	else if(iDrawOpacityType == 1)
	{
		sBeforeHTML = sLineHTMLStart + iOpacitySize + sOpacityLeftHTMLEnd;
		sAfterHTML = sLineHTMLStart + iOpacitySize + sOpacityRightHTMLEnd;
	}
	else if(iDrawOpacityType == 2)
	{
		sBeforeHTML = sLineHTMLStart + iOpacitySize + sOpacityLeftHTMLEnd;
		sAfterHTML = sLineHTMLStart + iOpacitySize + sLineHTMLEnd;
	}
	else if(iDrawOpacityType == 3)
	{
		sBeforeHTML = sLineHTMLStart + iOpacitySize + sLineHTMLEnd;
		sAfterHTML = sLineHTMLStart + iOpacitySize + sOpacityRightHTMLEnd;
	}
	
	sCenterHTML = sLineHTMLStart + iLineCenterSize + sLineHTMLEnd;
	
	sLineHTML += sBeforeHTML + sCenterHTML + sAfterHTML;	
	
	if(iPrecentsEnd != 100)
	{
		sLineHTML += "<span style=\"font-size:1px;height:" + iLineHight + "px;width:" + (100 - iPrecentsEnd) + "%\"></span>";
	}

	if(oTD != null && oTD != "")
	{
		oTD.style.textAlign = "left";
		oTD.innerHTML = sLineHTML;
	}
		
	return sLineHTML;
}

function PROJECT_GetDateFromDialog(oInput)
{
	var sDate = PROJECT_ShowDateDialog(oInput.value);
	
	if(sDate != "")
	{
		oInput.value = PROJECT_ConvertToDate(sDate);
	}
}

function PROJECT_ShowDateDialog(sDate)
{
	var vValue;

	vValue = ShowModalDialog(PROJECT_sApplicationRootLocation + "date-dialog.html", sDate, 306, 255);

	return vValue.toString();	
}

function PROJECT_SetCookie(sName, sValue)
{
	PROJECT_sDocumentCookie += "[" + sName + "=" + sValue + "];";
}

function PROJECT_GetCookie(sName)
{
	var sValue = "";
	var sCookie;
	
	sCookie = PROJECT_sDocumentCookie;
	sName = "[" + sName + "=";

	StartPos = sCookie.indexOf(sName);

	if(StartPos != -1)
	{
		StartPos += sName.length;
		
		EndPos = sCookie.indexOf("]", StartPos);
		
		if(EndPos != -1)
		{
			sValue = sCookie.substring(StartPos, EndPos);
		}
	}
	return sValue;
}

function PROJECT_EnableButton(oDiv)
{
	var sObjectType = oDiv.ObjectType;//text or circle or image
	var sStatusMode = oDiv.sStatusMode;//normal or disabled or pressed
	var sBackground = oDiv.style.backgroundImage;	
	var sSrc;
	var oImg;
	
	if(sStatusMode == "normal")	
	{
		return;
	}

	oDiv.style.backgroundImage = sBackground.replace(PROJECT_sButtonPressedText, PROJECT_sButtonNormalText);
	oDiv.style.cursor = "hand";

	if(sObjectType == "text" || sObjectType == "circle")
	{
		oDiv.style.color = "black";
	}
	else if(sObjectType == "image")
	{
		oImg = oDiv.childNodes(0);		
		ReplaceSrc(oImg, PROJECT_sButtonDisableText, PROJECT_sButtonPressedText);
		ReplaceSrc(oImg, PROJECT_sButtonPressedText, PROJECT_sButtonNormalText);
		oImg.style.cursor = "hand";
	}
	
	if(sStatusMode == "pressed")
	{
		oDiv.style.paddingTop = parseInt(oDiv.style.paddingTop) - PROJECT_iMoveButtonSize;
		oDiv.style.paddingLeft = parseInt(oDiv.style.paddingLeft) - PROJECT_iMoveButtonSize;		
	}	
		
	oDiv.sStatusMode = "normal";
}

function PROJECT_ActiveButton(oDiv)
{
	var sObjectType = oDiv.ObjectType;//text or circle or image
	var sStatusMode = oDiv.sStatusMode;//normal or disabled or pressed
	var sBackground = oDiv.style.backgroundImage;	
	var sSrc;
	var oImg;
	
	if(sStatusMode == "pressed")	
	{
		return;
	}
	
	oDiv.style.backgroundImage = sBackground.replace(PROJECT_sButtonNormalText, PROJECT_sButtonPressedText);
	oDiv.style.cursor = "hand";
	
	if(sObjectType == "text" || sObjectType == "circle")
	{
		oDiv.style.color = "black";
	}
	else if(sObjectType == "image")
	{
		oImg = oDiv.childNodes(0);
		ReplaceSrc(oImg, PROJECT_sButtonDisableText, PROJECT_sButtonNormalText);
		ReplaceSrc(oImg, PROJECT_sButtonNormalText, PROJECT_sButtonPressedText);
		oImg.style.cursor = "hand";
	}
	
	if(sStatusMode != "pressed")
	{
		oDiv.style.paddingTop = parseInt(oDiv.style.paddingTop) + PROJECT_iMoveButtonSize;
		oDiv.style.paddingLeft = parseInt(oDiv.style.paddingLeft) + PROJECT_iMoveButtonSize;		
	}	
		
	oDiv.sStatusMode = "pressed";
}

function PROJECT_DisableButton(oDiv)
{
	var sObjectType = oDiv.ObjectType;//text or circle or image
	var sStatusMode = oDiv.sStatusMode;//normal or disabled or pressed
	var sBackground = oDiv.style.backgroundImage;
	var sSrc;
	var oImg;
	
	if(PROJECT_bEnableAllOperationsAndAllObjects){return;}
	
	if(sStatusMode == "disabled")	
	{
		return;
	}

	oDiv.style.backgroundImage = sBackground.replace(PROJECT_sButtonPressedText, PROJECT_sButtonNormalText);
	oDiv.style.cursor = "default";
		
	if(sObjectType == "text")
	{
		oDiv.style.color = "#9F8C7F";
	}
	else if(sObjectType == "circle")
	{
		oDiv.style.color = "#6E6236";	
	}
	else if(sObjectType == "image")
	{
		oImg = oDiv.childNodes(0);
		ReplaceSrc(oImg, PROJECT_sButtonPressedText, PROJECT_sButtonNormalText);
		ReplaceSrc(oImg, PROJECT_sButtonNormalText, PROJECT_sButtonDisableText);		
		oImg.style.cursor = "default";
	}
	
	if(sStatusMode == "pressed")
	{
		oDiv.style.paddingTop = parseInt(oDiv.style.paddingTop) - PROJECT_iMoveButtonSize;
		oDiv.style.paddingLeft = parseInt(oDiv.style.paddingLeft) - PROJECT_iMoveButtonSize;		
	}	
		
	oDiv.sStatusMode = "disabled";
}

function PROJECT_IsButtonNotDisabled(oDiv)
{
	var sStatusMode = oDiv.sStatusMode;
	
	if(sStatusMode == "disabled")	
	{
		return false;
	}
	else
	{
		return true;
	}
}

function PROJECT_ButtonClick(oDiv)
{
	var oOperation;
	
	if(oDiv.sStatusMode != "disabled")
	{	
		oOperation = oDiv.DoOnClick;	
		if(oOperation != undefined)
		{
			eval(oOperation)();
		}
	}
}

function PROJECT_ButtonMouseDown(oDiv)
{
	var oOperation;
	
	if(oDiv.sStatusMode != "disabled")
	{	
		oOperation = oDiv.DoOnMouseDown;	
		if(oOperation != undefined)
		{
			eval(oOperation)(oDiv);
		}
	}
}

function PROJECT_ButtonMouseUp(oDiv)
{
	var oOperation;
	
	if(oDiv.sStatusMode != "disabled")
	{	
		oOperation = oDiv.DoOnMouseUp;	
		if(oOperation != undefined)
		{
			eval(oOperation)(oDiv);
		}
	}
}

function PROJECT_SortTable(oTable, oTD)
{
	var iTotalRows;
	var oCollRows;	
	var oCurrentTD, oNextTD;
	var sCurrentText, sNextText;
	var bFlag;
	var iTDindex = oTD.TDIndex * 1;
	var vCompareType = oTD.CompareType * 1;
	var iOrderDirection = oTD.OrderDirection * 1;
	var iLastSortedIndex = oTable.LastSortedIndex * 1;
	var oTR;
	
	oCollRows = oTable.rows;
	iTotalRows = oCollRows.length;
	
	if(iTotalRows < 1)
	{
		return false;
	}

	if(iLastSortedIndex != iTDindex)
	{		
		for(var i = 0, bFlag = true; i < iTotalRows, bFlag == true; i++)
		{
			for(var j = 0, bFlag = false; j < iTotalRows - i - 1; j++)
			{
				oCurrentTD = oCollRows(j).cells(iTDindex).childNodes(0);
				oNextTD = oCollRows(j + 1).cells(iTDindex).childNodes(0);
				
				if(vCompareType == 1)
				{
					sCurrentText = (oCurrentTD.value);
					sNextText = (oNextTD.value);
				}
				else if(vCompareType == 2)
				{
					sCurrentText = oCurrentTD.vDate * 1;
					sNextText = oNextTD.vDate * 1;
				}
				else if(vCompareType == 3)
				{
					sCurrentText = oCurrentTD.vStatus * 1;
					sNextText = oNextTD.vStatus * 1;
				}
				else if(vCompareType == 4)
				{
					sCurrentText = oCurrentTD.vValue * 1;
					sNextText = oNextTD.vValue * 1;
				}
				else if(vCompareType == 5)
				{
					sCurrentText = oCurrentTD.value * 1;
					sNextText = oNextTD.value * 1;
				}
				else if(vCompareType == 6)
				{
					sCurrentText = oCurrentTD.iValue * 1;
					sNextText = oNextTD.iValue * 1;
				}
				
				if(vCompareType == 1)
				{
					if(sCurrentText != "" && sNextText != "")
					{
						if(sCurrentText.charAt(0).toUpperCase() != sNextText.charAt(0).toUpperCase())
						{
							sCurrentText = sCurrentText.toUpperCase();
							sNextText = sNextText.toUpperCase();
						}
					}
					
					if((iOrderDirection == 1 && sCurrentText < sNextText) || (iOrderDirection == -1 && sCurrentText > sNextText))
					{
						oCollRows(j).swapNode(oCollRows(j + 1));
						bFlag = true;
					}
				}
				else
				{
					if((iOrderDirection == 1 && sCurrentText < sNextText) || (iOrderDirection == -1 && sCurrentText > sNextText))
					{
						oCollRows(j).swapNode(oCollRows(j + 1));
						bFlag = true;
					}
				}
			}
		}
	}
	else if(iLastSortedIndex == iTDindex)
	{
		var iLen = Math.floor(iTotalRows / 2) ;

		for(var i = 0; i < iLen; i++)
		{
			oCollRows(i).swapNode(oCollRows(iTotalRows - i - 1));
		}
	}
	
	oTable.LastSortedIndex = iTDindex;
	
	oTD.OrderDirection = iOrderDirection * -1;
	
	return true;
}

function PROJECT_DataListTableTitleActive(oTD)
{
	ReplaceBackground(oTD, PROJECT_sButtonNormalText, PROJECT_sButtonPressedText);
}

function PROJECT_DataListTableTitleNotActive(oTD)
{
	ReplaceBackground(oTD, PROJECT_sButtonPressedText, PROJECT_sButtonNormalText);
}

function PROJECT_DisableOperation()
{
	if(PROJECT_bEnableAllOperationsAndAllObjects){return;}

	if(PROJECT_IsNeedToDisableOperation() == true)
	{
		CancelOperation();
	}
}

function PROJECT_IsNeedToDisableOperation()
{
	var oObj = event.srcElement
	var sTag = oObj.tagName;
	var bIsFormObject;
	var bIsArrows;
	var bIsPageing;

	//all line below must be in their order
	if(GetUserKeystroke() == 27)//cancel
	{
		return false;
	}

	if(IsAltPressed() == true)
	{
		return true;
	}
	
	if(sTag == "INPUT" || sTag == "TEXTAREA" || sTag == "SELECT")
	{
		bIsFormObject = true;
	}
	else
	{
		bIsFormObject = false;
	}
	
	if(GetUserKeystroke() >= 37 || GetUserKeystroke() <= 40)//arrows
	{
		bIsArrows = true;
	}
	else
	{
		bIsArrows = false;
	}
	
	if(GetUserKeystroke() >= 33 || GetUserKeystroke() <= 35)//home, end, page-up, page-down
	{
		bIsPageing = true;
	}
	else
	{
		bIsPageing = false;
	}

	if(bIsFormObject == true)
	{
		if(eval(oObj.disabled) == true || eval(oObj.readOnly == true))//readOnly must be with Upper O
		{
			return true;
		}
	
		if(IsShiftPressed() == true)
		{
			if(bIsArrows == true || bIsPageing == true)
			{
				return false;
			}
			else
			{
				return true;
			}
		}

		if(IsCtrlPressed() == true)
		{
			if(GetUserKeystroke() == 67 || GetUserKeystroke() == 86 || GetUserKeystroke() == 88)//c || v || x
			{
				return false;
			}
			else
			{
				return true;
			}
		}
		else if(IsCtrlPressed() == false)
		{
			return false;
		}
	}
	else if(bIsFormObject == false)
	{
		if(IsShiftPressed() == true || IsCtrlPressed() == true || GetUserKeystroke() == 0 || GetUserKeystroke() == 8)
		{
			return true;
		}
		else
		{
			if(bIsArrows == true)
			{
				return false;
			}
			else
			{
				return true;
			}
		}
	}
}

function PROJECT_ToolbarMaterialsList()
{
	PROJECT_PostServletAction(window, PROJECT_ACTION_MaterialsList);
}

function PROJECT_ToolbarExperimentsList(bShowInOpener)
{
	if(bShowInOpener == undefined)
	{
		bShowInOpener = false;
	}
	
	if(bShowInOpener == false)
	{
		PROJECT_PostServletAction(window, PROJECT_ACTION_ExperimentsList);
	}
	else
	{
		PROJECT_PostServletAction(window.opener.window, PROJECT_ACTION_ExperimentsList);
		CloseWindow(window);
	}
}

function PROJECT_ToolbarUsersList()
{
	PROJECT_PostServletAction(window, PROJECT_ACTION_UsersList);
}

function PROJECT_ToolbarReImportKit()
{
	OpenWindow(PROJECT_sApplicationRootLocation + "import.html?doaction=" + PROJECT_ACTION_ReImportKit, PROJECT_iImportWindowWidth, PROJECT_iImportWindowHeight);
}

/*****************************************
example of using PROJECT_GetElement method:

1: this return the first object that match element name + attributes values, if found, else return null
	
var sPath = "<element_name required_attribute_name1=required_attribute_value1 required_attribute_name2=required_attribute_value2>//";
oObject = PROJECT_GetElement(oXMLObject, sPath);

2: this return the first object that match attributes values only, if found, else return null
var sPath = "<* required_attribute_name1=required_attribute_value1 required_attribute_name2=required_attribute_value2>//<element_name required_attribute_name1=required_attribute_value1 required_attribute_name2=required_attribute_value2>//";
oObject = PROJECT_GetElement(oXMLObject, sPath);

3: this return the attribute value of the attribute name (in the first object found ...) if found, else return empty string ""
var sPath = "<element_name required_attribute_name1=required_attribute_value1 required_attribute_name2=required_attribute_value2>//return_attribute_name";
sString = PROJECT_GetElement(oXMLObject, sPath);

4: this return the attribute value of the attribute name (in the Root object) if found, else return empty string ""
var sPath = "//return_attribute_name";
sString = PROJECT_GetElement(oXMLObject, sPath);

5: this return the attribute value of the attribute name (in the Root object) if found, else return empty string ""
var sPath = "return_attribute_name";
sString = PROJECT_GetElement(oXMLObject, sPath);

A - you can use element_name or '*'
B - spaces and '<' and '>' ,not allowed, if their not required
C - '=' its not valid char in required_attribute_name or in required_attribute_value
D - '//' its not valid string in all cases

*****************************************/
function PROJECT_GetElement(oRootElement, sFindPath)
{
	var oParentElement;
	var sValuePath;
	var iLen, iChildren, iAttributesLength;
	var sPathArray = new Array();
	var sAttributesArray = new Array();
	var sAttribute = new Array();
	var sWantedAttributes = "";//must init to ""
	var sReturnAttribute;
	var sWantedElementPath;
	var sWantedElementName, sCurrentElementName;
	var sCurrentAttribute, sCurrentAttributeName, sCurrentAttributeValue;
	var sObjectAttribute, sObjectAttributeName, sObjectAttributeValue;
	var iStartPos, iEndPos;
	var oParentItem, oCurrentItem;
	var bItemFound;
	var oWantedItem, oFoundAttributes;
	
	oParentElement = oRootElement;
	
	sValuePath = sFindPath;
	sValuePath = sValuePath.replace(/\"/g, "");
	sValuePath = sValuePath.replace(/\/\>/g, ">");

	iLen = oParentElement.childNodes.length;	
	if(iLen < 1){return "";};

	sPathArray = sValuePath.split(PROJECT_sPathSeparator);
	
	iLen = sPathArray.length;	
	if(iLen < 1){return "";};

	iLen--;	

	for(var i = 0; i <= iLen; i++)
	{
		iChildren = oParentElement.childNodes.length;		
		if(iChildren < 1)
		{
			break;
		}

		sWantedElementPath = sPathArray[i];
		
		iStartPos = sWantedElementPath.indexOf("<", 0) + 1;
		iEndPos = sWantedElementPath.indexOf(" ", iStartPos);
		if(iEndPos == -1)	
		{
			iEndPos = sWantedElementPath.indexOf(">", iStartPos);
		}
		sWantedElementName = sWantedElementPath.slice(iStartPos, iEndPos);

		if(sWantedElementPath.charAt(iEndPos) != ">")
		{
			iStartPos = iEndPos + 1;
			iEndPos = sWantedElementPath.indexOf(">", iStartPos);
			sWantedAttributes = sWantedElementPath.slice(iStartPos, iEndPos);
		}

		if(sWantedAttributes.length > 0)
		{
			sAttributesArray = sWantedAttributes.split(PROJECT_sAttributesSeparator);
		}		
		iAttributesLength = sAttributesArray.length;

		for(var j = 0, bItemFound = false; j < iChildren && bItemFound == false; j ++)
		{
			oCurrentItem = oParentElement.childNodes(j);
			sCurrentElementName = oCurrentItem.nodeName;
		
			if(sCurrentElementName == sWantedElementName || sWantedElementName == PROJECT_sReturnAllChar)
			{
				if(iAttributesLength == 0)				
				{					
					bItemFound = true;
				}
				else
				{
					for(var k = 0; k < iAttributesLength; k++)
					{
						sCurrentAttribute = sAttributesArray[k];
						sAttribute = sCurrentAttribute.split(PROJECT_sAttributeSeparator);
						sCurrentAttributeName = sAttribute[0];
						sCurrentAttributeValue = sAttribute[1];
						
						sObjectAttribute = oCurrentItem.attributes.getNamedItem(sCurrentAttributeName);
						
						if(sObjectAttribute == null)
						{
							break;
						}
						
						sObjectAttributeValue = sObjectAttribute.nodeValue;

						if(sObjectAttributeValue != sCurrentAttributeValue)
						{
							break;
						}
					}					
					if(k == iAttributesLength)
					{
						bItemFound = true;
					}
				}
				if(bItemFound == true)
				{
					oParentElement = oCurrentItem;
					break;
				}
			}
		}		
	}
	
	oWantedItem = oParentElement;
	sReturnAttribute = sPathArray[iLen];
	
	if(sReturnAttribute == "")
	{
		if(oWantedItem == oRootElement)
		{
			return null;
		}
		else
		{
			return oWantedItem;
		}
	}
	else
	{
		oFoundAttributes = oWantedItem.attributes.getNamedItem(sReturnAttribute);
		if(oFoundAttributes == null)
		{
			return "";
		}
		else
		{
			return oFoundAttributes.nodeValue;
		}
	}
}

function PROJECT_UpdateElementAttribute(oElement, sAttributeName, sAttributeValue)
{
	var oAttribute;
	
	if(oElement == null)
	{
		return;
	}

	oAttribute = oElement.attributes.getNamedItem(sAttributeName);

	if(oAttribute != null)
	{
		oAttribute.nodeValue = sAttributeValue;
	}
}

function PROJECT_IsHTMLNormalPage(sHTML)
{
	if(sHTML.indexOf(PROJECT_sPageErrorString) == -1 && sHTML.indexOf(PROJECT_sPageErrorString2) == -1)
	{
		return true;
	}
	else
	{
		return false;
	}
}

function PROJECT_ShowErrorDialog(sHTML)
{
	var oWindow;
	var sMsg;
	
	oWindow = window.open (PROJECT_sApplicationRootLocation + "empty.html");
	
	oWindow.blur();
	
	oWindow.moveTo(-10000, -10000);
	
	WriteHtmlToWindow(oWindow, sHTML);
	
	sMsg = oWindow.window.document.all.XML_ERROR.innerHTML;

	CloseWindow(oWindow);

	PROJECT_AlertServletErrorMessage(sMsg);	
}

function PROJECT_PostServletAction(oWindow, sAction)
{
	oWindow.location.href = PROJECT_sServletLocation + "?saction=" + sAction;
}

function PROJECT_PostXML(sAction, oXMLObject)
{
    var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");

    xmlhttp.Open("GET", PROJECT_sServletLocation + "?saction=" + sAction, false);
    xmlhttp.Send(oXMLObject.documentElement.xml);
	
    return (xmlhttp.responseText);
}

//iShowInWindow 1 = self
//iShowInWindow 2 = new window
//iShowInWindow 3 = opener window
//note: error will alway disaply in popup window ...
function PROJECT_ShowServletResultHtml(sReturnedHTML, iShowInWindow, sFunction, iWidth, iHeight, bCloseWindow)
{
	var oWindow = null;
	var bIsNormalPage;
	
	bIsNormalPage = PROJECT_IsHTMLNormalPage(sReturnedHTML);

	if(bIsNormalPage == true)
	{
		if(iShowInWindow == PROJECT_iShowInSelfWindow)
		{
			oWindow = window.self;
		}
		else if(iShowInWindow == PROJECT_iShowInNewWindow)
		{
			oWindow = OpenWindow("", iWidth, iHeight);
		}
		else if(iShowInWindow == PROJECT_iShowInOpenerWindow)
		{
			oWindow = window.opener.window;
	
			if(bCloseWindow == undefined)
			{
				bCloseWindow = true;
			}
			
			if(bCloseWindow == true)
			{
				CloseWindow(window);
			}
		}

		WriteHtmlToWindow(oWindow, sReturnedHTML);

		if(sFunction != "" && sFunction != undefined)
		{	
			oWindow.document.onload = oWindow.eval(sFunction);
		}
		
		oWindow.focus();
	}
	else
	{
		if(PROJECT_bShowConfirmMessageToSeeTheServletErrorHTMLOutput == true) 
		{
			if(PROJECT_ConfirmMessage("Do you want to see the Output HTML?") == true)
			{
				alert(sReturnedHTML)
			}
		}
		
		PROJECT_ShowErrorDialog(sReturnedHTML);
	}
	
	return oWindow;
}

function PROJECT_GetDate()
{
	var oDate = new Date();		
	var sYear = oDate.getUTCFullYear();
	var sMonth = oDate.getUTCMonth();
	var sDate = oDate.getUTCDate();		
	var iMilliseconds = Date.UTC(sYear, sMonth, sDate);
		
	return PROJECT_ConvertToDate(iMilliseconds);
}

function PROJECT_ConvertToDate(iMilliseconds, bIncludedTime)
{
	var oDate;
	var sShowDate;
	var sYear, sMonth, sDate;
	
	if(bIncludedTime == undefined)
	{
		bIncludedTime = false;
	}

	if(isNaN(iMilliseconds) == true || iMilliseconds == "")
	{
		return "";
	}
	else
	{
		oDate = new Date(iMilliseconds * 1);
		
		sYear = oDate.getFullYear();
		sMonth = oDate.getMonth() + 1;
		sDate = oDate.getDate();		
		
		sShowDate = sDate + PROJECT_sDateSeperator + sMonth + PROJECT_sDateSeperator + sYear;

		return sShowDate;
	}
}

function PROJECT_ConvertToMilliseconds(sShowDate)
{
	var oDate;
	var iMilliseconds;
	var sYear, sMonth, sDate;

	if(sShowDate == "")
	{
		return -1;
	}
	else
	{
		oDate = new Array();
		oDate = sShowDate.split(PROJECT_sDateSeperator);
		
		sDate = oDate[0];
		sMonth = oDate[1];
		sYear = oDate[2];
		
		sShowDate = sMonth + PROJECT_sDateSeperator + sDate + PROJECT_sDateSeperator + sYear;		

		oDate = new Date(sShowDate);
		
		sYear = oDate.getUTCFullYear();
		sMonth = oDate.getUTCMonth();
		sDate = oDate.getUTCDate() + 1;	
		
		iMilliseconds = Date.UTC(sYear, sMonth, sDate, 21, 59, 59);
		
		//var x = new Date(iMilliseconds * 1);alert(x);

		return iMilliseconds;
	}
}

/**************************************************************************
END PROJECT Scripts
**************************************************************************/

/**************************************************************************
START SECURITY Scripts
**************************************************************************/

var sPagesActionsListSeperator = "=";

function SECURITY_ReadOutputXML()
{
	var oObject = document.all.USER_AUTH;
	var oArray;
	var iArraySize;
	var oRecord;
	var sActionName, sAuthorized;
	var sText;

	if(oObject == undefined)
	{
		return false;
	}

	oArray = PROJECT_GetElement(oObject, "<java.util.ArrayList>//");		
	iArraySize = oArray.childNodes.length;

	sText = "";
	
	for(var i =0; i < iArraySize; i++)
	{
		oRecord = oArray.childNodes(i);
		
		sActionName = PROJECT_GetElement(oRecord, "<java.lang.String obj-name=actionName>//valueOf");
		sAuthorized = PROJECT_GetElement(oRecord, "//authorized");
		
		if(eval(sAuthorized) != true)
		{
			sAuthorized = 0;
		}
		else
		{
			sAuthorized = 1;
		}

		PROJECT_SetCookie(sActionName, sAuthorized);
	}
	
	return true;
}

function SECURITY_SecureToolbarButtons(arrArray)
{
	var iLen;
	var oTD;
	var sOperationName, sActionName, sAuthorized;
	var arrTemp = new Array(1);
	var bShow;
	
	if(SECURITY_ReadOutputXML() != true)
	{
		return false;
	}
	
	iLen = arrArray.length;
	
	for(var i = 0; i < iLen; i++)
	{
		arrTemp = arrArray[i].split(sPagesActionsListSeperator);		
		sOperationName = arrTemp[0];
		sActionName = arrTemp[1];

		bShow = PROJECT_GetCookie(sActionName);
		
		if(bShow == "")
		{
			bShow = 1;
		}
		else
		{
			bShow = eval(bShow);
		}

		if(bShow != 1)
		{
			oTD = eval("td_" + sOperationName);			
			HideObject(oTD);			
		}
	}
	
	return true;
}

/**************************************************************************
END SECURITY Scripts
**************************************************************************/

/**************************************************************************
START Project Objects
**************************************************************************/

///////////////////////////////////////////////
//START Message Object
///////////////////////////////////////////////

//iType 1 = alert(sMessage) = OK
//iType 2 = confirm(sMessage) = OK Cancel
//iType 3 = confirm(sMessage) = OK Cancel Abort
function Message(sMessage, iType)
{
	if(iType == undefined)
	{
		iType = 1;
	}
	
	this.Type = iType;
	this.Message = sMessage;
	this.Value = null;
}

///////////////////////////////////////////////
//END Message Object
///////////////////////////////////////////////

///////////////////////////////////////////////
//START Batch Object
///////////////////////////////////////////////

function Batch(sBatchID, sCatalogNumber, sShipmentDate, sExpiryDate, sComment, sVolumeProducer, sVolumeProducerUnits, sCurrentVolume, sCurrentVolumeUnits, iIndex, sVolumeProducerUnitsText, sCurrentVolumeUnitsText)
{
	this.BatchID = sBatchID;
	this.CatalogNumber = sCatalogNumber;
	this.ShipmentDate = sShipmentDate;
	this.ExpiryDate = sExpiryDate;
	this.Comment = sComment;
	this.VolumeProducer = sVolumeProducer;
	this.VolumeProducerUnits = sVolumeProducerUnits;
	this.VolumeProducerUnitsText = sVolumeProducerUnitsText;
	this.CurrentVolume = sCurrentVolume;
	this.CurrentVolumeUnits = sCurrentVolumeUnits;
	this.CurrentVolumeUnitsText = sCurrentVolumeUnitsText;
	this.Index = iIndex;
}

function DoCompareBatches(oBatch, bCompareUnitsText)
{
	return Compare2Batches(this, oBatch, bCompareUnitsText);
}

function Compare2Batches(oBatch1, oBatch2, bCompareUnitsText)
{
	if(bCompareUnitsText == undefined)
	{
		bCompareUnitsText = false;
	}

	if(oBatch1.BatchID != oBatch2.BatchID){return false};
	if(oBatch1.CatalogNumber != oBatch2.CatalogNumber){return false};
	if(oBatch1.ShipmentDate != oBatch2.ShipmentDate){return false};
	if(oBatch1.ExpiryDate != oBatch2.ExpiryDate){return false};
	if(oBatch1.Comment != oBatch2.Comment){return false};
	if(oBatch1.VolumeProducer != oBatch2.VolumeProducer){return false};
	if(oBatch1.VolumeProducerUnits != oBatch2.VolumeProducerUnits){return false};
	if(oBatch1.VolumeProducerUnitsText != oBatch2.VolumeProducerUnitsText && bCompareUnitsText == true){return false};
	if(oBatch1.CurrentVolume != oBatch2.CurrentVolume){return false};
	if(oBatch1.CurrentVolumeUnits != oBatch2.CurrentVolumeUnits){return false};
	if(oBatch1.CurrentVolumeUnitsText != oBatch2.CurrentVolumeUnitsText && bCompareUnitsText == true){return false};
	if(oBatch1.Index != oBatch2.Index){return false};
	
	return true;
}

//Batch.CompareWith METHODE
//oBatch.CompareWith(oOtherBatch, bCompareUnitsText)

Batch.prototype.CompareWith = DoCompareBatches

///////////////////////////////////////////////
//END Batch Object
///////////////////////////////////////////////

/**************************************************************************
END Project Objects
**************************************************************************/