Shenoa.Tabs = function() {
    var tabs;
    var basepath = document.location.pathname.substring(0,document.location.pathname.lastIndexOf('/')) ;

    var defaults = {
      build:  'Build Your Own Ring<br />',
      select: "<div id='tab1container' style=\'width:180px;\'><div style=\'float:left;\'><img src=\'"+basepath+"/resources/images/shenoa/tab_diamond.png\'></div><div class=\'x-tabs-text\' style=\'margin-left:5px;float:right;width:130px;\'>1. Select Your Diamond<br>",
      choose: "<div id='tab2container' style=\'width:180px;\'><div style=\'float:left;\'><img src=\'"+basepath+"/resources/images/shenoa/tab_setting.png\' width='40px'></div><div class=\'x-tabs-text\' style=\'margin-left:0px;\'>2. Choose Your Style<br>",
      cart:   "<div id='tab3container' style=\'width:180px;\'><div style=\'float:left;\'><img src=\'"+basepath+"/resources/images/shenoa/tab_cart_off.png\'></div><div class=\'x-tabs-text\' style=\'margin-left:5px;\'>3. Add to Your Cart<br>",
			closetags: '</div></div>'
    };		
    
    return {
    	activateSelectTab : function() {
    		Shenoa.DiamondGrid.allowRefresh(); // allow datasource to be refreshed
    		Shenoa.DiamondGrid.refreshDataSource(); // and then refresh it
    		tabs.enableTab('tabs-2');
    		tabs.activate('tabs-2');
				hideAllTooltips();				
    	},
	
    	updateSelectTab:function() {			
    		if ( Ext.get('select_diamond_price') && Ext.get('select_diamond_image_src') ) {
				
					Shenoa.Tabs.setSelectTabTitle( defaults.select +
                    "<div style=\'width:140px;\'><div style=\'float:left;width:55px;\'>$" + Ext.get('select_diamond_price').getValue() + "</div><div style=\'margin-left:59px;width:75px;\'><span style=\'display:inline;top:0px;\'>view</span>&nbsp;<span onclick=\'Shenoa.Tabs.resetTabTitles();Shenoa.RevealProduct.hideProduct();return false;\' style=\'display:inline;top:0px;\'>change</span></div></div>"+defaults.closetags);
									
    		}

				hideAllTooltips();
		},
	
  	resetSelectTab: function() {
  		Shenoa.Tabs.setSelectTabTitle(defaults.select + defaults.closetags + '&nbsp;');
			hideAllTooltips();
  	},
    	
    activateChooseTab : function(productid,page,show_all,sortby) {//add sortby
    	var page = ( page ) ? page : 1;
	var show_all = ( show_all ) ? show_all : '';
    	//var shapes = ( shapes ) ? shapes : 'solitaire,antique,sidestone';
	var shapes,shapes_solitaire_state,shapes_antique_state,shapes_sidestone_state;
	var shapes_solitaire = Ext.get('shapes_solitaire');
	var shapes_antique = Ext.get('shapes_antique');
	var shapes_sidestone =  Ext.get('shapes_sidestone');
	var sortby = (sortby ) ? sortby : '';
	//Removed first intro tab, so getTab(2) replaced by getTab(1).	    				//tabs.getTab(1).getUpdateManager().setDefaultUrl(basepath+'/tab3.php?diamondproductid='+productid+'&limit='+limit+'&start='+start+'&shapes='+shapes);

	

	if (shapes_solitaire) {
		if (shapes_solitaire.dom.checked)
			shapes_solitaire_state = 1;
		else 
			shapes_solitaire_state = 0;
	}
	else
	    shapes_solitaire_state = 1;
	if (shapes_antique) {
		if (shapes_antique.dom.checked)
			shapes_antique_state= 1;
		else
			shapes_antique_state= 0;
	}
	else
	    shapes_antique_state= 1;
	if (shapes_sidestone) {
		if (shapes_sidestone.dom.checked)
			shapes_sidestone_state = 1;
		else
			shapes_sidestone_state = 0;
	}
	else
		shapes_sidestone_state = 1;
	    
    	tabs.getTab(1).getUpdateManager().setDefaultUrl(basepath+'/tab3.php?diamondproductid='+productid+'&page='+page+'&shapes_solitaire='+shapes_solitaire_state+'&shapes_antique='+shapes_antique_state+'&shapes_sidestone='+shapes_sidestone_state+'&show_all='+show_all+'&sort='+sortby); 
	tabs.getTab(1).getUpdateManager().refresh();
	// tabs.getTab(2).getUpdateManager().on("update", Shenoa.Tabs.updateChooseTab);
    	tabs.enableTab('tabs-3');
    	tabs.activate('tabs-3');
			hideAllTooltips(); //remove any left over tooltip product details
    	},
	updateChooseTab: function(el, response) {
		if ( Ext.get('select_diamond_price') && Ext.get('select_diamond_image_src') ) {
 
                  Shenoa.Tabs.setChooseTabTitle( defaults.choose +
                    "<div style='width:136px;'><div style=\'float:left;width:59px;\'>+&nbsp;$" + Ext.get('choose_setting_price').getValue() + "</div><div style=\'margin-left:60px;width:74px;\'><span style=\'display:inline;top:0px;\'>view</span>&nbsp;<span onclick=\'Shenoa.Tabs.resetChooseTab();Shenoa.Tabs.activateChooseTab(Shenoa.SelectedProductId);\' style=\'display:inline;top:0px;\'>change</span></div></div>"+defaults.closetags);
                  
		}
		hideAllTooltips();
	},
	resetChooseTab: function() {
		Shenoa.Tabs.setChooseTabTitle(defaults.choose + '&nbsp;');
		hideAllTooltips();
	},
	
	updateChooseTabForce: function() {
 
		Shenoa.Tabs.setChooseTabTitle( defaults.choose +
      "<div style='width:136px;'><div style=\'margin-left:60px;width:74px;\'><a onclick=\'Shenoa.Tabs.resetChooseTab();Shenoa.Tabs.activateChooseTab(Shenoa.SelectedProductId);\' style=\'display:inline;top:0px;\'>change</a></div></div>"+defaults.closetags);

	},
			
		activateChooseTab2 : function(productid,page,shapes) {
    		var page = ( page ) ? page : 1;
    		var shapes = ( shapes ) ? shapes : 'solitaire,antique,sidestone';
    		tabs.getTab(2).getUpdateManager().setDefaultUrl(basepath+'/tab3.php?diamondproductid='+productid+'&page='+page+'&shapes='+shapes);    		
    		tabs.getTab(2).getUpdateManager().refresh();
	// 	tabs.getTab(2).getUpdateManager().on("update", Shenoa.Tabs.updateChooseTab);
		hideAllTooltips();
    	},
    	
    	activateCartTab : function(diamondproductid,ringproductid,po) {
				var poid;
				if (po!=null && po != '')
    			poid = $('po'+po).value;	tabs.getTab(2).getUpdateManager().setDefaultUrl(basepath+'/tab4.php?diamondproductid='+diamondproductid+'&ringproductid='+ringproductid+'&optionid='+poid);
		tabs.getTab(2).getUpdateManager().on("update", Shenoa.Tabs.updateCartTab);
		tabs.getTab(2).getUpdateManager().on("update", Shenoa.Tabs.updateChooseTab);
    		tabs.enableTab('tabs-4');
    		tabs.activate('tabs-4');
				//alert ($('po'+po).value);
				
				hideAllTooltips();
    	},
	updateCartTab: function(el, response) {
		if ( Ext.get('cart_total_price_for_tab_title') ) {
		  Shenoa.Tabs.setCartTabTitle(defaults.cart +  
		      ' Subtotal: $' + Ext.get('cart_total_price_for_tab_title').getValue() + 
		      '.00' );
		}
		hideAllTooltips();
	},
	resetCartTab: function() {
		Shenoa.Tabs.setCartTabTitle(defaults.cart + '&nbsp;');
		hideAllTooltips();
	},
	resetTabTitles: function() {
		Shenoa.Tabs.resetSelectTab();
		Shenoa.Tabs.resetChooseTab();
		Shenoa.Tabs.resetCartTab();
		hideAllTooltips();
	},
    	
	    init : function(){
	    	// create tab panel        
	        tabs = new Ext.TabPanel('tabs');
	
	       // var tab1 = tabs.addTab('tabs-1', defaults.build+'&nbsp;');
	    
	        var tab2 = tabs.addTab('tabs-2', defaults.select+ defaults.closetags+'&nbsp;');
	        tab2.on('activate', Shenoa.DiamondGrid.refreshDataSource, Shenoa.DiamondGrid, true); 


					//var tab3 = tabs.addTab('tabs-3', defaults.choose+'&nbsp;');  temp off
					var tab3 = tabs.addTab('tabs-3');
					
	        /*var updater3 = tab3.getUpdateManager();
	        updater3.setDefaultUrl('selector_adam3/tab3.php');
	        tab3.on('activate', updater3.refresh, updater3, true);
					*/
	
	        //var tab4 = tabs.addTab('tabs-4', defaults.cart+'&nbsp;');
					var tab4 = tabs.addTab('tabs-4');
					
	        var updater4 = tab4.getUpdateManager();
	        updater4.setDefaultUrl(basepath+'/tab4.php');
	        tab4.on('activate', updater4.refresh, updater4, true);
					
					// disable all tabs except first
					//tabs.disableTab('tabs-2');
					tabs.disableTab('tabs-3');
					tabs.disableTab('tabs-4');
	    
	        tabs.activate('tabs-2');
					
					//fix for safari, chrome
					Shenoa.Tabs.setChooseTabTitle(defaults.choose + '&nbsp;');
					Shenoa.Tabs.setCartTabTitle(defaults.cart + '&nbsp;');
					
					//Move.element('tab2container', $('ext-gen18'), 'move');
					/*$('ext-gen18').insert($('tab2container'));*/
					//$('ext-gen18').setStyle({  width: '180px'});
					/*
					$('ext-gen24').insert($('tab3container'));
					$('ext-gen24').setStyle({  width: '180px'});
					*/
					//Ext.DomHelper.append('ext-gen19','tab2container');
					
					//previous function sets the tab text but also the title of the element. This is how ext.js functions. Correct this.
					var tab1_title = Ext.get('ext-gen13');		
					var tab2_title = Ext.get('ext-gen19');	
					var tab3_title = Ext.get('ext-gen25');		
      		if (tab1_title)
      			tab1_title.dom.title = '';						
      		if (tab2_title)
      			tab2_title.dom.title = '';						
					if (tab3_title)
						tab3_title.dom.title = '';
	    },
	getBuildTab: function() {
		return tabs.getTab('tabs-2');
	},
	setBuildTabTitle: function(value) {
		if (value == null || value.length == 0) {
			value = 'Build Your Own Ring<br />&nbsp;';
		}
		return tabs.getTab('tabs-2').setText(value);
	},
	getSelectTab: function() {
		return tabs.getTab('tabs-2');
	},
	setSelectTabTitle: function(value) {
		if (value == null || value.length == 0) {
			value = '1. Select Your Diamond<br />&nbsp;';
		}
		tabs.getTab('tabs-2').setText(value);
		//previous function sets the tab text but also the title of the element. This is how ext.js functions. Correct this.
		var tab1_title = Ext.get('ext-gen13');
		if (tab1_title)
			tab1_title.dom.title = '';		
	},
	getChooseTab: function() {
		return tabs.getTab('tabs-3');
	},
	setChooseTabTitle: function(value) {
		if (value == null || value.length == 0) {
			value =  '2. Choose Your Style<br />&nbsp;';
		}
		tabs.getTab('tabs-3').setText(value);
		//previous function sets the tab text but also the title of the element. This is how ext.js functions. Correct this.
		var tab2_title = Ext.get('ext-gen19');
		if (tab2_title)
			tab2_title.dom.title = '';
	},
	getCartTab: function() {
		return tabs.getTab('tabs-4');
	},
	setCartTabTitle: function(value) {
		if (value == null || value.length == 0) {
			value = '3. Add to Your Cart<br />&nbsp;';
		}
		tabs.getTab('tabs-4').setText(value);
		var tab3_title = Ext.get('ext-gen25');
		if (tab3_title)
			tab3_title.dom.title = '';
	}
  };
}();

