
function loadAjaxPage(siteSection, fragment, queryString)
{
    if( ! queryString || queryString == null)
    {
        queryString = window.location.search.substring(1);
    }
    window.location.replace("/" + siteSection + "/#" + fragment + ((queryString != null && queryString.length > 0) ? "?" + queryString : ""));
}

function writeContentGET(tagId, resourceUrl, preventCache, queryString)
{
    var targetNode = dojo.byId(tagId);

    var contentObj = new Object();
    if(queryString)
    {
        var params = queryString.split('&');
        for(var i = 0; params != null && i < params.length; i++)
        {
            var keyValue = params[i].split('=');
            if(keyValue != null && keyValue.length > 1)
            {
                contentObj[keyValue[0]] = keyValue[1];
            }
        }
    }

    var xhrArgs = { 
                    preventCache: preventCache,
                    url: resourceUrl,
                    content: contentObj,
                    handleAs: "text",
                    load: function(data)
                          {
                              targetNode.innerHTML = data;

                              executeScripts(targetNode);
                          },
                    error: function(error)
                           {
                               targetNode.innerHTML = "An unexpected error occurred: " + error;
                           }
                  };

    dojo.xhrGet(xhrArgs);
}

function writeContentPOST(formId, tagId, resourceUrl, preventCache)
{
    var targetNode = dojo.byId(tagId);

    var xhrArgs = {
                    preventCache: preventCache,
                    url: resourceUrl,
                    form: formId,
                    handleAs: "html",
                    load: function(data, ioArgs)
                          {
                              targetNode.innerHTML = data.body.innerHTML;

                              executeScripts(targetNode);
                          },
                    error: function(error, ioArgs)
                           {
                               targetNode.innerHTML = "An unexpected error occurred: " + error;
                           }
                  };

    dojo.io.iframe.send(xhrArgs);
}

function executeScripts(targetNode)
{
    var scripts = targetNode.getElementsByTagName("script");
    for(var i = 0; i < scripts.length; i++)
    {
        var scriptLines = scripts[i].text.split('\n');
        var scriptToExecute = "";
        for(var j = 0; j < scriptLines.length; j++)
        {
            var scriptLine = scriptLines[j].trim();
            if(scriptLine && scriptLine.length > 0 &&
               scriptLine.indexOf("<!--") < 0 &&
               scriptLine.indexOf("-->") < 0)
            {
                scriptToExecute += '\n' + scriptLine;
            }
        }
        eval(scriptToExecute);
    }
}

function decodeURL(url)
{
    return unescape(url.replace(/\+/g, " "));
}

String.prototype.trim = function()
                        {
                            return this.replace(/^\s*/, "").replace(/\s*$/, "");
                        };

function ajaxSubmitForm(formId, tagId, resourceUrl)
{
    removeFormButtons();
    writeContentPOST(formId, tagId, resourceUrl, true);
}

function ajaxLinkClicked(a)
{
    var href = a.href.replace(window.location.protocol + "//" + window.location.host, "");

    var linkElementsTemp = href.split("/");
    var linkElements = new Array();
    var counter = 0;
    for(var i = 0; i < linkElementsTemp.length; i++)
    {
        if(linkElementsTemp[i] != null && linkElementsTemp[i] != "")
        {
            linkElements[counter++] = linkElementsTemp[i];
        }
    }
    var fragment = linkElements[0];

    for(i = 1; i < linkElements.length; i++)
    {
        var linkElement = linkElements[i];
        fragment += linkElement.substring(0, 1).toUpperCase() + linkElement.substring(1, linkElement.length);
    }
    fragment += "Main.jsp";
    a.href = "/" + linkElements[0] + '/#' + fragment;

    return true;
}

