﻿// Names of selectbox
var Names = CameraDB[0].split( Delimiter ); 
// Hints of selectbox
var Hints = CameraDB[1].split( Delimiter ); 

// array of array - properties of cameras; 1st index == camera index, 2nd index == camera property
var Cameras = new Array;
for ( var i = 2; i < CameraDB.length; ++i ) {
	Cameras.push( CameraDB[i].split( Delimiter ) );
}

// All properties of camera - NO dublicate lists !!!
var Properties = new Array;

// Create properties list based on 'Visible' value. If init==true - 1st run
function UpdateProperties(Init) {
	
	if (Init) {
		// For each camera setup property 'Visible' to 1
		for ( var CameraIndex = 0; CameraIndex < Cameras.length; ++CameraIndex ) {
			Cameras[ CameraIndex ][ 0 ] = 1;
		}
	}

	// create new properties list
	Properties = new Array;

	// For each property
    for ( var PropertyIndex = 0; PropertyIndex < Names.length; ++PropertyIndex ) { 
    	var Arr = new Array; // create empty Array()		
		// For each camera
    	for ( var CameraIndex = 0; CameraIndex < Cameras.length; ++CameraIndex ) { 
    		if ( Cameras[ CameraIndex ][ 0 ] != 0 ) {
        		var Property = Cameras[ CameraIndex ][ PropertyIndex ];
        		var Found = 0; // flag - found Property in the Arr ?

        		// check, Property included in the Arr list ?
        		for ( var i = 0; i < Arr.length; ++i ) {
        			if ( Property == Arr[i] ) {
        				Found = 1;
        				break;
        			}
        		}
        		// if no included - insert to list
        		if ( Found == 0 ) {
        			Arr.push( Property );
        		}
			}
		}
		// Add Arr to properties list
    	Properties.push( Arr ); 
    }
}

// Filter cameras database : set 'Visible' to 0 if selected Property != value
function FilterCameras(PropertyIndex,Value) {
	// For each camera
	for ( var CameraIndex = 0; CameraIndex < Cameras.length; ++CameraIndex ) {
		if ( Cameras[ CameraIndex ][ PropertyIndex ] != Value ) {
			Cameras[ CameraIndex ][ 0 ] = 0;		
		}
	}
}


function WriteTable() {
    document.writeln('<h2>Камеры</h2>');
	document.writeln('<table id="cameraList"><tbody>');
	for ( var CameraIndex = 0; CameraIndex < Cameras.length; ++CameraIndex ) {
		document.writeln( '<tr id="Camera' + CameraIndex + '"><td>' );
		document.writeln( '<a href="'+Cameras[ CameraIndex ][2]+'">' + Cameras[ CameraIndex ][1] + '</a>' ); // name of camera
    	document.writeln( '</tr></tr>' );
    }
	document.writeln('</tbody></table>');
} 


function UpdateTable() {
	// For each camera
	for ( var CameraIndex = 0; CameraIndex < Cameras.length; ++CameraIndex ) {
		var elm = document.getElementById( 'Camera' + CameraIndex );
		
		if (elm) {
			if ( Cameras[ CameraIndex ][ 0 ] == 0 ) {
				elm.style.display= 'none';
			} else {
				elm.style.display= '';
			}
		}
	}
}


function ClearSelect(selectbox) {
	for( var i = selectbox.options.length-1; i>=0; i-- ) {
		selectbox.remove(i);
	}
}

function AddOption( selectbox, text, value ) {
	var optn = document.createElement( "OPTION" );
		
	optn.text = text;
	optn.value = value;
	selectbox.options.add(optn);
}


function UpdateOneSelect(PropertyIndex) {
	var PropertyValues = Properties[ PropertyIndex ];
	var select_name = 'SELECT' + PropertyIndex;
	var selectbox = eval("document.joss."+select_name);

	ClearSelect( selectbox );

	for ( var i = 0; i < PropertyValues.length; ++i ) {
		AddOption( selectbox, PropertyValues[ i ], PropertyValues[ i ] )
	}
}

function UpdateAllSelect() {
	for ( var i = 0; i < SimpleCriterias.length; ++i ) {
		UpdateOneSelect( SimpleCriterias[i] );
	}
	for ( var i = 0; i < AdvancedCriterias.length; ++i ) {
		UpdateOneSelect( AdvancedCriterias[i] );
	}
}

function WriteOneSelect( Index, PropertyIndex) {
	var PropertyValues = Properties[ PropertyIndex ];
	var width = 0;
	// detect width of select
	for ( var i = 0; i < PropertyValues.length; ++i ) {
		var Value = PropertyValues[ i ];
		if ( Value.length > width ) {
			width = Value.length;
		}
	}
	document.writeln( '<div class="grid_selector"><div class="filterSelect">' + '<label>' + Names[PropertyIndex] + ':</label>' + '&nbsp;');
	document.writeln( '<select name="SELECT' + PropertyIndex + '" size=' + PropertyValues.length + ' width='+width+' onChange="SelectItem(this,'+PropertyIndex+')" ></select>' );
	document.writeln( '<span class="filterHint">' + Hints[ PropertyIndex] + '</span></div>' + '</div>');
	if ( ((Index+1) % 2) == 0 ) 
		document.writeln( '<div class="clear"></div>');
}

function WriteAllSelect() {
	for ( var i = 0; i < SimpleCriterias.length; ++i ) {
		WriteOneSelect(	i, SimpleCriterias[i] );
	}
/*
document.write( '<div class="filterOption"><br><input name="showAdvanced" type="checkbox" onClick="SetAdvancedCriterias(this.checked);" value="advanced">Show Advanced Criteria</div>');
document.write( '<div id="AdvancedCriterias">' );
	for ( var i = 0; i < AdvancedCriterias.length; ++i ) {
		WriteOneSelect(	AdvancedCriterias[i] );
	}
document.write('</div>');
*/
}


function SelectItem(selectbox,PropertyIndex) {
	FilterCameras( PropertyIndex, selectbox.options[selectbox.selectedIndex].value );
	UpdateProperties(false);
	UpdateAllSelect();
	UpdateTable();
}

function ClearFilter() {
	UpdateProperties(true);
	UpdateAllSelect();
	UpdateTable();
}

function SetAdvancedCriterias(selected) {
	var elm = document.getElementById( "AdvancedCriterias" );

	if (elm) {
		if ( selected ) {
			elm.style.display= '';
		} else {
			elm.style.display= 'none';
		}
	}
	ClearFilter();
}
