var DETpref = 'picture_';
var option_array = new Array();

var DET_fadespeed = 10;

var nxt = 0;
var x = 0;
var que = new Array(0,0,0,0,0,0,0,0);
var ip = 0;
var op = 0;
var qn = -1;
var curr = 0;
var fad = 1;

function setOpacity(obj, opacity) {
	// IE/Win							// problem with IE opacity filter and jpgs found 16/10/2006
	if (opacity == 100){
		obj.style.filter = "";
		opacity = 99.999;
	}else{
		obj.style.filter = "alpha(opacity:"+opacity+")";
	}
	// Safari<1.2, Konqueror
	obj.style.KHTMLOpacity = opacity/100;
	// Older Mozilla and Firefox
	obj.style.MozOpacity = opacity/100;
	// Safari 1.2, newer Firefox and Mozilla, CSS3
	obj.style.opacity = opacity/100;
}

// Code by Ben Clayton (2007)
// IE/Netscape/Mozilla
function DETfadeIn(obj_id,opacity) {
	if (document.getElementById) {
		obj = document.getElementById(obj_id);
		if(obj.style.visibility != 'visible') obj.style.visibility = 'visible';
		if (opacity <= 100) {
			setOpacity(obj, opacity);
			opacity += 5;
			window.setTimeout("DETfadeIn('"+obj_id+"',"+opacity+")", DET_fadespeed);
		}else{
			callback();
		}
	}
}

function DETfadeOut(obj_id,opacity) {
	if (document.getElementById) {
		obj = document.getElementById(obj_id);
		if (opacity >= 0) {
			setOpacity(obj, opacity);
			opacity -= 5;
			window.setTimeout("DETfadeOut('"+obj_id+"',"+opacity+")", DET_fadespeed);
		}
		if(opacity <= 0){
			if(obj.style.visibility != 'hidden') obj.style.visibility = 'hidden';
		}
	}
}

function DET_changeimages(z){
	//add_to_debug("fade in "+z+"  fade out "+curr+ " qn: "+qn+"<br/>");
	if(qn == z){
		//add_to_debug("route: 1<br/>");
		callback(z);
	}else{
		//add_to_debug("route: 2<br/>");
		fad=z;
		if(z != curr){
			DETfadeIn(DETpref+z,0);
			if (curr >= 0) DETfadeOut(DETpref+curr,100);
			x++;
		}
	}
	qn=z;
}

function match_picture_to_options(product_id){
	var option_div = $('options_'+product_id);
	if(option_div){
		var match_counts = new Array();
		var elements = option_div.getElementsByTagName('select');
		for(var x=0;x<elements.length;x++){
			var option_name_id = elements[x].id.replace(/option_/,"");
			for(var y=0;y<option_array.length;y++){
				if(option_array[y].indexOf(option_name_id+"="+elements[x].value) != -1){
					//add_to_debug(option_name_id+"="+elements[x].value+ " MATCH: " + y+"<br/>");
					match_counts[y] = (match_counts[y])?match_counts[y]+1:1;
				}
			}
		}
		var best_idx = -1;
		var best_match = -1;
		for(var pic_idx in match_counts){
			if(match_counts[pic_idx] > best_match){
				best_match = match_counts[pic_idx];
				best_idx = pic_idx;
			}
			//add_to_debug("image: "+pic_idx + " count: "+match_counts[pic_idx]+ " best match: "+best_idx+" - "+best_match+"<br/>");
		}
		DETswappic(best_idx);
		//json[elements[x].id] = elements[x].value;
	}
	//option_array
}

var ql=0;
function callback(z){
	if(x > 0) x--;
	if(qn != z) curr=fad
	if (x>qn) return;
	op = (op+1) % que.length;
	ql--;
	if (op != ip){
		DET_changeimages(que[op]);
	}
}

function DETchg(n){
	que[ip]=n;
	ip = (ip+1) % que.length;
	ql++;
	if (x == 0){
		DET_changeimages(que[op]);
	}
}

function DETswappic(f){
	if(f > -1) DETchg(f);
}

function add_to_debug(debug_text){
	var obj = document.getElementById('debug_js_array');
	if(obj) obj.innerHTML += debug_text;
}