function change_option(cid, oid, type) {

	var tmp;
	var tmpsel = get_elements_by_state("On");
    var oldopid = tmpsel[cid];
	tmpsel[cid] = oid;

	for (var clid in cl_opt) {
		if (isNaN(parseInt(clid))) continue;
		for (i = 0; i < cl_opt[clid].length; i++)
			change_style(cl_opt[clid][i], "Available", "Off");
		change_style(tmpsel[clid], "", "On");
	}

//	if (has_some_default != "Y") {

    check_unav_style(true);

/*    if (is_unavailable(oid, tmpsel)) {
        
        tmpsel[cid] = oldopid;

		if (!is_unavailable(oldopid, tmpsel)) {
        for (var clid in cl_opt) {
			if (isNaN(parseInt(clid))) continue;
	    	for (i = 0; i < cl_opt[clid].length; i++)
	    		change_style(cl_opt[clid][i], "Available", "Off");
	    	change_style(tmpsel[clid], "", "On");
	    }
		}
        check_unav_style(false);
	}
	}*/

	tmp = document.getElementById('po' + cid);
	for (i = 0; i < tmp.options.length; i++)
		if (tmp.options[i].value == tmpsel[cid])
			tmp.selectedIndex = i;

	tmpsel = get_elements_by_state("On");
	set_classname(cid, tmpsel[cid]);
	check_options();
}

function init_options(cid, type) {

	var tmptd;	
	var tmp = document.getElementById('po' + cid);
	if (tmp.options[tmp.selectedIndex].innerHTML.toUpperCase() == 'CHOOSE A SIZE' || tmp.options[tmp.selectedIndex].innerHTML.toUpperCase() == 'CHOOSE A COLOR')
		var cur_index = tmp.selectedIndex + 1;
	else
		var cur_index = tmp.selectedIndex;

	if (typeof(unavailable) != 'undefined') for (indx in tmp.options) {
		if (isNaN(parseInt(indx))) continue;
		if (tmp.options[indx].innerHTML.toUpperCase() == 'CHOOSE A SIZE' || tmp.options[indx].innerHTML.toUpperCase() == 'CHOOSE A COLOR')
			continue;
		if (unavailable[tmp.options[indx].value] != tmp.options[indx].value) {
			cur_index = indx; break;
		}
	}

	tmp.selectedIndex = cur_index;
	
	var o_t = document.getElementById(tmp.options[cur_index].value + '_t');
	o_t.className = type + "AvailableOn";
	if (type == "txt") {
		tmptd = document.getElementById(tmp.options[cur_index].value + '_td');
		tmptd.className = "txtAvailable";
	}
	set_classname(cid, tmp.options[cur_index].value);
}

function set_classname(cid, oid){
	
	var tmp = document.getElementById(cid + '_class');
	tmp.innerHTML = cl_names[cid]['cname'] + ': <b>' + cl_names[cid]['options'][oid] + '</b>';
}

