/**
 * @created 2010-01-08
 * @author Christoffer Lejdborg
 * @author Jon Gotlin
 * @author Patrik Nikkanen
 */
function Product() {

	this.product_id = null;
	this.product_name = null;
	this.article_number = null;
	this.price = null;
	this.base_price = null;
	this.sub_products = new Array();
	this.option_values = new Array();
	this.is_hidden = false;
	this.main_image = null;
	this.extra_images = new Array();
	this.should_allow_purchase = true;
	this.should_show_backorder_message = false;
	this.should_show_stock_text = true;
	this.backorder_message = null;

	this.updateGui = function() {
		var sub_product_id = getCurrentSubProductId();
		
		var sub_product = this.sub_products[sub_product_id];
		
		$('.art_no').text(sub_product.article_number);
		$('.product_price').text(sub_product.price);
		$('.product_base_price').text(sub_product.base_price);
		$('.product_id').val(sub_product.product_id);
		$('.article_number').val(sub_product.article_number);
		
		$('.stock_count').text(sub_product.stock_count);
		
		$('.backorder_message, .disable_message, .stock_message, .stock_text').each(function(_i, elem)
		{
			if ($(elem).hasClass('backorder_message') && sub_product.should_show_backorder_message)
			{
				$(elem).text(sub_product.backorder_message);
				$(elem).show();
			}
			else if ($(elem).hasClass('disable_message') && sub_product.should_show_disable_message)
			{
				$(elem).text(sub_product.disable_message);
				$(elem).show();
			}
			else if (($(elem).hasClass('stock_message') || $(elem).hasClass('stock_text')) && sub_product.should_show_stock_text)
			{
				$(elem).text(sub_product.stock_message);
				$(elem).show();
			}
			else
			{
				$(elem).text('');
				$(elem).hide();
			}			
		});
		
		if (sub_product.price != sub_product.base_price)
		{
		  $('.product_base_price_container').show();
		  $('.regular_price_container').hide();
      $('.product_price').addClass('sale');
		}
		else
		{
		  $('.product_base_price_container').hide();
		  $('.regular_price_container').show();
      $('.product_price').removeClass('sale');
		}
		
		if (sub_product.should_allow_purchase)
		{
		  $('.quantity').removeAttr('disabled');
		  $('.buy_button').removeAttr('disabled');
		}
		else
		{
		  $('.quantity').attr('disabled', 'disabled');
		  $('.buy_button').attr('disabled', 'disabled');
		}
		
		if ($('.main_image') && $('.main_image').attr('src')) 
		{
			var size = $('.main_image').attr('src').match(/\/(\d+x\d+)\//);

			$('.main_image').attr('src', sub_product.main_image.getImageUriWithSize(size[1]));
			$('.main_image').attr('alt', sub_product.main_image.alt_text);
			$('.main_image').attr('title', sub_product.main_image.title_text);
		
			var lightbox_link = $('.main_image').parents('a[rel="lightbox-productImage"]');
			var lightbox_size = lightbox_link.attr('href').match(/\/(\d+x\d+)\//);
			
			lightbox_link.attr('href', sub_product.main_image.getImageUriWithSize(lightbox_size[1]));

			$('.extra_images').empty();

			for (var i = sub_product.extra_images.length - 1; i >= 0; i--){
				$('.extra_images').append(sub_product.extra_images[i].getExtraImageFragment());
			};
		}
	}
}

/**
 * @author Magnus Nordlander
 * 
 * Note that all images shall have a size of 200x200. The script takes care
 * of giving them the proper size afterwards.
 */
function EB_Image() {
	this.sized_image_uri = null;
	this.alt_text = null;
	this.title_text = null;
	
	this.getExtraImageFragment = function () {
		var template = '<a class="lightbox-link" rel="lightbox-productImage" ebutik:fullsize="800x600"><img class="lightbox-thumb" ebutik:size="50x50" /></a>';
		if ($('#extra_image_template').length > 0)
		{
			template = $('#extra_image_template').text;
		}
		
		var fragment = $(template);
		
		if (fragment.hasClass('lightbox-link'))
		{
			var lightboxlink = fragment;
		}
		else
		{
			var lightboxlink = fragment.find('.lightbox-link');
		}
		
		if (fragment.hasClass('lightbox-thumb'))
		{
			var lightboxthumb = fragment;
		}
		else
		{
			var lightboxthumb = fragment.find('.lightbox-thumb');
		}
		
		var lightboxsize = lightboxlink.attr('ebutik:fullsize');
		lightboxlink.removeAttr('ebutik:fullsize');
		lightboxlink.attr('href', this.getImageUriWithSize(lightboxsize));
		lightboxlink.attr('title', this.title_text);
		
		var thumbsize = lightboxthumb.attr('ebutik:size');
		lightboxthumb.removeAttr('ebutik:size');
		lightboxthumb.attr('src', this.getImageUriWithSize(thumbsize));
		lightboxthumb.attr('title', this.title_text);
		lightboxthumb.attr('alt', this.alt_text);
		
		return fragment;
	}
	
	this.getImageUriWithSize = function(size) {
		return this.sized_image_uri.replace('/200x200/', '/'+size+'/');
	}
}

function Option() {
	this.option_id = null;
	this.name = null;
	this.values = new Array();
}

function Value() {
	this.value_id = null;
	this.name = null;
}

var product = new Product();
product.product_id = 223;
product.product_name = "Walking Klassisk Pippitröja i vitt 74\x2f80\x2d122\x2f128 cl";
product.article_number = "43014";
product.price = "169\x2c00 kr";
product.base_price = "169\x2c00 kr";

var options = new Array();

      var sub_product = new Product();
    sub_product.product_id = 9959;
    sub_product.product_name = "Pippitröjan \x2d 74\x2d128 cl \x2874\x2f80 cl\x29";
    sub_product.article_number = "43014\x2d1";
    sub_product.price = "169\x2c00 kr";
    sub_product.base_price = "169\x2c00 kr";
    sub_product.main_image = new EB_Image();
    sub_product.main_image.sized_image_uri = "\x2fimages\x2f128505\x2f200x200\x2f41039vit\x2ejpg";
    sub_product.main_image.alt_text = "";
    sub_product.main_image.title_text = "";
    sub_product.should_allow_purchase = true;
    sub_product.should_show_backorder_message = true;
    sub_product.should_show_disable_message = false;
    sub_product.should_show_stock_text = false;
    sub_product.backorder_message = "";
    sub_product.disable_message = "";
    sub_product.stock_count = "0";
    sub_product.stock_message = "";
    
    var image = null;
    
    	  
	  	  
	        sub_product.option_values[sub_product.option_values.length] = {option_id: 2, value_id: 5811 };
	  	  
	  product.sub_products[sub_product.product_id] = sub_product;
        var sub_product = new Product();
    sub_product.product_id = 9963;
    sub_product.product_name = "Pippitröjan \x2d 74\x2d128 cl \x2886\x2f92 cl\x29";
    sub_product.article_number = "43014\x2d2";
    sub_product.price = "169\x2c00 kr";
    sub_product.base_price = "169\x2c00 kr";
    sub_product.main_image = new EB_Image();
    sub_product.main_image.sized_image_uri = "\x2fimages\x2f128505\x2f200x200\x2f41039vit\x2ejpg";
    sub_product.main_image.alt_text = "";
    sub_product.main_image.title_text = "";
    sub_product.should_allow_purchase = true;
    sub_product.should_show_backorder_message = true;
    sub_product.should_show_disable_message = false;
    sub_product.should_show_stock_text = false;
    sub_product.backorder_message = "";
    sub_product.disable_message = "";
    sub_product.stock_count = "0";
    sub_product.stock_message = "";
    
    var image = null;
    
    	  
	  	  
	        sub_product.option_values[sub_product.option_values.length] = {option_id: 2, value_id: 3894 };
	  	  
	  product.sub_products[sub_product.product_id] = sub_product;
        var sub_product = new Product();
    sub_product.product_id = 9965;
    sub_product.product_name = "Pippitröjan \x2d 74\x2d128 cl \x2898\x2f104 cl\x29";
    sub_product.article_number = "43014\x2d3";
    sub_product.price = "169\x2c00 kr";
    sub_product.base_price = "169\x2c00 kr";
    sub_product.main_image = new EB_Image();
    sub_product.main_image.sized_image_uri = "\x2fimages\x2f128505\x2f200x200\x2f41039vit\x2ejpg";
    sub_product.main_image.alt_text = "";
    sub_product.main_image.title_text = "";
    sub_product.should_allow_purchase = true;
    sub_product.should_show_backorder_message = true;
    sub_product.should_show_disable_message = false;
    sub_product.should_show_stock_text = false;
    sub_product.backorder_message = "";
    sub_product.disable_message = "";
    sub_product.stock_count = "0";
    sub_product.stock_message = "";
    
    var image = null;
    
    	  
	  	  
	        sub_product.option_values[sub_product.option_values.length] = {option_id: 2, value_id: 3895 };
	  	  
	  product.sub_products[sub_product.product_id] = sub_product;
        var sub_product = new Product();
    sub_product.product_id = 9967;
    sub_product.product_name = "Pippitröjan \x2d 74\x2d128 cl \x28110\x2f116 cl\x29";
    sub_product.article_number = "43014\x2d4";
    sub_product.price = "169\x2c00 kr";
    sub_product.base_price = "169\x2c00 kr";
    sub_product.main_image = new EB_Image();
    sub_product.main_image.sized_image_uri = "\x2fimages\x2f128505\x2f200x200\x2f41039vit\x2ejpg";
    sub_product.main_image.alt_text = "";
    sub_product.main_image.title_text = "";
    sub_product.should_allow_purchase = true;
    sub_product.should_show_backorder_message = true;
    sub_product.should_show_disable_message = false;
    sub_product.should_show_stock_text = false;
    sub_product.backorder_message = "";
    sub_product.disable_message = "";
    sub_product.stock_count = "0";
    sub_product.stock_message = "";
    
    var image = null;
    
    	  
	  	  
	        sub_product.option_values[sub_product.option_values.length] = {option_id: 2, value_id: 3896 };
	  	  
	  product.sub_products[sub_product.product_id] = sub_product;
    
  var option = new Option();
  option.option_id = 2;
  option.name = "Storlek";
  
  var values = new Array();
  
    	var value = new Value();

  	value.value_id = 3895;
  	value.name = "98\x2f104 cl";

  	values[values.length] = value;
    	var value = new Value();

  	value.value_id = 3896;
  	value.name = "110\x2f116 cl";

  	values[values.length] = value;
    	var value = new Value();

  	value.value_id = 5811;
  	value.name = "74\x2f80 cl";

  	values[values.length] = value;
    	var value = new Value();

  	value.value_id = 3894;
  	value.name = "86\x2f92 cl";

  	values[values.length] = value;
    
  option.values = values;
  options[options.length] = option;


$(document).ready(function() {

	// Regenerate the selectbox DOM and add a listener on each selectbox.
	// Only applicable on multiproducts.
	if (options.length > 0) {
		$('select[id^="option_"]').live('change', function() {
			var do_update = false;
			var selected_option_value_id = null;
			for( o in options ) {
				if( 'option_' + options[o].option_id == $(this).attr('id') || do_update ) {
					do_update = true;
					updateSelect( options[o].option_id );
					selected_option_value_id = $(this).val();
				}
			}
			product.updateGui();

			// Stupid IE6!
			if (selected_option_value_id != null) {
				$(this).val(selected_option_value_id);
			}
			
		});

		$('select[id^="option_"]').first().trigger('change');
	}
});


/**
 * @author Patrik Nikkanen
 * A function that empties and refills all sub product select boxes
 */
function updateSelect( option_id ) {
	var selected_value_ids = new Array();
	for( o in options ) {
		if( options[o].option_id == option_id) {
			var value_ids = listAvailableOptionValues( option_id, selected_value_ids );

			// Empty current select box.
			var select = $('#option_' + options[o].option_id);
			selected_value_id = select.val();
			select.empty();

			for( v in options[o].values ) {
				if( $.inArray(options[o].values[v].value_id, value_ids) >= 0 ) {
					selected = selected_value_id == options[o].values[v].value_id ? ' selected="selected"' : '';
					select.append('<option value="'+options[o].values[v].value_id+'"'+selected+'>'+options[o].values[v].name+'</option>');
				} else {
					select.append('<optgroup label="'+options[o].values[v].name+'"></optgroup>');
				}
			}

			break;
		} else {
			selected_value_ids[selected_value_ids.length] = { option_id: options[o].option_id, value_id: $('#option_' + options[o].option_id).val()};
		}
	}
}


/**
 * @author Patrik Nikkanen
 * List value id's for option, having visible products using selected options
 */
function listAvailableOptionValues( option_id, selected_value_ids ) {
	var available_value_ids = new Array();
	for( sub_product_id in product.sub_products ) {
		if (!product.sub_products[sub_product_id].is_hidden) {
			var match_all = true;
			for( v in product.sub_products[sub_product_id].option_values) {
				for( sv in selected_value_ids ) {
					if( selected_value_ids[sv].option_id == product.sub_products[sub_product_id].option_values[v].option_id ) {
						if( selected_value_ids[sv].value_id != product.sub_products[sub_product_id].option_values[v].value_id ) {
							match_all = false;
						}
					}
				}
			}
			if( match_all ) {
				for( v in product.sub_products[sub_product_id].option_values) {
					if( product.sub_products[sub_product_id].option_values[v].option_id == option_id ) {
						available_value_ids[available_value_ids.length] = product.sub_products[sub_product_id].option_values[v].value_id;
					}
				};
			}
		}
	}
	return available_value_ids;
}


/**
 * @author Patrik Nikkanen
 * @return integer
 */
function getCurrentSubProductId() {
	var selected_value_ids = new Array();

	for( o in options ) {
		selected_value_ids[selected_value_ids.length] = { option_id: options[o].option_id, value_id: $('#option_' + options[o].option_id).val()};
	}

	for( sub_product_id in product.sub_products ) {
		if (!product.sub_products[sub_product_id].is_hidden) {
			var match_all = true;
			for( v in product.sub_products[sub_product_id].option_values) {
				for( sv in selected_value_ids ) {
					if( selected_value_ids[sv].option_id == product.sub_products[sub_product_id].option_values[v].option_id ) {
						if( selected_value_ids[sv].value_id != product.sub_products[sub_product_id].option_values[v].value_id ) {
							match_all = false;
						}
					}
				}
			}
			if( match_all ) return product.sub_products[sub_product_id].product_id;
		}
	}
	return null;
}

