	ImageShifter = function () {
		
		var name = arguments[0], parent = arguments[1], images = arguments[2];
		
		slideobject = document.createElement('DIV');
		
		slideobject.className = 'imageShifter';
		slideobject.images = images;
		slideobject.imageObjects = new Array();
		
		slideobject.name = name;
		
		slideobject.controlSetup = { 
			scrollType: (arguments.length > 3 && arguments[3].scrollType != undefined) ? arguments[3].scrollType : 2, // 0: slide; 1: step by object; 2: step by page; 
			scrollSpeed: (arguments.length > 3 && arguments[3].scrollSpeed != undefined) ? arguments[3].scrollSpeed : 100, // ms; stepping interval 
			scrollStepping: (arguments.length > 3 && arguments[3].scrollStepping != undefined) ? arguments[3].scrollStepping : 10, // px; stepping per interval or scroll direction +/-
			holdDelay: (arguments.length > 3 && arguments[3].holdDelay != undefined) ? arguments[3].holdDelay : 750, // ms; autoscroll delay
			hoverImages: (arguments.length > 3 && arguments[3].hoverImages != undefined) ? arguments[3].hoverImages : true // boolean, hover images on mouse over
			} 
	  
		slideobject.position = 0;
		slideobject.posmax = Math.max(0, (slideobject.images.length - 4) * 106);
		switch (slideobject.controlSetup.scrollType) { 
			case 1: slideobject.controlSetup.scrollStepping = 106; break;
			case 2:
        slideobject.controlSetup.scrollStepping = 106 * 4;
        slideobject.posmax = Math.floor((slideobject.images.length - 1) / 4) * 4 * 106;
			}
		slideobject.setPosition = function(pos) {
			slideobject.position = trimToRange(0, pos, slideobject.posmax);
			slideobject.slider.style.marginLeft = (-slideobject.position) + 'px';
			slideobject.buttonLeft.setEnabled((slideobject.position > 0) ? true : false);
			slideobject.buttonRight.setEnabled((slideobject.position < slideobject.posmax) ? true : false);
			}
		slideobject.stepLeft = function() { 
			slideobject.setPosition(slideobject.position - slideobject.controlSetup.scrollStepping);
			} 
		slideobject.stepRight = function() { 
			slideobject.setPosition(slideobject.position + slideobject.controlSetup.scrollStepping); 
			} 
		parent.appendChild(slideobject); 
		
		slideobject.sliderwrapper = document.createElement('DIV');
		slideobject.sliderwrapper.className = 'isSliderWrapper';
		slideobject.appendChild(slideobject.sliderwrapper); 
		
		
		with (slideobject.slider = document.createElement('DIV')) {
		  className = 'isSlider';
			//style.width = 106 * slideobject.images.length + ((slideobject.images.length > 4) ? 106 * (4 - (slideobject.images.length % 4)) : 0) + 'px';
			for (var i = 0; i < slideobject.images.length; i++) {
				with (slideobject.imageObjects[i] = document.createElement('IMG')) {
					src = slideobject.images[i].thumb;
					title = slideobject.images[i].title;
  				if (slideobject.controlSetup.hoverImages) {
  			    style.opacity = '0.75'; 
  			    style.filter = 'Alpha(opacity=75)'; 
    			  $(slideobject.imageObjects[i]).addEvent(
              'mouseover',
              function() {
    			      this.style.opacity = '1.0'; 
    			      this.style.filter = 'Alpha(opacity=100)'; 
    			      }
              );
    			  $(slideobject.imageObjects[i]).addEvent(
              'mouseout',
              function() {
    			      this.style.opacity = '0.75'; 
    			      this.style.filter = 'Alpha(opacity=75)'; 
    			      }
              );
    			  }
					}
				
				with (slideobject.imageObjects[i].ankor = document.createElement('A')) {
					rel = 'lightbox[' + slideobject.name + ']';
					href = slideobject.images[i].image;
					title = slideobject.images[i].title;
					className = 'isImageAnkor';
					appendChild(slideobject.imageObjects[i])
					}
				with (slideobject.imageObjects[i].wrapper = document.createElement('DIV')) {
					className = 'isImageWrapper';
					style.position = 'absolute';
					style.left = (i * 106) + 'px';
					appendChild(slideobject.imageObjects[i].ankor)
					}
				appendChild(slideobject.imageObjects[i].wrapper);
				}
			}
		slideobject.sliderwrapper.appendChild(slideobject.slider); 
			
		createButton = function(side) {
			var result = document.createElement('DIV');
			result.typeId = 'isBtn' + side;
			result.className = result.typeId;
			result.enabled = true;
			result.setEnabled = function(value) {
			  if (result.enabled != value) {
				  result.className = result.typeId;
			    result.enabled = value;
			    if (!result.enabled) {
			      result.className += ' isBtnDisabled';
			      result.fMouseUpHandler();
			      }
			    }
			  }
			result.intervalHandler = null;
			result.timeoutHandler = null;
			result.fMouseUpHandler = function () { 
				window.clearTimeout(result.timeoutHandler); 
				window.clearInterval(result.intervalHandler);  
				}
			result.fMouseOverHandler = function() {
        if (result.enabled)
				  result.className = result.typeId + ' isBtnHover'; 
				}
			var button = createToolButton(side.toLowerCase());
			$(button).addEvent('click', slideobject['step' + side]);
			$(button).addEvent('mousedown', function() {
				result.timeoutHandler = window.setTimeout(
					function() { 
						result.intervalHandler = window.setInterval(slideobject['step' + side], slideobject.controlSetup.scrollSpeed)
						},
					slideobject.controlSetup.holdDelay
					); 
				});
			$(button).addEvent('mouseup', result.fMouseUpHandler);
			$(button).addEvent('mouseover', result.fMouseOverHandler);
			$(button).addEvent('mouseout', function() { 
        if (result.enabled)
				  result.className = result.typeId; 
				result.fMouseUpHandler();
				});
			result.appendChild(button);
			return result;
			}
		slideobject.buttonLeft = createButton('Left');
		slideobject.appendChild(slideobject.buttonLeft); 
		slideobject.buttonRight = createButton('Right');
		slideobject.appendChild(slideobject.buttonRight);
     
		slideobject.setPosition(0);
		return slideobject;
    }

