/* 
 * Ido
 * Julia
 * general client functions
 */

//
// Will be hook to the initilazation of the doc.
//

// some global vars (TODO - remove them into objs.)
var g_years = "2008,2009";
var g_years_str = '2008 - 2009';
var g_makes_index = 0;
var g_makes= new Array();
var g_makes_name = new Array();

var g_vcats_index = 0;
var g_vcats= new Array();
var g_vcats_name = new Array();
g_vcats[g_vcats_index] = 30000; //sedan
g_vcats_name[g_vcats_index++] = "Sedans"; // TODO - get it dynamicly

var g_prices = '15000-30000';
var g_prices_str= '$15,000-$30,000';
//var g_selection = new Array();

var g_ymd_comp_index = 0;
var g_ymd_comp =  new Array(); // contain the ymdID for the compare cars
var base_include_path = '/common/fe_modules/';

var pagesize = 6;
var auto_update = true;
var updater = false;

 function addCommas(nStr)
{
    nStr += '';
    x = nStr.split('.');
    x1 = x[0];
    x2 = x.length > 1 ? '.' + x[1] : '';
    var rgx = /(\d+)(\d{3})/;
    while (rgx.test(x1)) {
        x1 = x1.replace(rgx, '$1' + ',' + '$2');

    }
    return x1 + x2;
}

function initHook() {
    $(document).ready(function(){
        $("#navigation").accordion({
            autoHeight: false,
            active: 0
            //event: 'mouseover'
        });

        if ($("#autoupdate").attr('checked')){
            auto_update = true;
        }
        else{
            auto_update = false;
        }
        $("#autoupdate").change(function (){
            if($(this).attr('checked')){
                auto_update = true;
                getAjaxedData();
            }
            else
            {
                auto_update = false;

            }
        });

        $("#updater").click(function (){
         updater = true;
          getAjaxedData();
        });

        $("#year").slider({
            range: true,
            min: 2003,
            max: 2010,
            values: [2008,2009],
            //step: 1,
            start: function(event, ui) {
                prev_lower_year = $("#year").slider('values', 0);
                prev_upper_year = $("#year").slider('values', 1);
            },
            change: function(event, ui) {
                $("#years_range").val(ui.values[0] + ' - ' + ui.values[1]);
                lower_year = Math.max(2003, $("#year").slider('values', 0));
                upper_year = Math.min(2010, $("#year").slider('values', 1));
                //console.log("ev:"+ev + " ui1:"+$("#year").slider('value', 0) +
                //    " ui2:" + $("#year").slider('value', 1));
                g_years = '';
                g_years_str = '';
                for (i = lower_year; i <= upper_year; i++) {
                    g_years += i + ",";
                    if (i == lower_year) {
                        g_years_str = "" + i;
                    }
                    else if (i == upper_year) {
                        g_years_str += " - " + i;
                    }
                }
               // $("#year-sel").html(g_years_str);
               if((prev_lower_year==lower_year)&&(prev_upper_year==upper_year)){
                   return;
               }
               else{
                   getAjaxedData();
               }
            }
        });
        $("#years_range").val($("#year").slider("values", 0) + ' - ' + $("#year").slider("values", 1));

        $("#price").slider({
            range: true,
            min: 0,
            max: 150000,
            values: [15000, 30000],
            step: 15000,
            start: function(event, ui) {
                prev_lower_price = $("#price").slider('values', 0);
                prev_upper_price = $("#price").slider('values', 1);
            },
            change: function(event, ui) {
                max_price = ui.values[1];
                if(max_price == 150000){
                   max_price = 2000000;
                }

                $("#price_range").val('$'+addCommas(ui.values[0]) + ' - $' + addCommas(max_price));
                lower_price = Math.max(0, $("#price").slider('values', 0));
                upper_price = Math.min(150000, $("#price").slider('values', 1));
                max_price = $("#price").slider("values", 1);
                if(upper_price==150000){
                   upper_price = 2000000;
                }
                //console.log("ev:"+ev + " ui1:"+$("#year").slider('value', 0) +
                //    " ui2:" + $("#year").slider('value', 1));
                g_prices = lower_price+ '-'+upper_price;

                if((prev_lower_price==lower_price)&&(prev_upper_price==upper_price)){
                   return;
               }
               else{
                   getAjaxedData();
               }
            }
        });

        $("#price_range").val('$'+addCommas($("#price").slider("values", 0)) + ' - $' + addCommas($("#price").slider("values", 1)));

        $(":checkbox").bind("click", function(e) {
            var val = e.currentTarget.value;
            var name = e.currentTarget.name;
            if (isNumeric(val)) {
                // it is make or style
                if (val < 11000) {
                    // we have a make
                    if (this.checked) {
                        g_makes[g_makes_index] = val;
                        g_makes_name[g_makes_index++] = name;
                        //$("#makes-sel").html(name);
                    }
                    else {
                        for (i in g_makes) {
                            if (g_makes[i] == val) {
                                // let remove it from the array
                                g_makes.splice(i,1);
                                g_makes_name.splice(i,1);
                                g_makes_index--;
                            }
                        }
                    }
                }
                else {
                    if (val > 200000) {          
                        return;
                    }
                    // val is less then y-m-m value
                    if (this.checked) {
                        g_vcats[g_vcats_index] = val;
                        g_vcats_name[g_vcats_index++] = name;

                       // $("#body-sel").html(name);
                    }
                    else {
                        for (i in g_vcats) {
                            if (g_vcats[i] == val) {
                                // let remove it from the array
                                g_vcats.splice(i,1);
                                g_vcats_name.splice(i, 1);
                                g_vcats_index--;
                            }
                        }
                    }
                }
                getAjaxedData();
            }
        });

    buildSel();
    });
    initTable();
    
}

