﻿/*
    General Javascript Library
    License: Compunix LLC.
    Website: http://www.compunix.us/
    Creator: Adam Scholfield
    Last Modified: 11/09/2009
    Last Modified By: Adam Scholfield
*/

        
/* Shortcut Functions */
function Compunix_$(id)
{
    return document.getElementById(id);
}
function ToggleCheckBox(id)
{
    var box = document.getElementById(id);
    if(box)
    {
        if(box.checked)
            box.checked = false;
        else    
            box.checked = true;
    }
}
/* Shortcut Functions */
/* Ajax Functions */
function sendAJAXRequest(url, params, callback_function)
{ 
    xmlHttp=GetXmlHttpObject();
    if (xmlHttp==null)
    {
        alert ("Your browser does not support AJAX!");
        return;
    }
    xmlHttp.open('POST',url);
    
    xmlHttp.onreadystatechange = function() { 
        if (xmlHttp.readyState==4)
        { 
            callback_function(xmlHttp.responseText);
        }
    };
    
    xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xmlHttp.send(params);  
}

function GetXmlHttpObject()
{
    var xmlHttp1=null;
    try
    {
        // Firefox, Opera 8.0+, Safari
        xmlHttp1=new XMLHttpRequest();
    }
    catch (e)
    {
        // Internet Explorer
        try
        {
            xmlHttp1=new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e)
        {
            xmlHttp1=new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
    return xmlHttp1;
}
function AjaxCall(divid, url)
{
    sendAJAXRequest(url, '', function(response) {
            //Compunix_$(divid).outerHTML = '<div id="' + divid + '">' + response + '</div>';
            Compunix_$(divid).innerHTML = '' + response;
            Compunix_$('LoadingOverLay').className = "RestingOverLay";
            Compunix_$('LoadingImage').className = "RestingImage";
        });
}
/* Ajax Functions */
/* Key Control Functions */
function CatchEnter(e)
{ 
    var characterCode;
        if( e && e.which)
        { 
            e = e;
            e.cancel = true;
            characterCode = e.which;
        }
        if(e && window.event)
        {
            e = window.event;
            e.cancel = true;
            characterCode = e.keyCode;
        }
    return characterCode == 13;
}
/* Key Control Functions */
/* Cookie Functions */        
function createCookie(name,value,days)
{
    if (days)
    {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toGMTString();
    }
    else var expires = "";
    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 '';
}

function LoadCookie(name)
{
    var result = '';
    if(readCookie(name).length > 0)
    {
        result = readCookie(name);
    }
    return result;
}
function eraseCookie(name) 
{
    createCookie(name,"",-1);
}
/* Cookie Functions */        
    
    
    
    
    
    
    
    
/**********************************
    Custom Functions go here
    Custom Software : ISearch
    Date: October/November 2009
    Creator: Adam Scholfield
    License: Adam Scholfield, Compunix LLC.
*********************************/        
        
var FilterList = new Array();
var defaultFilter = '';
var defaultEntityID = '0';
var defaultEntityType = '';
var currentPageCount = 0;
var currentPageNumber = 0;
var currentPageSize = 0;
var currentPageSort = 'case when SalePrice is null then Price else SalePrice end';
var defaultPageSortIndex = '0';
var defaultPageSize = '1';

var currentColorFilter = '';
var currentSizeFilter = '';
var currentManufacturerFilter = '';
var currentCategoryFilter = '';
var currentGenreFilter = '';
var currentDistributorFilter = '';
var currentVectorFilter = '';
var currentSectionFilter = '';
var currentLibraryFilter = '';
var currentPriceFilter = '';
var runFilters = true;

function SetInverseEntityFilter(type)
{
    var result = '';
    result = FindInverseFilters(type + 'PickerDDL', type + 'PickerListBox', type);
    if(defaultEntityType == type)
        result += defaultEntityID;
    return result;
}
function SetEntityFilter(type)
{
    var result = '';
    result = FindFilters(type + 'PickerDDL', type + 'PickerListBox', type, true);
    if(defaultEntityType == type)
        result += defaultEntityID;
    return result;
}
function SetCategoryFilter()
{
    var result = '';
    result = FindFilters('CategoryPickerDD','CategoryPickerListBox', 'Category', true);
    if(result.length == 0)
        result += defaultEntityID;
    return result;
}
function FindInverseFilters(DropDownList, ListBox, GroupName)
{
    var result = '';
    if(Compunix_$(DropDownList))
    {
        result = Compunix_$(DropDownList).value;
    }
    else if(Compunix_$(ListBox))
    {
        var options = Compunix_$(ListBox).options;
        var selected = new Array();
        for(var index=0;index<options.length;index++)
        {
            if(!options[index].selected)
            {
                selected.push(options[index].value);
            }
        }
        while(selected.length > 0)
        {
            result += selected.pop() + ',';
        }
        if(result.length > 0)
        {
            result = result.substr(0,result.length-1);
        }
    }
    else
    {
        var values = document.getElementsByName(GroupName);
        var selected = new Array();
        for(var index = 0;index<values.length;index++)
        {
            if(!values[index].checked)
            {
                selected.push(values[index].value);
            }
        }
        while(selected.length > 0)
        {
            result += selected.pop() + ',';
        }
    }
    return result;
}
function FindFilters(DropDownList, ListBox, GroupName, InverseIfNoneSelected)
{
    var result = '';
    if(Compunix_$(DropDownList))
    {
        result = Compunix_$(DropDownList).value;
    }
    else if(Compunix_$(ListBox))
    {
        var options = Compunix_$(ListBox).options;
        var selected = new Array();
        for(var index=0;index<options.length;index++)
        {
            if(options[index].selected)
            {
                selected.push(options[index].value);
            }
        }
        while(selected.length > 0)
        {
            result += selected.pop() + ',';
        }
        if(result.length > 0)
        {
            result = result.substr(0,result.length-1);
        }
    }
    else
    {
        var values = document.getElementsByName(GroupName);
        var selected = new Array();
        for(var index = 0;index<values.length;index++)
        {
            if(values[index].checked)
            {
                selected.push(values[index].value);
            }
        }
        while(selected.length > 0)
        {
            result += selected.pop() + ',';
        }
    }
	if(result.length == 0 && InverseIfNoneSelected)
	{
		result = FindInverseFilters(DropDownList, ListBox, GroupName);
	}
    return result;
}

function LoadFilters()
{
    var filter = Compunix_$('FilterInput').value;
    if(filter = '')
    {
        filter = defaultFilter;
    }
    var results = "";
    var insert = "";
    var generalFilter = "";
    for(var index=0;index<FilterList.length;index++)
    {
        if(index != 0)
        {
            insert = " - ";
        }
        if(index < FilterList.length-1)
        {
            results += insert + "<a href='javascript:void(0)' onclick='javascript:FilterList=FilterList.slice(0," + index + "+ 1);LoadFilters();'>" + FilterList[index] + "</a>"
        }
        else
        {
            results += insert + "<span class='LastCrumb'>" + FilterList[index] + "</span>"
        }
        generalFilter += FilterList[index] + ",";
    }
    if(Compunix_$('FilterList'))
    {
        Compunix_$('FilterList').innerHTML = results;
    }
    if(filter == '')
    {
        filter = Compunix_$('FilterInput').value;
    }
    if(generalFilter.length > 0)
    {
        filter = generalFilter;
    }
    else if(filter == '')
    {
        filter = defaultFilter;
    }
    if(runFilters)
    {
        currentColorFilter = FindFilters('ColorsPickerDDL', 'ColorsPickerListBox', 'Colors', false);
        currentSizeFilter = FindFilters('SizesPickerDDL', 'SizesPickerListBox', 'Sizes', false);
        currentPriceFilter = FindFilters('PricesPickerDDL', 'PricesPickerListBox', 'Prices', false);
        currentManufacturerFilter = SetEntityFilter('Manufacturers');
        if(currentManufacturerFilter == '' && defaultEntityType == 'Manufacturer')
            currentManufacturerFilter = defaultEntityID;     
               
        currentCategoryFilter = SetCategoryFilter();
        if(currentCategoryFilter == '' && defaultEntityType == 'Category')
            currentCategoryFilter = defaultEntityID;     
            
        currentGenreFilter = SetEntityFilter('Genre');
        if(currentGenreFilter == '' && defaultEntityType == 'Genre')
            currentGenreFilter = defaultEntityID;    
             
        currentDistributorFilter = SetEntityFilter('Distributor');
        if(currentDistributorFilter == '' && defaultEntityType == 'Distributor')
            currentDistributorFilter = defaultEntityID; 
                
        currentVectorFilter = SetEntityFilter('Vector');
        if(currentVectorFilter == '' && defaultEntityType == 'Vector')
            currentVectorFilter = defaultEntityID; 
                
        currentSectionFilter = SetEntityFilter('Section');
        if(currentSectionFilter == '' && defaultEntityType == 'Section')
            currentSectionFilter = defaultEntityID;  
               
        currentLibraryFilter = SetEntityFilter('Library');
        if(currentLibraryFilter == '' && defaultEntityType == 'Library')
            currentLibraryFilter = defaultEntityID;     
    }
    else
    {
        currentColorFilter = '';
        currentSizeFilter = '';
        currentPriceFilter = '';
        currentManufacturerFilter = '';
        currentCategoryFilter = '';
        currentGenreFilter = '';
        currentDistributorFilter = '';
        currentVectorFilter = '';
        currentSectionFilter = '';
        currentLibraryFilter = '';
    }
    
    if(currentPageSize == 0)
    {
        if(Compunix_$('PageSizePicker'))
            currentPageSize = Compunix_$('PageSizePicker').value;
        else    
            currentPageSize = defaultPageSize;
    }
    
    
    var query = "?PageNumber=" + currentPageNumber + 
                "&PageSize=" + currentPageSize + 
                "&PageSort=" + currentPageSort + 
                "&ColorFilter=" + currentColorFilter + 
                "&SizeFilter=" + currentSizeFilter +
                "&PriceFilter=" + currentPriceFilter +
                "&ManufacturerFilter=" + currentManufacturerFilter +
                "&CategoryFilter=" + currentCategoryFilter +
                "&GenreFilter=" + currentGenreFilter +
                "&DistributorFilter=" + currentDistributorFilter +
                "&VectorFilter=" + currentVectorFilter +
                "&SectionFilter=" + currentSectionFilter +
                "&LibraryFilter=" + currentLibraryFilter +
                "&Filter=" + filter//;
                 //+ "&DEBUG=true";
    
    if(Compunix_$('LoadingOverLay'))
        Compunix_$('LoadingOverLay').className = "LoadingOverLay";
    if(Compunix_$('LoadingImage'))
        Compunix_$('LoadingImage').className = "LoadingImage";
    AjaxCall('Results', 'ISearch.aspx' + query);
    //alert('ISearch.aspx' + query);
}

function Search_Click()
{
    currentPageNumber = 0;
    LoadFilters();
}

function AddFilter_Click()
{
    currentPageNumber = 0;
    
    if(Compunix_$('FilterInput').value != '')
    {
        FilterList.push(Compunix_$('FilterInput').value);
    }
    Compunix_$('FilterInput').value = '';
    LoadFilters();
    Compunix_$('FilterInput').focus();
    
    if(FilterList.length == 0)
    {
        Compunix_$('FilterList').innerHTML = "No terms entered, please enter search keywords above.";
     }         
}

function LoadCookies()
{
    if(readCookie('ISearchPageSize').length > 0)
    {
        currentPageSize = readCookie('ISearchPageSize');
    }
    if(readCookie('ISearchSortBy').length > 0)
    {
        currentPageSort = readCookie('ISearchSortBy');
    }
    if(Compunix_$('PageSortPicker'))
    {
        Compunix_$('PageSortPicker').value = currentPageSort;
    }
    if(Compunix_$('PageSizePicker'))
    {
        Compunix_$('PageSizePicker').value = currentPageSize;
    }
    currentPageNumber = LoadCookie('ISearchPageNumber');
    currentColorFilter = LoadCookie('ISearchColorFilter');
    currentSizeFilter = LoadCookie('ISearchSizeFilter');
    currentManufacturerFilter = LoadCookie('ISearchManufacturerFilter');
    currentCategoryFilter = LoadCookie('ISearchCategoryFilter');
    currentGenreFilter = LoadCookie('ISearchGenreFilter');
    currentDistributorFilter = LoadCookie('ISearchDistributorFilter');
    currentVectorFilter = LoadCookie('ISearchVectorFilter');
    currentSectionFilter = LoadCookie('ISearchSectionFilter');
    currentLibraryFilter = LoadCookie('ISearchLibraryFilter');
    LoadFilters();
}

function ToggleFilterTable(tableCell)
{
    if(tableCell.innerHTML == '[+]')
    {
        tableCell.innerHTML = '[-]';
        Compunix_$('FilterTable').style.display= 'block';
    }
    else
    {
        tableCell.innerHTML = '[+]';
        if(Compunix_$('FilterInput'))
            Compunix_$('FilterInput').value = '';
        Compunix_$('FilterTable').style.display= 'none';
        Search_Click();
    }
}

function ClearFilter_Click()
{
    currentPageNumber = 0;
    FilterList = new Array();
    LoadFilters();
}
function PagingToggle(option1,option2)
{
    if(currentPageSort==option1)
        currentPageSort = option2;
    else
        currentPageSort = option1;
}

function PrevPage()
{
     currentPageNumber --;
     LoadFilters();
}

function NextPage()
{
    currentPageNumber++;
    LoadFilters();
}

function GoToPage(pageNumber)
{
    currentPageNumber = pageNumber;
    LoadFilters();
}
