//$Log: gallery_main.js,v $
//Revision 1.11  2008/07/11 12:40:16  diginnet
//implement code to present sub-galleries in
//alphabetical order.
//
//If a sort order needs to be forced, prepend by n(nn...)_
//e.g., 01_Zoo 02_Potatoes 03_A_Gallery ... 10_Beware_Single_Digits
//
//Revision 1.10  2008/07/11 10:46:56  diginnet
//replace digits by spaces in gallery names
//(as well as existing underscore => space)
//
//Revision 1.9  2008/03/21 10:38:43  diginnet
//check img ctr before starting thumb load timer
//
//Revision 1.7  2007/09/15 14:42:29  diginnet
//Fix for non-displaying thumbnails in I.E. < 7
//Seems to be caused by a resource problem.
//Fix involves using a timer to use background thread to
//load thumbnails.
//Watch this space ...
//
//Revision 1.6  2007/08/25 12:17:53  diginnet
//changes for new site
//
//Revision 1.5  2007/03/26 07:19:05  diginnet
//Add code to galleryEntry() to
//force redirection.
//Implemented to allow test web sites
//to be set up and accessed via user login
//
//Revision 1.4  2006/11/06 11:41:10  imogen
//add confirmGalleryRename()
//
//Revision 1.3  2006/10/20 09:53:56  imogen
//Change gallery page entry function
//names
// init() ==> galleryEntry()
// pageExit() ==> galleryExit()
//
//Revision 1.2  2006/08/25 10:23:56  imogen
//added
//
//scrollTop = 0;
//
//to thumbnail loading so that the user
//is taken to the top of the div
//
//Revision 1.1  2006/08/15 19:53:53  imogen
//initial check in
//
//Revision 1.2  2005/10/15 18:38:00  imogen
//add code for deleting single images from a gallery
//
var current_img = "";
var view_update_timer_val = 10;
var gallery_idx;
var image_idx;
var update_view = false;

var slide_show_timer_val = 2000; //millisecs
var slide_show_running = false;
var load_thumb_idx = 0;
var thumb_src_timer;

//attempt to solve file-order problem ...
var sorted_gallery = new Array();

function sort_gallery_asc(g)
{
	g = g.sort();
}

function sort_gallery_desc(g)
{
	g = g.sort(reverse_sort);
}

//	galleryViewUpdate()
//	===================
//
//Force refresh of gallery image
//so that image borders are 
//consistent.

function galleryViewUpdate()
{
	if (update_view)
	{
		var cell = findObj("img_frame"); //table cell containing pic
		
		if (gallery_idx < 0)
		{
			return;
		}
		
		
		if (cell)
		{
			var pic = findObj('Image1');
			cell.style.width = pic.width + 50;
			cell.style.height = pic.height + 50;
			galleryViewUpdateTimerSet();
		}
			
	}
	
	return;
}

function galleryViewUpdateTimerSet()
{
	gallery_timer_view_update = setTimeout('galleryViewUpdate()', view_update_timer_val);
}

function galleryViewUpdateTimerClear()
{
	clearTimeout(gallery_timer_view_update);
}

function toggleSlideShow()
{
	if (slide_show_running)
	{
		slideShowTimerClear();
	}
	else
	{
		slideShowTimerSet();
	}
}

function slideShowTimerSet()
{
	slide_show_running = true;
	slide_show_timer = setTimeout('slideShowNext()', slide_show_timer_val);
}

function slideShowTimerClear()
{
	slide_show_running = false;
	clearTimeout(slide_show_timer);
}

function slideShowNext()
{
	if (gallery_type == "std")
	{
		nextImage();
	}
	slideShowTimerSet();
}

function galleryExit()
{
	saveCookies();
}
  	
function galleryEntry(gidx)
{
	if (gallery_redirect_doc)
	{
		window.location = gallery_redirect_doc;
	}
	

	for (i = 0; i < gallery_ctr; ++i)
	{
		sorted_gallery[i] = gallery_name[i];
	}

	sort_gallery_asc(sorted_gallery);
	
	setGalleryByName(sorted_gallery[gidx]);	

	loadImg(gallery_idx, 0);
	loadCookies();
	toggleDelete();
}


