/**
 * @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 = 50;
	product.product_name = "Hippychick Hipseat - Svart";
	product.article_number = "001";
	product.price = "479,00 kr";
	
	var options = new Array();
	

$(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;
}
