﻿// CAFB Javascript functions

//IE specific get/set content compatability
var isIE = (window.navigator.userAgent.indexOf("MSIE") > 0);
if (!isIE) {
  HTMLElement.prototype.__defineGetter__("innerText", function () { return (this.textContent); });
  HTMLElement.prototype.__defineSetter__("innerText", function (txt) { this.textContent = txt; });
}

//Get CAFB.XML
function GetSiteXML(url) {
  if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp = new XMLHttpRequest();
  } else {// code for IE6, IE5
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  }

  if (url.indexOf("austinfoodbank.org") != -1) {
    xmlhttp.open("GET", "/assets/CAFB.xml", false);
  } else if (url.indexOf("convio.net") != -1) {
    xmlhttp.open("GET", "../assets/CAFB.xml", false);
  } else {
    xmlhttp.open("GET", "CAFB.xml", false);
  }

  xmlhttp.send();
  xmlDoc = xmlhttp.responseXML;
  xml = xmlDoc.documentElement;
  return xml;
}

//Get current URL
function GetURL() {
  url = document.location.href.toLowerCase();
  return url;
}

//Insert page content on page load
$(document).ready(function () { InsertContent() })
function InsertContent() {
  url = GetURL();
  var url2;
  xml = GetSiteXML(url);

  //Strip the URL if we can to speed up the search
  siteDomain = "www.austinfoodbank.org";
  var xml2;
  if (url.indexOf(siteDomain) != -1) {
    xml2 = FindNodeByURL(xml.childNodes, url.substr(0, url.lastIndexOf("/") + 1), false)
  }
  //Do a full search if not found
  if (xml2 == null) {
    xml2 = FindNodeByURL(xml.childNodes, url, true)
  }
  //Use referrer as fall back
  if (xml2 == null) {
    url2 = document.referrer.toLowerCase()
    if (url2.indexOf(siteDomain) != -1) {
      xml2 = FindNodeByURL(xml.childNodes, url2.substr(0, url2.lastIndexOf("/") + 1), false)
    }
    if (xml2 == null) {
      xml2 = FindNodeByURL(xml.childNodes, url2, true)
    }
  }

  //Insert HTML into placeholders
  if (url2 == null) {
    InsertMenu(xml2, url, false);
  } else {
    InsertMenu(xml2, url2, true);
  }
  InsertSocialButtons(xml2, url)
}

//Find page node by URL in XML
function FindNodeByURL(xml, url, fullSearch) {
  for (var i = 0; i < xml.length; i++) {
    if (xml[i].tagName == "page" && !xml[i].getAttribute("ignore")) {
      if (url == xml[i].getElementsByTagName("url")[0].firstChild.nodeValue.toLowerCase()) {
        return xml[i];
      } else { //Search Secondary URLs
        for (var j = 2; j < 10; j++) {
          if (xml[i].getElementsByTagName("url" + j).length > 0) {
            if (url == xml[i].getElementsByTagName("url" + j)[0].firstChild.nodeValue.toLowerCase()) {
              return xml[i];
            }
          } else {
            break;
          }
        }
      }
      //Search child nodes if not on main domain
      if (xml[i].childNodes.length > 0 && fullSearch) {
        temp = FindNodeByURL(xml[i].childNodes, url);
        if (temp != null) {
          return temp;
        }
      }
    }
  }
  return null;
}

//Create left nav menu
function InsertMenu(xml, url, referred) {
  if (xml != null) {
    //Get top level page node
    if (xml.parentNode.tagName == "page") {
      xml = xml.parentNode;
    }

    //HTML menu creator
    var output = [];
    output.push('<ul class="left-menu-level-1">\n');
    output.push('  <li class="bottomborder"><a href="' + xml.getElementsByTagName("url")[0].firstChild.nodeValue + '"');
    output.push(ActiveLinkCheck(xml, url, referred));
    output.push('>' + xml.getElementsByTagName("name")[0].firstChild.nodeValue + '</a></li>\n');
    output.push('  <li class="left-menu-submenu">\n');
    output.push('    <ul class="left-menu-level-2">\n');

    xml = xml.getElementsByTagName("page");
    for (var i = 0; i < xml.length; i++) {
      if (xml[i].tagName == "page" && !xml[i].getAttribute("ignore")) {
        output.push('      <li><a href="' + xml[i].getElementsByTagName("url")[0].firstChild.nodeValue + '"');
        output.push(ActiveLinkCheck(xml[i], url, referred));
        output.push('>' + xml[i].getElementsByTagName("name")[0].firstChild.nodeValue + '</a></li>\n');
      }
    }
    output.push('    </ul>\n  </li>\n</ul>');

    document.getElementById("left-menu").innerHTML = output.join("");
  } else {
    //URL not found in XML
  }
}

//Check for primary and secondary link matching
function ActiveLinkCheck(xml, url, referred) {
  if (url == xml.getElementsByTagName("url")[0].firstChild.nodeValue.toLowerCase()) {
    if (referred) {
      return ' class="active"';
    } else {
      return ' class="active" onclick="return false"';
    }
  }
  else { //Secondary URL
    for (var j = 2; j < 10; j++) {
      if (xml.getElementsByTagName("url" + j).length > 0) {
        if (url == xml.getElementsByTagName("url" + j)[0].firstChild.nodeValue.toLowerCase()) {
          return ' class="active"';
        }
      } else {
        break;
      }
    }
  }
}

//Create social sharing buttons
function InsertSocialButtons(xml, url) {
  if (xml != null) {
    if (xml.getElementsByTagName("social").length != 0) {
      shareButtonsNode = xml.getElementsByTagName("social")[0]
      shareButtons = shareButtonsNode.firstChild.nodeValue.toLowerCase();
      if (shareButtons.length != 0 && !shareButtonsNode.getAttribute("ignore")) {
        pageTitle = xml.getElementsByTagName("name")[0].firstChild.nodeValue;

        var conf = {
          siteName: 'austinfoodbank.org',
          enabledProviders: 'facebook,twitter,yahoo,linkedin,foursquare,google'
        }

        var act = new gigya.services.socialize.UserAction();
        act.setUserMessage("I thought you might like the Capital Area Food Bank of Texas - " + pageTitle + "page.");
        act.setTitle("Capital Area Food Bank of Texas");
        act.setSubtitle(pageTitle);
        act.setLinkBack(url);
        act.setDescription("Visit the Capital Area Food Bank of Texas.");
        act.addActionLink("Advocate. Donate. Volunteer.", "http://www.austinfoodbank.org");
        act.addMediaItem({ type: 'image', src: 'http://www.austinfoodbank.org/images/cafblogo.gif', href: 'http://www.austinfoodbank.org' });
        var showShareBarUI_params =
      {
        containerID: 'social-buttons',
        shareButtons: shareButtons,
        showCounts: 'none',
        userAction: act
      }
        gigya.services.socialize.showShareBarUI(conf, showShareBarUI_params);
      }
    }
  }
}
