/**
 * @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.sub_products = new Array();
	this.option_values = new Array();
	this.is_hidden = false;
	this.main_image = null;
	this.extra_images = new Array();

	this.updateGui = function() {
		var sub_product_id = getCurrentSubProductId();
		
		$('.art_no').text(this.sub_products[sub_product_id].article_number);
		$('.product_price').text(this.sub_products[sub_product_id].price);
		$('.product_id').val(this.sub_products[sub_product_id].product_id);
		$('.article_number').val(this.sub_products[sub_product_id].article_number);
		
		if ($('.main_image'))
		{
			var size = $('.main_image').attr('src').match(/\/\d+x\d+\//);

			$('.main_image').attr('src', this.sub_products[sub_product_id].main_image.getImageUriWithSize(size[0]));
			$('.main_image').attr('alt', this.sub_products[sub_product_id].main_image.alt_text);
			$('.main_image').attr('title', this.sub_products[sub_product_id].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', this.sub_products[sub_product_id].main_image.getImageUriWithSize(lightbox_size[0]));

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

			for (var i = this.sub_products[sub_product_id].extra_images.length - 1; i >= 0; i--){
				$('.extra_images').append(this.sub_products[sub_product_id].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 = 6433;
	product.product_name = "Swettiströja med Alfons Åberg";
	product.article_number = "8772";
	product.price = "110,00 kr";
	
	var options = new Array();
	
	var sub_product = new Product();
	sub_product.product_id = 6434;
	sub_product.product_name = "Swettiströja med Alfons Åberg (Marin, 86/92)";
	sub_product.article_number = "8772-Marin-86/92";
	sub_product.is_hidden = 1;
	sub_product.price = "110,00 kr";
	sub_product.main_image = new EB_Image();
	sub_product.main_image.sized_image_uri = "/images/125960/200x200/8772-alfons-v10.jpg";
	sub_product.main_image.alt_text = "";
	sub_product.main_image.title_text = ""
	
	var image = null;
	image = new EB_Image(); 
image.sized_image_uri = '/images/125960/200x200/8772-alfons-v10.jpg';
image.alt_text = '';
image.title_text = '';
sub_product.extra_images.push(image);

	sub_product.option_values[sub_product.option_values.length] = {option_id: 1, value_id:11};
	
	sub_product.option_values[sub_product.option_values.length] = {option_id: 2, value_id:87};
	
	product.sub_products[sub_product.product_id] = sub_product;
	
	var sub_product = new Product();
	sub_product.product_id = 6435;
	sub_product.product_name = "Swettiströja med Alfons Åberg (Marin, 98/104)";
	sub_product.article_number = "8772-Marin-98/104";
	sub_product.is_hidden = 0;
	sub_product.price = "110,00 kr";
	sub_product.main_image = new EB_Image();
	sub_product.main_image.sized_image_uri = "/images/125960/200x200/8772-alfons-v10.jpg";
	sub_product.main_image.alt_text = "";
	sub_product.main_image.title_text = ""
	
	var image = null;
	image = new EB_Image(); 
image.sized_image_uri = '/images/125960/200x200/8772-alfons-v10.jpg';
image.alt_text = '';
image.title_text = '';
sub_product.extra_images.push(image);

	sub_product.option_values[sub_product.option_values.length] = {option_id: 1, value_id:11};
	
	sub_product.option_values[sub_product.option_values.length] = {option_id: 2, value_id:88};
	
	product.sub_products[sub_product.product_id] = sub_product;
	
	var sub_product = new Product();
	sub_product.product_id = 6436;
	sub_product.product_name = "Swettiströja med Alfons Åberg (Marin, 110/116)";
	sub_product.article_number = "8772-Marin-110/116";
	sub_product.is_hidden = 0;
	sub_product.price = "110,00 kr";
	sub_product.main_image = new EB_Image();
	sub_product.main_image.sized_image_uri = "/images/125960/200x200/8772-alfons-v10.jpg";
	sub_product.main_image.alt_text = "";
	sub_product.main_image.title_text = ""
	
	var image = null;
	image = new EB_Image(); 
image.sized_image_uri = '/images/125960/200x200/8772-alfons-v10.jpg';
image.alt_text = '';
image.title_text = '';
sub_product.extra_images.push(image);

	sub_product.option_values[sub_product.option_values.length] = {option_id: 1, value_id:11};
	
	sub_product.option_values[sub_product.option_values.length] = {option_id: 2, value_id:83};
	
	product.sub_products[sub_product.product_id] = sub_product;
	
	var sub_product = new Product();
	sub_product.product_id = 6437;
	sub_product.product_name = "Swettiströja med Alfons Åberg (Marin, 122/128)";
	sub_product.article_number = "8772-Marin-122/128";
	sub_product.is_hidden = 0;
	sub_product.price = "110,00 kr";
	sub_product.main_image = new EB_Image();
	sub_product.main_image.sized_image_uri = "/images/125960/200x200/8772-alfons-v10.jpg";
	sub_product.main_image.alt_text = "";
	sub_product.main_image.title_text = ""
	
	var image = null;
	image = new EB_Image(); 
image.sized_image_uri = '/images/125960/200x200/8772-alfons-v10.jpg';
image.alt_text = '';
image.title_text = '';
sub_product.extra_images.push(image);

	sub_product.option_values[sub_product.option_values.length] = {option_id: 1, value_id:11};
	
	sub_product.option_values[sub_product.option_values.length] = {option_id: 2, value_id:86};
	
	product.sub_products[sub_product.product_id] = sub_product;
	
	var sub_product = new Product();
	sub_product.product_id = 6438;
	sub_product.product_name = "Swettiströja med Alfons Åberg (Khakigrön, 86/92)";
	sub_product.article_number = "8772-Khakigrön-86/92";
	sub_product.is_hidden = 1;
	sub_product.price = "110,00 kr";
	sub_product.main_image = new EB_Image();
	sub_product.main_image.sized_image_uri = "/images/125960/200x200/8772-alfons-v10.jpg";
	sub_product.main_image.alt_text = "";
	sub_product.main_image.title_text = ""
	
	var image = null;
	image = new EB_Image(); 
image.sized_image_uri = '/images/125960/200x200/8772-alfons-v10.jpg';
image.alt_text = '';
image.title_text = '';
sub_product.extra_images.push(image);

	sub_product.option_values[sub_product.option_values.length] = {option_id: 1, value_id:6};
	
	sub_product.option_values[sub_product.option_values.length] = {option_id: 2, value_id:87};
	
	product.sub_products[sub_product.product_id] = sub_product;
	
	var sub_product = new Product();
	sub_product.product_id = 6439;
	sub_product.product_name = "Swettiströja med Alfons Åberg (Khakigrön, 98/104)";
	sub_product.article_number = "8772-Khakigrön-98/104";
	sub_product.is_hidden = 0;
	sub_product.price = "110,00 kr";
	sub_product.main_image = new EB_Image();
	sub_product.main_image.sized_image_uri = "/images/125960/200x200/8772-alfons-v10.jpg";
	sub_product.main_image.alt_text = "";
	sub_product.main_image.title_text = ""
	
	var image = null;
	image = new EB_Image(); 
image.sized_image_uri = '/images/125960/200x200/8772-alfons-v10.jpg';
image.alt_text = '';
image.title_text = '';
sub_product.extra_images.push(image);

	sub_product.option_values[sub_product.option_values.length] = {option_id: 1, value_id:6};
	
	sub_product.option_values[sub_product.option_values.length] = {option_id: 2, value_id:88};
	
	product.sub_products[sub_product.product_id] = sub_product;
	
	var sub_product = new Product();
	sub_product.product_id = 6440;
	sub_product.product_name = "Swettiströja med Alfons Åberg (Khakigrön, 110/116)";
	sub_product.article_number = "8772-Khakigrön-110/116";
	sub_product.is_hidden = 0;
	sub_product.price = "110,00 kr";
	sub_product.main_image = new EB_Image();
	sub_product.main_image.sized_image_uri = "/images/125960/200x200/8772-alfons-v10.jpg";
	sub_product.main_image.alt_text = "";
	sub_product.main_image.title_text = ""
	
	var image = null;
	image = new EB_Image(); 
image.sized_image_uri = '/images/125960/200x200/8772-alfons-v10.jpg';
image.alt_text = '';
image.title_text = '';
sub_product.extra_images.push(image);

	sub_product.option_values[sub_product.option_values.length] = {option_id: 1, value_id:6};
	
	sub_product.option_values[sub_product.option_values.length] = {option_id: 2, value_id:83};
	
	product.sub_products[sub_product.product_id] = sub_product;
	
	var sub_product = new Product();
	sub_product.product_id = 6441;
	sub_product.product_name = "Swettiströja med Alfons Åberg (Khakigrön, 122/128)";
	sub_product.article_number = "8772-Khakigrön-122/128";
	sub_product.is_hidden = 0;
	sub_product.price = "110,00 kr";
	sub_product.main_image = new EB_Image();
	sub_product.main_image.sized_image_uri = "/images/125960/200x200/8772-alfons-v10.jpg";
	sub_product.main_image.alt_text = "";
	sub_product.main_image.title_text = ""
	
	var image = null;
	image = new EB_Image(); 
image.sized_image_uri = '/images/125960/200x200/8772-alfons-v10.jpg';
image.alt_text = '';
image.title_text = '';
sub_product.extra_images.push(image);

	sub_product.option_values[sub_product.option_values.length] = {option_id: 1, value_id:6};
	
	sub_product.option_values[sub_product.option_values.length] = {option_id: 2, value_id:86};
	
	product.sub_products[sub_product.product_id] = sub_product;
	
	var option = new Option();
	option.option_id = 1;
	option.name = "Färg";
	var values = new Array();
	
		var value = new Value();
		
		value.value_id = 6;
		value.name = "Khakigrön";
		
		values[values.length] = value;
	
		var value = new Value();
		
		value.value_id = 11;
		value.name = "Marin";
		
		values[values.length] = value;
	
	option.values = values;
	
	options[options.length] = option;
	
	
	
	var option = new Option();
	option.option_id = 2;
	option.name = "Storlek";
	var values = new Array();
	
		var value = new Value();
		
		value.value_id = 83;
		value.name = "110/116";
		
		values[values.length] = value;
	
		var value = new Value();
		
		value.value_id = 86;
		value.name = "122/128";
		
		values[values.length] = value;
	
		var value = new Value();
		
		value.value_id = 87;
		value.name = "86/92";
		
		values[values.length] = value;
	
		var value = new Value();
		
		value.value_id = 88;
		value.name = "98/104";
		
		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;
}