function initTable() {

    $(document).ready(function(){

        $("#wait-dialog").dialog({
        modal: true,
        autoOpen: false,
        bigframe: true,
        overlay: {
            opacity: 0.5,
            background: "black"
        }
        });
        $("#min_select").dialog({
            modal: true,
            autoOpen: false,
            bigframe: true,
            overlay: {
                opacity: 0.5,
                background: "black"
            },
            buttons: {
				Ok: function() {
					$(this).dialog('close');
				}
			}
        });

        $("#max_select").dialog({
            modal: true,
            autoOpen: false,
            bigframe: true,
            overlay: {
                opacity: 0.5,
                background: "black"
            },
            buttons: {
				Ok: function() {
					$(this).dialog('close');
				}
			}
        });
        $("#carTable").tablesorter({
            sortList: [[3,1]],
            headers: {
                4: { sorter: false }}
        })
		//$("#carTable").tablesorterPager({container: $("#pager")});

        $("select").change(function () {
           pagesize = $("select option:selected").text();
           updater = true;
           getAjaxedData();
           updater = false;
        });

        var counter = 0;
        $("table#carTable td :checkbox").change(function (){
            if($(this).attr('checked')){
                counter++;
            }
            else
                {
                 counter--;
                }
            if (counter>3){
            $(this).attr('checked', false);
			$("#max_select").dialog('open');
			counter--;
			
        }
			
        });

        $(".compare-button").click(function () {
            g_ymd_comp = new Array();
            g_ymd_comp_index = 0;
            //$("table#carTable td input[type=checkbox]").each(function(e) {
            $("table#carTable td :checkbox:checked").each(function(e) {
                var val = $(this).attr("value");
                g_ymd_comp[g_ymd_comp_index++] = val;
            });
            //console.log ('ymd_comp: ' + g_ymd_comp);

            if (g_ymd_comp_index < 2) {
                // TODO - have this alert in the window and not like that
               $("#min_select").dialog('open');
                return;
            }
            if(g_ymd_comp_index > 3){
                $("#max_select").dialog('open');
                return;
            }
            else {
                g_ymd_comp.sort();
                seoStr = g_ymd_comp.join("-vs-");
                window.open('/car-compare-results/' + seoStr, "compare_table");
            }
        });
    });
}
function buildSel() {
    if (g_years_str.length > 0) {
        $("#year-sel").html(g_years_str);
    }
    else {
        $("#year-sel").html("");
    }
    if (g_makes_name.length > 0) {
        $("#makes-sel").html(g_makes_name.join("<br />"));

    }
    else {
        $("#makes-sel").html("all makes");
    }
    if (g_vcats_name.length > 0) {
        $("#body-sel").html(g_vcats_name.join("<br />"));

    }
    else {
        $("#body-sel").html("all categories");
    }

    if (g_prices.length > 0) {
        $("#price-sel").html(addCommas(g_prices));
    }
    else {
        $("#price-sel").html(g_prices_str);
    }
   
}

function getAjaxedData(){
    if((auto_update==false)&&(updater == false)){
        return;
    }
    if((auto_update==true)||(updater == true)){
    buildSel();
    showDialog();
    $("#yui-main").fadeOut(300);
    $(".bottom_compare").hide();
    //$("#waiting_sec").show();
    r_url = "/index.php?module=comparator-get-cars&makes=" + g_makes.join(",") + "&vcats=" +
    g_vcats.join(",") + "&years=" + g_years +
    "&price="+ g_prices +"&pagesize="+ pagesize;
    $.get(r_url, function(html) {
        //end = html.indexOf("</p>") + 4;
        // car_no = $("#counter").html;
        // html = html.substring(end, html.length);
        $("#yui-main").empty();
        $("#yui-main").append(html).fadeIn(500); //append(html);
        $("#carTable").trigger("update");
        closeDialog();
        initTable();
        updater = false;
     });
    }
}
/**
 * Nice help dialog to give the user some tips for better usability.
 */
function showDialog() {
        $("#wait-dialog").dialog('open');
}

function closeDialog() {
        $("#wait-dialog").dialog('close');
}

function isNumeric(sText) {
    var ValidChars = "0123456789.";
    var IsNumber=true;
    var Char;
    for (i = 0; i < sText.length && IsNumber == true; i++) {
        Char = sText.charAt(i);
        if (ValidChars.indexOf(Char) == -1) {
            IsNumber = false;
        }
    }
    return IsNumber;
}


function createCookie(name,value,days) {
    var expires = "";
    if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        expires = "; expires="+date.toGMTString();
    }
    document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') {
            c = c.substring(1,c.length);
        }
        if (c.indexOf(nameEQ) == 0) {
            return c.substring(nameEQ.length,c.length);
        }
    }
    return null;
}