
///////////////////////////////////////////////////////////////////////////////////////
//	
//		Image Gallery script for www.houseofbits.com
//			Copyright(c)2008 Krists Pudzens (hobitz@zb.lv)
//	
//		1.0
//			- Tested with: ie6,7, opera9, win safari 3, firefox 2,3
//			- added thumbnail image preloading. ie6 can't get stright even this
///////////////////////////////////////////////////////////////////////////////////////

var preload_image_array = new Object();
var preload_arr_size = 0;

function AddPreloadImage(dst_image, src_address){
	preload_image_array[preload_arr_size] = {
												destiny_image : dst_image,
												source_image : new Image()
											};
	preload_image_array[preload_arr_size].source_image.image_array_index = preload_arr_size;
	preload_image_array[preload_arr_size].source_image.onload = function(){	
		preload_image_array[this.image_array_index].destiny_image.src = this.src;
		preload_image_array[this.image_array_index].destiny_image.width = this.width;
		preload_image_array[this.image_array_index].destiny_image.height = this.height;
		preload_image_array[this.image_array_index] = "";
	}	
	preload_image_array[preload_arr_size].source_image.src = src_address;		//load
	preload_arr_size++;
}

//background flicker in ie6 due to image reloading from server
//http://www.mister-pixel.com/#Content__state=is_that_simple
try {
  document.execCommand("BackgroundImageCache", false, true);
} catch(err) {}

///////////////////////////////////////////////////////////////////////////////////////
//	galery collection object
///////////////////////////////////////////////////////////////////////////////////////
var GalleryCollection = {
	image_id_offset : 20,
	animation_speed : 7,
	galleries : new Object(),
	current_image : "",
	current_gallerty : "",
	//image_viewer_is_open : 0,			//old
	animation_step_timer_id : 0,
	active_gallery : 0,
	//
	InitiateGalleries : function(){
		var gallery_array = getElementsByClass("gallery", document, "div");				
		for(var i=0; i<gallery_array.length; i++){	
			if(gallery_array[i].id){
				GalleryCollection.galleries[gallery_array[i].id] = new SlideGalleryClass();
				GalleryCollection.galleries[gallery_array[i].id].gallery_title = gallery_array[i].title;
				GalleryCollection.image_id_offset = GalleryCollection.galleries[gallery_array[i].id].Initiate(gallery_array[i], GalleryCollection.image_id_offset);
				gallery_array[i].className = "gallery_ok";
			}
		}
	},
	//
	AnimationStep : function(){
	//	if(GalleryCollection.image_viewer_is_open)return false;
		//for(gal in GalleryCollection.galleries){
		//	GalleryCollection.galleries[gal].AnimateImages(GalleryCollection.animation_speed);
		//}
		if(GalleryCollection.galleries[GalleryCollection.active_gallery] && GalleryCollection.galleries[GalleryCollection.active_gallery].num_pics>=5)GalleryCollection.galleries[GalleryCollection.active_gallery].AnimateImages(GalleryCollection.animation_speed);
		clearTimeout(GalleryCollection.animation_step_timer_id);
		GalleryCollection.animation_step_timer_id = 0;
		//if(!GalleryCollection.animation_step_timer_id){
		GalleryCollection.animation_step_timer_id = setTimeout("GalleryCollection.AnimationStep()", 33);		//30 frames per second
		//}
	},
	//
	OnImageViewerOpen : function(){
		clearTimeout(GalleryCollection.animation_step_timer_id);
		GalleryCollection.animation_step_timer_id = 0;
	},
	OnImageViewerClose : function(){
		if(!GalleryCollection.animation_step_timer_id)GalleryCollection.animation_step_timer_id = setTimeout("GalleryCollection.AnimationStep()", 33);		
	},
	//
	SelectImage : function(e){
		e = e || window.event; 
		var node = e.target || e.srcElement;
		var parent = 0;	
		
		if(node.tagName == "IMG"){
			node = node.parentNode;	
		}
		GalleryCollection.active_gallery = 0;
		parent = node.parentNode;
		if(!node || !parent || !node.id || !parent.id)return false;		
		
		if(GalleryCollection.galleries[parent.id]){
			GalleryCollection.active_gallery = parent.id;
			GalleryCollection.galleries[parent.id].SelectImage(node.id);			
		}
	},
	//GetNextGallery : 
	//GetPreviousGallery : 
	//
	GetNextImage : function(){
		if(!GalleryCollection.galleries[GalleryCollection.current_gallery])return 0;
		if(!GalleryCollection.galleries[GalleryCollection.current_gallery].gallery_images[GalleryCollection.current_image])return 0;
		if(!GalleryCollection.galleries[GalleryCollection.current_gallery].gallery_images[GalleryCollection.current_image].neighbours.next)return 0;
		return GalleryCollection.GetImage(GalleryCollection.current_gallery, GalleryCollection.galleries[GalleryCollection.current_gallery].gallery_images[GalleryCollection.current_image].neighbours.next);	
	},
	// 
	GetPreviousImage : function(){
		if(!GalleryCollection.galleries[GalleryCollection.current_gallery])return 0;
		if(!GalleryCollection.galleries[GalleryCollection.current_gallery].gallery_images[GalleryCollection.current_image])return 0;
		if(!GalleryCollection.galleries[GalleryCollection.current_gallery].gallery_images[GalleryCollection.current_image].neighbours.previous)return 0;
		return GalleryCollection.GetImage(GalleryCollection.current_gallery, GalleryCollection.galleries[GalleryCollection.current_gallery].gallery_images[GalleryCollection.current_image].neighbours.previous);	
	},
	//
	GetImage : function(gallery_id, image_id){
		if(gallery_id && GalleryCollection.galleries[gallery_id]){
			if(image_id && GalleryCollection.galleries[gallery_id].gallery_images[image_id]){
				GalleryCollection.current_image = image_id;
				GalleryCollection.current_gallery = gallery_id;
				return {	target_img : GalleryCollection.galleries[gallery_id].gallery_images[image_id].target_image_name, 
							image_num : GalleryCollection.galleries[gallery_id].gallery_images[image_id].image_number + 1, 
							num_pics : GalleryCollection.galleries[gallery_id].num_pics, 
							description : GalleryCollection.galleries[gallery_id].gallery_images[image_id].description, 	
							title : GalleryCollection.galleries[gallery_id].gallery_title,
							id : image_id
							};
			}			
		}
		return 0;
	}	
}

