function quicklinkScroller(_initArray)
{
	this.qsWidth;
	this.qsListWidth=0;
	this.qsLeft=0;
	this.qsSpeed = _initArray.speed;
	this.qsScrollTime = _initArray.scrollTime * 1000;
	this.qsScrollValue = _initArray.autoScroll;
	this.qsScrollDirection="next";
	this.qsScrollInterval;
	this.qsElem = _initArray.id;
	this.qsPosition=0;
	this.qsListArray = [];
	this.qsOffsetArray = [];
	this.qsTargetElement = _initArray.targetElement;
	this.qsWindow = _initArray.windowElement;
	this.qsLoop = _initArray.loop || false;
	this.i=0;
	this.oldPosition=0;
	this.qsItemsInView = _initArray.itemsInView;
	this.qsShowTitle = _initArray.showTitle;
	this.qsDirectionArrows = _initArray.directionArrows;
	this.qsPauseOnRoll = _initArray.pauseOnRoll;
	this.qsObjectName = _initArray.objectName;
	this.qsThumbnails = _initArray.thumbnails;
	this.qstnID = this.qsElem.replace(/#/, '');
	this.qsCurrentThumb = 0;
	this.qsCurrentThumbScroll = 0;
	this.qsCSSOffset=0;
	this.qsThumbsInView = _initArray.thumbsInView || 4;
	this.qsImageCount = _initArray.imageCount || false;
	this.cumulativeCount = 0;

	this.init();
}

quicklinkScroller.prototype.reloadImg = function()
{
	$(".propertyPhotoItem img").each(function(){
		var parent = $(this).parent();
		var src = $(this).attr("src") ;
		$(this).remove();
		var cacheImage = document.createElement('img');
		cacheImage.src = src ;
		cacheImage.onerror = function (evt){
			if(this.src.indexOf("&reload=1&reload=1") == -1)
				this.src = this.src + "&reload=1";
			else
				this.src = "" ;
		}
		
		parent.append(cacheImage);
	});
	
	$(".qs_thumbnailImage img").each(function(){
		var parent = $(this).parent();
		var src = $(this).attr("src") ;
		$(this).remove();
		var cacheImage = document.createElement('img');
		cacheImage.src = src ;
		cacheImage.onerror = function (evt){
			if(this.src.indexOf("&reload=1&reload=1") == -1)
				this.src = this.src + "&reload=1";
			else
				this.src = "" ;
		}
		parent.append(cacheImage);
	});
}

quicklinkScroller.prototype.init = function()
{
	var myself = this;
	$(document).ready(function()
	{
		
		if(myself.qsThumbnails == true)
			myself.initThumbs();
		
		myself.reloadImg();
		
		if($(myself.qsElem+" "+myself.qsTargetElement).length > 1)
		{
			if(myself.qsDirectionArrows.enabled == true && ($(myself.qsElem).find('#btnLeft').length == 0))
			{
				switch(myself.qsDirectionArrows.position)
				{
					case 'bottom':
						$('#'+myself.qstnID+'_qs_thumbnailWrapper').prepend('<div id="btnLeft" class="disabledLeft" onclick="'+myself.qsObjectName+'.prev()"></div>');
						$('#'+myself.qstnID+'_qs_thumbnailWrapper').append('<div id="btnRight" onclick="'+myself.qsObjectName+'.next()"></div>');
						break;
					default:
						$(myself.qsElem).prepend('<div id="btnLeft" class="disabledLeft" onclick="'+myself.qsObjectName+'.prepareSlide(\'prev_click\')"></div>');
						$(myself.qsElem).append('<div id="btnRight" onclick="'+myself.qsObjectName+'.prepareSlide(\'next_click\')"></div>');
						break;
				}
			}
		}
		
		myself.qsWidth = $(myself.qsElem).width()-($("#btnLeft").width()+$("#btnRight").width());
		$(myself.qsElem+" "+myself.qsTargetElement).each(function(i, elem)
		{
			myself.qsOffsetArray[i] = myself.qsListWidth;
			
			myself.qsListWidth += parseInt($(elem).outerWidth());
			myself.qsListArray[i] = parseInt($(elem).outerWidth());
			$(elem).addClass("qsT_"+i);
		});
		intSafetyAdditionLength = 20;
		$(myself.qsElem+" "+myself.qsWindow).width(myself.qsListWidth+intSafetyAdditionLength);

		if(myself.qsImageCount == true)
		{
			if($(myself.qsElem+' .imageCount').length == 0)
				$(myself.qsElem).find('#qs_buttons').prepend("<div class='imageCount'></div>");
			myself.updateTitleCount();
		}
	});
	
	if(myself.qsShowTitle == true)
	{
		if($(myself.qsElem+' .imageTitle').length == 0)
			$(myself.qsElem).find('#qs_buttons').prepend("<div class='imageTitle'></div>");
		myself.updateTitle();
	}

	if(myself.qsScrollValue == true) {
		myself.qsScrollInterval = setTimeout(myself.qsObjectName+".prepareSlide('next')", myself.qsScrollTime);
	}
	
	$(myself.qsElem).hover(function()
	{
		if(myself.qsPauseOnRoll == true) clearTimeout(myself.qsScrollInterval);
	},
	function()
	{
		if(myself.qsScrollValue == true && myself.qsPauseOnRoll == true) myself.qsScrollInterval = setTimeout(myself.qsObjectName+".prepareSlide('"+myself.qsScrollDirection+"')", myself.qsScrollTime);
	});

	myself.restyleThumbs('qsT_0');
	 
}
	
quicklinkScroller.prototype.destroy = function()
{
	this.qsWidth=0;
	this.qsListWidth=0;
	this.qsLeft=0;
	this.qsSpeed = 0;
	this.qsScrollTime = 0;
	this.qsScrollValue = false;
	this.qsScrollDirection="next";
	clearTimeout(this.qsScrollInterval);
	this.qsElem = "";
	this.qsPosition=0;
	this.qsListArray = [];
	this.qsTargetElement = "";
	this.qsWindow = "";
	this.qsLoop = false;
	this.i=0;
	this.oldPosition=0;
	this.qsItemsInView = 0;
	this.qsShowTitle = false;
	this.qsDirectionArrows = false;
	this.qsPauseOnRoll = true;
	this.qsObjectName = "";
}

quicklinkScroller.prototype.refresh = function()
{
	var myself = this;

	myself.qsWidth = $(myself.qsElem).width()-($("#btnLeft").width()+$("#btnRight").width());
	$(myself.qsElem+" "+myself.qsTargetElement).each(function(i, elem)
	{
		myself.qsOffsetArray[i] = myself.qsListWidth;
		myself.qsListWidth += parseInt($(elem).outerWidth());
		myself.qsListArray[i] = parseInt($(elem).outerWidth());
	});
	$(myself.qsElem+" "+myself.qsWindow).width(myself.qsListWidth);
}
	
quicklinkScroller.prototype.prepareSlide = function(direction)
{
	var myself = this;
	switch(direction)
	{
		case 'next':
			myself.next();
			break;
		case 'prev':
			myself.prev();
			break;
		case 'next_click':
			myself.next();
			break;
		case 'prev_click':
			myself.prev();
			break;
	}
}
	
quicklinkScroller.prototype.next = function(amount) {
	var myself = this;
	clearTimeout(myself.qsScrollInterval);
	myself.qsScrollInterval=0;
	myself.qsScrollValue=false;
	
	// refill images src in case empty
	this.loadImgTmp();
	
	var moveAmount = (amount != undefined) ? myself.qsOffsetArray[amount] : myself.qsListArray[myself.qsPosition];

	if(myself.qsThumbnails != true || amount != undefined) {
		myself.updateTitle();


			$(myself.qsTargetElement)
				.parent()
				.stop(true, true)
				.animate({ 'left': '-'+moveAmount+'px' }, myself.qsSpeed, function() {
					if(myself.qsLoop == true) {
						$(myself.qsElem+" "+myself.qsTargetElement+":first").detach().appendTo(myself.qsElem+" "+myself.qsWindow);
						$(myself.qsTargetElement).parent().css('left', '0px');
					}
				});	
		
		if(myself.qsPosition >= ($(myself.qsElem+" "+myself.qsTargetElement).length-1)) {
			myself.qsPosition = 0;
		} else {
			myself.qsPosition++;
		}
	} else {
		myself.thumb_next();
	}

	if(myself.qsScrollValue == true)
	{
		clearTimeout(myself.qsScrollInterval);
		myself.qsScrollInterval = setTimeout(myself.qsObjectName+".prepareSlide('next')", myself.qsScrollTime);
	}

	if(myself.qsImageCount == true)
		myself.updateTitleCount();
}

quicklinkScroller.prototype.loadImgTmp = function(){
	// refill images src in case empty
	$(".srcTmp").each(function(){
		if($(this).attr("src") == "" && $(this).attr("alt") !=""){
				$(this).attr("src",$(this).attr("alt"));
		}
    });
}

quicklinkScroller.prototype.loadImgTmp = function(){
	// refill images src in case empty
	$(".srcTmp").each(function(){
		if($(this).attr("src") == "" && $(this).attr("alt") !=""){
				$(this).attr("src",$(this).attr("alt"));
		}
    });
}

quicklinkScroller.prototype.prev = function(amount) {
	var myself = this;
	myself.qsScrollInterval=0;
	myself.qsScrollValue=false;
	
	this.loadImgTmp();
	
	var moveAmount = (amount != undefined) ? myself.qsOffsetArray[amount] : myself.qsListArray[myself.qsPosition];

	if(myself.qsThumbnails != true || amount != undefined) {
		myself.updateTitle();

		if(myself.qsPosition == 0) myself.qsPosition = ($(myself.qsTargetElement).length-1);
		else myself.qsPosition--;
		if(/webkit/i.test(navigator.userAgent) == true) {
			if(myself.qsLoop == true) {
				$(myself.qsElem+" "+myself.qsTargetElement+":last").detach().prependTo(myself.qsElem+" "+myself.qsWindow);
				$(myself.qsTargetElement).parent().css(
					{
						'-webkit-transition': '0s linear',
						'-webkit-transform': 'translateX(-'+moveAmount+'px)'
					}
				);
				
				setTimeout(function() {
					$(myself.qsTargetElement).parent().css(
						{
							'-webkit-transition': (myself.qsSpeed / 1000)+'s ease-in-out',
							'-webkit-transform': 'translateX(0px)'
						}
					);
				}, 100);
			} else {
				var sign = '+';
				// Need a cumulative count of how much to move if we are not doing a loop
				if (myself.qsThumbnails != true) {
					moveAmount -= myself.cumulativeCount;
					myself.cumulativeCount -= myself.qsListArray[myself.qsPosition];
	
				    // Switch char sign and amount if its negative
				    if(moveAmount < 0) {
					  sign = '-';
					  moveAmount *= -1;
				  }
				}

				$(myself.qsTargetElement).parent().css(
					{
						'-webkit-transition': (myself.qsSpeed / 1000)+'s ease-in-out',
						'-webkit-transform': 'translateX('+sign+moveAmount+'px)'
					}
				);
			}
		} else {
  			if(myself.qsLoop == true) {
				$(myself.qsElem+" "+myself.qsTargetElement+":last").detach().prependTo(myself.qsElem+" "+myself.qsWindow);
				$(myself.qsTargetElement).parent().css({'left': '-'+$(myself.qsTargetElement+':first').outerWidth()+'px'});
  			}
			$(myself.qsTargetElement).parent().stop(true, true).animate({ 'left': '-'+moveAmount+'px' }, myself.qsSpeed);
		}
		$(myself.qsWindow+" br:not(:last)").remove();
	} else {
		myself.thumb_prev();
	}

	if (myself.qsScrollValue == true) {
		clearTimeout(myself.qsScrollInterval);
		myself.qsScrollInterval = setTimeout(myself.qsObjectName+".prepareSlide('prev')", myself.qsScrollTime);
	}

	if (myself.qsImageCount == true) {
		myself.updateTitleCount();
	}
}

quicklinkScroller.prototype.thumb_next = function()
{
	
	var myself = this;
	
	if(myself.qsCurrentThumbScroll <= myself.qsOffsetArray.length - 2)
	{
		myself.qsCSSOffset = myself.qsCSSOffset+$('.qs_thumbnailImage:first').outerWidth();
		
		if(myself.qsOffsetArray.length > 4 && myself.qsCurrentThumbScroll <= myself.qsOffsetArray.length - myself.qsThumbsInView +1)
		{
			if(/webkit/i.test(navigator.userAgent) == true)
			{
				$('#'+myself.qstnID+'_qs_thumbnailWrapper .qs_thumbnailContainer').css(
					{
						'-webkit-transition': (myself.qsSpeed / 1000)+'s ease-in-out',
						'-webkit-transform': 'translateX(-'+myself.qsCSSOffset+'px)'
					}
				);
			} else {
				
				$('#'+myself.qstnID+'_qs_thumbnailWrapper .qs_thumbnailContainer').stop(true, true).animate({ 'left': '-'+myself.qsCSSOffset+'px' }, myself.qsSpeed);
			}
		}
		myself.qsCurrentThumbScroll++;
	}
	// Select the next thumbnail and display the image accordingly
	eval(myself.qsObjectName+'.swapImageByID("qsT_'+myself.qsCurrentThumbScroll+'")');
}

quicklinkScroller.prototype.thumb_prev = function()
{
	var myself = this;
	
	if(myself.qsCurrentThumbScroll > 0 )
	{
		myself.qsCSSOffset = myself.qsCSSOffset-$('.qs_thumbnailImage:first').outerWidth();
		
		if(myself.qsOffsetArray.length > 4 && myself.qsCurrentThumbScroll <= myself.qsOffsetArray.length - myself.qsThumbsInView + 2)
		{
			if(/webkit/i.test(navigator.userAgent) == true)
			{
				$('#'+myself.qstnID+'_qs_thumbnailWrapper .qs_thumbnailContainer').css(
					{
						'-webkit-transition': (myself.qsSpeed / 1000)+'s ease-in-out',
						'-webkit-transform': 'translateX(-'+myself.qsCSSOffset+'px)'
					}
				);
			} else {
				$('#'+myself.qstnID+'_qs_thumbnailWrapper .qs_thumbnailContainer').stop(true, true).animate({ 'left': '-'+myself.qsCSSOffset+'px' }, myself.qsSpeed);
			}
		}
		myself.qsCurrentThumbScroll--;
	}
	
	// Select the previous thumbnail and display the image accordingly
	eval(myself.qsObjectName+'.swapImageByID("qsT_'+myself.qsCurrentThumbScroll+'")');
}
	
quicklinkScroller.prototype.updateTitle = function()
{
	var myself = this;
	if(myself.qsShowTitle == true)
	{
		$(myself.qsElem+' .imageTitle').html( $(myself.qsTargetElement+" img").eq(1).attr('title') ).css(
		{
			'left': ( ($(myself.qsTargetElement).outerWidth()/2) - ($('.imageTitle').outerWidth()/2) )+'px'
		});
	}
}

quicklinkScroller.prototype.initThumbs = function()
{
	var myself = this;
	var tempWidth=0;
	if($('#'+myself.qstnID+'_qs_thumbnailWrapper').length == 0)
	{
		$(myself.qsElem).append('<div id="'+myself.qstnID+'_qs_thumbnailWrapper" class="qs_thumbnailWrapper"><div class="qs_thumbShield"><div class="qs_thumbnailContainer"></div></div></div>');

		$(myself.qsElem+" "+myself.qsTargetElement).find("img").each(function(i, elem)
		{
			$('#'+myself.qstnID+'_qs_thumbnailWrapper .qs_thumbnailContainer').append('<div class="qs_thumbnailImage qsT_'+i+'"><img src="'+$(elem).attr('src')+'" /></div>');
		});
		$('#'+myself.qstnID+'_qs_thumbnailWrapper .qs_thumbnailContainer .qs_thumbnailImage').each(function(i, elem)
		{
			 tempWidth += 85;
		});
		$('#'+myself.qstnID+'_qs_thumbnailWrapper .qs_thumbnailContainer').width(tempWidth);

		$('#'+myself.qstnID+'_qs_thumbnailWrapper .qs_thumbnailContainer .qs_thumbnailImage').click(function()
		{
			var tClass = $(this).attr('class');
			eval(myself.qsObjectName+'.swapImageByID("'+tClass+'")');
		});
	}
}

quicklinkScroller.prototype.swapImageByID = function(__tClass)
{
	var myself = this;
	var tClass = __tClass.split(' ');
	for(x in tClass)
	{
		if(/qsT/i.test(tClass[x]) == true)
		{
			tClass = tClass[x];
			break;
		}
	}

	var offsetLeft=$(myself.qsTargetElement).parent().css('left');
	offsetLeft = parseInt(offsetLeft.replace('px', ''));
	if(isNaN(offsetLeft) == true)
		offsetLeft = 0;

	var mClass = parseInt(tClass.replace('qsT_', ''));
	if(myself.qsCurrentThumb > mClass)
		myself.prev(mClass);
	else
		myself.next(mClass);
	
	myself.qsCurrentThumb = mClass;
	myself.restyleThumbs(tClass);
}

quicklinkScroller.prototype.restyleThumbs = function(__tClass)
{
	var myself = this;

	$('#'+myself.qstnID+'_qs_thumbnailWrapper .qs_thumbnailContainer .qs_thumbnailImage').each(function(i, elem)
	{
		if($(elem).hasClass(__tClass) == false)
		{
			$(elem).removeClass('qsT_Selected');
		} else {
			$(elem).addClass('qsT_Selected');
		}
	});
}

quicklinkScroller.prototype.updateTitleCount = function()
{
	var myself = this;

	var __tClass = $(myself.qsElem+" "+myself.qsTargetElement+":first").attr('class');
	var tClass = __tClass.split(' ');
	for(x in tClass)
	{
		if(/qsT/i.test(tClass[x]) == true)
		{
			tClass = tClass[x];
			break;
		}
	}
	var mClass = tClass.replace('qsT_', '');
	$(myself.qsElem+' .imageCount').html(mClass+' / '+myself.qsListArray.length);
}

