//////////////////////////////////////////////////
//  TOGGLE CLASS   v1                           //	
//   Author : Greg Dunn                         //		 
//   Date : 05/24/08                            // 		
//////////////////////////////////////////////////
//  REQUIRES                                    // 
//                                              //
//////////////////////////////////////////////////
//
//  Example Init:
//  toggleClass.init('loginTabs','pyb','cs','0');
//  
//  Example toggle:
//  toggleClass.toggle();
//    or
//  toggleClass.toggle('1');
//
//////////////////////////////////////////////////

// toggleClass Constructor
toggleClass = function () {
    
				
	///////////////////////////		
    //config - Private 
    ///////////////////////////			
    var config = {
				element:'',
				class1:'',
				class2:'',
				initialState: '0'				
    }
	
    ///////////////////////////		
	//init - Public  
    ///////////////////////////		
    var init = function (elemid, cl1, cl2, initState)
		{
			 //console.log('THINK.toggleClass.init');
			 config.element = elemid;
			 config.class1 = cl1;
			 config.class2 = cl2; 
			 config.initialState = initState;
			 var viewState; 
		   if (config.initialState == '0') {
					 viewState = cl1;
			 } else {
					 viewState = cl2;
			 }
			 elem(elemid).className = viewState;
		}	
    
		///////////////////////////	
		//elem - Public
        ///////////////////////////				
		var elem = function(id)	{
			//console.log('toggleClass.elem');
			//console.log('toggleClass.elem.id (' + typeof id + ') - ' + id );
			var domElement;
			if (typeof id !== 'string') {
				  //console.log('toggleClass.elem.id != string');
			    domElement = id; 
			} else {
				  //console.log('toggleClass.elem.id = string');
					domElement = document.getElementById(id);
			}
			//console.log('toggleClass.elem.domElement (' + typeof domElement + ') - ' + domElement );
		  //console.log('domElement.style.display - ' + domElement.style.display );
		
		return domElement;
		}
		
		///////////////////////////	
        //getElement - Public
		///////////////////////////	
		var getElement = function () {
			  //console.log('THINK.toggleClass.getView1');
				return config.element;
		}		
		
		
		///////////////////////////	
        //getClass1 - Public
		///////////////////////////	
		var getClass1 = function () {
			  //console.log('THINK.toggleClass.getView1');
				return config.class1;
		}		
		
		///////////////////////////	
        //getClass2 - Public
		///////////////////////////	
		var getClass2 = function () {
			  //console.log('THINK.toggleClass.getView2');
				return config.class2;
		}		
		
		///////////////////////////	
        //getInitialState - Public
		///////////////////////////	
		var getInitialState = function () {
			  //console.log('THINK.toggleClass.getInitialState');
				return config.initialState;
		}			
		
		///////////////////////////	
        //setElement - Public
		///////////////////////////	
		var setElement = function (elem) {
			  //console.log('THINK.toggleClass.setView1');			
				config.element = elem;
				return config.element;
		}				
		
		
		///////////////////////////	
        //setClass1 - Public
		///////////////////////////	
		var setClass1 = function (cl1) {
			  //console.log('THINK.toggleClass.setView1');			
				config.class1 = cl1;
				return config.class1;
		}		
		
		///////////////////////////	
        //setClass2 - Public
		///////////////////////////	
		var setClass2 = function (cl2) {
			  //console.log('THINK.toggleClass.setView2');
				config.class2 = cl2;
				return config.class2;
		}

		///////////////////////////	
        //setInitialState - Public
		///////////////////////////	
		var setInitialState = function (initialState) {
			  //console.log('THINK.toggleClass.setInitialState');
        config.initialState = initialState;
				return config.initialState;
		}	
		
		
		///////////////////////////	
        //currentState - Public
		///////////////////////////	
		var currentView = function () {
			  //console.log('THINK.toggleClass.currentView');
				var currentView;
				if (elem(config.element).className == config.class1) {
					  currentView = '0';
				} else if (elem(config.element).className == config.class2) {
					  currentView = '1';
				} else {
					  currentView = 'ERROR';
				}
				//console.log('THINK.toggleClass.currentView : ' + currentView);
   			return currentView;
		}	
		
		///////////////////////////	
        //toggle - Public
		///////////////////////////	
		var toggle = function(toggleTo) {
			  //console.log('THINK.toggleClass.toggle');			
				var viewState;
				
				if (toggleTo == null) {
						switch (currentView()) {
								case "0":
										viewState = config.class1;
										break;
								case "1":
										viewState = config.class2;
										break;
								default:
										//reset to inital state
										if (config.initialState == '0') {
												viewState = config.class1;	
										} else {
												viewState = config.class2;
										}
										break;
						}
				}	else {
						if (toggleTo == '0') {
								viewState = config.class1;
						} else {
								viewState = config.class2;
						}	
				}
				elem(config.element).className = viewState;
		;
		}
		
		//////////////////////////////////////////
        // DECLARE PUBLIC PROPERTIES AND METHODS
		//////////////////////////////////////////		
    return { 
        init: init,
     		getElement: getElement,
				getClass1: getClass1,
				getClass2: getClass2,
				getInitialState: getInitialState,
     		setElement: setElement,
				setClass1: setClass1,
				setClass2: setClass2,
				setInitialState: setInitialState,
				currentView: currentView,
				toggle: toggle
    }
}();//() instantly runs above class	

//////////////////////////////////////////////////
//PROPERTY REFERENCE TEST
////console.log('THINK.toggleClass.config.colors - ' + THINK.toggleClass.config.colors);//	~=> Error		
////console.log('toggleClass.config.colors - ' + toggleClass.config.colors);// ~=> Error
////console.log('config.colors - ' + config.colors); // ~=> 1,2,3
////console.log('colors - ' + colors);// ~=> Error
//////////////////////////////////////////////////