
/* Copyright (c) 2011 Robb Irrgang (http://irrg.org)
 * All rights reserved; please do not take the code and run with it;
 * Cartify will be licensed under the MIT License early 2011.
 * Version: pre0.1
 */

 /* heavily modified for our overdesigned cart! code will be released at https://github.com/irrg */

$.cartify = function(options) {
    var settings = $.extend({
		google_id:		null,
		paypal_id:		null,
		units:  		['items','item','items'],
		view_headers:	['Quantity', 'Name', '', 'Price'],
		view_columns: 	['quantity', 'name', 'version', 'price'],
		ship_rates:		{us: [5, 1], international: [10, 2]},
		limit_quantity: 4
    }, options);
    var ref = this;
    var items = {};
    var itemCount = 0;

    function addCartItem(name, sku, version, price) {
		$('#cart_error').hide();

		if ($('.view_cart').hasClass('closed')) {
			$('.view_button').click();
		};

		if (itemCount < 4) {
	    	if (items[sku]) {
	    		items[sku].quantity++;
	    	} else {
	    		items[sku] = {name: name, sku: sku, version: version, price: price, quantity: 1}
	    	}	
			updateCartView();
		} else {
			$('#cart_error').show();
		}
    	$.cookie('nerduo_cart', $.toJSON(items), {expires: 7});
    	return false;
    }

    function removeCartItem(sku) {
		$('#cart_error').hide();
    	if (items[sku]) {
	    	delete items[sku];
	    }
    	$.cookie('nerduo_cart', $.toJSON(items), {expires: 7});
	    updateCartView();
	    return false;
    }

	function updateCartViewUnit() {
		itemCount = 0;
		for(var k in items) {
			itemCount += items[k].quantity;
		}

		var f = itemCount;
		if (f>settings.units.length-1)
			f = settings.units.length-1;
		if (f<0)
			f = 0;
		return settings.units[f];
	}

	function formatCurrency(n) {
    	return n.toString().split(".")[0]+"."+n.toFixed(2).split(".")[1];
    }

    function updateCartView() {
		$('#cart-view').find('.cart-view-unit').html(updateCartViewUnit());
		$('#cart-view').find('.cart-view-count').html(itemCount);

		var total = 0;

		$('#cart-view-items').empty();

    	if (itemCount>0) {
    		$('#cart-checkout').show();

    		var newRow = '';
    		for(var k in items) {
    			newRow = '<li>'+items[k].name+' - ' + items[k].version.replace(/Small/g, 'S').replace(/Medium/g, 'M').replace(/Extra Large/g, 'XL').replace(/Large/g, 'L') + '<span class="cart_item_total">'+formatCurrency(items[k].price*items[k].quantity)+'</span>'+'<span class="cart_item_detail">Quantity: '+items[k].quantity+' &#215; Price: '+formatCurrency(items[k].price)+'</span><a href="#" class="cart-item-remove" title="'+items[k].sku+'">remove item</a></li>';
    			total += items[k].quantity*items[k].price;
				$('#cart-view-items').append(newRow);
    		}
    		$('#cart-view-total').html(formatCurrency(total));
    		$('.cart-item-remove').click(function() {
				return removeCartItem($(this).attr('title'));
     		})
    	} else {
    		$('#cart-view-total').html(formatCurrency(total));
    	}
    }

	$('.cart-item .cart-item-add').click(function() {
		var item = $(this).closest('.cart-item');
		var	item_name = item.find('.cart-item-name').val();
		var item_sku = item.find('.cart-item-sku').val()+'-'+item.find('.cart-item-edition').val();
		var item_version = item.find('.cart-item-edition :selected').text()
		var item_price = parseFloat(item.find('.cart-item-price').val());

		if (item_version.indexOf('|')>1) {
			item_version = $.trim(item_version.split('|')[0]);
		}

		if (item_sku.indexOf('|')>1) {
			item_price += parseFloat(item_sku.split('|')[1]);
			item_sku = item_sku.split('|')[0];
		}
		return addCartItem(item_name, item_sku, item_version, item_price);
	});

	function initializeCart() {
		if ($.cookie('nerduo_cart')) {
			items = $.parseJSON($.cookie('nerduo_cart'));
		}

		$('#cart_paypal_button').click(function() {
			var form = '<form action="https://www.paypal.com/cgi-bin/webscr" method="post" id="cart-checkout-paypal-form">';
			form += '<input type="hidden" name="cmd" value="_cart">';
/* 			form += '<input type="hidden" name="image_url" value="http://static1.nerduo.com/store_paypal_logo.png">'; */
			form += '<input type="hidden" name="upload" value="1">';
			form += '<input type="hidden" name="business" value="'+settings.paypal_id+'">';

			var c = 1;
    		for(var k in items) {
				form += '<input type="hidden" name="item_name_'+c+'" value="'+items[k].name+'">';
				form += '<input type="hidden" name="item_number_'+c+'" value="'+items[k].sku+'">';
				form += '<input type="hidden" name="amount_'+c+'" value="'+items[k].price+'">';
				form += '<input type="hidden" name="quantity_'+c+'" value="'+items[k].quantity+'">';
				c++;
    		};

			$items = {};
	    	$.cookie('nerduo_cart', $.toJSON(items), {expires: 7});

			form += '</form>';
    		$('body').append(form);
    		$('#cart-checkout-paypal-form').get(0).submit();

			return false;
		});

		$('#cart_google_button').click(function() {
			var form = '<form action="https://checkout.google.com/api/checkout/v2/checkoutForm/Merchant/'+settings.google_id+'" method="post" accept-charset="utf-8" id="cart-checkout-google-form">';

			var c = 1;
			var tc = -1;
    		for(var k in items) {
				form += '<input type="hidden" name="item_name_'+c+'" value="'+items[k].name+' ('+items[k].version+')">';
				form += '<input type="hidden" name="item_description_'+c+'" value="'+items[k].sku+'">';
				form += '<input type="hidden" name="item_quantity_'+c+'" value="'+items[k].quantity+'">';
				form += '<input type="hidden" name="item_price_'+c+'" value="'+items[k].price+'">';
				tc += items[k].quantity;
				c++;
			};

			form += '<input type="hidden" name="checkout-flow-support.merchant-checkout-flow-support.shipping-methods.flat-rate-shipping-1.name" value="US/Canada shipping">';
			form += '<input type="hidden" name="checkout-flow-support.merchant-checkout-flow-support.shipping-methods.flat-rate-shipping-1.price" value="'+(settings.ship_rates.us[0]+(tc*settings.ship_rates.us[1]))+'">';
			form += '<input type="hidden" name="checkout-flow-support.merchant-checkout-flow-support.shipping-methods.flat-rate-shipping-1.shipping-restrictions.allowed-areas.postal-area-1.country-code" value="US">';
			form += '<input type="hidden" name="checkout-flow-support.merchant-checkout-flow-support.shipping-methods.flat-rate-shipping-1.shipping-restrictions.allowed-areas.postal-area-2.country-code" value="CA">';

			form += '<input type="hidden" name="checkout-flow-support.merchant-checkout-flow-support.shipping-methods.flat-rate-shipping-2.name" value="International shipping">';
			form += '<input type="hidden" name="checkout-flow-support.merchant-checkout-flow-support.shipping-methods.flat-rate-shipping-2.price" value="'+(settings.ship_rates.international[0]+(tc*settings.ship_rates.international[1]))+'">';
			form += '<input type="hidden" name="checkout-flow-support.merchant-checkout-flow-support.shipping-methods.flat-rate-shipping-2.shipping-restrictions.allowed-areas.world-area-1" value="true">';
			form += '<input type="hidden" name="checkout-flow-support.merchant-checkout-flow-support.shipping-methods.flat-rate-shipping-2.shipping-restrictions.excluded-areas.postal-area-1.country-code" value="US">';
			form += '<input type="hidden" name="checkout-flow-support.merchant-checkout-flow-support.shipping-methods.flat-rate-shipping-2.shipping-restrictions.excluded-areas.postal-area-2.country-code" value="CA">';

			items = {};
	    	$.cookie('nerduo_cart', $.toJSON(items), {expires: 7});
			form += '</form>';

    		$('body').append(form);
    		$('#cart-checkout-google-form').get(0).submit();

			return false;
		});

 		updateCartView();
	}

	initializeCart();
};


