/**
 * @author mobitect
 */

function downloadAllData(url) {

	var appendServer = "";

	// Load the API token from localstorage, if it is blank then skip the sync
	var companyName = "";
	var apiToken = "";
	var settingsXML = localStorage.getItem("settings");

	if (settingsXML != null) {
		var xmlobject = (new DOMParser()).parseFromString(settingsXML, "text/xml");
		companyName = $(xmlobject).find('company-name').text();
		apiToken = $(xmlobject).find('api-token').text();
	}

	// This part is simply for debugging purposes, if the url contains cavanagh-pc then ignore the appendServer
	var currentURL = document.URL;
	if ( (currentURL.indexOf("cavanagh-pc") == -1) && (url.indexOf("php") == -1 ) ){
		appendServer = "http://mobitect.com/crm/proxy/php_proxy.php?user=";
		appendServer += apiToken;
		appendServer += "&pwd=X&url=http%3A//";
		appendServer += companyName;
		appendServer += ".highrisehq.com/";
	}
	
	var lastModified ="";
	if (url == "people.xml")
		lastModified = localStorage.getItem("person-last-modified");
	else if (url == "tasks.xml")
		lastModified = localStorage.getItem("task-last-modified");
	else if (url == "companies.xml")
		lastModified = localStorage.getItem("company-last-modified");
	else if (url == "proxy/notifications.php")
		lastModified = localStorage.getItem("notification-last-modified");

//  http://mobitect.com/crm/proxy/notifications.php?since=2010-05-31%2013:49:56		
		
		
	if ( (lastModified != "") && (lastModified != "null") && (lastModified != null) )
		lastModified = "?since="+lastModified;
	else 
		lastModified = "";

	var completeURL = "";
//	if (url.indexOf("notifications.php") == -1 ) {
		completeURL = appendServer+url+lastModified;
//	} else
//		completeURL = url;	

	loadXMLDoc(completeURL);
}

function loadXMLDoc(url) {
  // branch for native XMLHttpRequest object
  if (window.XMLHttpRequest) {
      req = new XMLHttpRequest();
      req.onreadystatechange = processReqChange;
      req.open("GET", url, true);
      req.send(null);
  // branch for IE/Windows ActiveX version
  } else if (window.ActiveXObject) {
      isIE = true;
      req = new ActiveXObject("Microsoft.XMLHTTP");
      if (req) {
          req.onreadystatechange = processReqChange;
          req.open("GET", url, true);
          req.send();
      }
  }
}

// handle onreadystatechange event of req object
function processReqChange() {
  if (req.readyState == 4) {
      // only if "OK"
      if (req.status == 200) {
          var data = req.responseXML;

		var i;
		var n_elems;
		var elems;
		var Xml2String;
		var idVal;
		var Xml2ID;
		var dataType="";
		var personCount=0;
		var taskCount=0;
		var notificationCount=0;

		elems = data.getElementsByTagName("notification");
		n_elems = elems.length;
		for (i = 0; i < n_elems; i++) {
			idVal = elems[i].getElementsByTagName("id");
              if (data.xml) {
                  Xml2String=elems[i].xml
              // Converts the xml object to string (For rest browsers, mozilla, etc)
              }else{
                  Xml2String= new XMLSerializer().serializeToString(elems[i]);
                  Xml2ID= idVal[0].firstChild.nodeValue;
              }
				updateLastModified (elems[i], "notification");				
			  localStorage.setItem(Xml2ID, Xml2String);
			  notificationCount++;
          }

		elems = data.getElementsByTagName("person");
		n_elems = elems.length;
		for (i = 0; i < n_elems; i++) {
            idVal = elems[i].getElementsByTagName("id");
              if (data.xml) {
                  Xml2String=elems[i].xml
              // Converts the xml object to string (For rest browsers, mozilla, etc)
              }else{
                  Xml2String= new XMLSerializer().serializeToString(elems[i]);
                  Xml2ID= idVal[0].firstChild.nodeValue;
              }
				updateLastModified (elems[i], "person");				
			  localStorage.setItem(Xml2ID, Xml2String);
			  personCount++;
          }

          elems = data.getElementsByTagName("task");
          n_elems = elems.length;
          for (i = 0; i < n_elems; i++) {
				idVal = elems[i].getElementsByTagName("id");
				if (data.xml) {
					Xml2String=elems[i].xml
				// Converts the xml object to string (For rest browsers, mozilla, etc)
				}else{
					Xml2String= new XMLSerializer().serializeToString(elems[i]);
					Xml2ID= idVal[0].firstChild.nodeValue;
				}
				updateLastModified (elems[i], "task");				
				localStorage.setItem(Xml2ID, Xml2String);
				taskCount++;
          }

		  elems = data.getElementsByTagName("note");
          n_elems = elems.length;
          for (i = 0; i < n_elems; i++) {
				idVal = elems[i].getElementsByTagName("id");
				if (data.xml) {
					Xml2String=elems[i].xml
				// Converts the xml object to string (For rest browsers, mozilla, etc)
				}else{
					Xml2String= new XMLSerializer().serializeToString(elems[i]);
					Xml2ID= idVal[0].firstChild.nodeValue;
				}
				updateOnDemandList("note",elems[i]);				
          }

          elems = data.getElementsByTagName("company");
          n_elems = elems.length;
          for (i = 0; i < n_elems; i++) {
              idVal = elems[i].getElementsByTagName("id");
              if (data.xml) {
                  Xml2String=elems[i].xml
              // Converts the xml object to string (For rest browsers, mozilla, etc)
              }else{
                  Xml2String= new XMLSerializer().serializeToString(elems[i]);
                  Xml2ID= idVal[0].firstChild.nodeValue;
              }
				updateLastModified (elems[i], "company");				
			  localStorage.setItem(Xml2ID, Xml2String);
          }

			if (personCount > 0)
				updateList("person", "");
			if (taskCount > 0 ) {
				updateList("task", "Overdue");
				updateList("task", "ThisWeek");
				updateList("task", "NextWeek");
				updateList("task", "Later");
			}
			if (notificationCount > 0)
				updateList("notification", "");

       }

  }
}

function updateLastModified (xmlData, dataType) {

	// Get the updated-at time and if it is the most recent set it as the last-modified date
	var itemDateTime = $(xmlData).find('updated-at').text();
	var getYear = itemDateTime.substring(0,4)*10000000000;
	var getMonth = itemDateTime.substring(5,7)*100000000;
	var getDay = itemDateTime.substring(8,10)*1000000;
	var getHour = itemDateTime.substring(11,13)*10000;
	var getMinute = itemDateTime.substring(14,16)*100;
	var getSecond = itemDateTime.substring(17,19)*1;
	var convItemDateTime = getYear+getMonth+getDay+getHour+getMinute+getSecond;
	// Get the last-modified date from last-modified localStorage
	var lastModified = localStorage.getItem(dataType+"-last-modified");

	if (convItemDateTime > lastModified) {
		localStorage.setItem(dataType+"-last-modified", convItemDateTime);
	}

}

