// simple AJAX Javascript functions for Do It Now


// *** --------------------------------------------------------------- ***

// section for HTTP object assembly. This code shouldn't need to be touched

function createRequestObject() {
   var httpRequest;

   if (window.XMLHttpRequest) { // Mozilla, Safari, ...
      httpRequest = new XMLHttpRequest();
      // if (httpRequest.overrideMimeType) {
         // httpRequest.overrideMimeType('text/xml');
      // }
   } else if (window.ActiveXObject) { // IE
      try {
         httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (e) {
         try {
            httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {}
      }
   }
   return httpRequest;
}

// end of section for HTTP object assembly.

// *** --------------------------------------------------------------- ***

// section for Sjax HTTP request assembly. This code shouldn't need to be touched

function getRequest(url, domElement, data) {
   var httpRequest = createRequestObject();
   if (!httpRequest) {
      alert('Error : Cannot create Web2 / AJAX object to fetch data');
      return false;
   }

   if (data) {
      // send request, put POST data as a query string e.g. name=value&email=address&so=on, response will fill a form
      httpRequest.open('POST', url, false);
      httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
      httpRequest.send(data);
      assignResponse(httpRequest,domElement)
   } else {
      httpRequest.open('GET', url, false);
      httpRequest.send(null);
      showResponse(httpRequest,domElement)
   }

   return true;
}


function getResponse(url) {
   var httpRequest = createRequestObject();
   var response = false;

   if (!httpRequest) {
      alert('Error : Cannot create Web2 / AJAX object to fetch data');
      return false;
   }

   httpRequest.open('GET', url, false);
   httpRequest.send(null);

   if (httpRequest.readyState == 4) {
      if (httpRequest.status == 200) {
         response = httpRequest.responseText;
      } else {
         alert("There was a problem requesting the data. \r\n" + httpRequest.status + " Response");
      }
   }

   return response;
}

// end of section for Sjax HTTP request assembly.

// *** --------------------------------------------------------------- ***

// section for Ajax HTTP request assembly. This code shouldn't need to be touched

function makeRequest(url, domElement, data) {
   var httpRequest = createRequestObject();
   if (!httpRequest) {
      alert('Error : Cannot create Web2 / AJAX object to fetch data');
      return false;
   }

   // set up the callback function as an anonymous function in order to pass it parameters
   if (data) {
      // send request, put POST data as a query string e.g. name=value&email=address&so=on, response will fill a form
      httpRequest.onreadystatechange = function() { assignResponse(httpRequest,domElement); };
      httpRequest.open('POST', url, true);
      httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
      httpRequest.send(data);
   } else {
      httpRequest.onreadystatechange = function() { showResponse(httpRequest,domElement); };
      httpRequest.open('GET', url, true);
      httpRequest.send(null);
   }

   return true;
}

// callback function for processing HTTP GET and POST request data
function showResponse(httpRequest, domElement) {

   // simply replace the HTML element with the HTML from the AJAX request
   if (httpRequest.readyState == 4) {
      if (httpRequest.status == 200) {
         document.getElementById(domElement).innerHTML = httpRequest.responseText;
      } else {
         alert("There was a problem requesting the data. \r\n" + httpRequest.status + " Response");
      }
   }

   return;
}

// callback function for processing HTTP POST request data and filling a form
function assignResponse(httpRequest,domElement) {

   // replace the HTML form fields with the data from the AJAX request
   // domElement is a form name rather than a HTML tag name
   if (httpRequest.readyState == 4) {
      if (httpRequest.status == 200) {
         // var frm = document.getElementById(domElement);
         var frm = document.forms[domElement];
         var data = httpRequest.responseText;
         var arr = data.split(' <eof>');

         for (var n=0;n<arr.length;n++) {
            var fld = arr[n];
            var fldarr = fld.split(' => ')
            //var f = fldarr[0];
            //var k = false;
            var k = fldarr[0].toLowerCase();
            var v = fldarr[1];

            //for (var z=0; z < frm.elements.length; z++) { if(f.toLowerCase() == frm.elements[z].name.toLowerCase()) { k = frm.elements[z].name }  }

            if (frm.elements[k] && v) {
               if (frm.elements[k].type == "radio" || frm.elements[k].type == "checkbox") {
                  frm.elements[k].checked = (frm.elements[k].value == v);
               } else { 
                  if (frm.elements[k].type == "select-one" || frm.elements[k].type == "select-multiple") {
                     optset = false;
                     for (var z=0; z < frm.elements[k].length; z++) {
                        if (frm.elements[k].options[z].value.toLowerCase() == v.toLowerCase()) {
                           frm.elements[k].options[z].selected = true;
                           optset = true;
                           break;
                        }
                     }
                     if (!optset) {
                        opt = new Option(v, v, true, true);
                        frm.elements[k].options[frm.elements[k].length] = opt;
                     }
                  } else {
                     frm.elements[k].value = v;
                  }
               }
            }
         } 
      } else {
         alert("There was a problem requesting the data. \r\n" + httpRequest.status + " Response");
      }
   }

   return;
}

// end of Ajax HTTP request assembly section

// *** --------------------------------------------------------------- ***

// section for Ajax HTTP calls
// the web pages can call the makeRequest function directly but these are here
// to make life easier for the HTML coders

// change this according to installations
var urlRoot = '/applications/din/index.php'; // dev and live server
// var urlRoot = '/doitnow/index.php'; // laptop

// show the complete CSS styled action list
function getAllActions(domElement) {

   var url = urlRoot + '?notemplate';

   makeRequest(url,domElement);

   return;
}

// get an unstyled list of the most popular actions
function getActions(domElement, howmany) {

   var url = urlRoot + "/actions?notemplate";
   url += "&howmany=" + howmany;

   makeRequest(url,domElement);

   return;
}

// get a name and count for a particular action in a particular style
function getAction(domElement,id,style) {

   var url = urlRoot + "/showaction?notemplate";
   url += "&style="+style;
   url += "&id="+id;

   makeRequest(url,domElement);

   return;
}

// get the login form or the user info and links
function getLogin(domElement) {

   var url = urlRoot + "/login?notemplate";

   makeRequest(url,domElement);

   return;
}

// get the user name or a link to a login form
function getUser(domElement) {

   var url = urlRoot + "/showuser?notemplate";

   makeRequest(url,domElement);

   return;
}

// get the error message from the latest process
function getMessage(domElement) {

   var url = urlRoot + "/showmessage?notemplate";

   makeRequest(url,domElement);

   return;
}

// fill some form fields with values from the database
function getFormValues(frm) {

   var url = urlRoot + "/showinfo";
   var domElement = frm

   getRequest(url,domElement,'notemplate=yes');

   return;
}

// show a poll form
function getPoll(domElement, poll) {

   var url = urlRoot + "/showpoll?notemplate";
   url += "&poll="+poll;
   url += "&domElement="+domElement;

   makeRequest(url,domElement);

   return;
}

// show a poll results panel
function viewPoll(domElement, poll) {

   var url = urlRoot + "/viewpoll?notemplate";
   url += "&poll="+poll;
   url += "&domElement="+domElement;

   getRequest(url,domElement);

   return;
}

// vote on a poll 
function submitPoll(frm) {

   var url = urlRoot + '/votepoll?notemplate';
   var domElement = false;
   var noVote = true;
  
   for (var n=0;n<frm.elements.length;n++) {
      var key = frm.elements[n].name;
      var val = frm.elements[n].value;
      var typ = frm.elements[n].type;
 
      // alert("Key: " + key + "\nValue: " + val + "\nType: " + typ);
      
      if (key == "domID") {
         domElement = val;
         url += "&domElement="+domElement;
      } else {
         if (key == "polloption" && (typ == 'radio' || typ == 'checkbox')) {
            if (frm.elements[n].checked) { 
               url += "&" + key + "=" + val; 
               noVote = false;
            }
         } else if (key == "poll") {
            url += "&" + key + "=" + val;
         }
      }
   }

   if (noVote) { 
      alert("You haven't voted"); 
   } else {
      getRequest(url,domElement);
   }

   return;
}

// show the blue faces gallery
function viewBlueFacesGallery(domElement, start, fest) {

   var url = urlRoot + "/bluefaces?notemplate";
   url += "&start="+start;
   url += "&fest="+fest;
   url += "&domElement="+domElement;

   getRequest(url,domElement);

   return;
}

// show the blue faces gallery total
function viewBlueFacesTotal(domElement, fest) {

   var url = urlRoot + "/bluefaces?notemplate";
   url += "&type=max";
   url += "&fest="+fest;
   url += "&domElement="+domElement;

   getRequest(url,domElement);

   return;
}

// show the blue faces gallery total
function viewBlueFacesImage(domElement, image) {

   var url = urlRoot + "/bluefaces?notemplate";
   url += "&type=image";
   url += "&image="+image;
   url += "&domElement="+domElement;

   getRequest(url,domElement);

   return;
}

// show the totals for lobbyists
function getLobbyInfo(domElement,type,actionid,targetid) {

   var url = urlRoot + "/showlobby?notemplate";
   url += "&type="+type;
   url += "&action="+actionid;
   url += "&target="+targetid;
   makeRequest(url,domElement);

   return;
}


// end of Ajax HTTP call section

// *** --------------------------------------------------------------- ***

