/***************************
GROUPING_FIELDS v1.33
***************************/

if (typeof GROUPING_FIELDS == "undefined") {    
    var GROUPING_FIELDS = {};
}
GROUPING_FIELDS.init=function (disabling)
{
	if(!Array.indexOf)
    Array.prototype.indexOf = function(obj)
	{for(var i=0; i<this.length; i++) 
	if(this[i]==obj) return i;return -1;}
	this.fields=new Array();
	this.datas =new Array();
	this.extras=new Array();
	this.groupBy=new Array();
	this.extraDatas=new Array();
	this.disabling=disabling;
}
GROUPING_FIELDS.OnChoice=function(extra)
{
	/* TO DO */
}
GROUPING_FIELDS.OnFieldChange=function(fieldDescription,extra)
{
	/* TO DO */
}
GROUPING_FIELDS.disableSelectObject=function(fieldDescription,selectObject,disable)
{	
	/* TO DO */
}
GROUPING_FIELDS.addField=function (fieldDescription,selectObject)
{
	if (!document.getElementById(selectObject)) return;
	this.fields[this.fields.length]=new Array(fieldDescription,document.getElementById(selectObject));
	this.resetSelectObject(fieldDescription,document.getElementById(selectObject));
}
GROUPING_FIELDS.resetSelectObject=function (fieldDescription,selectObject)
{	
	selectObject.options.length=0;	
	this.addOption(selectObject,"<"+fieldDescription+">",0,false);
	this.disableIfEmpty();
}
GROUPING_FIELDS.getElementsByValue=function (object,index,value)
{		
	var toReturn=new Array();
	if (!object||object.length==0) return toReturn;
	for (var i=0;i<object.length;i++)
	if (object[i][index]==value) toReturn[toReturn.length]=object[i];
	return toReturn;
}
GROUPING_FIELDS.addAll=function (fieldDescription)
{
	if (!this.fields||!this.datas) return;		
	var field=this.getElementsByValue(this.fields,0,fieldDescription);
	var data=this.getElementsByValue(this.datas,1,fieldDescription);
	for (var i=0;i<data.length;i++)
	this.addOption(field[0][1],data[i][2],data[i][3],true);
	field[0][1].selectedIndex=0;
	this.disableIfEmpty();
}
GROUPING_FIELDS.addOption=function (selectObject,text,value,test)
{		
	if (text=='') return;
	if (test&&(selectObject.options.length>0))
	for (var i=0;i<selectObject.options.length;i++)
	if (selectObject.options[i].text==text) return false;
	selectObject.options[selectObject.options.length]=new Option();	
	selectObject.options[selectObject.options.length-1].value=value;
	selectObject.options[selectObject.options.length-1].text=text;
	return true;
}
GROUPING_FIELDS.disableIfEmpty=function () 
{
	if (!this.disabling) return;
	for (var i=0;i<this.fields.length;i++)
	this.disableSelectObject(this.fields[i][0],this.fields[i][1],this.fields[i][1].options.length==1);
}
GROUPING_FIELDS.addData=function (fieldDescription,rowID,fieldData,fieldDataID)
{
	if (!this.fields) return;
	this.datas[this.datas.length]=new Array(rowID,fieldDescription,fieldData,fieldDataID);
	for(var i=0;i<this.fields.length;i++)
	if (this.fields[i][0]==fieldDescription)	
	this.addOption(this.fields[i][1],fieldData,fieldDataID,true);
	this.disableIfEmpty();
}
GROUPING_FIELDS.addExtra=function (rowID,extra)
{
	this.extras[this.extras.length]=new Array(rowID,extra);
}
GROUPING_FIELDS.addExtraData=function(fieldDescription,fieldDataID,extra)
{
	this.extraDatas[this.extraDatas.length]=new Array(fieldDescription,fieldDataID,extra);
}
GROUPING_FIELDS.invokeExtra=function ()
{	
	if (this.extras.length==0) return;
	if (this.groupBy.length!=this.fields.length) return;	
	rowsID=new Array();var extras=new Array();
	for (var i=0;i<this.fields.length;i++)	
	{
		var rowID=this.datas;
		rowID=this.getElementsByValue(rowID,1,this.fields[i][0]);	
		rowID=this.getElementsByValue(rowID,3,this.fields[i][1].options[this.fields[i][1].selectedIndex].value);
		if (rowID.length>0) 
			for (var j=0;j<rowID.length;j++) 
				rowsID[rowsID.length]=new Array(rowID[j][0],this.fields[i][0]);
	}
	
	if (rowsID.length==0) {this.onChoice();return;}	
	
	for (var i=0;i<rowsID.length;i++)	
	{
		extras=this.getElementsByValue(rowsID,0,rowsID[i][0]);	
		if (extras.length!=this.fields.length) continue;	
		ext=this.getElementsByValue(this.extras,0,extras[0][0]);
		this.OnChoice((ext[0])?ext[0][1]:'');return;
	}	
}
GROUPING_FIELDS.invokeExtraData=function (fieldDescription,selectObject)
{	
	if (this.extraDatas.length==0) return;
	var extraDatas=new Array();
	for(var i=0;i<this.extraDatas.length;i++)
	if (this.extraDatas[i][0]==fieldDescription&&
	this.extraDatas[i][1]==selectObject.options[selectObject.selectedIndex].value) 
	extraDatas[extraDatas.length]=this.extraDatas[i][2];	
	this.OnFieldChange(fieldDescription,extraDatas);	
}
GROUPING_FIELDS.FilterDatas=function ()
{
	if (!this.fields) return;
	if (!this.datas) return;				
	var rowsID=new Array();
	for(var i=0;i<this.groupBy.length;i++) {
	var dataBF=this.getElementsByValue(this.datas,1,this.groupBy[i]);
	var field=this.getElementsByValue(this.fields,0,this.groupBy[i]);	
	dataBF=this.getElementsByValue(dataBF,3,
	field[0][1].options[field[0][1].selectedIndex].value);		
	if (dataBF.length==0) continue;
	for (var j=0;j<dataBF.length;j++)	
	if (rowsID.indexOf(dataBF[j][0])<0&&i==0) rowsID[rowsID.length]=dataBF[j][0];else
	if (i>0&&rowsID.length>0) for (var k=0;k<rowsID.length;k++)
	if (this.getElementsByValue(dataBF,0,rowsID[k]).length<=0) rowsID[k]=null;}			
	for (var i=0;i<this.fields.length;i++)
	if (this.groupBy.indexOf(this.fields[i][0])>=0) continue;else
	if (this.groupBy.length>0) 
	{this.resetSelectObject(this.fields[i][0],this.fields[i][1]);
	for (var j=0;j<this.datas.length;j++)
	if ((this.datas[j][1]==this.fields[i][0])&&(rowsID.indexOf(this.datas[j][0])>=0))
	this.addOption(this.fields[i][1],this.datas[j][2],this.datas[j][3],true);}
	this.disableIfEmpty();
}
GROUPING_FIELDS.setEvents=function(fieldDescription,selectObject)
{	
	if (!fieldDescription||!selectObject) return;
	this.invokeExtraData(fieldDescription,selectObject);
	if (selectObject.options[selectObject.selectedIndex].value==0)
	{for (var i=0;i<this.fields.length;i++) this.addAll(this.fields[i][0]);this.groupBy.length=0;this.OnChoice(null);return;}	
	if ((this.groupBy.indexOf(fieldDescription)<0)&&(this.groupBy.length!=this.fields.length))
	{this.groupBy[this.groupBy.length]=fieldDescription;}
	else if ((this.groupBy.indexOf(fieldDescription)>=0)&&(this.groupBy.length>1))
	{for (var i=0;i<this.fields.length;i++) if (this.fields[i][0]!=fieldDescription) this.addAll(this.fields[i][0]);
	this.groupBy.length=0;this.groupBy[0]=fieldDescription;this.OnChoice(null);}	
	this.invokeExtra();
	this.FilterDatas();		
}
GROUPING_FIELDS.isValid=function(invalidMsg)
{	
var msg='';if (invalidMsg==null) msg=true;
for (var i=0;i<this.fields.length;i++)
{
	if (invalidMsg==null&&this.fields[i][1].options[this.fields[i][1].selectedIndex].value==0) return false;
	if (invalidMsg!=null&&this.fields[i][1].options[this.fields[i][1].selectedIndex].value==0) 
	msg+='\n- '+invalidMsg+this.fields[i][0];
}
return msg;
}