google.load("jquery", "1.3.1");

var ddl_url = 'http://' + window.location.hostname + '/inc/get-cars-lookup.php';
var make_cars = null;

google.setOnLoadCallback(function ()
{
        $(document).ready(function()
		{			
			// init dropdowns
			$("#make").change(function(){fill('model');});
			$("#model").change(function(){fill('year');});
			$("#year").change(function()
                {
                    if($('#category :selected').val() != 1)
                    {
                        var target = $('#category :selected').text().replace(/\//g,"") + '/' + $('#make :selected').text() + '-' + $('#model :selected').text() + '-' + $('#year :selected').text() + '-price.html';
                        target = 'http://' + window.location.hostname + '/' + target.toLowerCase().replace(/\s/g,"");
                        window.location = target;
                        return;
                        // alert(target);
                    }
                    else
                        gotoChat();
                }
            );
			
			// automatically load models for selected make
            fill('year');
		}
	);			

});

function fill(step)
{
	    
    switch (step)
	{
		
		case 'year':
			if (!$("#model").val() || $("#model").val() == '')
            {
                fill('model');
                return;
            }

			$("#model").attr("disabled", false).parent().removeClass("select_disabled").addClass("select_enabled");
			$("#year").attr("disabled", false).parent().removeClass("select_disabled").addClass("select_enabled");

            if (make_cars == null)
            {
                var callback = function (data)
                {
                    make_cars = data;
                    parseXMLFor('model');        
                    parseXMLFor('year');        
                }

                $.post(ddl_url, {make: $("#make").val()}, callback, "xml");
            }
            else
            {
                    parseXMLFor(step);        
            }
        break;
		
		case 'model':
			step = 'model'; // in case of default
			
			if (!$("#make").val() || $("#make").val() == '') return;
			
			$("#model").attr("disabled", false).parent().removeClass("select_disabled").addClass("select_enabled");
			$("#year").attr("disabled", true).parent().toggleClass("select_disabled", !$(this).hasClass("select_disabled"));

            getMakeXml(step);
            
        break;
        
        default: 
            step = 'make'; // reset drop down
			
            $("#make").attr("disabled", false).parent().removeClass("select_disabled").addClass("select_enabled");
            $("#model").attr("disabled", true).parent().toggleClass("select_disabled", !$(this).hasClass("select_disabled"));
			$("#year").attr("disabled", true).parent().toggleClass("select_disabled", !$(this).hasClass("select_disabled"));

            if ($("#make")[0].options && $("#make")[0].options.length > 0)
            {
                return;
            }
            
            getMakesXml(step);

		break;
	}
}

function getMakeXml(step)
{
    var callback = function (data)
    {
        make_cars = data;
        parseXMLFor(step);        
    }

    $.post(ddl_url, {make: $("#make").val()}, callback, "xml");
}

function getMakesXml()
{
    var callback = function (data)
    {
        make_cars = data;
        parseXMLFor(step);
    }

    $.post(ddl_url, null, callback, "xml");
}

function parseXMLFor(step)
{
	var xsl_str = '';
	
	switch(step)
	{

		case 'year':
			xsl_str = 
			"<?xml version='1.0'?>"+
			"<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>"+
			"<xsl:output method='xml' omit-xml-declaration='yes'/>"+
			"<xsl:template match='/'>"+
			"<result>{\"year\":[<xsl:apply-templates/>]}</result>"+
			"</xsl:template>"+
			'<xsl:template match=\'make/model/car[../@modelid="' + $("#model").val() +'"]\'>'+
			"{\"name\":\"<xsl:value-of select='@caryear'/>\",\"id\":<xsl:value-of select='@caryear'/>,\"selected\":false},"+
			"</xsl:template>"+
			"</xsl:stylesheet>";
			break;
			
		case 'model':
			
			step = 'model';

			xsl_str = 
			"<?xml version='1.0'?>"+
			"<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>"+
			"<xsl:output method='xml' omit-xml-declaration='yes'/>"+
			"<xsl:template match='/'>"+
			"<result>{\"model\":[<xsl:apply-templates/>]}</result>"+
			"</xsl:template>"+
			"<xsl:template match='make/model'>"+
			"{\"name\":\"<xsl:value-of select='@model'/>\",\"id\":<xsl:value-of select='@modelid'/>,\"selected\":<xsl:choose><xsl:when test='@modelid=\"" + $("#model").val() + "\"'>true</xsl:when><xsl:otherwise>false</xsl:otherwise></xsl:choose>}," +
			"</xsl:template>"+
			"</xsl:stylesheet>";
			break;

		default: // makes
            
            step = 'make';

			xsl_str = 
			"<?xml version='1.0'?>"+
			"<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'>"+
			"<xsl:output method='xml' omit-xml-declaration='yes'/>"+
			"<xsl:template match='/'>"+
			"<result>{\"make\":[<xsl:apply-templates/>]}</result>"+
			"</xsl:template>"+
			"<xsl:template match='makes/make'>"+
			"{\"name\":\"<xsl:value-of select='@make'/>\",\"id\":<xsl:value-of select='@makeid'/>,\"selected\":false},"+
			"</xsl:template>"+
			"</xsl:stylesheet>";
        break;
    }
	
    if (window.ActiveXObject) 
    {
        var xslt = new ActiveXObject('Microsoft.XMLDOM');
        xslt.async='false';
        xslt.loadXML(xsl_str);
        var xmlDoc = make_cars.transformNode(xslt);
        var newDocument = new ActiveXObject('Microsoft.XMLDOM');
        newDocument.async='false';
        newDocument.loadXML(xmlDoc);
    }
    else
    {
        var xslDoc = (new DOMParser()).parseFromString(xsl_str, "text/xml");
        var processor = new XSLTProcessor();
        processor.importStylesheet(xslDoc);
        var xmls = new XMLSerializer();
        var newDocument = processor.transformToDocument(make_cars);
    }        
	
    var json_models = newDocument.childNodes[newDocument.childNodes.length - 1].firstChild.nodeValue;
	var results = YAHOO.lang.JSON.parse(json_models);

	filltarget(step, eval('results.' + step));
}

function filltarget(target, arr)
{
	var target = document.getElementById(target);
	target.options.length = 0;
	
	if (arr.length == 0)
	{
		alert('No ' + step + '(s) found!');
		return;
	}
		
	var option = new Option('-- select ' + target.id + ' --', '');
	try {target.add(option, null);}
	catch (e) {target.add(option, -1);}
			
	for (i=0; i < arr.length; i++)
	{
		if (arr[i]) // last elmt in ie is usually because of they way the jason obj is formed
		{
			option = new Option(arr[i].name, arr[i].id);
            if (arr[i].selected == true)
            {
                option.selected = true;
            }
			try {target.add(option, null);}
			catch (e){target.add(option, -1);}
		}
	}

}

function gotoChat()
{
    $("#year")[0].form.submit();
}

