/* flexiAccordion.js by Scott Lindsey */

/*-----------------------------------------
shell  
    rail
        panel
            ie6 
                content 
                	tab 
-----------------------------------------*/

function flexiAccordion (container, config){
	var obj 			= this;
	this.container		= container;
	this.config 		= config = config ? config : {};
	
	var isbn = window.location.hash.replace("#", "");//used to focus on specific title or format
	if (!isbn || !isbn.search(/\d/)) {
		isbn = jQuery.url.segment(3);
	}
	if (isbn) {
		config.isbn = isbn.replace(/[^\d]/g, "");
	}
	
	(config.isbn)			|| (config.isbn = '');
	(config.count)			|| (config.count = 3);
	(config.tabWidth)		|| (config.tabWidth = 0);
	(config.height)			|| (config.height = 400);
	(config.tabFill)		|| (config.tabFill = []);
	(config.contentFill)	|| (config.contentFill = []);
	(config.railHeight)		|| (config.railHeight = 1);
	(config.featuredPanel)	|| (config.featuredPanel = 1);
	(config.active)			|| (config.active = 0);
	
	

	(config.animationSpeed)	|| (config.animationSpeed = 1000);
	(config.initSpeed)		|| (config.initSpeed = 0);
	
	this.active				= config.featuredPanel-1;
	
	this.bits = [];
	this.bits.rails = [];
	this.bits.panels = [];
	this.bits.IE6Compat = [];
	this.bits.contents = [];
	this.bits.tabs = [];
	this.bits.radios = [];
	
	/*---- IE 6/7 Identification ----------------------------------------------------------------------------*/

	var BO = {};
    BO.ie       = false /*@cc_on || true @*/;
    BO.ie6      = BO.ie && (document.implementation != null) && (document.implementation.hasFeature != null);
    /*@cc_on
    BO.ie7      = @_jscript_version == '5.7';
    @*/

    if ((BO.ie) && (BO.ie6) && (!BO.ie7)){
        this.ie6 = true;
		document.ie6 = true;
    }
	else if (BO.ie7){
        this.ie7 = true;
		document.ie7 = true;
	}
	/*-------------------------------------------------------------------------------------------------------*/
	
	var saved_speed = config.animationSpeed;
	config.animationSpeed = config.initSpeed;
	$(document).ready(function(){ obj.init() });
	config.animationSpeed = saved_speed;
	
}
flexiAccordion.prototype.init = function (){
	var config = this.config;

	this.container.appendChild( this.newShell() );
	
	/* add the control */

	var flexAc = this;
	
	for (var i=0; i<config.count; i++){
		
		var panel = this.bits.panels[i];
	
		this.bits.radios[i]  = getByClass("radio", panel);
		panel.isbn = getByClass("isbn", panel);
		panel.format = getByClass("format", panel);
		panel.imprint = getByClass("imprint", panel);
		panel.division = getByClass("division", panel);
		panel.id = i;
		
		
		
		var tab = this.bits.tabs[i];

		panel.i = i;
		panel.position = 'left';

		if (i>0){
			panel.toLeft = this.bits.panels[i-1];
		}
		if (i<config.count-1){
			panel.toRight = this.bits.panels[i+1];
		}
		tab.panel = panel;
		
		$(tab).click(function(event){
	
			//if (this.panel.format[0])
			
				
			flexAc.moveToLeft(this.panel);
			flexAc.panelProdview(this.panel);
		});
		
	
	}
	//open correct panel based on format or isbn
	
	this.moveToLeft(this.bits.panels[config.featuredPanel-1]);
	
	
		
 img1_on =new Image();  img1_on.src ="/book/images/arrow_button_left_on.png"; 
 img1_off=new Image();  img1_off.src="/book/images/arrow_button_left.png"; 

 img2_on =new Image(); img2_on.src ="/book/images/arrow_button_right_on.png"; 
 img2_off=new Image(); img2_off.src="/book/images/arrow_button_right.png"; 



flexiAccordion.prototype.movr = function (k) {
	
 if (k==2 &&(this.active < (this.bits.panels.length-1)))
  eval('document.img'+k+'.src=img'+k+'_on.src');

else if(k==1 &&(this.active > 0))
 eval('document.img'+k+'.src=img'+k+'_on.src');
}
flexiAccordion.prototype.mout  = function (k) {
 if (document.images) 
  eval('document.img'+k+'.src=img'+k+'_off.src');
}
	
	
}
flexiAccordion.prototype.panelProdview = function (panel){
	if(this.bits.radios[panel.i][0]) {
		radio_count = this.bits.radios[panel.i].length;
		var radio_focus = 0;
		for (k=0; k<radio_count; k++) {
			if(this.bits.radios[panel.i][k].value === this.config.isbn) {//does the radio isbn match the URL isbn
				radio_focus = k;
			}
		}
		this.bits.radios[panel.i][radio_focus].promote();
	} else {
		s.prop8='eBook'; 
		s.prop5=panel.imprint[0].innerHTML; 
		s.eVar7=panel.imprint[0].innerHTML;
		s.eVar31=panel.division[0].innerHTML;  //Division 
		s.prop1=panel.division[0].innerHTML; 
		s.products=';' + panel.isbn[0].innerHTML;  //ISBN 
		s.linkTrackVars="prop1,prop4,prop5,prop6,prop7,prop8,products,eVar7,eVar31,events"; 
		s.linkTrackEvents="event3,prodView"; 
		s.events="prodView,event3";
		s.tl(this,'o','Radio Click');  //panel sends the data to Adobe
	}
}
flexiAccordion.prototype.leftPlease = function (){

	//alert('active is ' + this.active + ' and you want ' + (this.active+1));
	if (this.active < (this.bits.panels.length)){
		
			
		
		//alert('go left, current panel is ' + this.active);
		this.moveToLeft(this.bits.panels[this.active+1]);
		this.bits.radios[this.active][0].promote('flexi');
	}
	
	if (this.active==this.bits.panels.length-1)//disable button highlight when end is reached
		eval('document.img2.src=img2_off.src');

}