function check_unav_style(hide) {
	
	var tmpex = get_elements_by_state("On");
	var tmp;
		
	if (has_some_default == 'Y') {
		for (var clid in cl_ns_names) {
			if (isNaN(parseInt(clid))) continue;
			tmp = document.getElementById('po'+clid);
			tmpex[clid] = tmp.options[tmp.selectedIndex].value;
		}
	}
	
	if (arguments[1]) 
		tmpex[arguments[3]] = arguments[2];
		
/*	var len = 0;

	for (var clid in tmpex) {
		if (isNaN(parseInt(clid))) continue;
		len++;
	}

	if (len == 0)
		return;

	if (len == 1) {

		if (typeof(backordered) != 'undefined') for (opid in backordered)
			change_style(opid, "Backordered", "");

		if (typeof(unavailable) != 'undefined') for (opid in unavailable)
			change_style(opid, "Unavailable", "");

	} else {*/
	for (var clid in tmpex) {
		if (isNaN(parseInt(clid))) continue;
		set_backorder(tmpex[clid]);
	}

	for (var clid in tmpex) {
		if (isNaN(parseInt(clid))) continue;
		set_unavilable(tmpex[clid]);
	}
//	}

	var is_unav = true;
	unav_regexp = new RegExp("Unavailable");
	for (var clid in tmpex) {
		if (isNaN(parseInt(clid)) || document.getElementById(tmpex[clid] + '_t') == null) continue;
		if (!unav_regexp.exec(document.getElementById(tmpex[clid] + '_t').className)) {
				is_unav = false; break;	
			}
	}

	if (is_unav) {

		var tmptext = "";
		var is_first = true; 
		for (var clid in tmpex) {
			if (isNaN(parseInt(clid))) continue;
			if (is_first) {
				if (cl_names[clid] != null)
				tmptext = cl_names[clid]['cname'] + ': ' + cl_names[clid]['options'][tmpex[clid]];
				else if (cl_ns_names[clid] != null)
					tmptext = cl_ns_names[clid]['cname'] + ': ' + cl_ns_names[clid]['options'][tmpex[clid]];
				is_first = false;
			} else {
				if (cl_names[clid] != null)
				tmptext = tmptext + ' and ' +  cl_names[clid]['cname'] + ': ' + cl_names[clid]['options'][tmpex[clid]];
				else if (cl_ns_names[clid] != null)
					tmptext = tmptext + ' and ' +  cl_ns_names[clid]['cname'] + ': ' + cl_ns_names[clid]['options'][tmpex[clid]];
			}
		}

		document.getElementById('prod_notavailable').innerHTML = msg_p_not_avail + ' ' + tmptext + '<br /><br />';
		document.getElementById('prod_notavailable').style.display = '';

		document.getElementById('prod_backordered').innerHTML = '';
		document.getElementById('prod_backordered').style.display = 'none';

	} else {

		var is_backordered = true;
		var tmp_id = "";
		back_regexp = new RegExp("Backordered");
	
		for (var clid in tmpex) {
			if (isNaN(parseInt(clid))) continue;
			tmp_id = tmpex[clid] + '|' + tmp_id;
			if (!back_regexp.exec(document.getElementById(tmpex[clid] + '_t').className)) {
				is_backordered = false; break;	
			}
		}
	
		if (is_backordered) {
			for (i = 0; i < dates.length; i++)
				if (dates[i]['id'] == tmp_id) {
					document.getElementById('prod_backordered').innerHTML = dates[i]['txt_date'];
					document.getElementById('prod_backordered').style.display = '';
                    if (hide)
					document.getElementById('prod_notavailable').style.display = 'none';
				}
		} else {
			document.getElementById('prod_backordered').innerHTML = '';
			document.getElementById('prod_backordered').style.display = 'none';
            if (hide)
			document.getElementById('prod_notavailable').style.display = 'none';
		}
	}
}	

function get_elements_by_state(state) {

	var res = [];
	myregexp = new RegExp(state);

	for (var clid in cl_names) {
		if (isNaN(parseInt(clid))) continue;
		for (var opid in cl_names[clid]['options']) {
			if (isNaN(parseInt(opid))) continue;
			var tof = typeof(opid);
			tmp = document.getElementById(opid + '_t');
			if (myregexp.exec(tmp.className))
				res[clid] = opid;
		}
	}
	return res;
}

function change_style(oid, new_style, new_state) {

	if (isNaN(parseInt(oid))) return;

	var tmp_style = "";
	var elem = document.getElementById(oid + '_t');

	if (typeof(elem) == "undefined" || elem == null)
		return;

	ison = new RegExp("On");
	istxt = new RegExp("txt");

	if (new_style == "") {

		if (ison.exec(elem.className))
			tmp_style = elem.className.replace(/On/, "");
		else
			tmp_style = elem.className.replace(/Off/, "");
	
	} else {

		if (istxt.exec(elem.className)) {
			tmp_style = "txt" + new_style;
			document.getElementById(oid + '_td').className = tmp_style;
		} else
			tmp_style = "img" + new_style;
	}

	if (new_state == "") {

		if (ison.exec(elem.className))
			tmp_style = tmp_style + "On";
		else
			tmp_style = tmp_style + "Off";
	} else
		tmp_style = tmp_style + new_state;

	elem.className = tmp_style;
}

function set_backorder(oid) {

	if (typeof(backordered) == 'undefined')
		return;
	if (typeof(backordered[oid]) == 'undefined')
		return;

	for (opid in backordered[oid])
		change_style(backordered[oid][opid], "Backordered", "");
}

function set_unavilable(oid) {

	if (typeof(unavailable) == 'undefined')
		return;
	if (typeof(unavailable[oid]) == 'undefined')
		return;

	for (opid in unavailable[oid])
		change_style(unavailable[oid][opid], "Unavailable", "");
}

