var raBMfm_XMLHttpRequest;
var raBMfm_form_name;
var raBMfm_obj_brand;
var raBMfm_obj_model;
var raBMfm_active_id;
var raBMfm_data_brands;
var raBMfm_data_models;
var raBMfm_div_element_name;

function raBMfm__init( form_name, obj_brand, obj_model, data_source, active_id, div_element_name )
{
	raBMfm_form_name = form_name;
	raBMfm_obj_brand = obj_brand;
	raBMfm_obj_model = obj_model;

    if( active_id )
    {
        raBMfm_active_id = active_id;
    }
    else
    {
        raBMfm_active_id = 0;
    }
    
    if( div_element_name )
    {
        raBMfm_div_element_name = div_element_name;
    }
    else
    {
        raBMfm_div_element_name = false;
    }

	raBMfm__load( data_source );
}

function raBMfm__load( data_source )
{
	raBMfm_XMLHttpRequest = false;
	
	if( window.XMLHttpRequest )
	{
		try
		{
			raBMfm_XMLHttpRequest = new XMLHttpRequest();
		}
		catch( e )
		{
			raBMfm_XMLHttpRequest = false;
		}
	}
	else if( window.ActiveXObject )
	{
		try
		{
			raBMfm_XMLHttpRequest = new ActiveXObject( "Msxml2.XMLHTTP" );
		}
		catch(e)
		{
			try
			{
				raBMfm_XMLHttpRequest = new ActiveXObject( "Microsoft.XMLHTTP" );
			}
			catch(e)
			{
				raBMfm_XMLHttpRequest = false;
			}
		}
	}

	if( raBMfm_XMLHttpRequest )
	{
		raBMfm_XMLHttpRequest.onreadystatechange = raBMfm__processRequestChange;
		raBMfm_XMLHttpRequest.open( "GET", data_source, true );
		raBMfm_XMLHttpRequest.send( "" );
	}

	return true;
}

function raBMfm__processRequestChange()
{
	if( raBMfm_XMLHttpRequest.readyState == 4 )
	{
		if( raBMfm_XMLHttpRequest.status == 200 )
		{
			raBMfm__prepareData( raBMfm_XMLHttpRequest.responseXML );
		}
		else
		{
			// false
		}
	}
}

function raBMfm__prepareData( DOM_mobile )
{
    raBMfm_data_brands = new Array();
    raBMfm_data_models = new Array();

	var rootNode = DOM_mobile.getElementsByTagName( "mobile" );

	if( rootNode.length != 1 )
	{
		return false;
	}

    var active_brand_name = ''; 
    var brandsNodes = rootNode[0].childNodes;

    for( var lp1=0; lp1<brandsNodes.length; lp1++ )
	{
        if( brandsNodes[ lp1 ].nodeType == 1 )
        if( brandsNodes[ lp1 ].nodeName == 'brand' )
        {
            // ------------------------------------------------------
    
            var brand_name = brandsNodes[ lp1 ].getAttribute( 'name' );
            
            raBMfm_data_brands[ raBMfm_data_brands.length ] = brand_name;
            
            // ------------------------------------------------------
            
            var modelsNodes = brandsNodes[ lp1 ].childNodes;

            for( var lp2=0; lp2<modelsNodes.length; lp2++ )
            {
                if( modelsNodes[ lp2 ].nodeType == 1 )
                if( modelsNodes[ lp2 ].nodeName == 'model' )
                {
                    var model_name =modelsNodes[ lp2 ].getAttribute( 'name' ); 
                    var id = modelsNodes[ lp2 ].getAttribute( 'id' );
 
                    if( ! raBMfm_data_models[ brand_name ] )
                    {
                        raBMfm_data_models[ brand_name ] = new Array();
                    }
                    
                    var index = raBMfm_data_models[ brand_name ].length;

                    raBMfm_data_models[ brand_name ][ index ] = new Array();
                    raBMfm_data_models[ brand_name ][ index ][ 'id' ] = id;
                    raBMfm_data_models[ brand_name ][ index ][ 'name' ] = model_name;
                    
                    if( id == raBMfm_active_id )
                    {
                        active_brand_name = brand_name;
                    }
                }                    
            }
        }
	}

    //---[ Build brands list ]---------------------------------------

    var obj_select;

    obj_select = document.forms[ raBMfm_form_name ][ raBMfm_obj_brand ];
    
    for( var lp1=0; lp1<raBMfm_data_brands.length; lp1++ )
    {
        var brand_name = raBMfm_data_brands[ lp1 ];
        
        index = obj_select.options.length;
        obj_select.options[ index ] = new Option( brand_name, brand_name );
        
        if( brand_name == active_brand_name )
        {
            obj_select.options[ index ].selected = true;
        }
    }

    //---[ Build models list ]---------------------------------------
   
    raBMfm__rebuild();
    
    //---[ Select default value ]------------------------------------
    
    obj_select = document.forms[ raBMfm_form_name ][ raBMfm_obj_model ];
    
    for( var lp1=0; lp1<obj_select.options.length; lp1++ )
    {
        if( obj_select.options[ lp1 ].value == raBMfm_active_id )
        {
            obj_select.options[ lp1 ].selected = true;
        }
    }

    //---------------------------------------------------------------
    
    raBMfm__loaded();
}

function raBMfm__rebuild()
{
    var obj_models = document.forms[ raBMfm_form_name ][ raBMfm_obj_model ];
    
    //---[ Clear list ]----------------------------------------------
    
    while( obj_models.length > 0 )
    {
        obj_models.remove( 0 );
    }

    //---[ Build new list ]------------------------------------------

    var active_brand_name = document.forms[ raBMfm_form_name ][ raBMfm_obj_brand ].value;
    
    if( ! raBMfm_data_models[ active_brand_name ] )
    {
        return false;
    }

    for( var lp1=0; lp1<raBMfm_data_models[ active_brand_name ].length; lp1++ )
    {
        obj_models.options[ obj_models.options.length ]
            = new Option( raBMfm_data_models[ active_brand_name ][ lp1 ][ 'name' ]
                        , raBMfm_data_models[ active_brand_name ][ lp1 ][ 'id' ]
                        );
    }
}

function raBMfm__loaded()
{
    raBMfm_is_loaded = true;

    if( raBMfm_div_element_name == false )
    {
        return true;
    }
    
    var obj_models;

	try
	{
    	obj_models = document.getElementById( raBMfm_div_element_name );
    
	    if( ! obj_models )
    	{
    		return false;
	    }
	}
	catch( err )
	{
		alert( "Cannot get 'mobile-filter' div-element" );
		return false;
	}
	
	try
	{
		if( obj_models.style )
		{
			obj_models.style.visibility = '';
		}
		else
		{
	        obj_models.visibility = 'visible';
		}
	}
	catch( err )
	{
		try
		{
			alert( "Cannot show 'mobile-filter' div-element." + "\n" + "Error is: " + err.message );
		}
		catch( err )
		{
			alert( "Show 'mobile-filter' failed. Call to administrator" );
		}
	}
}

