// domextension.js
// Test Print use: var xmlString = new XMLSerializer().serializeToString(xmlDoc);  alert(new XMLSerializer().serializeToString(xmlDoc));

var xmlDoc = null; 
var adresses = new Array();
var itemsID = new Array();
var items = new Array();
var calPoint = new Array();
var nextID = 0;
var delay = 100;
var rowCount = 0;
var sortedArray = new Array();
var searchCriteria = new Array();
var statusTitle = 0;
var statusDistance = 0;
var statusTime = 0;
var statusPrice = 0;

function proofAddress(xmlXML) {
	xmlDoc = xmlXML;  
	items = xmlDoc.getElementsByTagName("Item");
	itemsID = xmlDoc.getElementsByTagName("ItemID");

	if (items.length != 0) {
		getAdresses();
	} else {
		document.getElementById("res").innerHTML="Sorry, no items found!";		
	}
}

function getAdresses(){
     var AddressPart = "";
	 var id = null;
	 
	for (var i = 0; i < items.length; i++) {	
		id = items[i].getElementsByTagName("ItemID")[0].childNodes[0].nodeValue;
		var timeLeft = items[i].getElementsByTagName("TimeLeft")[0].childNodes[0].nodeValue;
		timeLeft = getTimeLeft(timeLeft);
		updateTimeLeft(timeLeft, i);
				
		if ((items[i].getElementsByTagName("PostalCode").length != 0) 
				&& (items[i].getElementsByTagName("Country").length != 0)) {
			AddressPart = items[i].getElementsByTagName("PostalCode")[0].childNodes[0].nodeValue;
			AddressPart = AddressPart + ", " + items[i].getElementsByTagName("Country")[0].childNodes[0].nodeValue;
			adresses[id] = AddressPart;
		}
		else{
			adresses[id] = null;
		}
	 }
	  getNext();
}

function getNext() {
	  var currItemID = null;
		if (nextID < itemsID.length) {
		  currItemID = itemsID[nextID].childNodes[0].nodeValue;
          setTimeout('getPoint("'+currItemID+'",getNext)', delay);
		  var progress = (nextID / numberSearchResults) * 100;
		  progress = progress.toFixed(1);
		  document.getElementById("res").innerHTML = progress + "% finished" + 
														"</p><br><br><img src=\"pic/ajax-loader.gif\" />";
		  nextID++;
        }
		else {
		  document.getElementById("res").innerHTML = "Calculation finished! Please wait...";
		  combine();
		}
}

function getPoint(id, next) {
	    var search = adresses[id];
        geocoder.getLatLng(search, function (result)
		{ 
            if (result) {
			  calPoint[id] = result;
			}
            // ====== Decode the error status ======
            else {
			  calPoint[id] = "N/A";
            }
            next();
          }
        );
}

function combine(){
	  for (var i = 0; i < items.length; i++) {
		var currID = itemsID[i].childNodes[0].nodeValue;

		 if(calPoint[currID] != "N/A") {
		   var dista = homePoint.distanceFrom(calPoint[currID])/1609.344;
		   dista = dista.toFixed(2);
		   createNode(i, dista, calPoint[currID], adresses[currID]);
		 }
		 else{
		   createNode(i, 100000, "N/A", "N/A");
		 }
	   }
	   sortColumn('Distance','Title','TimeLeftNew','CurrentPrice');
}	

function createNode(position, distance, point, address) {

		  var newEl0 = xmlDoc.createElement("Address");
		  var newText0 = xmlDoc.createTextNode(address);
		  newEl0.appendChild(newText0); 
		  
		  items[position].appendChild(newEl0);
		  
		  var newEl1 = xmlDoc.createElement("Point");
		  var newText1 = xmlDoc.createTextNode(point);
		  newEl1.appendChild(newText1); 
		  
		  items[position].appendChild(newEl1);

		  
		  var newEl2 = xmlDoc.createElement("Distance");
		  var newText2 = xmlDoc.createTextNode(distance);
		  newEl2.appendChild(newText2); 
		  
		  items[position].appendChild(newEl2);
}

function updateTimeLeft(time, position) {

	  var newEl0 = xmlDoc.createElement("TimeLeftNew");
	  var newText0 = xmlDoc.createTextNode(time);
	  newEl0.appendChild(newText0); 
		  
		items[position].appendChild(newEl0);
}

function getTimeLeft(strTime) {
	var pointlength = strTime.length;
	var pointlengthfront = 0;
	strTime = strTime.substring(1,pointlength);

	var finalString = "";
	var temp = new Array();

	
	if (strTime.match("D") != null) {
	    temp = strTime.split("D");
	    finalString += temp[0]+"D ";
		pointlengthfront = temp[0].length+2;
	    strTime = strTime.substring(pointlengthfront, pointlength);
	}
	else {
		finalString += "0D ";
	}
	
	if (strTime.match("T") != null) {
	    temp = strTime.split("T");
	    strTime = temp[1];
	}	
	
    
	if (strTime.match("H") != null) {
	    temp = strTime.split("H");
		  if (temp[0].length < 2) 
		    finalString += "0";
		
		finalString += temp[0]+"H ";
		pointlengthfront = temp[0].length+1;
		pointlength = strTime.length;
	    strTime = strTime.substring(pointlengthfront, pointlength);
	}
	else {
		finalString += "00H ";
	};

	if (strTime.match("M") != null) {
	    temp = strTime.split("M");
		  if (temp[0].length < 2) 
		    finalString += "0";
		
		finalString += temp[0]+"M ";
		pointlengthfront = temp[0].length+1;
		pointlength = strTime.length;
	    strTime = strTime.substring(pointlengthfront, pointlength);
	}
	else {
		finalString += "00M ";
	};	
	
	if (strTime.match("S") != null) {
	    temp = strTime.split("S");
		  if (temp[0].length < 2) 
		    finalString += "0";
		
		finalString += temp[0]+"S ";
	}
	else {
		finalString += "00S ";
	};		
	
	return finalString;					
}