function is_unavailable(oid, selected) {
    
    if (typeof(unavailable) == 'undefined')
		return false;

    for (var ci in selected) {
        if (selected[ci] != oid) {
            var is_present = false;

            for (var i in unavailable[oid])
                if (selected[ci] == unavailable[oid][i]) {
                    is_present = true; break;
            }
    
            if (!is_present)
                return false;
        }
	}

    return true;
}

function is_backordered(oid, selected) {
	var tmp_id = oid + "|";

	if (typeof(backordered) == 'undefined')
		return false;
	if (typeof(backordered[oid]) == 'undefined')
		return false;

	for (var ci in selected) {
		if (isNaN(parseInt(ci))) continue;
		if (selected[ci] != oid) {
			var is_present = false;
			
			for (i in backordered[oid]) {
				if (isNaN(parseInt(i))) continue;
				if (selected[ci] == backordered[oid][i]) {
					tmp_id = tmp_id + selected[ci] + "|";
                    is_present = true; break;
            	}
			}

			if (!is_present)
                return false;
		}
	}
	return tmp_id;
}

function check_mixed_exc(cid) {

	var tmp_swatch_sel = get_elements_by_state("On");
	var global_selected = [];
	var is_swatch = []

	for (var clid in cl_opt) {
		if (isNaN(parseInt(clid))) continue;
		for (i = 0; i < cl_opt[clid].length; i++)
			change_style(cl_opt[clid][i], "Available", "Off");
		change_style(tmp_swatch_sel[clid], "", "On");
	}

	for (var clid in names) {
		if (isNaN(parseInt(clid))) continue;
		skip = false;
		for (var i in tmp_swatch_sel)
			if (i == clid)
				skip = true;
		if (skip)
			continue;

		tmp = document.getElementById('po'+clid);
		global_selected[clid] = tmp.options[tmp.selectedIndex].value;
		is_swatch[clid] = 'N';
	}
	
	for (var clid in tmp_swatch_sel) {
		if (isNaN(parseInt(clid))) continue;
		global_selected[clid] = tmp_swatch_sel[clid];
		is_swatch[clid] = 'Y';
	}
	
	check_unav_style(false, true, global_selected[cid], cid);
	
	// Check if unavilable
	var is_unav = is_unavailable(global_selected[cid], global_selected);

	var hide = true;
	if (is_unav) {

		var tmptext = "";
		var is_first = true; 
		for (var clid in global_selected) {
			if (isNaN(parseInt(clid))) continue;
			if (is_first) {
				if (is_swatch[clid] == 'Y')
					tmptext = cl_names[clid]['cname'] + ': ' + cl_names[clid]['options'][global_selected[clid]];
				else
					tmptext = cl_ns_names[clid]['cname'] + ': ' + cl_ns_names[clid]['options'][global_selected[clid]];
				is_first = false;
			} else {
				if (is_swatch[clid] == 'Y')
					tmptext = tmptext + ' and ' +  cl_names[clid]['cname'] + ': ' + cl_names[clid]['options'][global_selected[clid]];
				else
					tmptext = tmptext + ' and ' +  cl_ns_names[clid]['cname'] + ': ' + cl_ns_names[clid]['options'][global_selected[clid]];
			}
		}

		document.getElementById('prod_notavailable').innerHTML = msg_p_not_avail + ' ' + tmptext + '<br /><br />';
		document.getElementById('prod_notavailable').style.display = '';

		document.getElementById('prod_backordered').innerHTML = '';
		document.getElementById('prod_backordered').style.display = 'none';

	} else {

		var is_back = false;
		var tmp_id = "";
		back_regexp = new RegExp("Backordered");
	
		is_back = is_backordered(global_selected[cid], global_selected);

		if (is_back != false) {
			for (i = 0; i < dates.length; i++)
				if (dates[i]['id'] == is_back) {
					document.getElementById('prod_backordered').innerHTML = dates[i]['txt_date'];
					document.getElementById('prod_backordered').style.display = '';
                    if (hide)
					document.getElementById('prod_notavailable').style.display = 'none';
				}
		} else {
			document.getElementById('prod_backordered').innerHTML = '';
			document.getElementById('prod_backordered').style.display = 'none';
            if (hide)
			document.getElementById('prod_notavailable').style.display = 'none';
		}
	}

    return true;
}
