var adoptItems = new Array();
var count = 0;
var current = -1;
var oFCKeditor = null;

function AdoptItem ()
{
   this.id = 0;
   this.name = "";
   this.type = "";
   this.breed = "";
   this.gender = "";
   this.age = 0;
   this.weight = 0;
   this.location = "";
   this.guardian = "";
   this.tagline = "";
   this.image1 = "";
   this.image1Id = 0;
   this.image2 = "";
   this.image2Id = 0;
   this.image3 = "";
   this.image3Id = 0;
   this.desc = "";

}


function createDataTable ( ) 
{

   this.displayImage = function(elCell, oRecord, oColumn, sData) {
       elCell.innerHTML = "<img src='serveImage.php?action=resized&imageId=" + oRecord.getData("image") + "'\>";
   };

   this.createLink = function(elCell, oRecord, oColumn, sData) {
       elCell.innerHTML = "<a href='details.html?adoptId=" + oRecord.getData("id") + "'>" + sData + "</a><br/>" +
		"<a href='#form' onclick='edit(" + count + "); return true;'>Edit</a><br/>" +
                "<a href='deleteListing.php?id=" + oRecord.getData("id") + "'>Delete</a>";
       
       var adoptItem = new AdoptItem();
       adoptItem.id = oRecord.getData("id");
       adoptItem.name = oRecord.getData("name");
       adoptItem.type = oRecord.getData("type");
       adoptItem.breed = oRecord.getData("breed");
       adoptItem.gender = oRecord.getData("sex");
       adoptItem.age = oRecord.getData("age");
       adoptItem.weight = oRecord.getData("weight");
       adoptItem.tagline = oRecord.getData("tagline");
       adoptItem.desc = oRecord.getData("descr");
       adoptItem.location = oRecord.getData("city");
       adoptItem.guardian = oRecord.getData("guardian");

       adoptItems[count] = adoptItem;
       count++;
   };


   var myColumnDefs = [
      {label:"", formatter:this.displayImage},
      {key:"name", label:"Name", sortable:true, formatter:this.createLink},
      {key:"tagline", label:"Description"},
      {key:"type", label:"Type", sortable:true},
      {key:"breed", label:"Breed", sortable:true},
      {key:"sex", label:"Gender", sortable:true},
      {key:"age", label:"Age", sortable:true},
      {key:"weight", label:"Weight", sortable:true}
   ];

   this.myDataSource = new YAHOO.util.DataSource("getListing.php?");
   this.myDataSource.connMethodPost = true;
   this.myDataSource.responseType = YAHOO.util.DataSource.TYPE_XML;
   this.myDataSource.responseSchema = {
      resultNode: "item",
      fields: ["id","name","type", "breed", "sex", "age", "weight", "city", "state", "guardian", "descr", "image", "tagline"]
   };

   this.myDataTable = new YAHOO.widget.DataTable("xml", myColumnDefs, this.myDataSource, {initialRequest:""});
}


function createTextEditor ( )
{
        oFCKeditor = new FCKeditor( 'desc' );
        oFCKeditor.BasePath = "fckeditor/";
        oFCKeditor.ToolbarSet = "Basic";
        oFCKeditor.ReplaceTextarea() ;
}



function gup( name )
{
   name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
   var regexS = "[\\?&]"+name+"=([^&#]*)";
   var regex = new RegExp( regexS );
   var results = regex.exec( window.location.href );
   if( results == null )
     return "";
   else
     return results[1];
}


/*
 * Returns a new XMLHttpRequest object, or false if this browser
 * doesn't support it
 */
function newXMLHttpRequest() {

  var xmlreq = false;

  if (window.XMLHttpRequest) {

    // Create XMLHttpRequest object in non-Microsoft browsers
    xmlreq = new XMLHttpRequest();

  } else if (window.ActiveXObject) {

    // Create XMLHttpRequest via MS ActiveX
    try {
      // Try to create XMLHttpRequest in later versions
      // of Internet Explorer

      xmlreq = new ActiveXObject("Msxml2.XMLHTTP");

    } catch (e1) {

      // Failed to create required ActiveXObject

      try {
        // Try version supported by older versions
        // of Internet Explorer

        xmlreq = new ActiveXObject("Microsoft.XMLHTTP");

      } catch (e2) {

        // Unable to create an XMLHttpRequest with ActiveX
      }
    }
  }

  return xmlreq;
}


/*
 * Returns a function that waits for the specified XMLHttpRequest
 * to complete, then passes its XML response
 * to the given handler function.
 * req - The XMLHttpRequest whose state is changing
 * responseXmlHandler - Function to pass the XML response to
 */
function getReadyStateHandler(req, responseXmlHandler) {

  // Return an anonymous function that listens to the 
  // XMLHttpRequest instance
  return function () {

    // If the request's status is "complete"
    if (req.readyState == 4) {
      
      // Check that a successful server response was received
      if (req.status == 200) {

        // Pass the XML payload of the response to the 
        // handler function
        responseXmlHandler(req.responseXML);

      } else {

        // An HTTP problem has occurred
        alert("HTTP error: "+req.status);
      }
    }
  }
}



