(function(){

	// Map over jQuery in case of overwrite
	if ( typeof RELMAN != "undefined" ){
		var _RELMAN = RELMAN;
	}

	var RELMAN = window.RELMAN = function() {
		// If the context is a namespace object, return a new object
		return this instanceof RELMAN ? this.init() : new RELMAN();
	};

	RELMAN.prototype = {
	
	}


	jQuery.extend(RELMAN,{
	
		//function that runs if call RELMAN()
		init: function(){},


		dataStore: [],

		
		
/* ********* CREATELOADING METHOD  **************** */



		createloading: function(newoptions){
			var prop = {
				loadingId: 'loadingtable',														// the id that will be added to the created table
				loadingTargetSelector: 'body',													// what the loading indicator will appear over
				loadingImage: '/images/anim-loading.gif'								// the image to use as the loading indicator
			}
			var options = {};
			jQuery.extend(options, prop, newoptions);											//overwrite the default options with any passed in options

			var $loadingImage=jQuery('<img class="dg_loadingimage" src="' + options.loadingImage + '">');	//creating the img

			var $loadingTarget = jQuery(options.loadingTargetSelector);							//the object that the  indicator will appear over

			var loadingTargetOffset =  $loadingTarget.offset()									//find the position of the element the indicator will appear over
			
			var $containTable = jQuery('<table id="' + options.loadingId + '" border="0" cellspacing="0" cellpadding="0"><tr><td></td></tr></table>');
																								//the table that will hold the indicator
			$containTable.css({																	//the css for the table
				'position': 'absolute',
				'left':loadingTargetOffset.left+'px',
				'top':loadingTargetOffset.top+'px'
			})
			jQuery("td",$containTable).css({													//the css for the td in the table
				'height': $loadingTarget.outerHeight(),
				'width': $loadingTarget.outerWidth(),
				'vertical-align': 'middle',
				'text-align': 'center'
			}).append($loadingImage);

			jQuery("body").append($containTable);

		},	
/* ********* RELMANSLIDER METHOD  ***************** */


		relmanslider: function(newoptions){
			var prop = {													//the default properties
				fireWhen: 'onready'											//when to execute the code
			}
			var options = {};												//new object 
			jQuery.extend(options, prop, newoptions)						//extend the prop object with the newoptions object to create the options object 
			if(options.fireWhen==='onready'){
				jQuery(document).ready(function(){RELMAN.relmansliderprocess(options)})
			}else{
				RELMAN.relmansliderprocess(options)
			}
	
		},
		relmansliderprocess: function(newoptions){
			var prop = {
				containerselector: '.relmanslider',
				panelselector: '.relmansliderpanel',
				easeTime: 750,
				easeFunc: "easeInOutExpo",
				activeClass: "current",
				rotateClass: "rotator",
				rotateSpeed: 2500,
				starterClass: "starthere",
				leftArrowClass: "ms_leftarrow",
				rightArrowClass: "ms_rightarrow",
				numberNavClass: "ms_numbernav",
				numberNavWrapClass: "ms_numbernavwrap",
				viewportClass: "ms_viewport",
				panelContainerClass: "ms_panelcontainer",
				widthOnUl: 'no',
				np_noshow: false
			}
			var options = {};
			jQuery.extend(options, prop, newoptions);
	
			
			jQuery(options.containerselector).each(function(){
					
				var $currSlider = jQuery(this);
				var $containEl = $currSlider.parents("div:first");
				var isscreenshotgallery=false;
				var ishighlights=false;
				if($containEl.hasClass("noshownav")){
					options.np_noshow=true;
				}
				if($containEl.hasClass("gallery")){
					isscreenshotgallery=true;
				}
				if($containEl.hasClass("highlights")){
					ishighlights=true;
				}
				var $panels = jQuery('div'+options.panelselector,$currSlider);
				var isFader=false;
				var numPanels = $panels.length;
				if($containEl.hasClass("fader")){
					isFader=true;
					$panels.slice(1,numPanels).hide()
					$panels.each(function(i){
						jQuery(this).css({'z-index':numPanels-i})
					})
				}
				var shownav=true;
				var numPanels = $panels.length;
				if((numPanels===1)&&(options.np_noshow)){
					shownav=false;
				}
				var $leftArrow = jQuery('<div class="' + options.leftArrowClass + '"><a href="#"></a></div>');
				var $rightArrow = jQuery('<div class="' + options.rightArrowClass + '"><a href="#"></a></div>');
				if(!isscreenshotgallery&&shownav){
					$rightArrow.insertAfter($currSlider)
					$leftArrow.insertAfter($currSlider)
				}
				var $numberNav = jQuery('<ul class="' + options.numberNavClass + '"></ul>')
				var defaultSelected=false;
				var currPanel = 1;
				jQuery('div'+options.panelselector,$currSlider).wrapAll('<div class="' + options.viewportClass + '"></div>').wrapAll('<div class="' + options.panelContainerClass + '"></div>').each(function(index){
					if(jQuery(this).hasClass(options.starterClass)){
						defaultSelected=true;
						currPanel=index+1;
					}
					$numberNav.append('<li><a href="#" class="progress">' + (index+1) + '</a></li>');
				});
				if(isscreenshotgallery&&shownav){
					jQuery("<li></li>").append($leftArrow).prependTo($numberNav)
					jQuery("<li></li>").append($rightArrow).appendTo($numberNav)
				}
				var panelWidth;
				if(jQuery.browser.safari){
					panelWidth = $currSlider.attr("rel").length>0 ? $currSlider.attr("rel") : parseInt(jQuery('div'+options.panelselector+':first',$currSlider).outerWidth());
				}else{
					panelWidth = parseInt(jQuery('div'+options.panelselector+':first',$currSlider).outerWidth())
				}
				var $panelContainer = jQuery("div."+options.panelContainerClass,$currSlider)
				jQuery("a.progress:first",$numberNav).addClass(options.activeClass);
				if(isscreenshotgallery){
					var panheightrun=function(){
						var panheight=jQuery('div'+options.panelselector,$currSlider).eq(0).outerHeight();
						jQuery('div.'+options.viewportClass,$currSlider).stop().animate({ height:panheight}, options.easeTime, options.easeFunc);
					}
					if(jQuery.browser.safari){
						setTimeout(panheightrun,500)
					}else{
						panheightrun()
					}
				}
				
				var removeFilter=function(element) {
					if(element.style.removeAttribute){
						element.style.removeAttribute('filter');
					}
				}
				//function to move the panels
				var movePanel = function(panel){
					if(isFader){
			            jQuery('div'+options.panelselector+':visible',$currSlider).fadeOut("normal");
        			    $panels.eq(panel).fadeIn("normal", function() {
							removeFilter(jQuery(this)[0]);
						});
					}else{
						var leftPos = (panel*panelWidth)*-1;
						$panelContainer.stop().animate({ left: leftPos}, options.easeTime, options.easeFunc);
						if(isscreenshotgallery){
							var panheight=jQuery('div'+options.panelselector,$currSlider).eq(panel).outerHeight();
							jQuery('div.'+options.viewportClass,$currSlider).stop().animate({ height:panheight}, options.easeTime, options.easeFunc);
						}
					}
				};
				
				//called when ever the user causes rotation
				var useraction = function(){
					if($currSlider.data("rotating")){
						$currSlider.trigger("mouseover");
					}
				};
				
				//events for numeric nav
				jQuery("a.progress",$numberNav).each(function(index){
					jQuery(this).click(function(){
						useraction();
						jQuery("a",$numberNav).removeClass(options.activeClass);
						jQuery(this).addClass(options.activeClass);
						currPanel = index+1;
						movePanel(index);
						return false;
					});					
				})
				
				var addclassSelector;
				
				if(shownav){
					//left arrow event
					jQuery("a",$leftArrow).click(function(){
						useraction();
						if(currPanel==1){
							currPanel=numPanels;
						}else{
							currPanel--;
						}
						jQuery("a",$numberNav).removeClass(options.activeClass);
						addclassSelector="a.progress:eq(" + (currPanel-1) + ")"
						jQuery(addclassSelector,$numberNav).addClass(options.activeClass);
						movePanel(currPanel-1);
						return false;
					});
					
					//right arrow event
					jQuery("a",$rightArrow).click(function(){
						useraction();
						if(currPanel==numPanels){
							currPanel=1;
						}else{
							currPanel++;
						}
						jQuery("a",$numberNav).removeClass(options.activeClass);
						addclassSelector="a.progress:eq(" + (currPanel-1) + ")"
						jQuery(addclassSelector,$numberNav).addClass(options.activeClass);
						movePanel(currPanel-1);
						return false;
					});
				}
				var $numberNavWrap=jQuery('<div class="' + options.numberNavWrapClass + '"></div>');
				$numberNavWrap.append($numberNav);
				if(shownav){
					$currSlider.append($numberNavWrap);
				}
				$panelContainer.width(panelWidth*numPanels);
				
				var navWidth=numPanels*2;
				
				var setnavWidth = function(){
					jQuery("li",$numberNavWrap).each(function(){
						navWidth+=jQuery(this).width();
					})
					if(options.widthOnUl=='no'){
						$numberNavWrap.width(navWidth);
					}else{
						$numberNavWrap.find("ul").width(navWidth);
					}
				}
				
				if(!isscreenshotgallery){
					if(jQuery.browser.safari){
						setTimeout(setnavWidth,200)
					}else{
						setnavWidth();
					}
				}
				//selected default code
				if(defaultSelected===true){
					jQuery("a",$numberNav).removeClass(options.activeClass);
					addclassSelector="a.progress:eq(" + (currPanel-1) + ")"
					jQuery(addclassSelector,$numberNav).addClass(options.activeClass);
					var leftstatic = ((currPanel-1)*panelWidth)*-1;
					if(isscreenshotgallery){
						var panheight=jQuery('div'+options.panelselector,$currSlider).eq(currPanel-1).outerHeight();
						jQuery('div.'+options.viewportClass,$currSlider).stop().animate({ height:panheight}, options.easeTime, options.easeFunc);
					}
					$panelContainer.css({left: leftstatic+'px'});
				}
				
				//rotator code
				if($currSlider.hasClass(options.rotateClass)){
					var rotateit = function(){
						if(currPanel==numPanels){
							currPanel=1;
						}else{
							currPanel++;
						}
						jQuery("a",$numberNav).removeClass(options.activeClass);
						addclassSelector="a.progress:eq(" + (currPanel-1) + ")";
						jQuery(addclassSelector,$numberNav).addClass(options.activeClass);
						movePanel(currPanel-1);
					}
					var rotateInterval = setInterval(rotateit,options.rotateSpeed);
					$currSlider.data("rotating",true);
					$currSlider.mouseover(function(){
						clearInterval(rotateInterval)
						$currSlider.data("rotating",false);
					});
				}

			});
			
		}	
	},RELMAN)
})();