function setUploadGallery()
{
	var uld = findObj("upload_gallery");
	var ufn = findObj("photo");
	
	if (!ufn)
	{
		alert("unable to find image name");
		return false;
	}
	
	if (ufn.value == "")
	{
		alert("Empty image name");
		return false;
	}
	
	if (!uld)
	{
		alert("unable to find upload_gallery");
		return false;
	}
	
	uld.value = gallery_name[gallery_idx];
	
	var hidden_field = findObj("upload_gallery_index");
	
	if (!hidden_field)
	{
		alert("Can't find upload_gallery_index field");
		return false;
	}
	
	hidden_field.value = gallery_idx;

	return true;

}

function toggleDelete()
{
	
	var toggle = findObj("delete_checkbox");
	var span = findObj("delete_image");
	
	if (!toggle)
	{
		return;
	}
	
	if (toggle.checked)
	{
		span.style.visibility = "visible";
		return;
		
	}
	else
	{
		span.style.visibility = "hidden";
		return;
	}
	
	
}

function uncheckDelete()
{
	var delete_checkbox = findObj("delete_checkbox");
	
	if (!delete_checkbox)
	{
		return;
	}

	delete_checkbox.checked = false;
	toggleDelete();
}

function confirm_gallery_rename()
{
	
	var rname = findObj("rename_gallery_newname");
	
	if (!rname)
	{
		alert("unable to find rename_gallery_name");
		return false;
	}
	
	if (rname.value == "")
	{
		alert("Blank gallery name");
		return false;
	}
	
	var confirm_rename = confirm("Are you sure that you want to rename\nthe gallery " + 
					gallery_name[gallery_idx] + 
					" to " + rname.value + " ? ");
	
	if (!confirm_rename)
	{
		rname.value = "";
		return false;
	}
	
	findObj("rename_gallery_oldname").value = gallery_name[gallery_idx];
	
	return true;


}

function confirm_gallery_delete()
{
	
	var dgname = findObj("delete_gallery_name");
	
	if (!dgname)
	{
		alert("unable to find delete_gallery_name");
		return false;
	}
	
	var confirm_delete = confirm("Are you sure that you\nwant to delete\nthe entire gallery:\n " + gallery_name[gallery_idx] + " ? ");
	
	if (!confirm_delete)
	{
		dgname.value = "";
		return false;
	}
	
	dgname.value = gallery_name[gallery_idx];
	
	return true;


}

function delete_img()
{
	//get confirmation before submitting the request
	
	//set the value of the hidden field
	var hidden_field = findObj("image_to_delete");
	
	if (!hidden_field)
	{
		alert("Can't find image_to_delete field");
		return false;
	}
	
	hidden_field.value = current_img;
	
	var hidden_field = findObj("delete_gallery_index");
	
	if (!hidden_field)
	{
		alert("Can't find delete_gallery_index field");
		return false;
	}
	
	hidden_field.value = gallery_idx;
	
	var confirm_delete = confirm("Delete : " + current_img + " ? ");
	
	return confirm_delete;
	
}


