function Hotel(name,stars,price,hiprice,loprice,phone,address,city)
{
this.name=name;
this.stars=stars;
this.price=price;
this.hiprice=hiprice;
this.loprice=loprice;
this.phone=phone;
this.address=address;
this.city=city;


}

var request=null;
var kayak="http://www.kayak.com";
var sessionId = null;
var token="SVqKU7og_yEgwtjpG5gs0A";
//var token="Co0tYzVrW8smsTo$GNeAeQ";
var cityStateCountry=null;
var departureDate=null;
var returnDate=null;
var searchId=null;
var hotels =null;
var state=null;





function startRunning() {
	init();
 getSession();
}

function getState()  {
    return document.formInput.states.value;
  }

  function getCity()   {
    return document.formInput.city.value;
  }


function init() {
	var str=getCity()+","+getState()+",US";
	state = getState();
 
cityStateCountry=encodeURIComponent(str);
	departureDate=encodeURIComponent("12/17/2006");
	returnDate=encodeURIComponent("12/19/2006");
	hotels=new Array();
	
}

function getSession() {

 createRequest();
 var myUrl=kayak+"/k/ident/apisession?token="+token;
 request.open("GET",myUrl,true);
 request.onreadystatechange=sessionReceived;
 request.send(null);

} 

function sessionReceived()  {
 if (request.readystate == 4) {
  if (request.status == 200)  {
   var response = request.responseText;
   getSessionId(response);
   startHotelSearch();
  }
 } 
} 

function getSessionId(sessionXml) {
	var parser = new DOMImplementation();
  var  gobjDatabaseDom = parser.loadXML(sessionXml);
  var  gobjDatabaseDomTree = gobjDatabaseDom.getDocumentElement();
 
  sessionId=gobjDatabaseDomTree.getElementsByTagName("sid").item(0).getFirstChild().getNodeValue();
     // docRef.txtFirstName.value = trim(user.getElementsByTagName("FIRSTNAME").item(0).getFirstChild().getNodeValue(),true, true);
      
  }
  
function initSearchReceived(){
	if (request.readystate == 4) {
  if (request.status == 200)  {
   var response = request.responseText;
  
   //document.getElementById("city").value = response;
   getResults(response);
  }
 } 
}
//
function startHotelSearch() {
	var myUrl= kayak +"/s/apisearch?basicmode=true&othercity="
	+cityStateCountry
	+"&checkin_date="
	+departureDate
	+"&checkout_date="
	+returnDate
	+"&minstars=-1&guests1=1&guests2=1&rooms=1&action=dohotels&apimode=1&_sid_="
	+sessionId;
	//createRequest();
	request.open("GET",myUrl,true);

 request.onreadystatechange=initSearchReceived;
 
 request.send(null);	
 
}

function getResults(sessionXml) {
	var parser = new DOMImplementation();
  var  gobjDatabaseDom = parser.loadXML(sessionXml);
  var  gobjDatabaseDomTree = gobjDatabaseDom.getDocumentElement();

  searchId=gobjDatabaseDomTree.getElementsByTagName("searchid").item(0).getFirstChild().getNodeValue();

 
	var myUrl= kayak 
+"/s/apibasic/hotel?searchid="
	+searchId
	+"&apimode=1&_sid_="
	+sessionId;
	
//	   document.getElementById("textarea1").value = sessionXml;

	 request.open("GET",myUrl,true);

 request.send(null);
 request.onreadystatechange=resultsReceived;
 
	
 
}
function resultsReceived() {
	if (request.readystate == 4) {
  if (request.status == 200)  {
   var response = request.responseText;
  
   
   handleResults(response);
  }
 } 
}
function handleResults(resultXml) {
	var parser = new DOMImplementation();
  var  gobjDatabaseDom = parser.loadXML(resultXml);
  var  gobjDatabaseDomTree = gobjDatabaseDom.getDocumentElement();
// document.getElementById("city").value = resultXml;
  var count=gobjDatabaseDomTree.getElementsByTagName("count").item(0).getFirstChild().getNodeValue();
  var hotel=gobjDatabaseDomTree.getElementsByTagName("hotels").item(0).getFirstChild()
   var i=0
   while (hotel != null) {
   		if (hotel !=null) {
   	hotels[i]=createHotel(hotel);
   	 i++;
    }
   	hotel=hotel.getNextSibling();
   
    }
  var text="";
  for ( x=0; x < i; x++) {
  	 if (hotels[x]!= null &&hotels[x].name != null) {
  	 		text+=hotels[x].name;
  	 		showAddress(getAddress(hotels[x]),hotels[x]);
	 

  	 	}
  	 	else {
  	 		text+="Oh no! I'm null!";
  	 	}
  	text+= "\n";
 
  }
  //alert(" I is " + i );
 //document.getElementById("textarea1").value=getSideBar();
      // put the assembled side_bar_html contents into the side_bar div
          document.getElementById("side_bar").innerHTML = getSideBar();


}
function getAddress (hotel) {
	return hotel.address + ", "+ hotel.city + ", "+ state;
}

function createHotel(hotelDom) {
//	var nameHotel=hotelDom.getElementsByTagName("name").item(0).getFirstChild().getNodeValue();
//	var addressHotel=hotelDom.getElementsByTagName("address").item(0).getFirstChild().getNodeValue();
//	var priceHotel=hotelDom.getElementsByTagName("price").item(0).getFirstChild().getNodeValue();
//	var priceloHotel=hotelDom.getElementsByTagName("pricehistorylo").item(0).getFirstChild().getNodeValue();
//	var pricehiHotel=hotelDom.getElementsByTagName("pricehistoryhi").item(0).getFirstChild().getNodeValue();
//	var phoneHotel=hotelDom.getElementsByTagName("phone").item(0).getFirstChild().getNodeValue();
//	var starsHotel=hotelDom.getElementsByTagName("stars").item(0).getFirstChild().getNodeValue();
//	var cityHotel=hotelDom.getElementsByTagName("city").item(0).getFirstChild().getNodeValue();
var nameHotel=getXmlValue(hotelDom,"name");
var addressHotel=getXmlValue(hotelDom,"address");
var priceHotel=getXmlValue(hotelDom,"price");
var priceloHotel=getXmlValue(hotelDom,"pricehistorylo");
var pricehiHotel=getXmlValue(hotelDom,"pricehistoryhi");
var phoneHotel=getXmlValue(hotelDom,"phone");
var starsHotel=getXmlValue(hotelDom,"stars");
var cityHotel=getXmlValue(hotelDom,"city");
	
	var hotel=new Hotel(nameHotel,starsHotel,priceHotel,pricehiHotel,priceloHotel,phoneHotel,addressHotel,cityHotel);
	return hotel;
}
function getXmlValue(hotelDom, name) {
	var elem=null;
elem=hotelDom.getElementsByTagName(name);
    if (elem != null) {
	   elem=elem.item(0);
	      if (elem != null) {
	      elem = elem.getFirstChild();
	      }
	
     }
          if (elem != null) {
	        return elem.getNodeValue();
          }
          else {
          	return "";
          }
}
function createRequest()  {
    try {
      request = new XMLHttpRequest();
    } catch (trymicrosoft)   {
      try  {
        request = new ActiveXObject("Msxm12.XMLHTTP");
      } catch (othermicrosoft)  {
        try  {
         request = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (failed)  {
          request = null;
        }
      }
     }

if (request == null)
  alert("Error creating request object!");
 }

 