// Code by Ben Clayton / Chris Merry (2009)
// IE / Netscape / Mozilla

var pfader = { pref:'picture_', opt_array:new Array(), fadespeed:15, idx:0, que:new Array(), ip:0, op:0, ql:0, qn:-1, curr:0, fad:1 };

function pSetOpacity(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+")";
	}
	obj.style.KHTMLOpacity = opacity/100;
	obj.style.MozOpacity = opacity/100;
	obj.style.opacity = opacity/100;
}

function pFadeIn(obj_id,opacity) {
	if (document.getElementById) {
		obj = document.getElementById(obj_id);
		if(obj.style.visibility != 'visible') obj.style.visibility = 'visible';
		if (opacity <= 100) {
			pSetOpacity(obj, opacity);
			opacity += 5;
			window.setTimeout("pFadeIn('"+obj_id+"',"+opacity+")", pfader.fadespeed);
		}else{
			pCallBack();
		}
	}
}

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

function pChangeImages(z){
	//pAdd2Debug("fade in "+z+"  fade out "+pfader.curr+ " qn: "+pfader.qn+"<br/>");
	if(pfader.qn == z){
		//pAdd2Debug("route: 1<br/>");
		pCallBack(z);
	}else{
		//pAdd2Debug("route: 2<br/>");
		pfader.fad=z;
		if(z != pfader.curr){
			pFadeIn(pfader.pref+z,0);
			if (pfader.curr >= 0) pFadeOut(pfader.pref+pfader.curr,100);
			pfader.idx++;
		}
	}
	pfader.qn=z;
}

function pMatchPictureOption(product_id){
	var option_div = rtnEl('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<pfader.opt_array.length;y++){
				if(pfader.opt_array[y].indexOf(option_name_id+"="+elements[x].value) != -1){
					//pAdd2Debug(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;
			}
			//pAdd2Debug("image: "+pic_idx + " count: "+match_counts[pic_idx]+ " best match: "+best_idx+" - "+best_match+"<br/>");
		}
		pSwapPic(parseInt(best_idx));
		//json[elements[x].id] = elements[x].value;
	}
}

function pCallBack(z){
	if(pfader.idx > 0) pfader.idx--;
	if(pfader.qn != z) pfader.curr=pfader.fad
	if (pfader.idx>pfader.qn) return;
	pfader.op = (pfader.op+1) % pfader.que.length;
	pfader.ql--;
	if (pfader.op != pfader.ip){
		pChangeImages(pfader.que[pfader.op]);
	}
}

function pChg(n){
	pfader.que[pfader.ip]=n;
	pfader.ip = (pfader.ip+1) % pfader.que.length;
	pfader.ql++;
	if (pfader.idx == 0){
		pChangeImages(pfader.que[pfader.op]);
	}
}

function pSwapPic(f){
	if(f > -1) pChg(f);
}

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