function loadExtraStyleSheet(cssfile)
{
    if( ! document.getElementById)
    {
        return;
    }

    var head = document.getElementsByTagName("head")[0];
    var links = head.getElementsByTagName("link");

    for(var i = 0; i < links.length; i++)
    {
        if(links[i].id == "extracss")
        {
            head.removeChild(links[i]);
        }
    }

    if(cssfile != null)
    {
        var csslink = document.createElement("link");
        csslink.setAttribute("id", "extracss");
        csslink.setAttribute("href", "/css/" + cssfile);
        csslink.setAttribute("rel", "stylesheet");
        csslink.setAttribute("type", "text/css");

        head.appendChild(csslink);
    }
}

function ajaxClicked(siteSection, contentDivId, fragment, styleSheet, skipHistory, preventCache, queryString)
{
    if( ! document.getElementById("dj_history"))
    {
        loadAjaxPage(siteSection, fragment, queryString);
        return false;
    }

    var fragmentQueryString = "";
    var queryStringParam = "";
    if(queryString)
    {
        fragmentQueryString = "?" + queryString;
        queryStringParam = ", '" + queryString + "'";
    }

    if( ! skipHistory)
    {
        dojo.back.addToHistory(
                                  {
                                      back: function()
                                      {
                                          //alert("back: " + fragment);
                                          eval(fragment.replace(/\.jsp/i, "Clicked(true" + queryStringParam + ")"));
                                      },
                                      forward: function()
                                      {
                                          //alert("forward: " + fragment);
                                          eval(fragment.replace(/\.jsp/i, "Clicked(true" + queryStringParam + ")"));
                                      },
                                      changeUrl: fragment + fragmentQueryString
                                  }
                              );
    }

    if(styleSheet != null)
    {
        loadExtraStyleSheet(styleSheet);
    }

    writeContentGET(contentDivId, '/ajax/' + fragment, preventCache, queryString);
    return false;
}

function servicesMenuClicked(fragment, styleSheet, skipHistory)
{
    return ajaxClicked('services', 'services-content', fragment, styleSheet, skipHistory);
}

function servicesMainClicked(skipHistory)
{
    return servicesMenuClicked('servicesMain.jsp', 'services.css', skipHistory);
}

function servicesIamMainClicked(skipHistory)
{
    return servicesMenuClicked('servicesIamMain.jsp', 'menus-services-iam.css', skipHistory);
}

function servicesIamPlanningClicked(skipHistory)
{
    return servicesMenuClicked('servicesIamPlanning.jsp', 'menus-services-iam.css', skipHistory);
}

function servicesIamImplementClicked(skipHistory)
{
    return servicesMenuClicked('servicesIamImplement.jsp', 'menus-services-iam.css', skipHistory);
}

function servicesEcredsMainClicked(skipHistory)
{
    return servicesMenuClicked('servicesEcredsMain.jsp', 'menus-services-ecreds.css', skipHistory);
}

function servicesEcredsHardwareClicked(skipHistory)
{
    return servicesMenuClicked('servicesEcredsHardware.jsp', 'menus-services-ecreds.css', skipHistory);
}

function servicesEcredsSoftwareClicked(skipHistory)
{
    return servicesMenuClicked('servicesEcredsSoftware.jsp', 'menus-services-ecreds.css', skipHistory);
}

function servicesSecurityMainClicked(skipHistory)
{
    return servicesMenuClicked('servicesSecurityMain.jsp', 'menus-services-security.css', skipHistory);
}

function servicesHspd12MainClicked(skipHistory)
{
    return servicesMenuClicked('servicesHspd12Main.jsp', 'menus-services-hspd12.css', skipHistory);
}

function servicesHspd12LPACSIntegrationClicked(skipHistory)
{
    return servicesMenuClicked('servicesHspd12LPACSIntegration.jsp', 'menus-services-hspd12.css', skipHistory);
}

function servicesHspd12OMBComplianceClicked(skipHistory)
{
    return servicesMenuClicked('servicesHspd12OMBCompliance.jsp', 'menus-services-hspd12.css', skipHistory);
}

function servicesHspd12PMOClicked(skipHistory)
{
    return servicesMenuClicked('servicesHspd12PMO.jsp', 'menus-services-hspd12.css', skipHistory);
}