function sortColumn(sortCrit1, sortCrit2, sortCrit3, sortCrit4) {
  var items = xmlDoc.getElementsByTagName("Item");
  var currStatus = null;
  attr = 0;
  sortedArray = null;
  searchCriteria = null;
  searchCriteria = new Array();
  sortedArray = new Array();
  searchCriteria[0] = sortCrit1;
  searchCriteria[1] = sortCrit2;
  searchCriteria[2] = sortCrit3;
  searchCriteria[3] = sortCrit4;

  for (var i = 0; i < items.length; i++) {
    sortedArray[i] = new Array();
	sortedArray[i][0] = items[i].getElementsByTagName(searchCriteria[0])[0].childNodes[0].nodeValue;
	sortedArray[i][1] = items[i].getElementsByTagName(searchCriteria[1])[0].childNodes[0].nodeValue;
	sortedArray[i][2] = items[i].getElementsByTagName(searchCriteria[2])[0].childNodes[0].nodeValue;
	sortedArray[i][3] = items[i].getElementsByTagName(searchCriteria[3])[0].childNodes[0].nodeValue;
	sortedArray[i][4] = items[i].getElementsByTagName("ItemID")[0].childNodes[0].nodeValue;
	sortedArray[i][5] = items[i].getElementsByTagName("Address")[0].childNodes[0].nodeValue;
	sortedArray[i][6] = calPoint[sortedArray[i][4]];
	sortedArray[i][7] = items[i].getElementsByTagName("ViewItemURLForNaturalSearch")[0].childNodes[0].nodeValue;
	//alert(i+ "vor" + items[i].getElementsByTagName("GalleryURL").length);
	if (items[i].getElementsByTagName("GalleryURL").length != 0) {
          sortedArray[i][8] = items[i].getElementsByTagName("GalleryURL")[0].childNodes[0].nodeValue;
        } else {
          sortedArray[i][8] = "http://pics.ebaystatic.com/aw/pics/express/icons/iconPlaceholder_96x96.gif";
        }
	sortedArray[i][9] = items[i].getElementsByTagName("Distance")[0].childNodes[0].nodeValue;		
	sortedArray[i][10] = items[i].getElementsByTagName("CurrentPrice")[0].getAttribute("currencyID");
  }

  switch (searchCriteria[0]){
    case "Distance":
	   currStatus = statusDistance;
	   statusDistance += 1;
	   sortedArray.sort(cmp2DArrAttr);
	   break;
	case "CurrentPrice":
	   currStatus = statusPrice;
	   statusPrice += 1;   
	   sortedArray.sort(cmp2DArrAttr);
	   break;
    case "TimeLeftNew":
	   currStatus = statusTime;
	   statusTime += 1;
	   sortedArray.sort();
	   break;
	case "Title":
	   currStatus = statusTitle;
	   statusTitle += 1;
	   sortedArray.sort();
	   break;
  }
  if (currStatus % 2)
    sortedArray.reverse();

  printResults(0);  
}

function cmp2DArrAttr (a, b) {
  return (a)[attr] - (b)[attr];
}

function getArrow(name) {
  var imgTag = "";
  var imgPic = "";
  if (searchCriteria[0] == name) {
	  switch (searchCriteria[0]) {
		case "Title":
		    if (statusTitle % 2 == 0) {
				imgPic = "desc.gif";
			} else {
				imgPic = "asc.gif";
			}
			imgTag = "<img style=\"position: absolute; left: 60px; top: 7px;\" src=\"" + imgPic + "\" />";
			break;
		case "CurrentPrice":
			if (statusPrice % 2 == 0) {
				imgPic = "desc.gif";
			} else {
				imgPic = "asc.gif";
			}
			imgTag = "<img style=\"position: absolute; left: 345px; top: 7px;\" src=\"" + imgPic + "\" />";
			break;	
	    case "TimeLeftNew":
			if (statusTime % 2 == 0) {
				imgPic = "desc.gif";
			} else {
				imgPic = "asc.gif";
			}
			imgTag = "<img style=\"position: absolute; left: 425px; top: 7px;\" src=\"" + imgPic + "\" />";
			break;			
		case "Distance":
			if (statusDistance % 2 == 0) {
				imgPic = "desc.gif";
			} else {
				imgPic = "asc.gif";
			}
			imgTag = "<img style=\"position: absolute; left: 525px; top: 7px;\" src=\"" + imgPic + "\" />";
			break;
	}
  }
  return imgTag;  
}