Shenoa.KeyLimiter = function() {
  return {
    init: function() {
      var numericalLimitedEls = ['priceRange', 'priceSlider', 'caratSlider'];
      Ext.each(numericalLimitedEls, function(limitedEl){
        Ext.get(limitedEl+'Min').addListener('keydown', Shenoa.KeyLimiter.numericalListener);
        Ext.get(limitedEl+'Max').addListener('keydown', Shenoa.KeyLimiter.numericalListener);        
      });
      var disabledEls = ['cutSlider', 'colorSlider', 'claritySlider', 'certificationSlider'];
      Ext.each(disabledEls, function(limitedEl){
	if (Ext.get(limitedEl)) {
          Ext.get(limitedEl+'Min').addListener('keydown', Shenoa.KeyLimiter.disablingListener);
          Ext.get(limitedEl+'Max').addListener('keydown', Shenoa.KeyLimiter.disablingListener);         
	}
      });
    },
    numericalListener: function(e) {      
      var k = e.getKey();
      if (e.hasModifier()) {
        e.stopEvent();
        return false;
      }
      switch (k) { 
        // keyboard
        case Ext.EventObject.BACKSPACE: case Ext.EventObject.TAB: case Ext.EventObject.RETURN: case Ext.EventObject.ESC: case Ext.EventObject.LEFT: 
        case Ext.EventObject.UP: case Ext.EventObject.RIGHT: case Ext.EventObject.DOWN: case Ext.EventObject.DELETE: case Ext.EventObject.HOME: 
        case Ext.EventObject.END: case Ext.EventObject.PAGEUP: case Ext.EventObject.PAGEDOWN:
            return true;
          break;
        // numbers
        case 48: case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: // numbers
        case 96: case 97: case 98: case 99: case 100: case 101: case 102: case 103: case 104: case 105: /// numpad numbers
        case 190: // period too
            return true;
          break;
        // everything else
        default:
            e.stopEvent();
            return false;
          break;
      }      
    },
    disablingListener: function(e) {
      e.stopEvent();
      return false;
    }
  }
}();
Ext.onReady(Shenoa.Tabs.init, Shenoa.Tabs, true);
Ext.onReady(Shenoa.KeyLimiter.init, Shenoa.KeyLimiter, true);

