function ImageGallery(div, sectionId, maxUploadSize, admin, type) {
	
	this.draw = function() {
		switch(me.mode) {
			case ImageGallery.VIEW: me.getList(); break;
			case ImageGallery.NEW: me.showForm(); break;
		};
	};

	this.showForm = function() {
		try {

			var div = document.createElement("div");
			div.style.border = "1px solid #999";
			div.style.padding = "10px";
			div.style.backgroundColor = "#e5e5e5";
			
			var table = document.createElement("table");
			div.appendChild(table);
			
			var tbody = document.createElement("tbody");
			table.appendChild(tbody);
			
			var heading = document.createElement("h1");
			heading.appendChild(document.createTextNode("Add an Image to this Section"));
			
			var tr = document.createElement("tr");
			var td = document.createElement("td");
			td.style.textAlign = "left";
			td.colSpan = 2;
			td.appendChild(heading);
			tr.appendChild(td);
			tbody.appendChild(tr);
			
			tr = document.createElement("tr");
			td = document.createElement("td");
			td.className = "label";
			td.appendChild(document.createTextNode("Title: "));
			tr.appendChild(td);
			
			td = document.createElement("td");
			td.style.textAlign = "left";
	
			var input = document.createElement("input");
			input.type = "text";
			input.name = "title";
			input.style.width = "400px";
			td.appendChild(input);
			tr.appendChild(td);
			tbody.appendChild(tr);
			
			tr = document.createElement("tr");
			td = document.createElement("td");
			td.className = "label";
			td.appendChild(document.createTextNode("Description: "));
			tr.appendChild(td);
			
			td = document.createElement("td");
			td.style.textAlign = "left";
			
			input = document.createElement("textarea");
			input.name = "description";
			input.style.width = "400px";
			input.style.height = "200px";
			td.appendChild(input);
			
			input = document.createElement("input");
			input.type = "hidden";
			input.name = "type";
			input.value = me.type;
			td.appendChild(input);
			
			tr.appendChild(td);
			tbody.appendChild(tr);

			tr = document.createElement("tr");
			td = document.createElement("td");
			td.className = "label";
			td.appendChild(document.createTextNode("File: "));
			tr.appendChild(td);
	
			td = document.createElement("td");
			td.style.textAlign = "left";
			
			input = document.createElement("input");
			input.type = "file";
			input.name = "image";
			td.appendChild(input);
			tr.appendChild(td);
			tbody.appendChild(tr);

			tr = document.createElement("tr");
			td = document.createElement("td");
			td.style.textAlign = "left";
			td.colSpan = 2;
			
			button = document.createElement("button");
			button.appendChild(document.createTextNode("Add Image"));
			button.fileName = input.value;
			
			input = document.createElement("input");
			input.type = "hidden";
			input.name = "sectionId";
			input.value = me.sectionId;
			td.appendChild(input);
			td.appendChild(button);
			
			var span = document.createElement("span");
			span.style.marginLeft = "10px";
			span.style.fontSize = "14px";
			span.appendChild(document.createTextNode("Max File Size: "+me.maxUploadSize+" bytes"));
			td.appendChild(span)
			tr.appendChild(td);
			tbody.appendChild(tr);
			
			if(BROWSER == IE) {
				var frm = document.createElement("<form enctype=\"multipart/form-data\">");
			} else {
				var frm = document.createElement("form");
			}
			frm.action = "/lib/image_gallery/saveImage.php";
			frm.method = "post";
			frm.target = "post_target";
			frm.enctype = "multipart/form-data";
			frm.appendChild(div);
			
			me.contentDiv.appendChild(frm);
	
			button.onclick = function() {
				frm.submit();
			};
		} catch(err) {
			alert(err);
		}
	}
	
	this.drawGalleryView = function() {
		clearNode(me.contentDiv);
		if(me.imagesResponse && me.imagesResponse.images && me.imagesResponse.images.length) {

			var heading = document.createElement("h1");
			heading.appendChild(document.createTextNode("Images"));
			me.contentDiv.appendChild(heading);
			
			var table = document.createElement("table");
			me.contentDiv.appendChild(table);
			var tbody = document.createElement("tbody");
			table.appendChild(tbody);
			
			var tr = document.createElement("tr");
			
			var img;
			var count = 0;
			for(var i=0; i<me.imagesResponse.images.length; i++) {
				var image = me.imagesResponse.images[i];
				
				img = document.createElement("img");
				img.style.margin = "5px";
				img.src= "/lib/php/fnc/image.html?w=200&url="+image.img_path;
				img.img_path = image.img_path;
				img.style.cursor = "pointer";
				img.alt = image.title ? image.title : "Northern Log And Timber Image";
				img.title = image.title ? image.title : "Northern Log And Timber Image";
				
				var td = document.createElement("td");
				td.appendChild(img);
				
				td.appendChild(document.createElement("br"));
				td.appendChild(document.createTextNode(image.title ? image.title : (me.admin ? "N/A" : "")));
				
				img.image = image;
				img.onclick = function() {
					me.showSingleView(this.image);
				};
				
				if(me.admin) {
					td.appendChild(document.createElement("br"));
					var remLink = document.createElement('a');
					remLink.href = "javascript:void(0);";
					remLink.appendChild(document.createTextNode("remove"));
					remLink.image = image;
					remLink.onclick = function() {
						if(confirm("Are you sure you want to remove this Image from the Image Gallery?")) {
							var remIfm = document.createElement("iframe");
							document.body.appendChild(remIfm);
							remIfm.style.display = "none";
							remIfm.src = "/lib/image_gallery/removeImage.php?type="+me.type+"&id="+this.image.id+"&sectionId="+me.sectionId;
							me.setMode(me.mode);
						}					
					};
					td.appendChild(remLink);
					
					if(!type) {
						td.appendChild(document.createTextNode(" "));
						
						var editLink = document.createElement('a');
						editLink.href = "javascript:void(0);";
						editLink.appendChild(document.createTextNode("modify"));
						editLink.image = image;
						editLink.onclick = function() {
							me.showSingleView(this.image);
						};
						td.appendChild(editLink);
					}
				}
				if(i % 3 == 0) {
					tr = document.createElement("tr");
				}
				tr.appendChild(td);
				tbody.appendChild(tr);
			}
		} else {
			var h3 = document.createElement("h3");
			h3.appendChild(document.createTextNode("There are no Images in this Gallery"));
			me.contentDiv.appendChild(h3);
		}
		
		if(me.admin)
			me.showForm();
	};
	
	
	this.showSingleView = function(image) {
		clearNode(me.contentDiv);
		
		var singleLabel = document.createElement("h1");
		singleLabel.appendChild(document.createTextNode("Viewing Single Image"));
		me.contentDiv.appendChild(singleLabel);
		
		var table = document.createElement("table");
		me.contentDiv.appendChild(table);
		
		var tbody = document.createElement("tbody");
		table.appendChild(tbody);

		var tr = document.createElement("tr");
		var td = document.createElement("td");
		
		if(me.admin) {

			td.className = "label";
			var label = document.createElement("label");
			label.appendChild(document.createTextNode("Title: "));
			td.appendChild(label);
			tr.appendChild(td);
			
			td = document.createElement("td");
			td.style.textAlign = "left";
			var headingInput = document.createElement("input");
			headingInput.style.width = "400px";
			headingInput.type = "text";
			headingInput.id = "headingInput";
			headingInput.value = image.title;
			td.appendChild(headingInput);
			
		} else if(image.title) {
			td.colSpan = 2;
			var heading = document.createElement("h2");
			heading.appendChild(document.createTextNode(image.title));
			td.appendChild(heading);
		}
		tr.appendChild(td);
		tbody.appendChild(tr);
		
		var img = document.createElement("img");
		var size = me.admin ? 250 : 400;
		img.src= "/lib/php/fnc/image.html?w="+size+"&url="+image.img_path;
		img.img_path = image.img_path;
		img.alt = image.title ? image.title : "Northern Log And Timber Image";
		img.title = image.title ? image.title : "Northern Log And Timber Image";
		
		var lightboxLink = document.createElement("a");
		lightboxLink.rel = "lightbox[tests]";
		lightboxLink.href = "/lib/php/fnc/image.html?w=400&url="+image.img_path;
		lightboxLink.title = image.title;
		
		lightboxLink.appendChild(img);
		
		var tr = document.createElement("tr");
		var td = document.createElement("td");
		td.style.textAlign = "left";
		td.style.width = size+"px";
		td.appendChild(lightboxLink);
		tr.appendChild(td);
		
		td = document.createElement("td");
		td.style.textAlign = "left";
		
		if(me.admin) {
			var descriptionInput = document.createElement("textarea");
			descriptionInput.style.width = "400px";
			descriptionInput.style.height = "200px";
			
			descriptionInput.value = image.description;
			
			td.appendChild(descriptionInput);
		} else {
			var p = document.createElement("p");
			p.appendChild(document.createTextNode(image.description));
			
			td.appendChild(p);
		}
		tr.appendChild(td);
		
		tbody.appendChild(tr);
		
		if(me.admin) {
			var submitBtn = document.createElement("button");
			submitBtn.appendChild(document.createTextNode("Save"));
			
			submitBtn.onclick = function() {
				// modifying image
				if(BROWSER == IE) {
					var frm = document.createElement("<form enctype=\"multipart/form-data\">");
				} else {
					var frm = document.createElement("form");
				}
				frm.action = "/lib/image_gallery/saveImage.php";
				frm.method = "post";
				frm.target = "post_target";
				document.body.appendChild(frm);
				
				var input = document.createElement("input");
				input.type = "hidden";
				input.name = "id";
				input.value = image.id;
				frm.appendChild(input);
				
				var input = document.createElement("input");
				input.type = "hidden";
				input.name = "title";
				input.value = headingInput.value;
				frm.appendChild(input);
	
				var input = document.createElement("input");
				input.type = "hidden";
				input.name = "description";
				input.value = descriptionInput.value;
				frm.appendChild(input);
	
				var input = document.createElement("input");
				input.type = "hidden";
				input.name = "sectionId";
				input.value = image.sectionId;
				frm.appendChild(input);
	
				var input = document.createElement("input");
				input.type = "hidden";
				input.name = "image_path";
				input.value = image.img_path;
				frm.appendChild(input);
				
				frm.submit();
				
				me.setMode(ImageGallery.VIEW);
			};
			
			tr = document.createElement("tr");
			td = document.createElement("td");
			td.style.textAlign = "left";
			td.colSpan = 2;
			
			var removeBtn = document.createElement('button');
			removeBtn.style.cssFloat = "right";
			removeBtn.style.styleFloat = "right";
			removeBtn.appendChild(document.createTextNode("Remove"));
			removeBtn.image = image;
			removeBtn.onclick = function() {
				if(confirm("Are you sure you want to remove this Image from the Image Gallery?")) {
					var remIfm = document.createElement("iframe");
					document.body.appendChild(remIfm);
					remIfm.style.display = "none";
					remIfm.src = "/lib/image_gallery/removeImage.php?id="+this.image.id+"&sectionId="+me.sectionId;
					me.setMode(me.mode);
				}					
			};
			td.appendChild(removeBtn);
			td.appendChild(submitBtn);
			
			td.appendChild(document.createTextNode(" "));
	
			var cancelBtn = document.createElement('button');
			cancelBtn.appendChild(document.createTextNode("Cancel"));
			cancelBtn.image = image;
			cancelBtn.onclick = function() {
				me.setMode(ImageGallery.VIEW);
			};
			td.appendChild(cancelBtn);
			tr.appendChild(td);
			
			tbody.appendChild(tr);
		}
		
		var backLink = document.createElement("a");
		backLink.appendChild(document.createTextNode("Back to Gallery"));
		backLink.href = "javascript:void(0);";
		backLink.onclick = me.drawGalleryView;
		
		me.contentDiv.appendChild(backLink);
		
	};
	
	this.setMode = function(mode) {
		showLoadingBar(me.contentDiv, true);
		me.mode = mode;
		me.draw();
	};
	
	this.getList = function() {
		showLoadingBar(me.contentDiv, true);
		xml.list(me.sectionId, me.type, me.getListResponse);
	};
	
	this.getListResponse = function(response) {
		me.imagesResponse = null; 
		me.imagesResponse = response;
		me.drawGalleryView();
	};
	
	this.init = function() {
		if(!me.div) { throw Exception("No Output Div"); };
		if(!me.sectionId) { throw Exception("No Section Id"); };
		
		me.div.style.marginTop = "20px";
				
		me.contentDiv = document.createElement("div");
		me.contentDiv.appendChild(document.createTextNode("contentDiv"));
		
		me.div.appendChild(me.contentDiv);
		

		me.ifrm = null;
		if(BROWSER == IE) {
			me.ifrm = document.createElement("<iframe name=\"post_target\">");
		} else {
			me.ifrm = document.createElement("iframe");
			me.ifrm.name = "post_target";
		}
		me.ifrm.src = "/lib/image_gallery/saveImage.php";
		me.ifrm.parentBinding = this;
		me.ifrm.style.display = "none";
		me.div.appendChild(me.ifrm);
		
		showLoadingBar(me.contentDiv, true);
		me.draw();
	};
	
	var me = this;
	var xml = new ImageGalleryXML();
	this.div = div;
	this.ifrm = null;
	this.admin = admin;
	this.type = type;
	this.contentDiv = null;
	this.sectionId = sectionId;
	this.mode = ImageGallery.VIEW;
	this.imagesResponse = null;
	this.maxUploadSize = maxUploadSize;
	this.init();
}

ImageGallery.VIEW = 0;
ImageGallery.NEW = 1;

ImageGallery.GALLERY = 0;
ImageGallery.PRODUCT = 1;