/**
 * jQuery Cookie plugin
 *
 * Copyright (c) 2010 Klaus Hartl (stilbuero.de)
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 *
 */

jQuery.cookie=function(key,value,options){if(arguments.length>1&&(value===null||typeof value!=="object")){options=jQuery.extend({},options);if(value===null){options.expires=-1}if(typeof options.expires==='number'){var days=options.expires,t=options.expires=new Date();t.setDate(t.getDate()+days)}return(document.cookie=[encodeURIComponent(key),'=',options.raw?String(value):encodeURIComponent(String(value)),options.expires?'; expires='+options.expires.toUTCString():'',options.path?'; path='+options.path:'',options.domain?'; domain='+options.domain:'',options.secure?'; secure':''].join(''))}options=value||{};var result,decode=options.raw?function(s){return s}:decodeURIComponent;return(result=new RegExp('(?:^|; )'+encodeURIComponent(key)+'=([^;]*)').exec(document.cookie))?decode(result[1]):null};

(function($){var m={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'},s={'array':function(x){var a=['['],b,f,i,l=x.length,v;for(i=0;i<l;i+=1){v=x[i];f=s[typeof v];if(f){v=f(v);if(typeof v=='string'){if(b){a[a.length]=','}a[a.length]=v;b=true}}}a[a.length]=']';return a.join('')},'boolean':function(x){return String(x)},'null':function(x){return"null"},'number':function(x){return isFinite(x)?String(x):'null'},'object':function(x){if(x){if(x instanceof Array){return s.array(x)}var a=['{'],b,f,i,v;for(i in x){v=x[i];f=s[typeof v];if(f){v=f(v);if(typeof v=='string'){if(b){a[a.length]=','}a.push(s.string(i),':',v);b=true}}}a[a.length]='}';return a.join('')}return'null'},'string':function(x){if(/["\\\x00-\x1f]/.test(x)){x=x.replace(/([\x00-\x1f\\"])/g,function(a,b){var c=m[b];if(c){return c}c=b.charCodeAt();return'\\u00'+Math.floor(c/16).toString(16)+(c%16).toString(16)})}return'"'+x+'"'}};$.toJSON=function(v){var f=isNaN(v)?s[typeof v]:s['number'];if(f)return f(v)};$.parseJSON=function(v,safe){if(safe===undefined)safe=$.parseJSON.safe;if(safe&&!/^("(\\.|[^"\\\n\r])*?"|[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t])+?$/.test(v))return undefined;return eval('('+v+')')};$.parseJSON.safe=false})(jQuery);

var toggledLast = 1;
var currentSlide = [1, 3];
var slideClicked = false;
var slideTimeout = false;
var otherSlide = [0, 2, 1, 4, 3];
var mouseX = 0;

function store_main() {	
	/* 	http://paulirish.com/2009/fighting-the-font-face-fout/ */
	var d = document, e = d.documentElement;
	if (e.style.MozTransform === ''){ // gecko 1.9.1 inference
		function f(){ $('.ff_fouc').removeClass('ff_fouc'); }
		addEventListener('load',f,false);
		setTimeout(f,3000); 
	}
	
	mouseX = Math.round(Math.random()*$(window).width());
	
	$(document).mousemove(function(e){
		setMouseX(e.pageX);
	}); 
	
	$.cartify({
		google_id:	'411382896551305', 
		paypal_id:	'checkout@nerduo.com',
		ship_rates:	{us: [6, 1], international: [7, 2]}
	});
		
	$('.cart_hover').hover(function() {
		var u = $(this).parent().find('ul');
		var h = u.show().css('height', 'auto').height();
		u.height(0);
		u.animate({height: h+'px'}, 500);		
	}, function() {
		var u = $(this).parent().find('ul');
		u.animate({height: '0px'}, 500, function(){ $(this).hide() });
	});
	
	$('#select_trilogy_true').change(function() {
		var item_version = $(this).find(':selected').text().split(' | ');
		item_version[0] = item_version[0]
			.replace(/Small/g, 'S')
			.replace(/Medium/g, 'M')
			.replace(/Extra Large/g, 'XL')
			.replace(/Large/g, 'L');
		$('#select_trilogy div').html(item_version[0]+'<span>'+item_version[1]+'</span>');
	});

	$('#select_jigga_true').change(function() {
		var item_version = $(this).find(':selected').text().split(' | ');
		item_version[0] = item_version[0]
			.replace(/Small/g, 'S')
			.replace(/Medium/g, 'M')
			.replace(/Extra Large/g, 'XL')
			.replace(/Large/g, 'L');
		$('#select_jigga div').html(item_version[0]+'<span>'+item_version[1]+'</span>');
	});
	
	$('.view_button').click(function() {
		if($('#cart-view').hasClass('closed')) {
			$('.view_cart').removeClass('closed');
			var h = $('.view_cart').css('height','auto').height();
			$('.view_cart').css('height', '32px').animate({height: h+'px'}, 500, function() {
				$('.view_cart').css('height', 'auto');
			});
		} else {
			$('.view_cart').addClass('closed');
			$('.view_cart').animate({height: '32px'}, 500);
		}
		return false;
	});
	
	$('.cart-item-edition').hover(function() { 
		var m = this.id.replace(/_true/g, '');
		$('#'+this.id.replace(/_true/g, '')+' div').addClass('faux_hover');
	}, function() {
		var m = this.id.replace(/_true/g, '');
		$('#'+this.id.replace(/_true/g, '')+' div').removeClass('faux_hover');
	});
	
	$('.slide').click(function() {
		showZoomSlide(this.id.replace(/slide/g, ''));
		return false;
	});
		
	setTimeout(nextSlide, 2000);
	
	initializeTimeCircuit();
	initializeLightning();
	setTimeout(renderLightning, 4000);
}

function setMouseX(x) {
	mouseX = x;
}

function initializeLightning() {
	$('#container').append('<div class="lightning_standard"><img class="bolt1" src="//s3.amazonaws.com/nerduo/store_standard_lightning1.png" width="454" height="600"><img class="bolt2" src="//s3.amazonaws.com/nerduo/store_standard_lightning2.png" width="454" height="600"><img class="bolt3" src="//s3.amazonaws.com/nerduo/store_standard_lightning3.png" width="454" height="600"></div><div class="lightning_front"><img class="bolt1" src="//s3.amazonaws.com/nerduo/store_front_lightning1.png" width="600" height="900"><img class="bolt3" src="//s3.amazonaws.com/nerduo/store_front_lightning2.png" width="600" height="900"><img class="bolt2" src="//s3.amazonaws.com/nerduo/store_front_lightning3.png" width="600" height="900"></div>');
}

function initializeTimeCircuit() {
    $('#time_week1')
    	.fadeIn(50)
    	.delay(50)
    	.fadeOut(100)
    	.delay(100)
    	.fadeIn(50, function() {
       		$('#time_week2')
       			.delay(500)
       			.fadeIn(50)
       			.delay(50)
       			.fadeOut(100)
       			.delay(100)
       			.fadeIn(50, function() {
            		$('#time_week3')
            			.delay(500)
            			.fadeIn(50)
            			.delay(50)
            			.fadeOut(100)
            			.delay(100)
            			.fadeIn(50); 
        			}); 
    		}); 
}

function showZoomSlide(n) {
	var imgURL = $('#slide'+n+' a').attr('href');
	slideClicked = true;
	
	$('.zoomdot').removeClass('active');
	$('#zoomdot'+n).addClass('active');
	
	var img = new Image();
	img.onload = function() {	
		var m = parseInt(n)+1;
		if (m == 5)
			m = 1;
		$('#zoom_slides').empty().html(
			'<a href="#" onclick="return showZoomSlide('+m+');">'+
			'<img src="'+imgURL+'" width="730" height="585" class="shirt_large" />'+
			'</a>'
		);
		$('#zoom_container').show();
	} 	
	img.src = imgURL;
	return false;
}

function hideZoom() {
	$('#zoom_container').hide();
	return false;
}
 

function nextSlide() { 
	if (toggledLast == 1) {
		if (currentSlide[0] == 1) {
			showSlide(2, true);
			currentSlide[0] = 2;
		} else {
			showSlide(1, true);
			currentSlide[0] = 1;
		}
		toggledLast = 0;
	} else {
		if (currentSlide[1] == 3) {
			showSlide(4, true);
			currentSlide[1] = 4;
		} else {
			showSlide(3, true);
			currentSlide[1] = 3;
		}
		toggledLast = 1;
	}

	if (!slideClicked) {
		slideTimeout = setTimeout(nextSlide, 4000);
	}
}

function showSlide(m, k) {
	if (!k) {
		slideClicked = true;
		if (slideTimeout) {
			clearTimeout(slideTimeout);
		}
	}
	
	$('#dot'+otherSlide[m]).removeClass('active');
	$('#dot'+m).addClass('active');	
	$('#slide'+otherSlide[m]).fadeOut(1000);		
	$('#slide'+m).fadeIn(1000);	
	return false;
}

function renderBolt(d) {
	var r = Math.round(Math.random()*2)+1;	
	var ro = Math.round(Math.random()*100);
	rx = mouseX;
	if (Math.random()>0.5) {
		rx += ro;
	} else {
		rx -= ro;
	}
	var rp = Math.round((rx/$(window).width())*100);

	$('div.'+d).css('left', rp+'%');
	
	if ($('html.ie7,html.ie8').length>0) {
		$('div.'+d+' .bolt'+r).show();
		setTimeout(function() { 
			$('div.'+d+' .bolt'+r).hide(); 
		}, 100);
	} else {	
		$('div.'+d+' .bolt'+r).show().fadeTo(100, 0.50+Math.round(Math.random()*2)*0.25, function() { 
			$(this).fadeOut(100, function() { $(this).hide() });
		});
	}
}

function renderLightning(l) {
	if (!l) {	
		var l = 'lightning_standard';
		
		if (Math.random()<=0.1) {
			l = 'lightning_front';
		}
	}
	
	for(var i=3; i<(3+Math.round(Math.random()*17));i++) {
		renderBolt(l);
	}

	setTimeout(renderLightning, Math.round(Math.random()*4000));
}

$(function() {
	store_main();
	
	$.cartify({
	google_id:	'411382896551305', 
	paypal_id:	'checkout@nerduo.com',
	ship_rates:	{us: [6, 1], international: [7, 2]}
	});
});