function load_thumbs()
{
	var t_img = new Array();
	var t_anchor = new Array();
	var t_anchor_txt = new Array();
	var gallery_name_character_limit = 52;
	var gallery_name_character_count = 0;
	var gallery_list_row_limit = 4;

	thumbSrcTimerClear();

	showBasketOrderForm(false);
	showBasketCheckoutForm(false);

	doc_body=document.getElementsByTagName("body").item(0);
	thumb_div = document.getElementById("thumbdiv");
	if (!thumb_div)
		{
			alert("can't get thumb_div");
		}

	if (first_time == 1)
	{
		var gallery_list_div = document.getElementById("gallerylist");
		var gallery_list_table = document.createElement("TABLE");
		var gallery_list_table_body = document.createElement("TBODY");
		var gallery_list_table_row = document.createElement("TR");
		var gallery_list_table_cell = new Array();
		var gallery_anchor = new Array();
		var gallery_anchor_text = new Array();
		var i;

		gallery_list_div.style.fontSize = "10pt";
		gallery_list_table_row.align = "center";

		gallery_list_table.cellSpacing = "0";
		gallery_list_table.cellPadding = "10";

		gallery_list_div.appendChild(gallery_list_table);
		gallery_list_table.appendChild(gallery_list_table_body);
		gallery_list_table_body.appendChild(gallery_list_table_row);


		for (i = 0; i < gallery_ctr; ++i)
		{
			var tab_text = gallery_name[getGalleryIdxFromName(sorted_gallery[i])].replace(/^[0-9]*_*/, "").replace(/_/g, " ");

			gallery_name_character_count += tab_text.length;

			if (i > 0
				&& gallery_name_character_count >= gallery_name_character_limit)//(i % gallery_list_row_limit) == 0)
			{	//add another row to the table
				gallery_list_table_row = document.createElement("TR");
				gallery_list_table_body.appendChild(gallery_list_table_row);
				gallery_name_character_count = 0;
			}

			gallery_list_table_cell[i] = document.createElement("TD");
			//gallery_list_table_cell[i].style.backgroundColor = "#555555";
	
			gallery_list_table_row.appendChild(gallery_list_table_cell[i]);

			gallery_anchor[i] = document.createElement("a");
			//gallery_anchor[i].className = "navlink";
			gallery_anchor[i].style.border = "none";
			gallery_anchor[i].style.textDecoration = "none";
			gallery_anchor[i].href = 'javascript:setGalleryByName("'
					+gallery_name[getGalleryIdxFromName(sorted_gallery[i])]
					+'");';

			gallery_anchor_text[i] = document.createTextNode(tab_text);
			gallery_anchor[i].appendChild(gallery_anchor_text[i]);
			gallery_list_table_cell[i].appendChild(gallery_anchor[i]);
		}

		first_time = 0;
		galleryViewUpdateTimerSet();
	}

	if (thumb_table)
	{
		thumb_div.removeChild(thumb_table);
	}
	
	thumb_table = document.createElement("div");
	thumb_div.appendChild(thumb_table);

	thumb_table.style.overflow 		=	"auto";
	thumb_table.style.width		=	"240px";
	//thumb_table.style.height		=	"70px";
	img_idx = 0;

	try
	{
		if (gallery_img_ctr[gallery_idx] == 0)
		{
			findObj("admin_thumb_para").style.display = 'none';
		}
		else
		{
			findObj("admin_thumb_para").style.display = 'block';
		}
	}
	catch (e) {}
	
	while(img_idx < gallery_img_ctr[gallery_idx])
	{

		t_img[img_idx] = document.createElement("img");
		t_img[img_idx].id = "thumb_" + img_idx;
		t_img[img_idx].className = "thumb_image";
		t_anchor[img_idx] = document.createElement("a");
		t_anchor[img_idx].id = "thumb_anchor_" + img_idx;
		t_anchor[img_idx].style.cssFloat = "left";
		t_anchor[img_idx].style.styleFloat = "left";	//IE

		t_anchor[img_idx].href = 'javascript:loadImg('
					+gallery_idx + ',' +img_idx + ');';
		t_anchor[img_idx].appendChild(t_img[img_idx]);

		thumb_table.appendChild(t_anchor[img_idx]);
		//thumb_table_cell[img_idx].appendChild(addThumbnail(gallery_idx, img_idx));
		++img_idx;
	}

	//Add a timer to offload the thumbnail image
	//loading onto a background thread.
	//This is a fix for problems with IE < 7
	//Hope it works ...
	load_thumb_idx = 0;
	
	if (gallery_img_ctr[gallery_idx] > 0)
	{
		thumbSrcTimerSet();
	}

}


var thumb_timer_val = 5;

function thumbSrcTimerSet()
{
	thumb_src_timer = setTimeout('thumbSrcLoad()', thumb_timer_val);
}

function thumbSrcTimerClear()
{
	clearTimeout(thumb_src_timer);
}

