function wire_mobile_more_holder()
{
    $('#product_list li.more_holder').click(
    function()
    {
        var payload = {};
        payload.key  = '9a9831e35be9c42766aebce38fd3d086';
        payload.event= 'get_more_results';
        payload.url  = $(this).data('more-url');
        $(this).removeClass('ui-body-c').addClass('ui-bar-b');            
        $.mobile.showPageLoadingMsg();    
        $.post('/shared/php/ajax/handler.php',payload,
        function(data)
        {
            if(data.RetVal == 1)
            {                    
                if(data.Javascript != '')
                    $.globalEval(data.Javascript);
                
                $('#product_list > li.more_holder').remove();
                $('#product_list').append(data.Response);
                $('#product_list').listview('refresh');
                $.mobile.hidePageLoadingMsg();
                wire_mobile_more_holder();
            }
            
        },'json');
    });    
}
function wire_mobile_more_products()
{
    $(document).ready(function()
    {
        wire_mobile_more_holder();
    });
}

function wire_mobile_force_selected()
{
    /*$(document).bind('mobileinit',function()
    {
        $('select[data-force_selected]').each(function()
        {
            $(this).bind('create',function()
            {
                $(this).find('option[data-selected]').each(function()
                {
                    $(this).parent().val($(this).val());alert('setting to'+$(this).val());
                });alert('done creating');
            });
        });
        //$(this).selectmenu('refresh');
    });*/
}

function wire_mobile_refine_remove_filters()
{
    $(document).ready(
    function()
    {
        $('#current_refinements input[type="checkbox"]').each(
        function(index,element)
        { 
           $(this).bind("change",
            function(event,ui)
            {
                $.mobile.showPageLoadingMsg();                
                document.location = $(this).data('url');                
            }); 
        });        
    });
}

