// need a global var for the slider timeout here
var t;

// cufon replaces first
Cufon.replace('.caslon_224', {fontFamily: 'Caslon 224'});
Cufon.replace('.caslon_224_hover', {hover:true,fontFamily: 'Caslon 224'});

// onload funcs
Event.observe(window,'load',function(){
	// resize bg image onload
	resizeImage();
	// set the footer
	setFooter()
	// reset the search field 
	if($('search_k')){
		Event.observe('search_k','focus',function(){focusSearch('focus')})
		Event.observe('search_k','blur',function(){focusSearch('blur')})
	};
	// navigation slider events
	var hasSelected=parseInt($$('#primary_nav li.selected').length);
	$$('#primary_nav li').each(function(name){
		// capture the selected one first, cos we need its information to slide the slider back
		if(name.hasClassName('selected')){
			// scope the selected var for the pri off states
			selected=name;
			// we also want to run this onload, so the "selected" element gets "selected"
			slideControl(name,'leave',0);
		};
		Event.observe(name,'mouseenter',function(){slideControl(this,'enter',0.5)});
		if(hasSelected){
			// we got a selected pri, so we need the animation
			Event.observe(name,'mouseleave',function(){slideControl(selected,'leave',0.3)})
		}else{
			// no selected here, so we will want to hide the slider after
			Event.observe(name,'mouseleave',function(){$('primary_slider').hide()})
		}
	})
	
	// attach event to buy button(s) 
	$$('a.productbuy').each(function(s){
		// we put the id in the name field, extract it 
		var product_id=parseInt(s.name.replace("product_",""));
		Event.observe(s, 'click', function(event){
			// stop the non-js add link running 
			Event.stop(event);
			// do the js version of the add 
			addBasket(product_id);
		});
	});
	
	$$('a.voucherbuy').each(function(s){
		// we put the id in the name field, extract it 
		var product_id=parseInt(s.name.replace("voucher_",""));
		Event.observe(s, 'click', function(event){
			// stop the non-js add link running 
			Event.stop(event);
			// do the js version of the add 
			addVoucher(product_id);
		});
	});
	
	
	$$('a.membershipbuy').each(function(s){
		// we put the id in the name field, extract it 
		var product_id=parseInt(s.name.replace("membership_",""));
		Event.observe(s, 'click', function(event){
			// stop the non-js add link running 
			Event.stop(event);
			// do the js version of the add 
			addMembership(product_id);
		});
	});
	
	// default the search (if there) 
	if($('search_k')){
		var default_text='Enter a Book Title or Author or ISBN';
		if($F('search_k')==''){$('search_k').value=default_text;}else if($F('search_k') != default_text){$('search_k').addClassName('black');};
		Event.observe('search_k','focus',function(event){
			if($F('search_k')==default_text){
				$('search_k').value='';
				$('search_k').addClassName('black');
			}
		});
		Event.observe('search_k','blur',function(event){
			if($F('search_k')==''){
				$('search_k').value=default_text;
				$('search_k').removeClassName('black');
			}
		});
	}
	
    if ($('login')){
        $('login').observe('click',function(event){
            $('login_c').show();
            $('login_firsttime').show();
            $('search_box').hide();
            event.stop();
        });
	}
});
// call the bg image func on resize
Event.observe(window,'resize',function(){
	// resize bg image
	resizeImage();
	// set the footer
	setFooter()
});

var loading_basket = false;

// basket
function addBasket(product_id){

    if (!loading_basket) {
        new Ajax.Updater('basket_top','/shopping/basket_action/'+product_id,{parameters:
            {
                'ajax':1,
                'shopping.action':'add'
            },
            onLoading:function(request){
                $('ajax1').show();
                loading_basket = true;
                $$('a.productbuy img').each(function(s){
                    s.writeAttribute('src', '/images/pbs/buttons/add_to_basket_disabled.gif');
                });
            },
            onComplete:function(request){
                toggleAdded();
                loading_basket = false;
                $$('a.productbuy img').each(function(s){
                    s.writeAttribute('src', '/images/pbs/buttons/add_to_basket.gif');
                });
                
                var num_of_items = request.responseText.evalScripts()[0];
                var num_text='My basket has ' + num_of_items + ' item';
                if(num_of_items != 1){num_text=num_text+"s";}
                $('basket_num').update(num_text);
                $('basket_opts').show();
            }
        });        
    }

	
}

