


var responder_action_element; //current element of triggered action




responder_action = function(e){
	
  var obj = {};
  
  obj.action_responder = $(this).parents('.action_responder').eq(0);
  obj.data_responder = $(this).parents('.data_responder').eq(0);
  obj.action_trigger = $(this);
  obj.params = {};
  
  obj.action = obj.params.action = /(?:action|action_change)\s+(\S+)/.exec($(this).attr('class'))[1];
  
  var responder_id = /^_*(\S+?)_+(\d+)$/.exec(obj.data_responder.attr('id'));
  if (responder_id){
    obj.params[responder_id[1]] = responder_id[2];
  }
  
  obj.data_responder.find('.param').each( function(index, param){
    obj.params[$(param).attr('name')] =  $(param).val();
  }
  );
  
  //console.log('triggering_action',obj);
  //alert(trigger_action);
  
  //$(responder).trigger('action.all', params);
  obj.action_responder.trigger(obj.action, obj);
}



function parse_response(data, status){
	if (status=='success'){
		if (data.errors && data.errors.length){
			display_errors(data.errors);
			if (this.on_failure){
				this.on_failure(data);
			}
		}
		else {
		  if (data.notifications && data.notifications.length){
		    //console.log(data.notifications);
		    display_errors(data.notifications);
		  }
		  
			if (this.load_to){
				//sconsole.log('loading to ',this.load_to);
				$(this.load_to).html(data.output);
			}
			if (this.on_success){
				this.on_success(data);
			}
		}
	}
	else {
		display_errors(data);
		if (this.on_error){
				this.on_error(data);
		}
	}
}



function display_errors(errors){
	var output = "<ul>";
	var charlength = 0;
	$(errors).each(function(i,error){
		output = output + '<li>' + error +'</li>';
		charlength += error.length;
	});
	
	output = output +"</ul>";
	var timeout = 2000 + charlength * 40;
	//console.log(output);
	$('#errors').html(output).stop()
	    .css('display', 'block').css('opacity','0').css('top', ($(window).scrollTop()*1+20)+'px')
	    .fadeTo(400,0.98).fadeTo(timeout,1.0).fadeOut(600, function(){ $('#errors').html(''); });
	
	//$('#loading').stop().css({opacity:0,display:'block'}).fadeTo(400,0.9).fadeTo(3000,1).fadeOut(100);
}





