function Ajax() {

 var container,url,canvas,data,loading,callback,request;

 this.setContainer = function(value) {
  container = value;
 };
 this.setUrl = function(value) {
  url = value;
 };
 this.setTargetElement = function(value) {
  target = value;
 };
 this.setLoading = function(value) {
  loading = value;
 };
 this.setCallback = function(value) {
  callback = value;
 };

 this.captureData = function() {
  if (container.nodeName.toLowerCase() == "form") {
   container.onsubmit = function() {
    var query = "";
    for (var i=0; i<this.elements.length; i++) {
     query+= this.elements[i].name;
     query+= "=";
     query+= escape(this.elements[i].value);
     query+= "&";
    }
    data = query;
    return !start();
   };
  } else {
   var links = container.getElementsByTagName("a");
   for (var i=0; i<links.length; i++) {
     links[i].onclick = function() {
     var query = this.getAttribute("href").split("?")[1];
     url+= "?"+query;
     return !start();
    };
   }
   links = null;
  }
 };
 
var getHTTPObject = function() {
  var xmlhttp = false;
  if (window.XMLHttpRequest) {
   xmlhttp = new XMLHttpRequest();
  } else if(window.ActiveXObject) {
   try {
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
   } catch (e) {
    try {
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e) {
     xmlhttp = false;
    }
   }
  }
  return xmlhttp;
 };

  var processResponse = function() {
  if (request.readyState == 4) {
   if (request.status == 200 || request.status == 304) {
    if (target) {
	  //alert("Ajax response");
      target.innerHTML = request.responseText;
    }
    if (callback) {
	 //alert("Callback")
     callback();
    }
   }
  }
 }; 
 
 //Modified by JA (combined start() and initiateRequest())
 this.sendRequest = function() {
 	request = getHTTPObject();
  	if (!request || !url) {
   		return false;
  	} else {
   		if (loading) {
	   		loading();
   		}
		request.onreadystatechange = processResponse;
		if (data) {
	   		request.open("POST", url, true);
	   		request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	   		request.send(data);
		} else {
	   		request.open("GET", url, true);
	   		request.send(null);
		}
  		return true;
  	}
 };

}

function updateCatList(catid) {
	//alert ("updatecatlist");
  	var xhr = new Ajax();
  	xhr.setUrl("ajax/ajCategoryList.php?cid="+catid);
  	xhr.setTargetElement(document.getElementById("categoryList"));
	return !xhr.sendRequest();
}

function updateMainImage(id) {
	//alert ("updatemainimage");
  	var xhr = new Ajax();
  	xhr.setUrl("ajax/ajMainImage.php?id="+id);
  	xhr.setTargetElement(document.getElementById("imgMain"));
	xhr.setCallback(function() {
		addEnlargeLink();				 
  	});
	return !xhr.sendRequest();
}

function addEnlargeLink() {
	//alert("addEnlargeLink");
	var enlargeLink = document.getElementById("enlargeAnchor");
	enlargeLink.onclick = function () {showLightbox(this); return false;}
}
 
function categorylist () {
  var prepareCatList = function(element) {
  var xhr = new Ajax();
  xhr.setContainer(element);
  xhr.setUrl("ajax/ajCategoryList.php");
  xhr.setCanvas(document.getElementById("categoryList"));
  xhr.captureData();
 };
 
 var list_items = document.getElementsByTagName("li");
 for (var i=0; i<list_items.length; i++) {
  if (list_items[i].className.match("before_clicked") || list_items[i].className.match("clicked") || list_items[i].className.match("after_clicked")) {
   prepareCatList(list_items[i]);
  }
 }
 list_items = null;
}

//window.onload = categorylist;

/*function bookshop() {

 var prepareCart = function(element) {
  var xhr = new Hijax();
  xhr.setContainer(element);
  xhr.setUrl("shoppingcart.php");
  xhr.setCanvas(document.getElementById("basket"));
  xhr.setLoading(function() {
   displayLoading(document.getElementById("basket"));
  });
  xhr.setCallback(function() {
   fadeUp(document.getElementById("basket"),255,255,204);
  });
  xhr.captureData();
 };

 var prepareRating = function(element) {
  var xhr = new Hijax();
  xhr.setContainer(element);
  xhr.setUrl("rating.php");
  xhr.setCanvas(element);
  xhr.setLoading(function() {
   displayLoading(element);
  });
  xhr.setCallback(function() {
   fadeUp(element,255,255,204);
   prepareRating(element);
  });
  xhr.captureData();
 };

 var displayLoading = function(element) {
  var image = document.createElement("img");
  image.setAttribute("alt","loading...");
  image.setAttribute("src","images/progressbar.gif");
  image.className = "loading";
  element.appendChild(image);
 };

 var fadeUp = function(element,red,green,blue) {
  if (element.fade) {
   clearTimeout(element.fade);
  }
  element.style.backgroundColor = "rgb("+red+","+green+","+blue+")";
  if (red == 255 && green == 255 && blue == 255) {
   return;
  }
  var newred = red + Math.ceil((255 - red)/10);
  var newgreen = green + Math.ceil((255 - green)/10);
  var newblue = blue + Math.ceil((255 - blue)/10);
  var repeat = function() {
   fadeUp(element,newred,newgreen,newblue)
  };
  element.fade = setTimeout(repeat,100);
 };

 var all_forms = document.getElementsByTagName("form");
 for (var i=0; i<all_forms.length; i++) {
  if (all_forms[i].className.match("shopping")) {
   prepareCart(all_forms[i]);
  }
 }
 all_forms = null;
 
 var all_divs = document.getElementsByTagName("div");
 for (var i=0; i<all_divs.length; i++) {
  if (all_divs[i].className.match("rating")) {
   prepareRating(all_divs[i]);
  }
 }
 all_divs = null;

}*/


