var InergyPageMngr = InergyPageMngr? InergyPageMngr : function(){
	var currentPageSet = "home";
	var currentPage = 0;
	var liWidth = 203;
	var currentSlide = 1;
	var loopMenuLimit = 5;
	var loopingMenu = false;
	var firstInit = true;
	var loopUpdateCnt = 1;
	var BaseURI = "/";
	var sliding = false;
	var cache = {};
	
	function _SetupPageset(page){
		
		if(typeof(page) == 'undefined' ||  (Pages[currentPageSet].length - 1) < page){
			page = 0;
		}
		
		var pageSelector = $("#PageSelector");
		$("#PageSelector UL").remove;
		pageSelector.html('');
		
		var UL = $(document.createElement("UL"));
		var liCnt = 0;
		loopingMenu = false;

		for(var i in Pages[currentPageSet]){
			var data = Pages[currentPageSet][i];
			var LI = $(document.createElement('LI'));
			LI.addClass('Sprite');
			LI.attr('rel',i);
			UL.append(LI);
			var Thumb = $(document.createElement('DIV'));
			Thumb.addClass('Thumb');
			Thumb.css('background-image', 'url("'+BaseURI+'page_res/'+currentPageSet+'/'+data['resDir']+'/'+data['topThumb']['img']+'")');
			LI.append(Thumb);
			var ttl = $(document.createElement('SPAN'));
			ttl.html(data['topThumb']['ttl']);
			ttl.addClass('Title');
			LI.append(ttl);
			if(typeof(data['topThumb']['ctg_name']) != 'undefined' && data['topThumb']['ctg_name'] != ''){
				var ctgTtl = $(document.createElement('SPAN'));
				ctgTtl.html(data['topThumb']['ctg_name']);
				ctgTtl.addClass('CtgTitle');
				LI.append(ctgTtl);
			}
			liCnt += 1;
		}
		
		pageSelector.append(UL);
		var liWidth = $('LI', UL).width() + 10;
		UL.css("width" , (liWidth * liCnt)+"px");
		//now see if we need to create an infinite menu or not
		if(Pages[currentPageSet].length > loopMenuLimit){
			if(page != 0){
				//update the li order so that the current page gets first
				for(var p = 0; p < page; p++){
					var LIs = $("LI", UL);
                    UL.append(LIs[0]);
				}
			}
			var middle = Math.floor(Pages[currentPageSet].length / 2);
			if(middle < 4) middle = 4;
			
			for(var x = Pages[currentPageSet].length - 1; x > middle; x--){
				var LIs = $("LI", UL);
				UL.prepend(LIs[LIs.length - 1]);
                UL.css({'left' : (parseInt(UL.css('left'),10) - 203)+"px"});
			}
			
			loopingMenu = true;
		}
		
		return page;
	}
	
	function _LoadCurrentPage(){
		var _data = Pages[currentPageSet][currentPage];

		$("#Slide"+currentSlide).css('background-image', 'url("'+BaseURI+'page_res/'+currentPageSet+'/'+_data['resDir']+'/'+_data['bottomBg']+'")');
		if(typeof(cache[currentPageSet][currentPage]) == 'undefined'){
			$.get(BaseURI+"page_res/"+currentPageSet+'/'+_data['resDir']+'/'+_data['text'],function(data){
				
				cache[currentPageSet][currentPage] = data;
				populatePageData(data);
			},'html');
		}else{
				populatePageData(cache[currentPageSet][currentPage]);
			
		}
	}
	
	function populatePageData(data){
		    var _data = Pages[currentPageSet][currentPage];
            var tmpSlide = $("#Slide"+currentSlide);
            tmpSlide.html(data);
            $("#Bottom").append(tmpSlide);
            tmpSlide.animate({'top' : 0},'500','linear',InergyPageMngr.MoveBackSlideDown);
            $(".RightText", tmpSlide).animate({'top' : 0}, 1000,'linear');
            $(".MiddleText", tmpSlide).animate({'top' : 0}, 800,'linear');
            $(".LeftText", tmpSlide).animate({'top' : 0}, 600,'linear');
            currentSlide = currentSlide == 1? 2 : 1;
            $("#Slide"+currentSlide).html('');
            var Imgs = $("#PageGallery #Imgs");
            Imgs.html('');
            var Bulletts = $("#PageGallery #Bulletts");
            Bulletts.html('');
            /* check if there is a gallery attached and init the gallery and it's controls*/
            
            if($('.MiddleText' , tmpSlide).length == 0){
                tmpSlide.append('<div class="MiddleText"><\/div>');
            }
            if(_data['gallery']){
                for(var i in _data['gallery']){
                    Imgs.append('<div rel="'+i+'"><img src="'+BaseURI+'page_res/'+currentPageSet+'/'+_data['resDir']+'/gallery/'+_data['gallery'][i]+'" alt="" \/><\/div>');
                    Bulletts.append('<span rel="'+i+'" class="Sprite">&nbsp;<\/span>');
                }
                $('.MiddleText' , tmpSlide).append('<div class="seeMore"><a href="#" onclick="return InergyPageMngr.ShowPageGallery();">See More<\/a><\/div>')
                Imgs.cycle({ 
                    fx:     'scrollHorz', 
                    speed:  'fast', 
                    timeout: 0, 
                    next:   '#ImgRight', 
                    prev:   '#ImgLeft' ,
                    after : InergyPageMngr.UpdateBullets
                });
            }
            
            if(typeof(_data['site']) != 'undefined' ){
                var seemore =  $('.MiddleText .seeMore' , tmpSlide);
                if(seemore.length == 0){
                    seemore = $('<div class="seeMore"><\/div>;');
                    $('.MiddleText' , tmpSlide).append(seemore);
                }
                seemore.prepend('<a href="'+_data['site']+'" class="visit" target="_blank">Launch Site<\/a>');
            }
	}
	function _updateLoopmenuSlidesRight(){
		 var UL = $("#PageSelector UL");
         var LIs = $('LI', UL);	
         var last = Pages[currentPageSet].length - 1; 
         for(var i = 0; i < loopUpdateCnt; i++){
            UL.append(LIs[i]);
            UL.css({'left' : (parseInt(UL.css('left'),10) + liWidth)+"px"});
         }
         loopUpdateCnt = 1;
         sliding = false;
	}
	function _updateLoopmenuSlidesLeft(){
		 var UL = $("#PageSelector UL");
         var LIs = $('LI', UL);	
         var last = Pages[currentPageSet].length - 1; 
         for(var i = 0; i < loopUpdateCnt; i++){
            UL.prepend(LIs[last - i]);
            UL.css({'left' : (parseInt(UL.css('left'),10) - liWidth)+"px"});
         }
         
         loopUpdateCnt = 1;
         sliding = false;
	}
	
	function _updateTopMenu(){
		$("UL.Menu LI").removeClass('active');
		$("UL.Menu LI[rel='"+currentPageSet+"']").addClass('active');
	}
	
	function _slideMenuLeft(cnt){
		if(typeof(cnt) == 'undefined' || cnt == 0){
			cnt = 1;
		}
		var newPos = 0;
        var UL = $("#PageSelector UL");
        var LIs = $('LI', UL);
        var pgcnt = Pages[currentPageSet].length - 1; 

        if(loopingMenu ==  false){
            if(currentPage <= 0){
                currentPage = pgcnt;
                newPos = parseInt(UL.css('left'),10)  - ((LIs.length - 1) * liWidth);
            }else{
                currentPage -= cnt;
                newPos =  parseInt(UL.css('left'),10) + (liWidth * cnt);
            }
            UL.animate({'left' : newPos}, 500 , 'swing',function(){sliding = false;});
        }else{
            currentPage -= cnt;
            if(currentPage < 0) currentPage = pgcnt;
            newPos = parseInt(UL.css('left'),10) + (liWidth * cnt);
            loopUpdateCnt = cnt;
            UL.animate({'left' : newPos}, 500 , 'swing',_updateLoopmenuSlidesLeft);
        }
        
        _highlightConatactMenu();
	}
	
	function _slideMenuRight(cnt){
		if(typeof(cnt) == 'undefined' || cnt == 0){
            cnt = 1;
        }
		var newPos = 0;
        var UL = $("#PageSelector UL");
        var pgcnt = Pages[currentPageSet].length - 1; 
        var LIs = $('LI', UL);

        if(loopingMenu ==  false){
            if(currentPage >= pgcnt || currentPage < 0){
                currentPage = 0;
                newPos = parseInt(UL.css('left'),10)  + ((LIs.length - 1) * (liWidth));
            }else{
                currentPage += cnt;
                newPos =  parseInt(UL.css('left'),10) - (liWidth * cnt);
            }
            UL.animate({'left' : newPos}, 500 , 'swing',function(){sliding = false;});
        }else{
            currentPage += cnt;
            if(currentPage > pgcnt) currentPage = 0;
            newPos = parseInt(UL.css('left'),10) - (liWidth * cnt);
	        loopUpdateCnt = cnt;
            UL.animate({'left' : newPos}, 500 , 'swing', _updateLoopmenuSlidesRight);
        }
        _highlightConatactMenu();
	}
	
	function _highlightConatactMenu(){
        if(currentPageSet=="company" && Pages[currentPageSet][currentPage]['urlname'] == 'contact'){
            $("UL.Menu LI[rel='contact']").addClass('active');
        }else{
            $("UL.Menu LI[rel='contact']").removeClass('active');
        }
	}
	function _slideToPage(to){
		if(loopingMenu) return false; // direct page load of looging menu si solved elswhere
		if(typeof(to) == 'undefined') to = 0;
		if(to < currentPage){
			var times = currentPage - to;
			sliding = true
			 _slideMenuLeft(times);
			return false;
		}else{
			if(to > currentPage){
				var times = to - currentPage;
				sliding = true
				 _slideMenuRight(times);
				return false;
			}
		}
		
		return false;
	}
	
	function _getPageIdx(pgSet, urlName){
		if(typeof(Pages[pgSet] != 'undefined')){
			if(typeof(urlName) != 'undefined'){
				for(var i in Pages[pgSet]){
					if(Pages[pgSet][i]['urlname'] == urlName) return parseInt(i,10);
				}
			}
		}
		
		return 0;
	}
	
	function _preloadImages(){
		for(var v in Pages){
            for(var x in Pages[v]){
            	var image = new Image();
                image.src = BaseURI+'page_res/'+v+'/'+Pages[v][x]['resDir']+'/'+Pages[v][x]['bottomBg'];
            	var image2 = new Image();
                image2.src = BaseURI+'page_res/'+v+'/'+Pages[v][x]['resDir']+'/'+Pages[v][x]['topThumb']['img'];
            }
        }
	}
	
	return{
		Init : function(pageSet, page,_BaseURI){
			/* support page load from url in order to be able to 
			 * load a specific page if user comes 
			 * trough a search engine result */ 
			if(firstInit){
				var URI = window.location.href.split('?');
				if(URI.length == 2){
					var components = URI[1].split('/');
					pageSet = components[0];
					if(components.length > 1){
						page = parseInt(components[1], 10);
						if(isNaN(page)){
							page = _getPageIdx(pageSet, components[1]);
						}
					}
				}
			}
			
			if(!firstInit && 
			   pageSet == currentPageSet && 
			   (typeof(page) == 'undefined' || page == currentPage)){
                    return false;
			}
			 if(typeof(_BaseURI) != 'undefined'){
			 	BaseURI = _BaseURI;
			 }
			 
			
			var pageSetTmp = currentPageSet;
			var pageTmp = currentPage;
			
			try{
				if(typeof(pageSet) != 'undefined' && typeof(Pages[pageSet]) != 'undefined'){
					currentPageSet = pageSet;
				}
			}catch(e){
				/* We don't realy care if invalid pageset and page has been specified because we load the default */
			}
			
			if(firstInit){
				for(var v in Pages){
					cache[v] = [];
				}
				setTimeout('InergyPageMngr.preloadImages();',30);
			}
			
			if(firstInit || pageSetTmp != currentPageSet){
                page = _SetupPageset(page);
                _updateTopMenu();
                if(loopingMenu == true){
                    currentPage = page;
                }else{
                    currentPage = 0;
                }
			}
			
			try{
				if(typeof(page) != 'undefined' && typeof(Pages[pageSet][page]) != 'undefined'){
                    
                    if(currentPage != page){
                        _slideToPage(page);
                    }
                    
                }else{
                    currentPage = 0;
                }
			}catch(e){}
			
			_LoadCurrentPage();
			
			$("#pageLeft").unbind('click');
			$("#pageRight").unbind('click');
			$("#pageLeft").bind('click',{},InergyPageMngr.GoPrevPage);
			$("#pageRight").bind('click',{},InergyPageMngr.GoNextPage);
			firstInit = false;
			return false;
		},
		GoNextPage : function(){
			if(sliding == true) return false; 
			sliding = true;
			_slideMenuRight();
            _LoadCurrentPage();
            return false;
	    },
		GoPrevPage : function(){
			if(sliding == true) return false; 
			sliding = true;
			_slideMenuLeft();
            _LoadCurrentPage();
            return false;
        
        },
        
        LoadCurrentPage : function(){
        	_LoadCurrentPage();
        },
        
        MoveBackSlideDown : function(){
        	$("#Slide"+currentSlide).css({'top' : '300px'});
        	$("#Slide"+currentSlide).css('background-image','none');
        },
        ShowPageGallery : function(){
        	$("#PageGallery").animate({'right' : 0},'fast','linear');
        	$("#PageGallery #GalleryInner").animate({'left' : 0},'slow','linear');
        	return false;
        },
        HidePageGallery : function(){
        	$("#PageGallery").animate({'right' : -740},'fast','linear');
        	$("#GalleryInner").animate({'left' : 300},'slow','linear');
        	return false;
        },
        UpdateBullets : function(curr, next, opts){
        	var curImg =opts['currSlide'];
        	$("#PageGallery #Bulletts SPAN").removeClass('current');
        	$("#PageGallery #Bulletts SPAN[rel='"+curImg+"']").addClass('current');
        	$('#ImgLeft')[curImg == 0 ? 'hide' : 'show']();
            $('#ImgRight')[curImg == opts['slideCount'] - 1 ? 'hide' : 'show']();
        },
        Contact : function(){
        	//this sends the email
        	var _error = false;
        	$("form#inergy-mail-form input[type='text']").each(function(index){
    			var input = $(this);
    			input.css({'border-color' : '#DBDBDB'});
    			input.val($.trim(input.val()));
        		if(!input.val()){
        			input.css({'border-color' : '#F00'});
        			_error = true;
        		}
        		if(this.name == 'mail[email]'){
        			 var emailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/; 
        			 ///var emailPattern = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/; 
        			 if(!emailPattern.test(input.val())){
	        			input.css({'border-color' : '#F00'});
        			 	_error = true;
        			 }
        		}
        	});
        	
        	if(!_error){
        		$.post(BaseURI+"inergymail.php",$("form#inergy-mail-form").serialize(),function(data){
        			if(data['success']){
        			     var msgHldr = $("form#inergy-mail-form").parent();
        			     msgHldr.css('top' , '300px');
        			     msgHldr.html(data['message']);
        			     msgHldr.animate({'top' : 0});
        			}else{
        				alert(data['message']);
        			}
        		},'json');
        	}
        },
        preloadImages : function(){
        	_preloadImages();
        }
	}
}();