// basket
function addVoucher(voucher_id){
	new Ajax.Updater('basket_top','/shopping/basket_action/'+voucher_id,{parameters:
	{
		'ajax':1,
		'shopping.action':'add_voucher'
	},
	onLoading:function(request){$('ajax1').show()},
	onComplete:function(request){
	    toggleAddedVoucher();
	    var num_of_items = request.responseText.evalScripts()[0];
       var num_text='My basket has ' + num_of_items + ' item';
        if(num_of_items != 1){num_text=num_text+"s";}
        $('basket_num').update(num_text);
        $('basket_opts').show();
	}
});}


// basket
function addMembership(membership_id){
	new Ajax.Updater('basket_top','/shopping/basket_action/'+membership_id,{parameters:
	{
		'ajax':1,
		'shopping.action':'add_membership'
	},
	onLoading:function(request){$('ajax1').show()},
	onComplete:function(request){
	    toggleAddedVoucher();
        var num_of_items = request.responseText.evalScripts()[0];
       var num_text='My basket has ' + num_of_items + ' item';
        if(num_of_items != 1){num_text=num_text+"s";}
        $('basket_num').update(num_text);
        $('basket_opts').show();
	}
});}

function toggleAdded(){
	$('ajax1').hide();
	$('product_added').show();
	if(navigator.userAgent.search('MSIE 7.0') == -1){
        setTimeout("$('product_added').fade({duration:2.0})",5000);
    }
    else{
        setTimeout("$('product_added').hide()",5000);
    }
}

function toggleAddedVoucher(){
	$('product_added').show();
    setTimeout("$('product_added').fade({duration:2.0})",5000);
}

// return object of sizes (for the bg image resize) 
function getSizes(){
	var sizes={};
	sizes.window_w=document.viewport.getWidth();
	sizes.window_h=document.viewport.getHeight();
	sizes.min_width=1280;
	sizes.min_height=853;
	sizes.ratio=sizes.min_width/sizes.min_height
	return sizes;
}

// set the background image size
function resizeImage(){
	var sizes=getSizes();
	// fix the ratio and positioning 
	if(sizes.window_h > (sizes.window_w / sizes.ratio)){
		$('bgimage').setStyle({width:Math.ceil(sizes.window_h*sizes.ratio)+"px"})
		var margin="0 0 0 "+Math.round((sizes.window_w-(sizes.window_h*sizes.ratio))/2) +"px";
		$('bgimage').setStyle({'margin':margin});
	}else{
		// set it back to default 
		$('bgimage').setStyle({width:"100%"});
		$('bgimage').setStyle({margin:0});
	}
}

// sets the footer to its right class/location
function setFooter(){
	var bodyc_h=$('body_c').getHeight(),
			bodylimit_h=$('body_limit').getHeight();
	if(bodyc_h>bodylimit_h){
		// no scroll 
		$('footer_c').removeClassName('footer_float');
		$('footer_c').addClassName('footer_abs');
	}else{
		// got scroll 
		$('footer_c').removeClassName('footer_abs');
		$('footer_c').addClassName('footer_float');		
	}
}

// focus/blur the "search" text in the header 
function focusSearch(state){
	switch(state)
	{
		case 'focus':
			if($F('search_k')=='search')$('search_k').clear()
		break;
		case 'blur':
			if($F('search_k')=='')$('search_k').value='search'		
		break;
	}
}

// collect the slider info for the wanted element
function slideInfo(el){
	var info={};
	info.elOffset=el.positionedOffset()[0],
	info.elPadl=parseInt(el.getStyle('paddingLeft').replace("px","")),
	info.elPadr=parseInt(el.getStyle('paddingRight').replace("px","")),
	info.elWidth=el.getWidth(),
	info.slidePos=info.elOffset+info.elPadl-40,
	info.slideWidth=info.elWidth-info.elPadl-info.elPadr;
	return info
}
// calls and processes the slide effect for the primary nav 
function slideControl(el,state,speed){
	var wanted=slideInfo(el);
	// now we have worked out the sizes and crap, morph that slider! 
	if(state=='leave'){
		if(speed>0){
			// got a speed, this means we need to delay the offstate so we don't get bouncing
			t=setTimeout(function(){slidePri(wanted,speed)},500)
		}else{
			// no speed, its instant, no timeout here then as its not needed 
			slidePri(wanted,speed)
		}
	}else{
		clearTimeout(t);
		slidePri(wanted,speed)		
	}
}
// does the slide action for the wanted element
function slidePri(info_object,speed){
	if(speed>0){
		// not zero, so do the animation 
		$('primary_slider').show()
		new Effect.Morph('primary_slider', {
			style: 'width:'+info_object.slideWidth+'px;left:'+info_object.slidePos+'px',
			duration: speed
		});
	}else{
		// it's 0, make it instant
		$('primary_slider').setStyle({width:info_object.slideWidth+'px',left:info_object.slidePos+'px'});
		$('primary_slider').show()
	}
}