///////////////////////////////////////////////////////////////////////////////////////
//
addEvent(window, "load", GalleryCollection.InitiateGalleries, 0);
addEvent(document, "mouseover", GalleryCollection.SelectImage, 0);
//setInterval("GalleryCollection.AnimationStep()", 33);		//30 frames per second
GalleryCollection.AnimationStep();

///////////////////////////////////////////////////////////////////////////////////////
//	image viewer object
///////////////////////////////////////////////////////////////////////////////////////
	
var ImageViewer = {
	//nodes
	overlay : 0,
	image_container : 0,
	title_bar : 0,
	navigation_bar : 0,
	image : 0,
	loading_image : 0,
	title : 0,
	numbers : 0,
	descr : 0,
	image_left : 0,
	image_right : 0,
	//animation temporaries
	current : {width:0, height:0},
	desired : {width:0, height:0},
	axis_speed : {xs : 0, ys : 0},	
	//settings				
	speed : 10,				//unused
	time_to_finish : 300,
	//global temporaries
	intervalId : 0,
	image_object : 0,
	
	title_text : "",
	description_text : "",
	current_num : 0,
	num_images : 0,
	//
	regexp_image : new RegExp("image"),
	//
	InitiateImageViewer : function(){
		var page_size = getPageSize();
		
		ImageViewer.overlay = document.createElement("div");
		ImageViewer.overlay.id = "image_container_overlay";
		ImageViewer.overlay.style.width = "100%";
		ImageViewer.overlay.style.height = page_size[1] + "px";
		ImageViewer.overlay.style.top = "0px";
		ImageViewer.overlay.style.left = "0px";
		ImageViewer.overlay.style.zIndex = "95";
		ImageViewer.overlay.style.visibility = "hidden";
		
			var body_node = document.getElementsByTagName("body")[0];
			body_node.insertBefore(ImageViewer.overlay, body_node.firstChild);
			
			ImageViewer.title_bar = document.createElement("div");
			ImageViewer.title_bar.id = "image_title_bar";
			ImageViewer.title_bar.style.width = "100px";
			//ImageViewer.title_bar.style.height = "20px";
			ImageViewer.title_bar.style.zIndex = "100";
			ImageViewer.title_bar.style.top = "0px";
			ImageViewer.title_bar.style.left = "0px";	
			ImageViewer.title_bar.style.visibility = "hidden";	
			
			var span = document.createElement("span");
							
			ImageViewer.title = document.createTextNode("");
			span.id = "image_title_text";
			span.style.zIndex = "200";
			span.appendChild(ImageViewer.title);
		
			ImageViewer.title_bar.appendChild(span);
			
			//close button
			span = document.createElement("a");
			span.id = "image_close_button";
			span.href = "javascript:void(0);";
			span.style.zIndex = "100";
			
			var txt = document.createTextNode("Aizvērt");
			span.appendChild(txt);
			ImageViewer.title_bar.appendChild(span);
			
			
			ImageViewer.overlay.appendChild(ImageViewer.title_bar);	
				
			ImageViewer.image_container = document.createElement("div");
			ImageViewer.image_container.id = "outer_image_container";
			ImageViewer.image_container.style.width = "100px";
			ImageViewer.image_container.style.height = "100px";
			ImageViewer.image_container.style.zIndex = "96";
			ImageViewer.image_container.style.top = "0px";
			ImageViewer.image_container.style.left = "0px";		
			
			ImageViewer.overlay.appendChild(ImageViewer.image_container);
				
				//navigate left
				ImageViewer.image_left = document.createElement("div");
				ImageViewer.image_left.id = "image_left";
				ImageViewer.image_left.className = "image_left";
				ImageViewer.image_left.style.zIndex = "100";	
				//ImageViewer.image_left.innerHTML = "ss</ br>";					
				ImageViewer.image_container.appendChild(ImageViewer.image_left);
				//navigate right
				ImageViewer.image_right = document.createElement("div");
				ImageViewer.image_right.id = "image_right";
				ImageViewer.image_right.className = "image_right";
				ImageViewer.image_right.style.zIndex = "100";	
				//ImageViewer.image_right.style.display = "block";					
				ImageViewer.image_container.appendChild(ImageViewer.image_right);				
				
				//loading indicator image
				ImageViewer.loading_image = document.createElement("img");
				ImageViewer.loading_image.src = "images/loading_small.gif";
				ImageViewer.loading_image.width = "96";
				ImageViewer.loading_image.height = "10";
				ImageViewer.loading_image.id = "image_loading";	
				ImageViewer.loading_image.style.zIndex = "98";				
				ImageViewer.image_container.appendChild(ImageViewer.loading_image);	
				
				ImageViewer.image = document.createElement("img");
				ImageViewer.image.id = "image_prev";
				ImageViewer.image.style.zIndex = "98";
				ImageViewer.image.style.display = "block";				
				ImageViewer.image_container.appendChild(ImageViewer.image);
								
			ImageViewer.navigation_bar = document.createElement("div");
			ImageViewer.navigation_bar.id = "image_nav_bar";
			ImageViewer.navigation_bar.style.width = "100px";
			ImageViewer.navigation_bar.style.height = "20px";
			ImageViewer.navigation_bar.style.zIndex = "96";
			ImageViewer.navigation_bar.style.top = "0px";
			ImageViewer.navigation_bar.style.left = "0px";						
			ImageViewer.navigation_bar.style.visibility = "hidden";	
			
			ImageViewer.overlay.appendChild(ImageViewer.navigation_bar);	
				
			//ImageViewer.navigation_bar.innerHTML = "<span id=\"image_description_text\">Lhsdf ojlmnk sdoisd fsl k sd fslkj s</span><span id=\"navigation_text\">&laquo; atpakal [1/21] talak &raquo;</span>";	
			//description text
			span = document.createElement("span");	
			span.id = "image_description_text";
			ImageViewer.navigation_bar.appendChild(span);
			ImageViewer.descr = document.createTextNode("lol");
			span.appendChild(ImageViewer.descr);
			
			span = document.createElement("a");
			span.id = "navigation_button_right";
			span.href = "javascript:void(0);";
			span.className = "navigation_button";
			ImageViewer.navigation_bar.appendChild(span);
			span.innerHTML = "&raquo;";		
			
			span = document.createElement("span");	
			span.id = "navigation_text";
			ImageViewer.navigation_bar.appendChild(span);
			ImageViewer.numbers = document.createTextNode("1/15");
			span.appendChild(ImageViewer.numbers);	
			
			span = document.createElement("a");
			span.id = "navigation_button_left";
			span.href = "javascript:void(0);";
			span.className = "navigation_button";
			ImageViewer.navigation_bar.appendChild(span);
			span.innerHTML = "&laquo;";		
			
			ImageViewer.CloseImageViewer();	
	},
	//
	ShowImageViewer : function(image_name, num, count, description, title){	
		var scroll = getPageScroll()[1];
		ImageViewer.overlay.style.paddingTop = (scroll+5)+"px";
		ImageViewer.overlay.style.visibility = "visible";
		ImageViewer.ChangeImage(image_name, num, count, description, title);
		GalleryCollection.OnImageViewerOpen();
	},
	//
	CloseImageViewer : function(){
		ImageViewer.current_image_id = 0;
		ImageViewer.image_object = 0;
		ImageViewer.overlay.style.visibility = "hidden";
		ImageViewer.image.style.visibility = "hidden";
		ImageViewer.image.style.display = "none";
		
		//ImageViewer.loading_image.style.visibility = "visible";
		//ImageViewer.loading_image.style.display = "block";		
		
		ImageViewer.image_container.style.width = "100px";
		ImageViewer.image_container.style.height = "100px";
		ImageViewer.desired.width = 100;
		ImageViewer.desired.height = 100;
		ImageViewer.current.width = 100;
		ImageViewer.current.height = 100;	
		ImageViewer.image_left.style.height = "100px";
		ImageViewer.image_right.style.height = "100px";		
		ImageViewer.image_left.style.display = "none";
		ImageViewer.image_right.style.display = "none";	
		
		ImageViewer.title_bar.style.visibility = "hidden";
		ImageViewer.navigation_bar.style.visibility = "hidden";	
		
		if(ImageViewer.intervalId){
			clearInterval(ImageViewer.intervalId);
			ImageViewer.intervalId = 0;
		}
		//GalleryCollection.image_viewer_is_open = 0;
		GalleryCollection.OnImageViewerClose();
	},
	//
	ChangeImage : function (image_name, num, count, description, title){	
		ImageViewer.title.nodeValue = title;
		ImageViewer.numbers.nodeValue = num+"/"+count;
		ImageViewer.descr.nodeValue = description;
		
		ImageViewer.title_text  = title;
		ImageViewer.description_text = description;
		ImageViewer.current_num = num;
		ImageViewer.num_images = count;

		ImageViewer.loading_image.style.visibility = "visible";
		ImageViewer.loading_image.style.display = "block";
		
		ImageViewer.image_left.style.display = "none";
		ImageViewer.image_right.style.display = "none";			
	
		ImageViewer.image.style.visibility = "hidden";
		ImageViewer.image.style.display = "none";
		ImageViewer.title_bar.style.visibility = "hidden";
		ImageViewer.navigation_bar.style.visibility = "hidden";	
		
		//lai dotu iespeeju paarrendereet lapu ar ielaades atteelu sho 
		//paarnest un citu funkciju ar delay
		ImageViewer.image_object = new Image();
		ImageViewer.image_object.onload = ImageViewer._SetupContainerAnimation;
		ImageViewer.image_object.src = image_name;
	},
	//
	_SetupContainerAnimation : function (){
		if(!ImageViewer.image_object)return 0;
		
		ImageViewer.image.src = ImageViewer.image_object.src;
		ImageViewer.image.style.display = "none";
		
		ImageViewer.desired.width = ImageViewer.image_object.width + 10;
		ImageViewer.desired.height = ImageViewer.image_object.height + 10;
			
		ImageViewer.axis_speed.xs = Math.ceil(Math.abs((ImageViewer.desired.width - ImageViewer.current.width) * 16) / ImageViewer.time_to_finish);
		ImageViewer.axis_speed.ys = Math.ceil(Math.abs((ImageViewer.desired.height - ImageViewer.current.height) * 16) / ImageViewer.time_to_finish);
		
		ImageViewer.image_left.style.height = ImageViewer.image_object.height + "px";
		ImageViewer.image_right.style.height = ImageViewer.image_object.height + "px";	
		
		ImageViewer.title_bar.style.width = ImageViewer.desired.width + "px";
		ImageViewer.navigation_bar.style.width = ImageViewer.desired.width + "px";
		
		if(ImageViewer.intervalId){
		//	clearInterval(ImageViewer.intervalId);
			clearTimeout(ImageViewer.intervalId);
			ImageViewer.intervalId = 0;
		}
		ImageViewer.intervalId = setTimeout("ImageViewer.ResizeContainerAnimation()", 33);
	//	ImageViewer.intervalId = setInterval("ImageViewer.ResizeContainerAnimation()", 16);
	},
	//
	ResizeContainerAnimation : function (){
		var ok=0;
		
		ImageViewer.speed = ImageViewer.axis_speed.xs;
		if(ImageViewer.current.width < ImageViewer.desired.width){
			if(ImageViewer.current.width + ImageViewer.speed > ImageViewer.desired.width)
				ImageViewer.current.width = ImageViewer.desired.width
			else ImageViewer.current.width += ImageViewer.speed;	
		}else if(ImageViewer.current.width > ImageViewer.desired.width){
			if(ImageViewer.current.width - ImageViewer.speed < ImageViewer.desired.width)
				ImageViewer.current.width = ImageViewer.desired.width
			else ImageViewer.current.width -= ImageViewer.speed;		
		}else ok += 1;
		
		ImageViewer.speed = ImageViewer.axis_speed.ys;
		if(ImageViewer.current.height < ImageViewer.desired.height){
			if(ImageViewer.current.height + ImageViewer.speed > ImageViewer.desired.height)
				ImageViewer.current.height = ImageViewer.desired.height
			else ImageViewer.current.height += ImageViewer.speed;	
		}else if(ImageViewer.current.height > ImageViewer.desired.height){
			if(ImageViewer.current.height - ImageViewer.speed < ImageViewer.desired.height)
				ImageViewer.current.height = ImageViewer.desired.height
			else ImageViewer.current.height -= ImageViewer.speed;	
		}else ok += 1;	
		
		ImageViewer.image_container.style.width = ImageViewer.current.width + "px";
		ImageViewer.image_container.style.height = ImageViewer.current.height + "px";
		
		if(ok>= 2){
		//	clearInterval(ImageViewer.intervalId);
			clearTimeout(ImageViewer.intervalId);
			ImageViewer.intervalId = 0;
			ImageViewer.ShowAndUpdateInfo();
			
			return false;
		}
		clearTimeout(ImageViewer.intervalId);
		ImageViewer.intervalId = 0;
		ImageViewer.intervalId = setTimeout("ImageViewer.ResizeContainerAnimation()", 16);
	},
	//
	ShowAndUpdateInfo : function (){
		ImageViewer.loading_image.style.visibility = "hidden";
		ImageViewer.loading_image.style.display = "none";	
		
		ImageViewer.image.style.visibility = "visible";
		ImageViewer.image.style.display = "block";
	
		ImageViewer.title_bar.style.visibility = "visible";
		ImageViewer.navigation_bar.style.visibility = "visible";
		
		ImageViewer.image_left.style.display = "block";
		ImageViewer.image_right.style.display = "block";	
		//set title text and description, update image number tag
	},	
	//
	ImageViewerOnClickEvent : function (e){
		e = e || window.event; 
		var node = e.target || e.srcElement;
		//navigation button events
		switch(node.id){
			case ImageViewer.overlay.id:
			case "image_close_button":
				ImageViewer.CloseImageViewer(); 
				return 1;
			break;
			case "navigation_button_right":
			case "image_right":
				var im = GalleryCollection.GetNextImage();
				if(im)ImageViewer.ChangeImage(im.target_img, im.image_num, im.num_pics, im.description, im.title);
			break;
			case "navigation_button_left":
			case "image_left":
				var im = GalleryCollection.GetPreviousImage();
				if(im)ImageViewer.ChangeImage(im.target_img, im.image_num, im.num_pics, im.description, im.title);
			break;
		}
		//click on image
		if(node.id.match(ImageViewer.regexp_image)){	//regexp match 'image'
			var parent = 0;		
			if(node.tagName == "IMG"){
				node = node.parentNode;	
			}
			parent = node.parentNode;
			if(!node || !parent || !node.id || !parent.id)return false;
			//alert(parent.id +", "+ node.id);
			var im = GalleryCollection.GetImage(parent.id, node.id);
			if(im){
				ImageViewer.ShowImageViewer(im.target_img, im.image_num, im.num_pics, im.description, im.title);
			}
		}
	},
	//
	ImageViewerMouseOverEvent : function (e){
		e = e || window.event; 
		var node = e.target || e.srcElement;
		//alert(e.id);
		if(node.id == "image_right")
			ImageViewer.image_right.className = "image_right_over";
		else if(node.id == "image_left")
			ImageViewer.image_left.className = "image_left_over";
	},
	//
	ImageViewerMouseOutEvent : function (e){
		e = e || window.event; 
		var node = e.target || e.srcElement;
		if(node.id == "image_right")
			ImageViewer.image_right.className = "image_right";
		else if(node.id == "image_left")
			ImageViewer.image_left.className = "image_left";
	},
	//
	ImageViewerOnPageScroll : function(){
	//	alert("scroll");
	//	make initial offset on showing
	},
	//
	ImageViewerOnPageResize : function(){
		
		var page_size = getPageSize();
	//	alert(page_size[1]);
		ImageViewer.overlay.style.height = page_size[1] + "px";
	}
}

