/******************************************************************
 * Store-locator. Pagination stuff.
 * Nov 6 2007
 ******************************************************************/

var results;
var currentPage = 0;
var nbPage = 0;
var resultsUnlocked = false;
var directionsUnlocked = false;
var htmResults;
var htmDirections;
var isKilometers = true;


/**
 * Search object.
 * Responsible for
 *  - displaying the Howto, Results, Directions tabs.
 *  - displaying the search results, search messages, etc.
 */
var storeLocator = {
	
    setTab : function(contentId){
        document.getElementById('howto').style.display = 'none';
        document.getElementById('directions').style.display = 'none';
        document.getElementById('results').style.display = 'none';
        document.getElementById(contentId).style.display = 'block';
        if(!htmResults)htmResults = document.getElementById('resultsTab').innerHTML;
		if(!htmDirections)htmDirections = document.getElementById('directionsTab').innerHTML;
		
        switch(contentId){
            
            /**
             * HowTo Tabs
             * ==========
             */
            case 'howto':
                document.getElementById('howtoTab').className = 'first on';
                if(resultsUnlocked){
                    document.getElementById('resultsTab').className = '';
					document.getElementById('resultsTab').innerHTML = htmResults
                }else{
                    document.getElementById('resultsTab').className = 'disabled';
					if(document.getElementById('resultsTabLink'))document.getElementById('resultsTab').innerHTML = document.getElementById('resultsTabLink').innerHTML;
					
                }
                if(directionsUnlocked){
                    document.getElementById('directionsTab').className = 'last';
					document.getElementById('directionsTab').innerHTML = htmDirections;
                }else{
                    document.getElementById('directionsTab').className = 'last disabled';
					if(document.getElementById('directionsTabLink'))document.getElementById('directionsTab').innerHTML = document.getElementById('directionsTabLink').innerHTML;
                }
                
				document.getElementById("storeInfo").style.display = 'none';
				document.getElementById('map').style.display = 'block';
                document.getElementById('twoCol').className = 'clearfix';
                document.getElementById('map').style.width = '473';
                document.getElementById('map-container').style.width ='473';
            break;
			
			/**
			 * Results Tabs
			 * ============
			 */
            case 'results':
			    // Delete route, and make visible the shapes
                SLMap.GetMap().DeleteRoute();       
				SLBub.DeleteBub(null); // clear store bubble
				if (SLMap.GetShapeLayer()) SLMap.GetShapeLayer().Show();
				
				// If directions is displayed, reset the map as it was
				//if (directionsUnlocked) {
				//	SLDirection.RestoreResultView();
				//}
		

                document.getElementById('howtoTab').className = 'first befon';
                if(directionsUnlocked){
                    document.getElementById('directionsTab').className = 'last';
					document.getElementById('directionsTab').innerHTML = htmDirections;
                }else{
                    document.getElementById('directionsTab').className = 'last disabled';
					if(document.getElementById('directionsTabLink'))document.getElementById('directionsTab').innerHTML = document.getElementById('directionsTabLink').innerHTML;
                }
                document.getElementById('resultsTab').className = 'on';
                document.getElementById('twoCol').className = 'clearfix';
                document.getElementById('map').style.width = '473';
                document.getElementById('map-container').style.width ='473';
            break;
			
            
            /**
             * Directions Tabs
             * ===============
             */
            case 'directions':
			    // Redo the routes
				SLRoute.GetRoute(null, null);
				SLBub.DeleteBub(null); // clear store bubble
				this.hideStoreDetailBox();
			
				directionsUnlocked=true;
                document.getElementById('howtoTab').className = 'first';
                
                if(resultsUnlocked){
                    document.getElementById('resultsTab').className = 'befon';
					document.getElementById('resultsTab').innerHTML = htmResults
                }else{
                    document.getElementById('resultsTab').className = 'befon disabled';
					if(document.getElementById('resultsTabLink'))document.getElementById('resultsTab').innerHTML = document.getElementById('resultsTabLink').innerHTML;
                }
                document.getElementById('directionsTab').className = 'last on';
                document.getElementById('twoCol').className = 'clearfix directions';
                document.getElementById('map').style.width='473';
                document.getElementById('map-container').style.width='473';
				
            break;
        }
    },
    
    /**
     * @param contentId For example "directions"
     * @return true if the 'contentId' tab is opened.
     */
    IsTabOpened: function(contentId) {
    	return document.getElementById(contentId).style.display == 'block';
    },
    

	ShowLegend : function(){       
		if (document.getElementById("legendIcons")) {
			document.getElementById("legendIcons").style.display = 'block';
		}
    },
    
    /**
     * Omniture ...
     * SiteCatalyst code version: H.10.
     * Copyright 1997-2007 Omniture, Inc. More info available at
     * http://www.omniture.com
     */
     
    sendOSTPageNameMoreInfo : function(){
        try{
            sendOSTPageName("StoreList:MoreInfo","Store Locator");
        }catch(e){
            return;
        }
    },
    
    sendOSTPageNameSearchResultsError : function(){
        try{
            sendOSTPageName("SearchResultsError:No shop found within area","Store Locator");
        }catch(e){
            return;
        }
    },
    
    sendOSTPageNameStoreInfoBubble : function(){   
        try{
            sendOSTPageName("StoreInfoBubble:MoreInfo","Store Locator");
        }catch(e){
            return;
        }
    },
    
    sendOSTPageNameGetDirections : function(){    
        try{
            sendOSTPageName("StoreInfoBubble:GetDirections","Store Locator");
        }catch(e){
            return;
        }
	
	},
    
    sendOSTPageNameMoreInfoGetDirections: function(){  
        try{
            sendOSTPageName("MoreInfo:GetDirections","Store Locator");
        }catch(e){
            return;
        }
	
	},
    
    sendOSTPageNameDirectionsDisplayed : function(){  
        try{
            /* sendOSTPageName("GetDirections:DirectionsDisplayed","Store Locator"); */
        }catch(e){
            return;
        }
	
	},
    
    sendOSTPageNameVerifyStartingLocation : function(){  
        try{
            sendOSTPageName("GetDirections:VerifyStartingLocation","Store Locator");
        }catch(e){
            return;
        }
	
	},
    
    sendOSTPageNameStoreLocation: function(){    
        
		try{
            sendOSTPageName("SearchResults:Select Location","Store Locator");
        }catch(e){
            return;
        }
	
	},
    
    sendOSTPageNameLocationNotFound: function(){   
        try{
            sendOSTPageName("SearchResultsError:Location not found","Store Locator");
        }catch(e){
            return;
        }
	},
    
    sendOSTPageNameResult: function(product, store){
        try{
            if(typeof(product)!='undefined' && typeof(store)!='undefined'){
	            if(typeof(s)=='object'){
	                s.prop13=product + ":" + store;
	                sendOSTPageName("SearchResults","Store Locator");
	                s.prop13="";
	            }
	        }
    	} catch (e) {
            return;
        }
    },
    
    sendOSTPageNameErrorServiceNoAvailable : function(){   
        try{
            sendOSTPageName("Error:serviceNoAvailable","Store Locator");
        }catch(e){
            return;
        }
	},
    
    sendOSTPageNameErrorBrowserNoSupported: function(){   
        try{
            sendOSTPageName("Error:browserNoSupported","Store Locator");
        }catch(e){
            return;
        }
	},
	
	sendOSTPageNameSwitch: function(){   
        try{
        	if(isKilometers){
	        	isKilometers = false;
	            sendNewOmniturePageName("GetDirections:SwitchToMiles","Store Locator");
	        }else{ 
                isKilometers = true;
	            sendNewOmniturePageName("GetDirections:SwitchToKilometers","Store Locator");
	        }
        }catch(e){
            return;
        }
	},
	

    /**
     * Generic function to display a message under the search block.
     * @param msg1 Shown in red
     * @param msg2
     * @return
     */
	ShowSearchMessage : function(msg1, msg2){       
		document.getElementById("errorTitle").innerHTML = msg1;
        document.getElementById("disambuigation").innerHTML = msg2;
        document.getElementById("disambuigerror").style.display = 'block';        
    },

	hideSearchMessage : function(){
    	try {
        document.getElementById("disambuigerror").style.display = 'none';
		document.getElementById("errorTitle").innerHTML = '';
        document.getElementById("disambuigation").innerHTML = '';
    	} catch (e) { // sometimes "disambuigerror" does not exist!
    	}
    },
    
    /**
     * To be called to hide store details layer (like route functions).
     */
    hideStoreDetailBox: function() {
       try {
    	  document.getElementById("storeInfo").style.display = 'none'; // hide detail
          document.getElementById("map").style.display = 'block';// show map
       } catch(e) {
       }
    },

    
    getMoreInfo :function(StoreID){

	   if (document.getElementById("StoreShapeControl")!=null)
	   {
		   document.getElementById("StoreShapeControl").innerHTML = '';
	   }
	   
	   
		
	   document.getElementById("map").style.display = 'none';
	   document.getElementById("LoaderWait").style.display = 'block';
       ajaxFindStoresGetDetail(StoreID)
     
	   document.getElementById("LoaderWait").style.display = 'none';
       document.getElementById("storeInfo").style.display = 'block';
       SLMap.GetMap().HideInfoBox();

	   document.getElementById("myMiniMapControl").style.display = 'none';
	   
	   HideMiniArrows();
                
    },
    
	closeMainMap :function(){
    	this.hideStoreDetailBox();
        document.getElementById("myMiniMapControl").style.display = 'block';
        RestoreMiniMap();
    },

    newSearch : function(newAddress){        
        document.getElementById("txtCloseTo").value = newAddress;
        document.getElementById("disambuigerror").style.display = 'none';
        doStoreSearch();                
    },
    
    /**
     * Reset or close all small windows, infoboxes, pending timers, flags, etc.
     * Can be used all over the place to reset the StoreLocator to a clean state.
     */
    ResetAll: function() {
      HideIntroControl(); // hide splash
      SLBub.DeleteBub(null); // store bubble
      SLCursor.ResetCursor();
  	  storeLocator.hideSearchMessage();
  	  storeLocator.hideStoreDetailBox();  
  	  SLRoute.Reset();

    },
    
    showDisambuigation : function(dissambuigationArray){
        
        var strDisambuigation = '<ul>';
        for (var i=0; i < dissambuigationArray.length && i < 6;i++){
			strDisambuigation= strDisambuigation + '<li><a href="#" onClick="storeLocator.newSearch(\''
			    + dissambuigationArray[i].Name 
				+'\')">' + dissambuigationArray[i].Name + '</a></li>';
        }
        strDisambuigation += '</ul><br/>'
        	              + SLMesg.disambiguationMessageExplanation;
        
        document.getElementById("disambuigation").innerHTML = strDisambuigation;
        document.getElementById("disambuigerror").style.display = 'block';
		document.getElementById("errorTitle").innerHTML = SLMesg.disambiguationMessagePrompt;
	storeLocator.sendOSTPageNameStoreLocation();
    },

	showNoAddrFound : function(){
           
		document.getElementById("errorTitle").innerHTML = SLMesg.errorAddressNotFound;
        document.getElementById("disambuigation").innerHTML = SLMesg.addressNotFoundHelp;
        document.getElementById("disambuigerror").style.display = 'block';
        storeLocator.sendOSTPageNameLocationNotFound();
    },

    result : function(tResults){
        results = tResults;
        document.getElementById("stores").innerHTML = "";
        nbPage = Math.ceil(results.length/4);
		//console.log('nbpage: ' + nbPage);
        
        for(var i = 0; i < 6; i++){
            document.getElementById("page" + (i + 1)).style.display = 'none';
        }
        document.getElementById("prevStorePage").style.display = 'none';
        document.getElementById("nextStorePage").style.display = 'none';
        
        storeLocator.gotoPage(1);
		resultsUnlocked = true;
        storeLocator.setTab('results');
        
    },
    prevStorePage : function(){
        storeLocator.gotoPage(currentPage);
    },
    nextStorePage : function(){
        storeLocator.gotoPage(currentPage + 2);
    },
    gotoPage : function(p){
        if(results){
            p = p - 1;
            if(p >= 0 && p < nbPage){
                currentPage = p;
                
                //Generate stores content
                var storeHTML = "<ul>";
                var i = currentPage*4;
                var l = i + 4;
                var newReturn=i;
                for(i;  i < l; i++){
					if(results[i]){
						var storeElemName = "store" + i; 
	                    storeHTML += '<li id="' + storeElemName + '" ' 
	                        + ' onmouseover="OverIcons(\'' + results[i].ShapeId + '\', \'' + storeElemName + '\')" ' 
	                    	+ ' onmouseout="UnderIcons(\'' + results[i].ShapeId + '\', \'' + storeElemName + '\')"><a href="#" '
	                    	+ ' onclick="storeLocator.getMoreInfo(' + i + ');storeLocator.sendOSTPageNameMoreInfo();">' 
		                    + SLMesg.moreInfo + '</a><h5>' + results[i].name + '</h5>';
	                    if(results[i].mall){
	                        storeHTML += '<p><h6>' + results[i].mall + '</h6></p>';
	                    }
	                    storeHTML += '<p>' + results[i].street + "<br/>" + results[i].city + '</p></li>';
					}
                }
                storeHTML += "</ul>";
                
				
				
				//sets the store page showing field
				var initShowingval=newReturn + 1;
				var showXofYArr = SLMesg.showingXofY.split('|');
				document.getElementById("infoNum").innerHTML = showXofYArr[0] + initShowingval + '-' + l  + showXofYArr[1] + " " + results.length;

                document.getElementById("stores").innerHTML = storeHTML;
                
                //hiding and showing previous page link
                if(currentPage == 0){
                    document.getElementById("prevStorePage").style.display = 'none';
                }else{
                    document.getElementById("prevStorePage").style.display = 'inline';
                }
                //hiding and showing next page link
                if(currentPage == nbPage -1){
                    document.getElementById("nextStorePage").style.display = 'none';
                }else{
                    document.getElementById("nextStorePage").style.display = 'inline';
                }
                
                
                //hiding and showing pages num
				var num = 3;
				if(currentPage < 2 || currentPage > nbPage - 3)num++;
				if(currentPage < 1 || currentPage > nbPage - 2)num++;
				
                for(i = 0; i < nbPage; i++){
                    if(Math.abs(currentPage - i) < num){
                        document.getElementById("page" + (i + 1)).style.display = 'inline';
                        document.getElementById("page" + (i + 1)).innerHTML = '<a href="#" onclick="storeLocator.gotoPage(' 
                        		+ (i + 1) + '); return false;">' + (i + 1) + '</a>';
                        
                        if(i == currentPage){
                            document.getElementById("page" + (i + 1)).innerHTML = (i + 1) + '';
                        }
                    }else{
                        document.getElementById("page" + (i + 1)).style.display = 'none';
                    }
                }
            }
        }

		return newReturn;
    },
    
    
    /**
     * Fucntion invoked when mouseover a store pushpin:
     *  1. display the Results page that contains the corresponding store
     *  2. highlight it
     */
    icoClick : function(id){
		
    	//firstelement is first element in list that will be hilighted
		var firstElement= storeLocator.gotoPage(Math.floor(id/4) + 1);       

		for(var i = firstElement; i <= id; i++){           
                
                liStoreId = 'store' + i;

                hilitedStoreElem = document.getElementById(liStoreId);// ('hilitedStoreElem' is defined in sl_find.js)
                hilitedStoreElem.className = 'active';
                
                
				liStoreId = 'store' + (i-1);
				if (i > firstElement)
				{
					document.getElementById(liStoreId).className = '';
				}
				
		}	
        //return;
            
       
    },
    exitLastIcoClick : function(){
        if(document.getElementById(liStoreId)){
            document.getElementById(liStoreId).className = '';
        }
    }
}


window.onload = function(){
        storeLocator.setTab('howto');
}
