//-------------------------------------------------------------------
// Checkbox selection stuff

var chNames = [];
var chArr = [], ruleArr = [];

function bcInit() {
	for (var c=0; c<chCount; c++) {
		chArr[c] = 2;
		ruleArr[c] = '';
	}
}

function cbCheckRule(cbNum)
{
	if (ruleArr[cbNum]!='')
		bcSetList(chArr[cbNum],ruleArr[cbNum]);
}

function bcSetCheckRule(cbNum,ruleText)
{
	ruleArr[cbNum] = ruleText;
}

function bcSetOne(on,which) {
	el = document.getElementById('cpm_cb'+which);
	if (el!=null && el.type=='checkbox') {
		el.checked = (on==1);
//		cbChange(which);
	}
}

function bcSetRange(on,from,to) {
	for (var c=from; c<=to; c++)
		bcSetOne(on,c);
}

function bcSetList(on,which) {
	var wList = which.split(',');
	var dPos;
	for (var c=0; c<wList.length; c++) {
		dPos = wList[c].indexOf('-');
		if (dPos==-1)
			bcSetOne(on,wList[c]);
		else
			bcSetRange(on,parseInt(wList[c].substr(0,dPos)),parseInt(wList[c].substr(dPos+1)));
	}
}

//-------------------------------------------------------------------
// Override function pointers

var cpm_fnGoToArea = null;
var cpm_fnGoToMeta = null;
var cpm_fnItemAdd = null;
var cpm_fnItemRemove = null;
var cpm_fnCartClear = null;
var cpm_fnSearchSubmit = null;
var cpm_fnSetCheck = null;
var cpm_fnSetAllChecks = null;
var nav_fnGoTo = null;
var cpm_fnGetCheckChanges = null;
var cpm_fnGetCheckChangesStr = null;

//-------------------------------------------------------------------
// Base methods

function cpm_fnGoToArea_base(areaName,itemName)
{
	var p=document.URL.indexOf('?'), nurl;
	if (p>=0)
		nurl = document.URL.substring(0,p);
	else
		nurl = document.URL;
	nurl += '?page='+areaName;
	if (itemName!='')
		nurl += '&item='+itemName;
	window.location = nurl;
}

function cpm_fnGoToMeta_base(metaName,metaVal)
{
    //debugger;
	document.cpmMetaSearchForm.v1.value = metaName;
	document.cpmMetaSearchForm.v2.value = metaVal;
	try {
		document.cpmMetaSearchForm.submit();
	} catch (e) {
		alert(e.name + ": " + e.message);
	}
}

function cpm_fnItemAdd_base(itemName)
{
	document.sendForm.op.value = 'add_item';
	document.sendForm.v1.value = itemName;
	cpmSendForm();
}

function cpm_fnItemRemove_base(itemName)
{
	document.sendForm.op.value = 'remove_item';
	document.sendForm.v1.value = itemName;
	cpmSendForm();
}

function cpm_fnCartClear_base()
{
	document.sendForm.op.value = 'clear_cart';
	cpmSendForm();
}

function cpm_fnSearchSubmit_base(searchFormName)
{
	document.forms[searchFormName].submit();
}

function cpm_fnSetCheck_base(itemNum,state)
{
//	alert(chNames[itemNum]+" is "+(state=='true'?'checked':'unchecked'));
	var curVal = (state=='1' || state=='true');
	if (chArr[itemNum]>1 || curVal!=(chArr[itemNum]!=0)) {
		chArr[itemNum] = (curVal)?1:0;
		cbCheckRule(itemNum);
	}
}

function cpm_fnSetAllChecks_base(state) {
    //debugger;    
	for (var c=0; c<chCount; c++) {
		bcSetOne(state,c);
		if (document.getElementById('cpm_cb'+c)!=null)
			cpmSetCheck(c,state);
	}
}

function cpm_fnGetCheckChanges_base() {
	var nArr = [];
	for (var c=0; c<chCount; c++) {
		if (chArr[c]==0)
			nArr[nArr.length] = [chNames[c],0];
		else if (chArr[c]==1)
			nArr[nArr.length] = [chNames[c],1];
	}
	return nArr;
}

function cpm_fnGetCheckChangesStr_base() {
    //debugger;
	var nArr = cpm_fnGetCheckChanges_base();
	var nVal = '';
	for (var c=0; c<nArr.length; c++) {
		if (nArr[c][1]==0)
			nVal = nVal+'0,"'+nArr[c][0]+'",';
		else if (nArr[c][1]==1)
			nVal = nVal+'1,"'+nArr[c][0]+'",';
	}
	return nVal;
}

//-------------------------------------------------------------------
// Wrapper methods called by webservice

function cpm_doOverridable0(fname)
{
	var exStr =
	'try {'+
		'if (cpm_fn'+fname+'==null || cpm_fn'+fname+'())'+
			'cpm_fn'+fname+'_base();'+
	'} catch (e) {'+
		'alert(e.name + ": " + e.message);'+
	'}';
	eval(exStr);
}

function cpm_doOverridable1(fname,a1)
{
	var exStr =
	'try {'+
		'if (cpm_fn'+fname+'==null || cpm_fn'+fname+'("'+a1+'"))'+
			'cpm_fn'+fname+'_base("'+a1+'");'+
	'} catch (e) {'+
		'alert(e.name + ": " + e.message);'+
	'}';
	eval(exStr);
}

function cpm_doOverridable2(fname,a1,a2)
{
	var exStr =
	'try {'+
		'if (cpm_fn'+fname+'==null || cpm_fn'+fname+'("'+a1+'","'+a2+'"))'+
			'cpm_fn'+fname+'_base("'+a1+'","'+a2+'");'+
	'} catch (e) {'+
		'alert(e.name + ": " + e.message);'+
	'}';
	eval(exStr);
}

function cpmGoToArea(areaName,itemName)
{
//debugger;
	cpm_doOverridable2('GoToArea',areaName,itemName);
}

function cpmGoToMeta(metaName,metaVal)
{
	cpm_doOverridable2('GoToMeta',metaName,metaVal);
}

function cpmItemAdd(itemName)
{   
    //debugger;
	cpm_doOverridable1('ItemAdd',itemName);
}

function cpmItemRemove(itemName)
{
	cpm_doOverridable1('ItemRemove',itemName);
}

function cpmCartClear()
{
	cpm_doOverridable0('CartClear');
}

function cpmSearchSubmit(searchFormName)
{
	cpm_doOverridable1('SearchSubmit',searchFormName);
}

function cpmSetCheck(itemNum,state)
{   
	cpm_doOverridable2('SetCheck',itemNum,state);
}

function cpmSetAllChecks(state)
{   
	cpm_doOverridable1('SetAllChecks',state);
}

function cpmGetCheckChanges()
{   
	cpm_doOverridable0('GetCheckChanges');
}

function cpmGetCheckChangesStr()
{   
	cpm_doOverridable0('GetCheckChangesStr');
}

function navGoTo(area,item)
{
	cpmGoToArea(area,item);
}

function navGoToKey(item)
{
	cpmGoToArea("",item);
}

function cpmRegisterFunc(type,newFuncName)
{
	try {
		eval('cpm_fn'+type+'='+newFuncName+';');
	} catch (e) {
		alert(e.name + ": " + e.message);
	}
}

function cpmRegisterFuncNav(type,newFuncName)
{
	try {
		eval('nav_fn'+type+'='+newFuncName+';');
	} catch (e) {
		alert(e.name + ": " + e.message);
	}
}

function cpmSendForm()
{    
	try {
		document.sendForm.submit();
	} catch (e) {
		alert(e.name + ": " + e.message);
	}
}