flexiAccordion.prototype.getActive = function (){

	return this.active;

}
flexiAccordion.prototype.rightPlease = function (){
	

	//alert('active is ' + this.active + ' and you want ' + (this.active-1));
	if (this.active > 0){
		
			
		//alert('go right, current panel is ' + this.active);
		
		this.moveToLeft(this.bits.panels[this.active-1]);
		this.bits.radios[this.active][0].promote('flexi');
	}
	
	if (this.active==0)//disable button highlight when end is reached
		eval('document.img1.src=img1_off.src');


}
flexiAccordion.prototype.moveToLeft = function (panel, demote){

	var config = this.config;
	
	
	if (demote){
		
		this.focused = 0;
		
		// run demotion callback
		(config.demotionCB) && (config.demotionCB(panel, this.bits.tabs[panel.i]));
	}
	else if ((!this.focused) && (!demote)){
		
		this.focused = 1;
		// run promotion callback
		(config.promotionCB) && (config.promotionCB(panel, this.bits.tabs[panel.i]));
		this.active = panel.i;
	}
	else if ((this.focused) && panel.toRight){ // demote and position is left
	
		// focused may be extranious 
		(config.promotionCB) && (config.promotionCB(panel, this.bits.tabs[panel.i]));
	}

	if (panel.position == 'right'){
		
		$(panel).animate({ left: '0%'}, config.animationSpeed );
		panel.position = 'left';
		if (panel.toLeft){
			this.moveToLeft(panel.toLeft, 1);
		}
	}
	if ((!demote) && (panel.toRight)){
		
		this.moveToRight(panel.toRight);
	}
	

	if (this.active == bookPanelID-1)
	{
		$('#select_book_button').addClass('active');
			$('#select_audiobook_button').removeClass("active");
			$('#select_ebook_button').removeClass("active");
			$('#select_other_button').removeClass("active");
	}
	
	else if (this.active == ebookPanelID-1)
	{
		$('#select_ebook_button').addClass('active');
			$('#select_book_button').removeClass("active");
			$('#select_audiobook_button').removeClass("active");
			$('#select_other_button').removeClass("active");
	}
	
	else if (this.active == audioPanelID-1)
	{
			$('#select_audiobook_button').addClass('active');
			$('#select_book_button').removeClass("active");
			$('#select_ebook_button').removeClass("active");
			$('#select_other_button').removeClass("active");
	}
	
	else if (this.active == otherPanelID-1)
	{
		$('#select_other_button').addClass('active');
			$('#select_book_button').removeClass("active");
			$('#select_audiobook_button').removeClass("active");
			$('#select_ebook_button').removeClass("active");
			$('#select_audiobook_button').removeClass("active");
	}
	if(this.bits.radios[this.active][0]) { //does this activated panel have radio buttons
		radio_count = this.bits.radios[this.active].length;
		var radio_focus = 0;
		for (k=0; k<radio_count; k++) {
			if(this.bits.radios[this.active][k].value === config.isbn) {//does the radio isbn match the URL isbn
				radio_focus = k;
			}
		}
		
		this.bits.radios[this.active][radio_focus].promote('flexi');
	} else {
	}
	
	
	

	
}
flexiAccordion.prototype.moveToRight = function (panel){
	
		
	var config = this.config;
	
	if (this.focused){
		this.focused = 0;
	}

	if (panel.position == 'left'){
		// run demotion callback
		(config.demotionCB) && (config.demotionCB(panel, this.bits.tabs[panel.i]));

		if (panel.toRight){
			this.moveToRight(panel.toRight);
		}
		$(panel).animate({ left: '100%'}, config.animationSpeed );
		panel.position = 'right';
	}
	
	//omniture tracking
	if (this.active-1 == ebookPanelID-1 && this.format && this.format[0] && this.format[0] =="eBook")
		{
			
			if (this.format[0])
			{
				s.prop8 = this.format[0].innerHTML;//set omniture code format variable
				s.products = ';' + this.isbn[0].innerHTML;//set omniture code isbn variable
			}
			if (this.imprint[0])
			{
					s.prop5=this.imprint[0].innerHTML; 
					s.eVar7=this.imprint[0].innerHTML;
			}
			if (this.division[0])
			{
				s.eVar31=this.division[0].innerHTML;  //Division 
				s.prop1=this.division[0].innerHTML; 
			}
		}
		if(this.bits.radios[this.active][0]) {
			radio_count = this.bits.radios[this.active].length;
			var radio_focus = 0;
			for (k=0; k<radio_count; k++) {
				if(this.bits.radios[this.active][k].value === config.isbn) {//does the radio isbn match the URL isbn
					radio_focus = k;
				}
			}
			this.bits.radios[this.active][radio_focus].promote('flexi');
//				this.bits.radios[this.active][0].promote('flexi');
			}

}
flexiAccordion.prototype.newShell = function (){
	var config = this.config;

	var shell = document.createElement('div');
	this.bits.shell = shell;

	shell.className = 'flexiAccordionShell';
	shell.style.height = this.config.height + 'px';
	shell.style.overflow = 'hidden';

	if (this.ie6){
		shell.style.position = 'relative';
	}
	else if (this.ie7){
		shell.style.position = 'relative';
	}

	for (var i=0; i<config.count; i++){
		shell.appendChild(this.newRail(i));
	}
	return shell;
}
flexiAccordion.prototype.newRail = function (railNumber){
	var config = this.config;

	var rail = document.createElement('div');
	this.bits.rails.push(rail);

	rail.className = 'flexiAccordionRail';
	rail.style.position = 'relative';
	rail.style.height = config.railHeight + 'px';
	rail.style.marginLeft = ((railNumber+1) * config.tabWidth) + 'px';
	rail.style.marginRight = ((config.count - (railNumber +1)) * config.tabWidth) +'px';

	rail.appendChild(this.newPanel(railNumber));

	return rail;
}
flexiAccordion.prototype.newPanel = function (panelNumber){
	var config = this.config;

	var panel = document.createElement('div');
	this.bits.panels.push(panel);

	panel.className = 'flexiAccordionPanel';
	panel.style.position = 'absolute';
	panel.style.height = config.height + 'px';
	panel.style.width = '100%';
	panel.style.overflow = 'visible';
	panel.style.left = '0%';
	if (panelNumber > 0){
		panel.style.top = '-' + (config.railHeight * panelNumber ) + 'px';
	}

	panel.appendChild(this.newIE6Compat(panelNumber));

	return panel
}
flexiAccordion.prototype.newIE6Compat = function (compatNumber){
	var config = this.config;
	
	var IE6Compat = document.createElement('div');
	this.bits.IE6Compat.push(IE6Compat);

	IE6Compat.appendChild(this.newContent(compatNumber));
	IE6Compat.appendChild(this.newTab(compatNumber));

	return IE6Compat;
}
flexiAccordion.prototype.newContent = function (contentNumber){
	var config = this.config;

	var content = document.createElement('div');
	this.bits.contents.push(content);

	content.className = 'flexiAccordionContent';
	content.style.float = 'right';
	content.style.height = config.height + 'px';
	content.style.width = '100%';

	content.appendChild(config.contentFill[contentNumber]);

	return content;
}
flexiAccordion.prototype.newTab = function (tabNumber){
	var config = this.config;

	var tab = document.createElement('div');
	this.bits.tabs.push(tab);

	tab.className = 'flexiAccordionTab';

	/*
	tab.style.marginLeft = '-' + config.tabWidth + 'px';
	*/

	tab.style.height = config.height + 'px';
	tab.style.width = config.tabWidth + 'px';
	tab.style.position = 'absolute';
	tab.style.top = 0;
	tab.style.left = '-' + config.tabWidth + 'px'; 

	tab.appendChild(config.tabFill[tabNumber]);
	return tab;
}


//------------------------------------------------------------------------------------------------

function getByID(ID){
    if (document.getElementById){
        return document.getElementById(ID);
    }
    else if ((document.all) && (eval ('document.all.' + ID))){
        return eval ('document.all.' + ID);
    }
}
function addtachEvent(evt, daFunction, obj){
    (obj) || (obj = window);
    if (window.addEventListener){
        obj.addEventListener(evt, daFunction, false);
    }
    else if (window.attachEvent){
        obj.attachEvent( "on" + evt, daFunction);
    }
}
function getByClass(cls, top) {
    var elements;
    var elements_list = [];
    var pattern = new RegExp("(^|\\s)"+cls+"(\\s|$)");

    (top) || (top = document);
    elements = top.getElementsByTagName('*')

    for (var i=0; i<elements.length; i++){
        if (pattern.test(elements[i].className)){
            elements_list.push(elements[i]);
        }
    }
    return elements_list;
}