/*
 * Adds an item, identified by its product code, 
 * to the shopping cart
 * itemCode - product code of the item to add.
 */
function requestDetails ( ) {

  // get the id from the URL
  var adoptId = gup ( "adoptId" );


  // Obtain an XMLHttpRequest instance
  var req = newXMLHttpRequest();

  // Set the handler function to receive callback notifications
  // from the request object
  var handlerFunction = getReadyStateHandler(req, displayDetails);
  req.onreadystatechange = handlerFunction;
  
  // Open an HTTP POST connection to the shopping cart servlet.
  // Third parameter specifies request is asynchronous.
  req.open("POST", "getDetails.php", true);

  // Specify that the body of the request contains form data
  req.setRequestHeader("Content-Type", 
                       "application/x-www-form-urlencoded");

  req.send("adoptId=" + adoptId);
}


function displayDetails(dataXML) {

  // Get the root element from the document
  var cart = dataXML.getElementsByTagName("root")[0];


  // Clear the HTML list used to display the cart contents
  var titleHtml = document.getElementById("title");
  titleHtml.innerHTML = "";
  var descrHtml = document.getElementById("descr");
  descrHtml.innerHTML = "";
  var imageHtml = document.getElementById("images");
  imageHtml.innerHTML = "";
  var taglineHtml = document.getElementById("tagline");
  taglineHtml.innerHTML = "";
  var typeHtml = document.getElementById("type");
  typeHtml.innerHTML = "";
  var breedHtml = document.getElementById("breed");
  breedHtml.innerHTML = "";
  var genderHtml = document.getElementById("gender");
  genderHtml.innerHTML = "";
  var locationHtml = document.getElementById("location");
  locationHtml.innerHTML = "";
  var ageHtml = document.getElementById("age");
  ageHtml.innerHTML = "";
  var weightHtml = document.getElementById("weight");
  weightHtml.innerHTML = "";



  // get items
  var items = cart.getElementsByTagName("item")[0];
  var descr = items.getElementsByTagName("descr")[0].firstChild.nodeValue;
  var title = items.getElementsByTagName("name")[0].firstChild.nodeValue;
  var tagline = items.getElementsByTagName("tagline")[0].firstChild.nodeValue;
  var type = items.getElementsByTagName("type")[0].firstChild.nodeValue;
  var breed = items.getElementsByTagName("breed")[0].firstChild.nodeValue;
  var gender = items.getElementsByTagName("sex")[0].firstChild.nodeValue;
  var weight = items.getElementsByTagName("weight")[0].firstChild.nodeValue;
  var age = items.getElementsByTagName("age")[0].firstChild.nodeValue;
  var city = items.getElementsByTagName("city")[0].firstChild.nodeValue;
  var state = items.getElementsByTagName("state")[0].firstChild.nodeValue;

  titleHtml.innerHTML = title + ",";
  descrHtml.innerHTML = descr;
  taglineHtml.innerHTML = tagline;
  typeHtml.innerHTML = type;
  breedHtml.innerHTML = breed;
  locationHtml.innerHTML = city + ", " + state;
  ageHtml.innerHTML = age;
  weightHtml.innerHTML = weight;
  genderHtml.innerHTML = gender;


  var imageList = items.getElementsByTagName("images")[0];
  var images = imageList.getElementsByTagName("image");
  
   for (var i = 0 ; i < images.length ; i++) {

     var image = images[i];

     // Extract the text nodes from the name and quantity elements
     var name = image.firstChild.nodeValue;
                                               
     imageHtml.innerHTML += "<a href='serveImage.php?action=full&imageId=" + name + "' border='none'>" +
		"<img src='serveImage.php?action=medium&imageId=" + name + "'/></a>";

    
   }

}

function edit ( index )
{
   var adoptItem = adoptItems[index];
   var oEditor = FCKeditorAPI.GetInstance('desc');


   document.getElementById("name").value = adoptItem.name;
   document.getElementById("weight").value = adoptItem.weight;
   document.getElementById("age").value = adoptItem.age;
   document.getElementById("breed").value = adoptItem.breed;
   document.getElementById("location").value = adoptItem.location;
   document.getElementById("guardian").value = adoptItem.guardian;
   document.getElementById("tagline").value = adoptItem.tagline;
   oEditor.SetHTML( adoptItem.desc );
   setSelect ( "type", adoptItem.type );
   setSelect ( "sex", adoptItem.gender );

   // set current editable item
   current = adoptItem.id;

   // update button text
   document.getElementById("action").value = "edit";
   document.getElementById("id").value = adoptItem.id;
   
}


function setSelect ( input, value )
{
   var select = document.getElementById ( input );
   var options = select.options;

   for ( var i = 0; i < options.length; i++ )
   {
       var v = options[i].value;

       if ( v == value )
       {
           select.selectedIndex = i;
           break;
       }
   }

}


function submitNew ( )
{
   document.getElementById("action").value = "new";

   document.adopt.submit();
}

function submitChange ( )
{
   document.getElementById("action").value = "edit";
   
   document.adopt.submit();
}
