/*
 * Variables used for the Public Access XML configuration file.
 */
var publicAccessXmlDoc = null;
var publicAccessXmlDocIsLoaded = false;

/*
 * Load the Public Access XML configuration file into a variable.
 */
if (document.implementation && document.implementation.createDocument) {
  publicAccessXmlDoc = document.implementation.createDocument("", "", null);
	publicAccessXmlDoc.onload = publicAccessXmlDocLoaded;
}	else if (window.ActiveXObject) {
	publicAccessXmlDoc = new ActiveXObject("Microsoft.XMLDOM");
	publicAccessXmlDoc.onreadystatechange = function () {
		if (publicAccessXmlDoc.readyState == 4) {
		  publicAccessXmlDocLoaded();
		}
	};
}

if (publicAccessXmlDoc != null) {
  publicAccessXmlDoc.load("/pa/includes/pa.xml");
}

/*
 * The Public Access XML configuration file has been loaded
 * into the variable.
 */
function publicAccessXmlDocLoaded() {
  publicAccessXmlDocIsLoaded = true;
}

/*
 * Gets the XML element with the supplied name from the Public Access
 * XML configuration file.
 */
function getPublicAccessXmlElementValue(xmlEleName) {
  var result = "";

  if ((xmlEleName != null) && (publicAccessXmlDoc != null) && publicAccessXmlDocIsLoaded) {
    var xmlEleList = publicAccessXmlDoc.documentElement.getElementsByTagName(xmlEleName);

    if ((xmlEleList != null) && (xmlEleList.length > 0) && xmlEleList.item(0).hasChildNodes()
        && (xmlEleList.item(0).firstChild.nodeType == 3)) {
      result = xmlEleList.item(0).firstChild.nodeValue;
    }
  }

  return result;
}

/*
 * Gets the XML element's attribute value with the supplied element name and
 * attribute name from the Public Access XML configuration file.
 */
function getPublicAccessXmlElementAttribute(xmlEleName, attribName) {
  var result = "";

  if ((xmlEleName != null) && (attribName != null) && (publicAccessXmlDoc != null) && publicAccessXmlDocIsLoaded) {
    var xmlEleList = publicAccessXmlDoc.documentElement.getElementsByTagName(xmlEleName);

    if ((xmlEleList != null) && (xmlEleList.length > 0) && (xmlEleList.item(0).attributes != null) &&
        (xmlEleList.item(0).attributes.length > 0)) {
      result = xmlEleList.item(0).attributes.getNamedItem(attribName);

      if (result == null) {
        result = "";
      } else {
        result = result.nodeValue;
      }
    }
  }

  return result;
}

/*
 * SessionObject definition of properties and methods.
 */
function SessionObject() {
	// Current language being used in the application
	var currentLanguage = "";
	this.getCurrentLanguage = function () { return currentLanguage; };
	this.setCurrentLanguage = function (newLanguage) {
	  if (newLanguage != null) {
		  var englishLanguage = getPublicAccessEnglishLanguage();
		  var spanishLanguage = getPublicAccessSpanishLanguage();
		  var frenchLanguage = getPublicAccessFrenchLanguage();
		  var arabicLanguage = getPublicAccessArabicLanguage();

	    if ((newLanguage == englishLanguage) || (newLanguage == spanishLanguage)
	        || (newLanguage == frenchLanguage) || (newLanguage == arabicLanguage)) {
	      currentLanguage = newLanguage;
	    } else {
		    currentLanguage = getPublicAccessDefaultLanguage();
	    }
	  } else {
	    currentLanguage = getPublicAccessDefaultLanguage();
	  }
	};

	this.isCurrentLanguageEnglish = function () { return (currentLanguage == getPublicAccessEnglishLanguage()); };
	this.isCurrentLanguageSpanish = function () { return (currentLanguage == getPublicAccessSpanishLanguage()); };
	this.isCurrentLanguageFrench = function () { return (currentLanguage == getPublicAccessFrenchLanguage()); };
	this.isCurrentLanguageArabic = function () { return (currentLanguage == getPublicAccessArabicLanguage()); };
}

/*
 * Variable used for SessionObject for the user's current session.
 */
var session = new SessionObject();

/*
 * Sets the language for the user's current session.
 */
function setLanguage(newLanguage) {
	if (doesPublicAccessAllowLanguageChanges()) {
	  var previousLanguage = session.getCurrentLanguage();
	  session.setCurrentLanguage(newLanguage);

	  if (previousLanguage != session.getCurrentLanguage()) {
	  	if (top.frames["top-frame"].setLanguage) {
	    	top.frames["top-frame"].setLanguage(session.getCurrentLanguage());
	  	}

	  	if (top.frames["menu-frame"].setLanguage) {
	    	top.frames["menu-frame"].setLanguage(session.getCurrentLanguage());
	  	}

	  	if (top.frames["content-frame"].setLanguage) {
	    	top.frames["content-frame"].setLanguage(session.getCurrentLanguage());
	  	}

	  	if (top.frames["bottom-frame"].setLanguage) {
	    	top.frames["bottom-frame"].setLanguage(session.getCurrentLanguage());
	  	}
	  }
	}
}

/*
 * Initializes the user's current session.
 */
function initializeSession() {
  session.setCurrentLanguage(getPublicAccessDefaultLanguage());
}
