/*
Script: add_to_cart.js
	Contains <AddToCart>

Author:
	Alan Roemen

Class: AddToCart
	Ajax add to cart script. IE6 is not supported.

Options:
	baseURL: Base directory for script. Default: false
	cssFile: Name of css file. Set to name of CSS file or false to use none. Default: 'add_to_cart'
	scriptName: Name of javascript file. Default: 'add_to_cart'
	className: CSS class name for script. Set to false for no CSS. Default: 'SlidingTabs'
	elementRel: Default value for REL attribute. Default: 'src$=button_add_to_cart.gif'
	update: Element to add new cart item to. Default: 'cart_summary'
	hideDelay: Ajax delay. Default: 200
*/

var AddToCart = new Class({
	options: {
		baseURL: false,
		cssFile: 'add_to_cart',
		scriptName: 'add_to_cart',
		className: 'add_to_cart',
		element: 'img',
		elementRel: 'src$=button_add_to_cart.gif',
		update: 'cart_summary',
		updateImgSize: 'M',
		popupImgSize: 'S',
		hideDelay: 200,
		requireLogin: false
	},

	initialize: function(options) {
		if(window.ie6) return;
		this.setOptions(options);
		
		// Get script base path
		if(!this.options.baseURL) {
			var elements = document.getElementsByTagName('script');
			for (var i=0; i<elements.length; i++) {
				if (elements[i].src && (elements[i].src.indexOf(this.options.scriptName+'.js') != -1)) {
					var src = elements[i].src;
					this.options.baseURL = src.substring(0, src.lastIndexOf('/'));
					break;
				}
			}
			// Get document base path
			this.documentBasePath = document.location.href;
			if (this.documentBasePath.indexOf('?') != -1)
				this.documentBasePath = this.documentBasePath.substring(0, this.documentBasePath.indexOf('?'));
			this.documentBasePath = this.documentBasePath.substring(0, this.documentBasePath.lastIndexOf('/'));
			if (this.options.baseURL.indexOf('://') == -1 && this.options.baseURL.charAt(0) != '/')
				this.options.baseURL = this.documentBasePath + "/" + this.options.baseURL;
		}
		
		// Adds Stylesheet
		if(this.options.cssFile !== false) new Asset.css(this.options.baseURL + '/' + this.options.cssFile + '.css');
		
		// Loading Elements
		this.product = false;
		this.background = new Element('div', {
			'class': this.options.className + '-background',
			'styles': {'opacity': '0.7'}
		});
		this.loading = new Element('div', {
			'class': this.options.className
		});
		
		// Check Logon
		if(this.options.requireLogin === false){ this.loggedon = true; this.init_links(); return; }
		this.login_content = false;
		new Ajax(this.options.baseURL+'/logon_check.php', {
			method: 'get',
			onComplete: function(logon){
				this.loggedon = eval(logon);
				this.init_links();
			}.bind(this)
		}).request();
	},

	init_links: function(){
		// Add Link Event
		this.link = false;
		this.buttons = document.getElements(this.options.element+'['+this.options.elementRel+']');
		this.buttons.each(function(btn){
			var link = (btn.getTag()=='a'?btn:btn.getParent());
			link.addEvent('click', function(e){
				e = new Event(e).stop();
				if(!this.loggedon){ this.logon(); return; }
				if(this.link !== false) return;
				this.link = link;
				this.click();
			}.bind(this));
		}.bind(this));
	},

	logon: function(){
		if(this.login_content === false){
			new Ajax('/scripts/htmlbox/htmlbox.js', {
				method: 'get',
				evalScripts: true,
				onComplete: function(response){
					this.login_content = new HTMLBox('', 'temp.hsc_login.php', {
																					 cssFile: 'style-hsc_login',
																					 baseURL: '/scripts/htmlbox',
																					 backgroundClose: false,
																					 showContentError: false,
																					 onContentLoad: function(){ this.show(); }
																					});
					this.logon();
				}.bind(this)
			}).request();
		} else this.login_content.show();
	},

	click: function(){
		this.load();
		new Ajax(this.options.baseURL+'/add_to_cart.php?'+this.link.href.split('?')[1], {
			method: 'get',
			onSuccess: function(response){
				(function(){
					this.display(response);
				}).delay(this.options.hideDelay, this);
			}.bind(this)
		}).request();
	},

	getProduct: function(){
		// Set Product
		this.product = {};
		var prod_code = this.link.search.split('=')[1];
		this.product.image = new Element('img', {
			'src': '/media/images/products/'+prod_code+'_'+this.options.popupImgSize+'.jpg',
			'align': 'left'
		});
		this.product.title = new Element('div', {'class': 'title'}).setHTML('Adding Product to Your Cart');
		this.product.body = new Element('div').setHTML('<img src="'+this.options.baseURL+'/loading.gif" class="loading" />');
		this.product.footer = new Element('div');
		
		new Element('img', {
			'src': '/images/button_continue-shopping.gif',
			'styles': {'margin-right': '10px'},
			'events': {
				'click': this.hide.bindWithEvent(this)
			}
		}).injectInside(this.product.footer);
    new Element('a', {
      'href': '/cart.php'
    }).setHTML('<img src="/images/button_view_your_cart.gif" style="border: 0 none;" />').injectInside(this.product.footer);
    /*
		new Element('img', {
			'src': '/images/button_view_your_cart.gif',
			'events': {
				'click': function(){ location.href = '/cart.php' }
			}
		}).injectInside(this.product.footer);
		*/
   
		this.product.image.injectInside(this.loading);
		this.product.title.injectInside(this.loading);
		this.product.body.injectInside(this.loading);
		this.product.footer.injectInside(this.loading);
	},

	load: function(){
		this.getProduct();
		this.background.inject(document.body);
		this.loading.inject(document.body);
	},

	display: function(prod){
		prod = Json.evaluate(prod);
		if(this.options.update){
			var c = $(this.options.update).getPrevious().getElement('a');
			if(prod.is_new){
				var newLink = new Element('a', {
					'href': prod.link,
					'class': 'prod_summary',
					'title': prod.title+' :: <img src="/media/images/products/'+prod.prod_code+'_'+this.options.updateImgSize+'.jpg" />'
				}).setHTML(prod.prod_code).injectInside( $(this.options.update) );
				$(this.options.update).appendText('(');
				new Element('span',{'id': 'prod_'+prod.prod_code}).setHTML(prod.quantity).injectInside( $(this.options.update) );
				$(this.options.update).appendText(')');
				new Element('span',{'class': 'right'}).setHTML('$'+prod.extended_price.toFixed(2)).injectInside( $(this.options.update) );
				new Element('br').injectInside( $(this.options.update) );
				summary_tips.build(newLink);
			} else $('prod_'+prod.prod_code).setHTML( $('prod_'+prod.prod_code).innerHTML.toInt()+1 );
			c.setHTML(c.innerHTML.toInt() + 1);
		}
		
		if(this.product === false) return;	//Div already closed
		
		this.product.title.empty();
		new Element('a', {
			'href': prod.link
		}).setHTML(prod.title).injectInside(this.product.title);
		
		this.product.body.setHTML('&nbsp;<br />This product has successfully been added to your <a href="/cart.php">cart</a><br />You now have '+prod.total_items+' item'+(prod.total_items==1?'':'s')+' in your <a href="/cart.php">cart</a>');
	},

	hide: function(newItem){
		this.loading.empty();
		this.loading.remove();
		this.background.remove();
		this.product = false;
		this.link = false;
	}
});

AddToCart.implement(new Options, new Events);