
var http_request = false;
function makeRequest(url, parameters) {
  http_request = false;
  if (window.XMLHttpRequest) { // Mozilla, Safari,...
    http_request = new XMLHttpRequest();
    if (http_request.overrideMimeType) {
      http_request.overrideMimeType('text/xml');
    }
  } else if (window.ActiveXObject) { // IE
    try {
      http_request = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        http_request = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {}
    }
  }
  if (!http_request) {
    alert('Cannot create XMLHTTP instance');
    return false;
  }
  http_request.onreadystatechange = alertContents;
  http_request.open('GET', url + parameters, true);
  http_request.send(null);
}

function alertContents() {
  if (http_request.readyState == 4) {
    if (http_request.status == 200) {

      var text = http_request.responseText;
      //var xmldoc = http_request.responseXML;
      //var root = xmldoc.getElementsByTagName('xml').item(0);
      //var item = root.childNodes.item(0);
      //alert('HERE4');

      if (window.ActiveXObject)
      {
        var doc=new ActiveXObject("Microsoft.XMLDOM");
        doc.async="false";
        doc.loadXML(text);
      }
      // code for Mozilla, Firefox, Opera, etc.
      else {
        var parser=new DOMParser();
        var doc=parser.parseFromString(text,"text/xml");
      }

      var x=doc.documentElement;

      var errorText = x.childNodes[0].childNodes[0].childNodes[0].nodeValue;
      if(errorText != 'null') {
        alert("Unable to rate the item. An error has occurred:\n" . errorText);
        return false;
      }

      var avgRatingStr = x.childNodes[0].childNodes[1].childNodes[0].nodeValue;
      var userRatingStr = x.childNodes[0].childNodes[2].childNodes[0].nodeValue;
      var itemIdStr = x.childNodes[0].childNodes[3].childNodes[0].nodeValue;

      /*if(avgRatingNode.text) {
        var avgRating = avgRatingNode.text;
        var userRating = userRatingNode.text;
        var itemIdStr = itemIdNode.text;
      } else {
        var avgRating = avgRatingNode.textContent;
        var userRating = userRatingNode.textContent;
        var itemIdStr = itemIdNode.textContent;
      }*/
      var avgRating = avgRatingStr - 0;
      var userRating = userRatingStr - 0;
      var itemId = itemIdStr - 0;


      //alert('Average Rating: '+avgRating);
      //alert('User Rating: '+userRating);
      //alert('Item ID: '+itemId);
      //return;

      userRatingsMap[itemId] = userRating;
      avgRatingsMap[itemId] = avgRating;

      ratingFadeOut(itemId);
      updateTitle(itemId);
      displayUserRatings(itemId);
      ratingFadeIn(itemId);

      return;

    } else {
      alert('There was a problem rating the item.');
    }
  }
}

function ratingFadeIn(itemId) {
  for(i = 0; i < 5; i++) {
    objFadeIn('rating_'+i+'_'+itemId, 0);
  }
}

function ratingFadeOut(itemId) {
  for(i = 0; i < 5; i++) {
    objFadeOut('rating_'+i+'_'+itemId, 100);
  }
}

function updateTitle(itemId) {
  var newTitle = "Average Rating: "+avgRatingsMap[itemId]+" out of 5 stars. You Rated: "+userRatingsMap[itemId]+" out of 5 stars.";
  for(i = 0; i < 5; i++) {
    var aItem = document.getElementById('rating_link_'+i+'_'+itemId);
    aItem.title = newTitle;
  }
}


function rateItem(itemId, userId, rating) {
  var ratingsUrl = "components/com_gallery/ajax_ratings.php?";
  //alert(ratingsUrl + 'itemId=' + itemId + '&rating=' + rating + '&userId=' + userId + '&action=rate');
  var avgRating = makeRequest(ratingsUrl, 'itemId=' + itemId + '&rating=' + rating + '&userId=' + userId + '&action=rate');
}

function addrow(tablename, arr) {
  var tbl = document.getElementById(tablename);
  var lastRow = tbl.rows.length;
  var row = tbl.insertRow(lastRow);
  for (r = 0; r < arr.length; r++) {
    var cell = row.insertCell(r);
    cell.innerHTML = arr[r];
  }
}

var userRatingsMap = new Array();
var avgRatingsMap = new Array();

function populateRatings(itemId, avgRating, userRating) {
  userRatingsMap[itemId] = userRating;
  avgRatingsMap[itemId] = avgRating;
}

function displayUserRatings(itemId) {
  var tmpUserRating = userRatingsMap[itemId];
  for(i = 0; i < 5; i++) {
    if(tmpUserRating == 0) {
      document.getElementById('rating_'+i+'_'+itemId).src = 'images/gallery/star_empty.gif';
    } else if(i < tmpUserRating) {
      document.getElementById('rating_'+i+'_'+itemId).src = 'images/gallery/star_gold.gif';
    } else {
      document.getElementById('rating_'+i+'_'+itemId).src = 'images/gallery/star_empty.gif';
    }
  }

}

function displayAvgRatings(itemId) {
  var tmpAvgRating = avgRatingsMap[itemId];

  for(i = 0; i < 5; i++) {
    if(tmpAvgRating <= (i + .30)) {
      document.getElementById('rating_'+i+'_'+itemId).src = 'images/gallery/star_empty.gif';
    } else if((tmpAvgRating > (i + .30)) && (tmpAvgRating < (i + .70))) {
      document.getElementById('rating_'+i+'_'+itemId).src = 'images/gallery/star_red_half.gif';
    } else if(tmpAvgRating >= (i + .70)) {
      document.getElementById('rating_'+i+'_'+itemId).src = 'images/gallery/star_red.gif';
    } else {
      document.getElementById('rating_'+i+'_'+itemId).src = 'images/gallery/star_empty.gif';
    }
  }
}