///////////////////////////////////////////////////////////////////////////////////////
//
addEvent(window, "load", ImageViewer.InitiateImageViewer, 0);
addEvent(document, "click", ImageViewer.ImageViewerOnClickEvent, 0);
addEvent(document, "mouseover", ImageViewer.ImageViewerMouseOverEvent, 0);
addEvent(document, "mouseout", ImageViewer.ImageViewerMouseOutEvent, 0);
addEvent(window, "resize", ImageViewer.ImageViewerOnPageResize, 0);


///////////////////////////////////////////////////////////////////////////////////////
//	galery class
///////////////////////////////////////////////////////////////////////////////////////
function SlideGalleryClass(){
	this.num_pics = 0;
	this.frame_width = 115;
	this.galery_width = 520;
	this.height = 79;
	this.gallery_images = new Object();
	this.gallery_title = "";	
	///////////////////////////////////////////////////////////////////////////////////
	//		initiation function
	this.Initiate = function (parent_node, image_id_offset){
		if(!parent_node)return false;
			
		var doc_images	= new Object();
		var links = parent_node.getElementsByTagName('a');
		for(var i=0; i<links.length; i++){
		//	var img = links[i].firstChild;
			doc_images[i] = {
								thumbnail : links[i].rel, //img.src,
								target : links[i].href,
								comment : links[i].title
						};
		}
		
		this.num_pics = links.length;
		
		if(!doc_images || !parent_node){
			if(parent_node)parent_node.innerHTML = "<span class=\"brat\">SlideGallery init error!</span>";
			return false;
		}
		
		var _step = (this.galery_width - (this.frame_width*2)) / (this.num_pics - 2);
		var _posx = 0;
		var _name = "";
		var _previous_name = 0;
		parent_node.innerHTML = "";		//replace with DOM function?
		
		var iter = 0;
		for(i in doc_images){
			_name = "image_"+ (iter + image_id_offset);
			var new_node = document.createElement('div');
			if(new_node){
				new_node.id = _name;
				new_node.className = "image_frame";
				new_node.style.position = "absolute";
				new_node.style.width = this.frame_width + "px";
				new_node.style.height = this.height + "px";
				new_node.style.left = _posx + "px";
				new_node.style.top = "0px";
				new_node.style.zIndex = parent_node.style.zIndex + iter;
				parent_node.appendChild(new_node);
				
				var new_img = document.createElement('img');
				new_img.id = _name + "_i";
				new_img.src = "/IMAGES/loading_small.gif";				//doc_images[i].thumbnail;
				new_img.className = "thumbnail";
				new_node.appendChild(new_img);
				
				AddPreloadImage(new_img, doc_images[i].thumbnail);
				
			}
			this.gallery_images[_name] = {	
											neighbours : {previous : 0, current : _name, next : 0},
											init_x : _posx,
											current_x : _posx,
											desired_x : _posx,
											selected : 0,
											changed : 0,
											node : new_node,
											target_image_name : doc_images[i].target,
											image_number : iter,
											description : doc_images[i].comment
										};						
										
			if(_previous_name){
				this.gallery_images[_name].neighbours.previous = _previous_name;
				this.gallery_images[_previous_name].neighbours.next = _name;			
			}							
			new_node = 0;	
			if(this.num_pics<5){
                _posx += this.frame_width;
			}else{						
                if(i == 0)_posx += this.frame_width;
                else _posx += _step;
            }
			_previous_name = _name;
			iter++;
		}
		
		return image_id_offset + iter;
	}
	///////////////////////////////////////////////////////////////////////////////////
	//		
	this.SelectImage = function (sel_name){
	//	if(this.inuse)return 0;
		var _step = (this.galery_width - (this.frame_width*2)) / (this.num_pics - 2);
		var _posx = 0;
		var _i = 0;
		for(name in this.gallery_images){
			if(this.gallery_images[name].current_x != _posx){
				this.gallery_images[name].desired_x = _posx;
				this.gallery_images[name].changed = 1;
			}
			if(_i>=(this.num_pics - 1))this.gallery_images[name].changed = 0;
			if(sel_name == name){
				_posx += this.frame_width;
				this.gallery_images[name].selected = 1;
			}else{
				_posx += _step;
				this.gallery_images[name].selected = 0;
			}
			_i++;
		}
	}
	///////////////////////////////////////////////////////////////////////////////////
	//		
	this.AnimateImages = function (speed){	
		for(name in this.gallery_images){
			if(this.gallery_images[name].changed){
				if(this.gallery_images[name].current_x < this.gallery_images[name].desired_x){
					if((this.gallery_images[name].current_x+speed)>this.gallery_images[name].desired_x){
						this.gallery_images[name].current_x = this.gallery_images[name].desired_x;
						this.gallery_images[name].changed = 0;
					}else this.gallery_images[name].current_x += speed;
				}else if(this.gallery_images[name].current_x > this.gallery_images[name].desired_x){
					if((this.gallery_images[name].current_x - speed)<this.gallery_images[name].desired_x){
						this.gallery_images[name].current_x = this.gallery_images[name].desired_x;
						this.gallery_images[name].changed = 0;
					}else this.gallery_images[name].current_x -= speed;
				}	
				this.gallery_images[name].node.style.left = this.gallery_images[name].current_x + "px";
				if(this.gallery_images[name].selected == 1)this.gallery_images[name].node.className = "image_frame_selected";
				else this.gallery_images[name].node.className = "image_frame";
			}
		}
	}	
}
///////////////////////////////////////////////////////////////////////////////////////
//	utilities

