/**
 * --------------------------------------------------------------------
 * jQuery based photo slider class
 * Version: 1.0, 06.06.2008
 * by Anupom Syam, anupom.syam@gmail.com
 * http://syamantics.com/
 *
 * Copyright (c) 2008 TrippertLabs
 *
 * --------------------------------------------------------------------
 */
 
 var TrippertLabsSliders = function(base_url) {
 	//all slider images are now stores in a seperate directory
	var imageDir  	 		= base_url + '/slider_images/';
	//the directory below has all other images
	var otherImageDir		= base_url + '/img/';
	var maskImageName 		= 'shaded_border.png';
	var className 	 		= 'slider';
	var bgExt 		 		= '.jpg';
	var prevImageName		= 'nav_arrow_previous.png';
	var nextImageName		= 'nav_arrow_next.png';
	var photoSliders		= [];
	
	this.init = function() {
		//make all of them photo slider
		jQuery('.' + className).each( function() {
			photoSliders[this.id] = new PhotoSlider(this);
		});
	};
	
	//only for IE6, reset ids after pngFix
	this.reset = function() {
		jQuery('.' + className).each( function() {
			photoSliders[this.id].image = this;
		});
	};
	
	var PhotoSlider = function(image) {
		this.image			= image;
		this.frameNo		= 0;
		this.xPos			= 0;
		
		var frameWidth		= 0;
		var totalFrame		= 0;
		
		var bgImageSrc   	= imageDir + image.id + bgExt;
		var maskImageSrc 	= otherImageDir + maskImageName;
		
		var bgImage 		= new Image();
		jQuery(bgImage).attr('src', bgImageSrc);
		
		var bgImageOnLoad = function() {
			bgImage.onload 	= null; 
			jQuery(image).attr('src', maskImageSrc).css(
				'backgroundImage'   , 'url(' + bgImageSrc + ')' 
			);

			frameWidth		= image.width;
			//IE6 Fix
			if(!frameWidth) {
				frameWidth	= parseInt(image.style.width);
			}
			totalFrame		= parseInt(bgImage.width / frameWidth);
			
			navDiv  = jQuery(image).parent('div').next('div');
			
			btnDiv 	= jQuery(navDiv).children('div');
            
			btnDiv.append('<a class="back_btn" href="javascript:;" onclick="sliders.moveBackward(\'' + image.id + '\')">' +
						  '<img class="nofix" src="' + otherImageDir + prevImageName + '" alt="prev" />' +
						  '</a>');
			btnDiv.append('<a class="forward_btn" href="javascript:;" onclick="sliders.moveForward(\'' + image.id + '\')">' +
						  '<img class="nofix" src="' + otherImageDir + nextImageName + '" alt="next" />' +
						  '</a>');
			
			listDiv 	= jQuery(navDiv).children('ol');
			var status 	= ' nofix active';
            
			for(var i = 1; i <= totalFrame; i++ ) {
				listDiv.append('<li><a id = "'+ image.id +'_btn_'+ i +'" class="button' + i + status + '" ' +
							   'href="javascript:;" onclick="sliders.moveTo(this)">' +
							   '</a></li>');
				status 	= ' nofix';
			}
			//to hide the loader
			jQuery('#' + image.id + '_loader').hide();
			navDiv.fadeIn(1500);
		};
        
		//IE6 fix
		if(bgImage.width == 0) {
			jQuery(bgImage).load(bgImageOnLoad);
		}
		else {
			bgImageOnLoad();
		}
		
		this.getFrameWidth = function() {
			return frameWidth;
		};
		
		this.getTotalFrame = function() {
			return totalFrame;
		};
	};
	
	this.moveTo = function ( link ) {
		link 			= link.id.split('_btn_', 2);
		slideId 		= link[0];
		toImgNo			= link[1] - 1;
		currentImgNo  	= photoSliders[slideId].frameNo;
		
		if(toImgNo > currentImgNo) {
			this.moveForward(slideId, toImgNo - currentImgNo );
		}
		else if(toImgNo < currentImgNo) {
			this.moveBackward(slideId, currentImgNo - toImgNo );
		}
	};
	
	this.moveForward = function( id, unit ) {
		if(!unit) {
			var unit = 1;
		}
		var photoSlider = photoSliders[id];
		var totalFrame	= photoSlider.getTotalFrame();
		var frameWidth	= photoSlider.getFrameWidth();
		
		if( (photoSlider.frameNo+1) >= totalFrame) {
			this.moveBackward(id, (totalFrame-1));
			return;
		}
		
		var end	= photoSlider.xPos + frameWidth * unit;
		slideAnimation(photoSlider.image, end);
		
		var currentActive	= photoSlider.frameNo;
		photoSlider.frameNo += unit;
		photoSlider.xPos 	= end;
		
		this.activateButton(id, currentActive, photoSlider.frameNo);
        
		if(typeof currentPage != 'undefined' && currentPage == 'home')
			this.activateDetails(id, currentActive, photoSlider.frameNo);
        
	};
		
	this.moveBackward = function( id, unit ) {
		if(!unit) {
			var unit = 1;
		}
		var photoSlider = photoSliders[id];
		var totalFrame	= photoSlider.getTotalFrame();
		var frameWidth	= photoSlider.getFrameWidth();
		
		if( photoSlider.frameNo <= 0) {
			this.moveForward(id, (totalFrame-1));
			return;
		}
		
		var end	= photoSlider.xPos - frameWidth * unit;
		slideAnimation(	photoSlider.image, end );
		
		var currentActive = photoSlider.frameNo;
		photoSlider.frameNo -= unit;
		photoSlider.xPos = end;
		
		this.activateButton(id, currentActive, photoSlider.frameNo);
		if(typeof currentPage != 'undefined' && currentPage == 'home')
			this.activateDetails(id, currentActive, photoSlider.frameNo);
	};
	
	var slideAnimation = function( image, end ) {
		var bgPosition = - (end) + 'px';
		jQuery(image).animate({ 
				backgroundPosition: bgPosition
      			}, 'slow', jQuery.easing.easeInOutExpo );
	};
	
	this.activateButton = function(imgId, currentActive, makeActive) {
		currentActive	= imgId + '_btn_' + (currentActive+1);
		makeActive		= imgId + '_btn_' + (makeActive+1);
		jQuery('a#'+ currentActive).removeClass('active');
		jQuery('a#'+ makeActive).addClass('active');
	};
	
	this.activateDetails = function(imgId, currentActive, makeActive) {
		currentActive	= imgId + '_details_' + (currentActive+1);
		makeActive		= imgId + '_details_' + (makeActive+1);
		jQuery('div#'+ currentActive).removeClass('disp_block').addClass('disp_none');
		jQuery('div#'+ makeActive).removeClass('disp_none').addClass('disp_block');
	};
	
	this.setMaskImageName = function( newMaskImageName ) {
			maskImageName = newMaskImageName;
	};
	
	this.setBgExt = function( newBgExt ) {
			bgExt = newBgExt;
	};
}