$('.payment_method td a').livequery('click', function(){
	var target = $(this).attr('href');
	var data = {};
	target = target.replace(/^.*#/,'#');
	$('.payment_method input:checked').removeAttr('checked');
	$(target).attr('checked','checked');
	
	var card_type = /mc|vi|di/.exec(target);
	
	$("input[name='credit_card_type']").val((card_type && card_type.length) ? card_type[0] : null);
	
});

$(".payment_method input[type='radio']").livequery('click', function(){
	
	//alert($(this).attr('id'));
	var card_type = /mc|vi|di/.exec($(this).attr('id'));
	
	$("input[name='credit_card_type']").val((card_type && card_type.length) ? card_type[0] : null);
	
});





$("a[href='#']").live('click',function(){ return false; });
$('.action').livequery('click',responder_action);
$('.action_change').livequery('change',responder_action);

$('#shop .product .changer').livequery('click', function(){
	$(this).parent().parent().find('.priceholder').hide();
	$(this).parent().find('.action_change').show(); 
	$(this).parent().find('.action.add_product, .changer').hide(); 
	return false;
});

$('#more_info .close_button').livequery('click', function(){
	$('#more_info').hide().html('');
});



//$('.payment_method label').live('click', function(){
//	//console.log($(this).attr('for'));
//	$('.payment_method input:checked').removeAttr('checked');
//	$('#'+$(this).attr('for')).attr('checked','checked');
//});

//$('[name=country_id]').livequery('change',function(){ alert('chenged'); });



$.ajaxSetup({
	url : './controller.php',
	dataType : 'json',
	type: 'POST',
	success: parse_response
});

add_product_to_cart = function(e, data){
    $.ajax({
    	data:data.params,
    	load_to: '#cart',
    	on_success: function(){ if (false) $('.modal').hide(); }
  	});
}



jQuery(function(){

initialize_products();
initialize_cart();
initialize_shipping();
initialize_preview();
initialize_payment_info();
});








$().ajaxStart(function(){
	$('#loading').css('height',$('#wrapper').outerHeight()+'px').css('opacity',0.0).css('display','block');
	$('#loading').show();
});
$().ajaxStop(function(){
	$('#loading').hide();
});


function initialize_products(){
  $('#shop .product').bind('add_product', add_product_to_cart);
  
  $('#shop .product').bind('more_info', function(e, data){
    //console.log(this,$(this).find('.details'));
    $('#more_info').html('');
    
    $(this).clone().appendTo('#more_info');
    $('#more_info').show();
  });
  
  $('#shop .product').bind('set_variant', function(e, obj){
  	$.ajax({
    	data:obj.params,
    	load_to: obj.action_responder,
    	on_success: function(){  }
  	});
  });
  
}

function initialize_cart(){
  $('#cart').bind('set_country_id', function(e, data){
  	$.ajax({
    	data:data.params,
    	load_to: '#cart'
  	});
  });
  $('#cart').bind('set_payment_method', function(e, data){
  	if (e.type=='set_payment_method'){
  		data.params.payment_method = $('.payment_method input:checked').val();
  		data.params.credit_card_type = $('.payment_method input[name=credit_card_type]').val();
  	}
  	$.ajax({
    	data:data.params
  	});
  });
  
  $('#cart').bind('submit_order', function(e, data){
    //data.flow = 'to_shipping';
    $.ajax({
    	data:data.params,
    	load_to: '#shipping',
    	on_success: function(){
    		$('.modal').hide();
    		$('#shipping').show();
    		$(window).scrollTop(0);
    	}
  	});
  });
  
  $('#cart').bind('remove_product',  function(e, data){
  	$.ajax({
    	data:data.params,
    	load_to: '#cart'
  	});
  });
  
  $('#cart').bind('increase_quantity', cart_quantity_change);
  $('#cart').bind('decrease_quantity', cart_quantity_change);
  
  
  
  
}

cart_quantity_change = function(e, data){
  	//console.log(data);
  	data.params.qty=1;
  	$.ajax({
    	data:data.params,
    	load_to: '#cart'
  	});
}


function initialize_shipping(){
  $('#shipping').bind('insert_shipment_data', function(e, data){
    //data.flow = 'to_final';
    $.ajax({
    	data:data.params,
    	load_to: '#preview',
    	on_success: function(){
		    $(".modal").hide();
		    $("#preview").show();
		    $(window).scrollTop(0);
    	}
  	});
  });
  $('#shipping').bind('back', function(e, data){
  	data.action = 'save_shipment_data';	
    $.ajax({
    	data:data.params,
    	on_success: function(){
		    $(".modal").hide();
    	}
  	});
  });
}

function initialize_preview(){
  $('#preview').bind('change_shipment', function(e, data){
    $('.modal').hide();
  	$("#shipping").show();
  	$(window).scrollTop(0);
    //$("#preview").hide();
    //$("#payment_instructions").hide();
  });
  $('#preview').bind('change_order', function(e, data){
    $('.modal').hide();
  });
  $('#preview').bind('confirm_order', function(e, data){
    $.ajax({
    	data:data.params,
    	load_to : '#payment_instructions',
    	on_success: function(data){
		    $(".modal").hide();
		    $(this.load_to).show();
		    $(window).scrollTop(0);
		    if(data.cart){
		    	$('#cart').html(data.cart);
		    }
    	}
  	});
  });
}

function initialize_payment_info(){
  $("#payment_info").bind('continue', function(e, data){
    //$('#preview').load(responder_url,data);
  });
}