function thumbSrcLoad()
{
	
	var thumb = findObj("thumb_"+load_thumb_idx);
	
	if (!thumb)
	{
		alert("unable to find thumb_" + load_thumb_idx);
		thumbSrcTimerClear();
		return;
	}
	
	thumb.src = img_array[gallery_idx][load_thumb_idx];
	//thumb.width = 70;
	//thumb.height = 70;
	thumb.alt = "Imogen Photographic Gallery Image";
	++load_thumb_idx;
	
	if (load_thumb_idx < gallery_img_ctr[gallery_idx])
	{
		thumbSrcTimerSet();
		return;
	}
	
	load_thumb_idx = 0;
	thumbSrcTimerClear();
	return;
}

function getGalleryIdxFromName(gname)
{
	for (var gidx = 0; gidx < gallery_ctr; ++gidx)
	{
		if (gname == gallery_name[gidx])
		{
			return gidx;
		}
	}
	
	return -1;
	
}


function getImgIdxFromName(gidx, iname)
{
	//alert("searching for " + iname + 
	//	" in gallery[" + gidx + "] = " +
	//	gallery_name[gidx]);
		
	for (iidx = 0; iidx < gallery_img_ctr[gidx]; ++iidx)
	{
		//alert("image [" + gidx + "][" + iidx + "] = "
		//	+ img_array[gidx][iidx].replace(/.*\//, ""));
			
		if (iname.replace(/.*\//, "") == img_array[gidx][iidx].replace(/.*\//, ""))
		{
			return iidx;
		}
	}
	
	return -1;
}



function nop()
{
	return;
}


function loadImg(gidx, iidx)
{
	
	var x = findObj('Image1');
	
	var delete_checkbox = findObj('delete_checkbox_span');
	
	//alert("loading img[" + gidx + "][" + iidx +"]");
	
	if (!x)
	{
  		return;
	}

	var img_exif_div = findObj("img_exif_div");
	if (img_exif_div != null)
	{
		img_exif_div.innerHTML = '';
		img_exif_div.style.display = 'none';
	}
	if (gidx == -1 || gallery_img_ctr[gallery_idx] == 0)
	{
		x.src = "images/blank_pic.gif"
		if (delete_checkbox)
		{
			delete_checkbox.style.visibility = "hidden";
			delete_checkbox.checked = false;
		}

		showBasketIcons(gidx, iidx);
		
		return;
		
	}

	if (img_array[gidx])
	{
	
		x.src = img_array[gidx][iidx].replace(/thumb/, "slide_show");
	
		x.style.visibility = "visible";

		var admin_thumb = findObj("admin_thumb");
		
		if (admin_thumb != null)
		{
			admin_thumb.src = img_array[gidx][iidx];
			admin_thumb.title = img_array[gidx][iidx];
		}

		current_img = x.src.replace(/.*gallery/, "");
		uncheckDelete();
		if (delete_checkbox)
		{
			delete_checkbox.style.visibility = "visible";
		}
		
		gallery_idx = gidx;
		img_idx = iidx;
		
		showBasketIcons(gidx, iidx);
		
		gallery_idx = gidx;
		image_idx = iidx;
		update_view = true;
		
		return;
		
	}

	return;
}

function nextImage()
{
//	alert("next image");
		if (image_idx >= (gallery_img_ctr[gallery_idx] - 1))
		{
			image_idx = -1;
		}
		
		loadImg(gallery_idx, image_idx + 1);

}	

function prevImage()
{
//	alert("previous image");
		loadImg(gallery_idx, image_idx - 1);

}	

function nextGallery()
{
//	alert("next gallery");
		setGallery(++gallery_idx);

}	

function prevGallery()
{
//	alert("prev gallery");
		setGallery(--gallery_idx);
	
}

function setGalleryByName(gname)
{
	var i;

	for (i = 0; i < gallery_ctr && gname != gallery_name[i]; ++i);

	if (i >= gallery_ctr)
	{
		i = 0;
	}
	
	setGallery(i);

	return;
}


function setGallery(gidx)
{
//	alert("next gallery");

	var admin_thumb = findObj("admin_thumb");

	if (admin_thumb != null)
	{
		admin_thumb.src = '';
	}
	
	var prev_gallery_label = document.getElementById('prev_gallery_label');
	var curr_gallery_label = document.getElementById('current_gallery_label');
	var next_gallery_label = document.getElementById('next_gallery_label');
	var prev_gallery_label_idx = 0;
	var next_gallery_label_idx = 0;
	
	
	gallery_idx = gidx;
	
	
	img_idx = -1;
	
	if (gallery_idx >= gallery_ctr)
	{
		gallery_idx = 0;
	}
	else if (gallery_idx < 0)
	{
		gallery_idx = gallery_ctr - 1;
	}
	
	prev_gallery_label_idx = gallery_idx - 1;
	next_gallery_label_idx = gallery_idx + 1;
	
	if (prev_gallery_label_idx < 0)
	{
		prev_gallery_label_idx = gallery_ctr - 1;
	}
	
	if (next_gallery_label_idx >= gallery_ctr)
	{
		next_gallery_label_idx = 0;
	}
	
	gallery_type = "std";
	img_idx = 0;
	loadImg(gidx, img_idx);
	load_thumbs();

	var gallery_thumb_drag = findObj("gallery_thumb_drag_span");
	if (gallery_thumb_drag != null)
	{
		gallery_thumb_drag.innerHTML = gallery_name[gidx].replace(/_/g, " ");
	}
	else
	{
		gallery_thumb_drag.innerHTML = "";
	}

	var img_exif_div = findObj("img_exif_div");
	if (img_exif_div != null)
	{
		img_exif_div.innerHTML = '';
		img_exif_div.style.display = 'none';
	}

	showObject('sort_g_asc');
	showObject('sort_g_desc');
	showObject('slide_show');
	hideObject('your_basket');
	
	return;	
}	

/*
	This function will be called as a result of eval()ing the returned string
	from an AJAX call.
	The image deletion is done asynchronously.
*/
function del_img_async(rc, del_gallery, img_to_delete)
{

	if (rc < 0)
	{
		alert("async delete failed : rc = " + rc);
		return;
	}
	
	var del_gallery_idx = getGalleryIdxFromName(del_gallery);

	if (img_to_delete.substr(0,1) == "/")
	{
		img_to_delete = img_to_delete.substr(1);
	}
	var del_img_idx = getImgIdxFromName(del_gallery_idx, img_to_delete);

	//here goes ...
	var t_anchor = findObj("thumb_anchor_" + del_img_idx);
	var t_img = findObj("thumb_" + del_img_idx);
	
	if (t_anchor == null || t_img == null)
	{
		alert("unable to find " + "thumb_anchor_" + del_img_idx);
		return;
	}

	var t_parent = t_anchor.offsetParent;
	img_array[del_gallery_idx].splice(del_img_idx, 1);
	t_anchor.removeChild(t_anchor.childNodes[0]);
	
	--gallery_img_ctr[gallery_idx];
	
	setGallery(del_gallery_idx);

 }

function image_move_gallery_async(rc, del_gallery)
{
	//to be completed ...
}

function gallery_new_async(rc, add_gallery)
{
	if (rc < 0)
	{
		alert("async new gallery failed : rc = " + rc
				+ " " + add_gallery);
		return;
	}

	//alert("new gallery created successfully");
	//splice the gallery array and re-sort.
	
	img_array[gallery_ctr] = new Array();
	img_buy[gallery_ctr] = new Array();
	gallery_img_ctr[gallery_ctr] = 0;
	gallery_name[gallery_ctr] = add_gallery;
	++gallery_ctr;

	findObj('gallerylist').innerHTML = '';

	for (var i = 0; i < gallery_ctr; ++i)
	{
		sorted_gallery[i] = gallery_name[i];
	}
	sort_gallery_asc(sorted_gallery);

	first_time = 1;
	load_thumbs();
	setGallery(getGalleryIdxFromName(add_gallery));
	findObj('new_gallery_to_create').value = '';
	toggleObjectDisplay('new_gallery_admin', 'block');
 }

 function gallery_rename_async(rc, old_gallery, new_gallery)
 {
	if (rc < 0)
	{
		alert("async rename failed : rc = " + rc);
		return;
	}

	var ren_gallery_idx = getGalleryIdxFromName(old_gallery);
	if (ren_gallery_idx < 0)
	{
		alert("Failed to find " + old_gallery + ", unable to rename it"
			+ "\n\nN.B. It may have been renamed on the server - reload to refresh");
		return;
	}
	
	gallery_name[ren_gallery_idx] = new_gallery;

	findObj('gallerylist').innerHTML = '';

	for (var i = 0; i < gallery_ctr; ++i)
	{
		var name_ = gallery_name[i];
		//alert('gallery_name[i] : ' + gallery_name[i]
		//	+ '\nold_gallery : ' + old_gallery);

		//need to change all values of old gallery name to new gallery name
		//in the gallery array
		if (name_ == new_gallery)
		{
			for (var j = 0; j < img_array[i].length; ++j)
			{
				var img_name = img_array[i][j];
				a = img_name.indexOf('thumb/' + old_gallery);
				var new_img_name = img_name.substr(0, a) + 'thumb/' + new_gallery
								+  img_name.substr(a + 6 + old_gallery.length);
				img_array[i][j] = new_img_name;
			}
			name_ = new_gallery;
			gallery_name[i] = name_;
		}
		sorted_gallery[i] = name_;
	}

	sort_gallery_asc(sorted_gallery);

	first_time = 1;
	load_thumbs();
	setGallery(getGalleryIdxFromName(new_gallery));
	findObj('gallery_rename_textbox').value = '';
	toggleObjectDisplay('gallery_rename_div', 'block');
	
 }

 function gallery_del_async(rc, del_gallery)
 {

	if (rc < 0)
	{
		alert("async gallery delete [" + del_gallery + "] failed : rc = " + rc);
		return;
	}

	//remove from gallery display
	//alert("Success, aparently ...");

	findObj('gallerylist').innerHTML = '';

	var idx = getGalleryIdxFromName(del_gallery);
	img_array.splice(idx, 1);
	img_buy.splice(idx, 1);
	gallery_img_ctr.splice(idx, 1);
	gallery_name.splice(idx, 1);

	--gallery_ctr;
	
	for (var i = 0; i < gallery_ctr; ++i)
	{
		sorted_gallery[i] = gallery_name[i];
	}
	
	sorted_gallery.splice(gallery_ctr, 1);
	sort_gallery_asc(sorted_gallery);

	setGallery(getGalleryIdxFromName(sorted_gallery[0]));
	first_time = 1;
	load_thumbs();
	

	
 }

function getFrameByName(name)
{
	for (var i = 0; i < frames.length; i++)
	if (frames[i].name == name)
		return frames[i];

	return null;
}
function uploadDone(frame)
{
	var f = getFrameByName(frame);

	if (!f)
	{
		alert("gallery_file_iframe not found");
		return;
	}

	var inner = f.document.getElementsByTagName("body")[0].innerHTML;
	eval(inner);

	if (rc < 0)
	{
		alert("Error uploading file [" + ugal + "][" + fname + "] " + err_msg);
		return;
	}

	var ugal_idx = getGalleryIdxFromName(ugal);

	if (ugal_idx < 0)
	{
		alert("unable to find " + ugal);
		return;
	}

	var t_img = gallery_base_dir + "/" + user_gallery + "/thumb/" + ugal + "/" + fname;
	img_array[ugal_idx][gallery_img_ctr[ugal_idx]] = t_img;
	img_buy[gallery_idx][gallery_img_ctr[ugal_idx]] = false;
	++gallery_img_ctr[ugal_idx];
	setGallery(ugal_idx);
	loadImg(ugal_idx, gallery_img_ctr[ugal_idx] - 1);
	findObj("img_upload_file_para").style.display = 'none';

}