function servicesPkiMainClicked(skipHistory)
{
    return servicesMenuClicked('servicesPkiMain.jsp', 'menus-services-pki.css', skipHistory);
}

function servicesPkiPolicyClicked(skipHistory)
{
    return servicesMenuClicked('servicesPkiPolicy.jsp', 'menus-services-pki.css', skipHistory);
}

function servicesPkiTechClicked(skipHistory)
{
    return servicesMenuClicked('servicesPkiTech.jsp', 'menus-services-pki.css', skipHistory);
}

function servicesTechMainClicked(skipHistory)
{
    return servicesMenuClicked('servicesTechMain.jsp', 'menus-services-tech.css', skipHistory);
}

function servicesIntegrationMainClicked(skipHistory)
{
    return servicesMenuClicked('servicesIntegrationMain.jsp', 'menus-services-integration.css', skipHistory);
}

function servicesPmMainClicked(skipHistory)
{
    return servicesMenuClicked('servicesPmMain.jsp', 'menus-services-pm.css', skipHistory);
}

function servicesPmRiskMgmtClicked(skipHistory)
{
    return servicesMenuClicked('servicesPmRiskMgmt.jsp', 'menus-services-pm.css', skipHistory);
}

function servicesPmWBSClicked(skipHistory)
{
    return servicesMenuClicked('servicesPmWBS.jsp', 'menus-services-pm.css', skipHistory);
}

function servicesPmPCCClicked(skipHistory)
{
    return servicesMenuClicked('servicesPmPCC.jsp', 'menus-services-pm.css', skipHistory);
}

function servicesPmQualityClicked(skipHistory)
{
    return servicesMenuClicked('servicesPmQuality.jsp', 'menus-services-pm.css', skipHistory);
}

function careersMenuClicked(fragment, styleSheet, skipHistory, preventCache)
{
    return ajaxClicked('careers', 'careers-content', fragment, styleSheet, skipHistory, preventCache);
}

function careersMainClicked(skipHistory)
{
    return careersMenuClicked('careersMain.jsp', 'careers.css', skipHistory);
}

function careersWorkenvironmentMainClicked(skipHistory)
{
    return careersMenuClicked('careersWorkenvironmentMain.jsp', 'menus-careers-workenvironment.css', skipHistory);
}

function careersBenefitsMainClicked(skipHistory)
{
    return careersMenuClicked('careersBenefitsMain.jsp', 'menus-careers-benefits.css', skipHistory);
}

function careersOpeningsMainClicked(skipHistory)
{
    return careersMenuClicked('careersOpeningsMain.jsp', 'menus-careers-openings.css', skipHistory, true);
}

function careersOpeningsPositionDetailsClicked(skipHistory, queryString)
{
    return ajaxClicked('careers', 'careers-content', 'careersOpeningsPositionDetails.jsp', 'menus-careers-openings.css', skipHistory, true, queryString);
}

function careersOpeningsSubmitResumeClicked(skipHistory)
{
    return careersMenuClicked('careersOpeningsSubmitResume.jsp', 'menus-careers-openings.css', skipHistory, true);
}

function newsMenuClicked(fragment, styleSheet, skipHistory)
{
    return ajaxClicked('news', 'news-content', fragment, styleSheet, skipHistory);
}

function newsMainClicked(skipHistory)
{
    return newsMenuClicked('newsMain.jsp', 'news.css', skipHistory);
}

function newsPastperformanceMainClicked(skipHistory)
{
    return newsMenuClicked('newsPastperformanceMain.jsp', 'menus-news-pastperformance.css', skipHistory);
}

function newsArchiveMainClicked(skipHistory)
{
    return newsMenuClicked('newsArchiveMain.jsp', 'menus-news-archive.css', skipHistory);
}

function newsIndustryMainClicked(skipHistory)
{
    return newsMenuClicked('newsIndustryMain.jsp', 'menus-news-industry.css', skipHistory);
}