function EndecaSearchHelper(ContextHandler,MobileMode)
{
    this.ContextHandler=ContextHandler;
    this.MobileMode=MobileMode;
    this.AjaxObject=null;
    this.SearchApplicationGroupID='';
    this.SearchCategoryID='';
    this.id='';
    
    this.SetApplicationGroupFilter = function(ID)
    {
        this.SearchApplicationGroupID=ID;
    }
    this.SetCategoryFilter=function(ID)
    {
        this.SearchCategoryID=ID;
    }
    
    this.FetchMakeOptions=function()
    {
        var Parameters    = "action=ActionFetchMakeOptions";
        var container    = document.getElementById('endeca_search_form');
        var objAjaxv2     = new Ajaxv2("/shared/php/ajax/endeca_search_helper.php",this,this.OnFetchMakeOptionsCallback,"POST",Parameters,this.ContextHandler);
        objAjaxv2.Parameters+="&"+objAjaxv2.GetFormValues(container);        
        objAjaxv2.GetPost(true);
    }
    this.OnFetchMakeOptionsCallback=function(Success,ResponseObject)
    {
        if(this.ProcessGenericAjaxResponse(Success,ResponseObject))
        {
            var make_container=document.getElementById('make_container');
            if(make_container != null)
            {
                make_container.innerHTML=this.AjaxObject.Response;
            }
        }
    }

    this.FetchModelOptions=function()
    {
        var Parameters    = "action=ActionFetchModelOptions";
        var container    = document.getElementById('endeca_search_form');
        var objAjaxv2     = new Ajaxv2("/shared/php/ajax/endeca_search_helper.php",this,this.OnFetchModelOptionsCallback,"POST",Parameters,this.ContextHandler);
        objAjaxv2.Parameters+="&"+objAjaxv2.GetFormValues(container);        
        objAjaxv2.GetPost(true);
    }
    this.OnFetchModelOptionsCallback=function(Success,ResponseObject)
    {
        if(this.ProcessGenericAjaxResponse(Success,ResponseObject))
        {
            var model_container=document.getElementById('model_container');
            
            if(model_container != null)
            {
                if(this.MobileMode != 1)
                    model_container.innerHTML=this.AjaxObject.Response;
                else
                {
                    $('#search_model_id').html(this.AjaxObject.Response);
                    $("#search_model_id").selectmenu("refresh");
                }
            }
        }
    }
    /**
     * Keyword search is always required. if they decide to do YMM, they must be all or none.
     * will submit the search
     */
    this.ValidateSearch=function()
    {
        var obj;
        var valid=false;
        var message="";
        
        var makeobj=document.getElementById('search_make_id');
        var modelobj=document.getElementById('search_model_id');        
        var yearobj=document.getElementById('search_year');
        
        //all selected?
        if(yearobj.options[yearobj.selectedIndex].value != '' && makeobj.options[makeobj.selectedIndex].value != '' && modelobj.options[modelobj.selectedIndex].value != '')
            valid=true;
        
        //none selected is fine too
        if(yearobj.options[yearobj.selectedIndex].value == '' && makeobj.options[makeobj.selectedIndex].value == '' && modelobj.options[modelobj.selectedIndex].value == '')
            valid=true;
            
        obj=document.getElementById('search_terms');    
        if(obj.value == '')
        {
            alert('Please enter a Search Phrase');
            return false;
        }
            
        if(valid)
        {
            //if we have any pending ajax requests, kill them first
            this.ContextHandler.CancelPendingEvents();
            obj=document.getElementById('endeca_search_form');
            obj.submit();            
        }
        else
            alert('When filtering by YMM, you must select all options or click Change Vehicle to reset the options.');
    }
    
    /**
    * If they select YMM, check to see if we can search now.
    */
    this.CheckYMMForSearch=function()
    {
        var makeobj = document.getElementById('search_make_id');
        var modelobj=document.getElementById('search_model_id');        
        var yearobj = document.getElementById('search_year');
        var search_terms=document.getElementById('search_terms');
        
        //check if sort exists.
        if(document.getElementById('sort')!=null)
        { 
           var sort= $('#sort option:selected').data('sort');
        }
        else
        {
            var sort='';
        }
        
        //Check if the per_page dropdown exists, if it does create a js var per_page to place in the url. If not set var per_page to blank.     
        if(document.getElementById('per_page')!=null)
        {
            var per_page= $('#per_page option:selected').data('per-page'); 
        }
        else
        {
            var per_page='';
        }
        
        if(modelobj != null && yearobj != null && modelobj.value != '' && yearobj.value != '')
        {
            if(search_terms != null && search_terms.value != '')
                document.location=document.location.pathname+'?p='+escape(per_page)+'&sort='+sort+'&search_terms='+escape(search_terms.value)+'&search_model_id='+modelobj.value+'&search_year='+yearobj.value+'&search_make_id='+makeobj.value;
            else
                document.location=document.location.pathname+'?p='+escape(per_page)+'&sort='+sort+'&search_terms=&search_model_id='+modelobj.value+'&search_year='+yearobj.value+'&search_make_id='+makeobj.value;
        }
    }
    
    this.SBVFetchModelOptions=function()
    {
        //if we have no makeid do nothing
        if(document.getElementById('search_make_id').options[document.getElementById('search_make_id').selectedIndex].value=='')
            return;
            
        var Parameters    = "action=ActionFetchSBVModelOptions&app_group_id="+this.SearchApplicationGroupID+'&category_id='+this.SearchCategoryID+'&mobile_mode='+this.MobileMode;
        var container    = document.getElementById('endeca_search_form');
        var objAjaxv2     = new Ajaxv2("/shared/php/ajax/endeca_search_helper.php",this,this.OnFetchModelOptionsCallback,"POST",Parameters,this.ContextHandler);
        objAjaxv2.Parameters+="&"+objAjaxv2.GetFormValues(container);        
        objAjaxv2.GetPost(true);
    }
    this.OnSBVFetchModelOptionsCallback=function(Success,ResponseObject)
    {
        if(this.ProcessGenericAjaxResponse(Success,ResponseObject))
        {
            var model_container=document.getElementById('model_container');
            if(model_container != null)
                model_container.innerHTML=this.AjaxObject.Response;
        }
    }
    
    this.SBVFetchYearOptions=function()
    {
        //if we have no modelid do nothing
        if(document.getElementById('search_model_id').options[document.getElementById('search_model_id').selectedIndex].value=='')
            return;
            
        var Parameters    = "action=ActionFetchSBVYearOptions"+'&category_id='+this.SearchCategoryID+'&mobile_mode='+this.MobileMode;
        var container    = document.getElementById('endeca_search_form');
        var objAjaxv2     = new Ajaxv2("/shared/php/ajax/endeca_search_helper.php",this,this.OnSBVFetchYearOptionsCallback,"POST",Parameters,this.ContextHandler);
        objAjaxv2.Parameters+="&"+objAjaxv2.GetFormValues(container);        
        objAjaxv2.GetPost(true);
    }
    
    this.OnSBVFetchYearOptionsCallback=function(Success,ResponseObject)
    {
        if(this.ProcessGenericAjaxResponse(Success,ResponseObject))
        {
            var year_container=document.getElementById('year_container');
            if(year_container != null)
            {
                if(this.MobileMode != 1)
                    year_container.innerHTML=this.AjaxObject.Response;
                else
                {
                    $('#search_year').html(this.AjaxObject.Response);
                    $("#search_year").selectmenu("refresh");
                }
            }
        }
    }
    
    this.ResetVehicleOptions = function()
    {
        var obj;
        var c;
        obj=document.getElementById('search_year');
        if(obj != null)
            obj.selectedIndex=0;
            
        obj=document.getElementById('search_make_id');
        if(obj != null)
        {
            obj.selectedIndex=0;
            for(c=obj.length-1;c>0;c--)
            {
                obj.remove(c);
            }
        }
        
        obj=document.getElementById('search_model_id');
        if(obj != null)
        {
            obj.selectedIndex=0;
            for(c=obj.length-1;c>0;c--)
            {
                obj.remove(c);
            }
        }
        obj=document.getElementById('reset_vehicle');
        obj.value=1;
    }
    
    this.ShowEmailResultsForm=function()
    {
        document.getElementById("email_results_to").value             = "";
        document.getElementById("email_results_to_name").value         = "";
        document.getElementById("email_results_to2").value             = "";
        document.getElementById("email_results_to_name2").value     = "";
        document.getElementById("email_results_from").value         = "";    
        document.getElementById("email_results_from_name").value     = "";
        document.getElementById("email_results_note").value         = "";
        document.getElementById("email_results_link").style.display = "none";
        document.getElementById("email_results_form").style.display = "block";
        document.getElementById("send_results").innerHTML             = "";
        document.getElementById("send_results").style.display         = "none";
    }
    
    this.HideEmailResultsForm=function()
    {
        document.getElementById("email_results_link").style.display = "block";
        document.getElementById("email_results_form").style.display = "none";
    }
    
    this.SendEmailResults=function(form_object) 
    {
        var message_text = "";
        if(document.getElementById("email_results_from").value == "")
            message_text += "Your email address is required.\n"
        if(document.getElementById("email_results_to").value == "" && document.getElementById("email_results_to2").value == "")
            message_text += "You must enter the email address of at least one friend."
        
        if(message_text != "")
        {
            alert(message_text);
            return;
        }
        var response_div = "send_results";
        document.getElementById(response_div).innerHTML = "Sending Email. Please wait ...";
        document.getElementById(response_div).style.display = "block";
        
        var Parameters    = "action=ActionEmailResultsToFriend";
        var container    = document.getElementById('email_results');
        var objAjaxv2     = new Ajaxv2("/shared/php/ajax/endeca_search_helper.php",this,this.OnSendEmailResultsCallback,"POST",Parameters,this.ContextHandler);
        objAjaxv2.Parameters+="&"+objAjaxv2.GetFormValues(container);        
        objAjaxv2.GetPost(true);    
    }
    this.OnSendEmailResultsCallback=function(Success,ResponseObject)
    {
        if(this.ProcessGenericAjaxResponse(Success,ResponseObject))
        {
            var send_results=document.getElementById('send_results');
            if(send_results != null)
            {
                send_results.innerHTML=this.AjaxObject.Response;
                this.HideEmailResultsForm();
            }
        }
    }
    
    /**
     * This will make sure MMY are required for SBV searches and on validation
     * will submit the search
     */
    this.ValidateSBVSearch=function()
    {
        var obj;
        var valid=true;
        var message="";
        obj=document.getElementById('search_make_id');
        if(obj.options[obj.selectedIndex].value=='-1' || obj.options[obj.selectedIndex].value=='')
        {
            message+="Please select a Make\n";
            valid=false;
        }
        
        obj=document.getElementById('search_model_id');
        if(obj.options[obj.selectedIndex].value=='-1' || obj.options[obj.selectedIndex].value=='')
        {
            message+="Please select a Model\n";
            valid=false;
        }
        
        obj=document.getElementById('search_year');    
        if(obj.options[obj.selectedIndex].value=='-1' || obj.options[obj.selectedIndex].value=='')
        {
            message+="Please select a Year\n";
            valid=false;
        }
        if(valid)
        {
            //if we have any pending ajax requests, kill them first
            this.ContextHandler.CancelPendingEvents();
            obj=document.getElementById('endeca_search_form');
            obj.submit();            
        }
        else
            alert(message);
            
    }

    this.ProcessGenericAjaxResponse=function(Success,ResponseObject)
    {
        if(!Success)
        {
            //display some kind of warning
            alert('The system was unable to contact the server. Please try again.');
            return;
        }                
        try
        {                
            //did we pass validation?
            eval("var obj="+ResponseObject.responseText);
            
            if(obj.RetVal < 0)
            {
                //gah, some kind of error php side. Lets setup the error on the form.
                alert(obj.Response);
                return;
            }            
            this.AjaxObject=obj;
            return true;            
        }
        catch(exception)
        {
            alert('A system error occured.('+exception+')');
            return;
        }
    }
    
    this.ShowQuickViewToolTip = function(bShow, id)
    {
        var div = document.getElementById(id);
        if(bShow)
            div.style.display = 'block';
        else
            div.style.display = 'none';
    }
    
    this.GenerateQuickViewData = function(id)
    {
        var ElementID  = 'boxes';
        var cnt        = 0;
        var plines     = '';
        this.id        = id;
        
        while(cnt < $('div[id|="qv"]').length)
        {
            var str = $('div[id|="qv"]')[cnt].id;
            plines = plines + str.split("qv-");
            cnt = cnt + 1;
        }
        
        var Parameters = "action=GenerateQuickViewData&plines="+plines;
        
        var objAjaxv2     = new Ajaxv2("/shared/php/ajax/endeca_search_helper.php",this,this.OnGenerateQuickViewDataResultsCallback,"POST",Parameters,this.ContextHandler);
        objAjaxv2.EventData = ElementID;
        objAjaxv2.GetPost(true);
    }
    
    this.OnGenerateQuickViewDataResultsCallback=function(Success,ResponseObject,EventData)
    {
        eval("var obj="+ResponseObject.responseText);
        try
        {
            if(obj.RetVal > 0)
            {
                var boxes = document.getElementById('boxes');
                if(boxes != null)
                {
                    //alert('boxes');
                    boxes.innerHTML = obj.Response;
                    
                    //Get the screen height and width
                    var maskHeight = $(document).height();
                    var maskWidth = $(window).width();
                 
                    //Set height and width to mask to fill up the whole screen
                    $('#mask').css({'width':maskWidth,'height':maskHeight});
                     
                    //transition effect
                    $('#mask').show();
                    $('#mask').fadeTo(0,0.7);
                    
                    var left = 0;
                    var top = 0;
                    
                    if($('#mask').offset().left > 0)
                    {
                        left = 0-$('#mask').offset().left;
                        top = 0-$('#mask').offset().top;
                        offsetx = $('#mask').offset().left+left;
                        offsety = $('#mask').offset().top+top;
                        $('#mask').css({'left':left,'top':top});
                    }

                    //Get the window height and width
                    var topH = $(window).scrollTop();
                    var winH = $(window).height();
                    var winW = $(window).width();
                    
                    //Set the popup window to center
                    $(this.id).css('top',  winH / 2 + topH + top - $(this.id).height()/2);
                    $(this.id).css('left', winW/2 + left - $(this.id).width()/2);
                     
                    //transition effect
                    $(this.id).show();
                }
            }
        }
        catch(exception)
        {
            alert('A system error occured.('+exception+')');
            return;
        }
    }
    
    /**mobile functions*/

    this.save_mmy_selection = function()
    {
        var make  = $('#search_make_id option:selected').val();
        var model = $('#search_model_id option:selected').val();
        var year  = $('#search_year option:selected').val();
        
        document.location=document.location.pathname+'?search_terms=&search_model_id='+model+'&search_year='+year+'&search_make_id='+make+'&category_id='+this.SearchCategoryID;;
    }

    this.get_models = function(make_id)
    {
        var Parameters = "action=ActionFetchModelOptions&make_id="+make_id;
        var container  = document.getElementById('category_page_form');
        var objAjaxv2  = new Ajaxv2("/mobile/ajax/category_page_helper.php",this,this.OnGetModelsCallback,"POST",Parameters,this.ContextHandler);
        
        objAjaxv2.Parameters+="&"+objAjaxv2.GetFormValues(container);        
        objAjaxv2.GetPost(true);
    }

    this.OnGetModelsCallback = function(Success,ResponseObject)
    {
        if(this.ProcessGenericAjaxResponse(Success,ResponseObject))
        {
            var model_container=document.getElementById('model_container');
            if(model_container != null)
            {
                $('#search_model_id').html("<option>Select Model</option>"+this.AjaxObject.Response);
                $("#search_model_id").selectmenu("refresh");
            }
        }
    }

    this.get_years = function(model_id)
    {
        var Parameters = "action=ActionFetchYearOptions&model_id="+model_id;
        var container  = document.getElementById('category_page_form');
        var objAjaxv2  = new Ajaxv2("/mobile/ajax/category_page_helper.php",this,this.OnGetYearsCallback,"POST",Parameters,this.ContextHandler);
        
        objAjaxv2.Parameters+="&"+objAjaxv2.GetFormValues(container);        
        objAjaxv2.GetPost(true);
    }

    this.OnGetYearsCallback = function(Success,ResponseObject)
    {
        if(this.ProcessGenericAjaxResponse(Success,ResponseObject))
        {
            var model_container=document.getElementById('year_container');
            if(model_container != null)
            {
                $('#search_year').html("<option>Select Year</option>"+this.AjaxObject.Response);
                $("#search_year").selectmenu("refresh");
            }
        }
    }
}