function getParentByClass(node, classname){
	if(!node)return 0;
	var parent = node.parentNode;
	if(!parent || !parent.className)return 0;
	while(parent.className != classname){
		parent = parent.parentNode;
	}
	return parent;
}

function getElementsByClass(searchClass,node,tag){
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}

function addEvent(elm, evType, fn, useCapture){
	if(elm.addEventListener){
		elm.addEventListener(evType, fn, useCapture);
		return true;
	}else if(elm.attachEvent){ 
		var r = elm.attachEvent('on' + evType, fn);
		return r;
	}else{
		elm['on' + evType] = fn;
	}
}

function getPageScroll(){

	var yScroll;

	if (self.pageYOffset) {
		yScroll = self.pageYOffset;
	} else if (document.documentElement && document.documentElement.scrollTop){	 // Explorer 6 Strict
		yScroll = document.documentElement.scrollTop;
	} else if (document.body) {// all other Explorers
		yScroll = document.body.scrollTop;
	}

	arrayPageScroll = new Array('',yScroll)
	return arrayPageScroll;
}
		
function getPageSize(){

	var xScroll, yScroll;

	if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}

	var windowWidth, windowHeight;
	if (self.innerHeight) {	// all except Explorer
		windowWidth = self.innerWidth;
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) { // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}

	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight){
		pageHeight = windowHeight;
	} else {
		pageHeight = yScroll;
	}

	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth){
		pageWidth = windowWidth;
	} else {
		pageWidth = xScroll;
	}


	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight)
	return arrayPageSize;
}
