﻿//var debugMode = true;
var loginInProgress = false;
var firstTime = false;
var viewModes = { minimal: 1, extended: 2 };
var currentViewMode = viewModes.minimal;
var logoutTimerId = null;
var activeLogin = null;
var TableHeight = null;
var Logins = { active: null, home: null, welcome: null };
var columnNames = { normal:
['Shape', 'Carats', 'Color', 'Clarity', 'Shade', 'DiameterAverage', 'DepthPercent', 'TablePercent', 'CutGrade', 'Polish', 'Symmetry', 'Fluorescence', 'Lab', 'RapPrice'
                   , 'CertificateNumber', 'GirdleAverage', 'Brilliance', 'InclusionPattern', 'BlackInclusion'
                   , 'TableInclusion', 'OpenTable', 'OpenCrown', 'OpenPavilion', 'Naturals', 'EyeVisibility', 'InternalGraining', 'CrownAngle', 'CrownHeight'
                   , 'PavilionAngle', 'PavilionDepth', 'Measurements', 'Culet'
                   , 'Faceted', 'Inscription', 'Item'/*, 'TotalPrice'*/],
    expanded: ['Item', 'DepthPercent', 'Shade', 'Shape', 'TablePercent', 'InternalGraining', 'Carats', 'Diameter', 'Naturals', 'Color', 'DiameterAverage', 'InclusionType',
             'Clarity', 'CrownAngle', 'TableInclusion', 'Measurements', 'CrownHeight', 'BlackInclusion', 'CutGrade', 'PavilionAngle', 'InclusionPattern',
             'Symmetry', 'PavilionDepth', 'OpenTable', 'Polish', 'StarLength', 'OpenCrown', 'Fluorescence', 'LowerHalf', 'OpenPavilion',
              'FluorColor', 'GirdleAverage', 'EyeVisibility', 'Lab', 'Faceted', 'Brilliance', 'CertificateNumber',
              'Culet', 'Remark', 'RapPrice', 'RapPercent', 'Price', 'TotalPrice']
};
var addToCartChkbox;
var jwPlayerId = 1;

$(function () {
    setClickAndBlur('username', 'Email');
    setClickAndBlur('password', 'Password');
    setFocusInAndBlur('password', 'Password');

    //    $('#gallery a').lightBox();
    //  $('.StoneInnerImage').click(showModalImage('aaa'));

    $('body').click(clearErrors);
    $('.SubmitBTN').click(login);
    $('.Logout').click(logout);
    // search default set to first page
    if (loggedIn) {
        $('.SearchBTN').click(searchFirstPage);
    } else {
        $('.SearchBTN').click(showWelcome);
    }

    $('.LoginItem  input').keypress(function (e) {
        if (e.which == 13) {
            $(this).parent().find('.SubmitBTN').click();
            //login();
        }
    });
    $('.Content').keypress(function (e) {
        if (e.which == 13) {
            if (active_dropdown != null) {
                active_dropdown.ok();
            }
            else {
                $(this).find('.SearchBTN').click();
            }
        }
    });


    $('#pages').keypress(function (e) {
        if (e.which == 13) {
            var page = $(this).val();
            if (page < 1) {
                page = 1;
                $(this).val(page);
            }
            else {
                if (page > lastPageNumber) {
                    page = lastPageNumber;
                    $('#pages').val(page);
                }
            }
            search(page);
        }
    });

    Logins.active = Logins.home = $('.BottomItems .LoginItem');
    Logins.welcome = $('div.Welcome .LoginItem');


    $('.password-clear', Logins.active).show();

    $('.password-password', Logins.active).hide();



    $('.password-clear', Logins.active).focus(function () {

        $('.password-clear', Logins.active).hide();

        $('.password-password', Logins.active).show();

        $('.password-password', Logins.active).focus();

    });
    $('.password-password', Logins.active).blur(function () {

        if ($('.password-password', Logins.active).val() == '') {

            $('.password-clear', Logins.active).show();

            $('.password-password', Logins.active).hide();

        }

    });


    var remember = $.cookie('remember');
    var checkbox = $.cookie('checkbox');
    if (remember == 'true') {
        var username = $.cookie('username');
        var password = $.cookie('password');
        // autofill the fields
        $('.username', Logins.active).val(username);
        $('.password-password', Logins.active).val(password);
        if (checkbox == 'true') {
            $('#remember').attr('checked', true);
        }

    }

    $('#myTable thead td:gt(0)').each(function (i) { $(this).click(function () { doSort(i) }); });
    $('.XLBtn').click(exportToExcel);

    //    $('#Expandtemplate div.Menu ul li a.tab').click(function () {
    //        showSearchTab(this);
    //    }
    //    );

    //searchTabs = $('#Expandtemplate div.Menu ul li a.tab');


    setAutoLogout(1200);
    setKeepAlive(10);
});

function showSearchTab(tab, invName) {
    //$('#Expandtemplate div.Menu ul li.tab:eq(' + index + ') a').addClass('Selected');
    //$('#Expandtemplate div.Menu ul li.tab:not(:eq(' + index + ')) a').removeClass('Selected');
    //$(searchTabs, 'a');
    //$(tab).attr('class' ,'tab Selected');
    $(tab).parents('ul').find('a').removeClass('Selected');
    $(tab).addClass('Selected');
    var className = $(tab).parent().attr('class');

    var activeTab = $(tab).parents('td').find('tbody').hide().end().find('tbody.' + className).show();
    //  $(tab).parents('td').find('tbody.' + className).show();

    if (!activeTab.hasClass('loaded')) {
        if (className == 'StoneImage') {
            var img = new Image();
            $(img).load(function () {
                $(this).hide();
                $(activeTab).find('div.loading').append(this);          // fade our image in to create a nice effect     
                $(this).fadeIn();
                $(activeTab).addClass('loaded');
            })        // if there was an error loading the image, react accordingly    
             .error(function () {      // notify the user that the image could not be loaded    
                 alert('image not found');
             })        // *finally*, set the src attribute of the new image to our image    
            //.attr('src', '/Content/images/pictures/' + invName + '.JPG')
             .attr('alt', 'httpHandler')
             .attr('src', 'getImage.ashx?id=' + invName)
             .attr('width', '420')
             .attr('Height', '420')
             .mouseover(function () { TJPzoom(this) });

            var uurl = 'getImage.ashx?id=' + invName;
            var url1 = "#";
            var link2 = "../Content/images/stoneImage1.png"
            $('.StoneInnerImage').html("<a onClick=\"showModalImage('" + uurl + "' );return false;\" href=" + url1 + "><img src=" + link2 + " /></a>");


        }
        else if (className == 'VideoClip') {
            $(activeTab).find('div.loading').jwPlayer({
                //debug: 'console',
                id: 'jwPlayer' + jwPlayerId,
                //swf: 'jwplayer/player.swf',
                flashplayer: 'player.swf',
                provider: 'video',
                //file: '/Content/videos/016_L_SI2_1.05ct.flv', 
                //file: '/Content/videos/' + invName + '.flv', 
                file: 'GetVideoClip.ashx?id=' + invName,
                autostart: (true),
                repeat: 'always',
                stretching:'none',
                //controlbar:'over',

               // height: 440,
               // width: 520

                height: 640,
                width: 720
            });
            $(activeTab).addClass('loaded');
            jwPlayerId++;

//            var uurl = 'GetVideoClip.ashx?id=' + invName;
//            var url1 = "#";
//            var link2 = "../Content/images/movie_sm.jpg"
//            $('.StoneInnerVideo').html("<a onClick=\"showModalVideo('" + uurl + "');return false;\" href=" + url1 + "><img src=" + link2 + " /></a>");
           
        }
    }
}

function setKeepAlive(seconds) {
    if (!loggedIn) return;

    setInterval(sendKeepAliveMessage, 1000 * seconds);
}

function sendKeepAliveMessage() {
    $.ajax({
        url: baseHref + 'KeepAlive/',
        type: "POST",
        error: function () {
            alert('A more recent session exists, you are being logged off');
            window.location = baseHref;
        }
    });
}

function setLogoutTimeout(seconds) {

    if (!loggedIn) return;

    logoutTimerId = setTimeout(function () { logout(null, true); }, seconds * 1000);
}

function restartLogoutTimeout(seconds) {
    // clear timer
    clearInterval(logoutTimerId);

    logoutTimerId = setTimeout(function () { logout(null, true); }, seconds * 1000);

}

function setAutoLogout(seconds) {
    setLogoutTimeout(seconds);
    $('body').click(function () {
        if (!loggedIn) return;
        restartLogoutTimeout(seconds);
    });
}
/*
name: reserved for future use for cases such as color and clarity where alphabetic order is not the value order.
desc: sort in descending order
*/

function getSortMethod(name, desc) {
    var func =
    function (a, b) {
        if (a.data < b.data) return -1;

        if (a.data > b.data) return 1;

        return 0;
    };

    return (desc) ? function (a, b) { return func(a, b) * -1; } : func;
}

/* 
perform a local sort (in page)
*/
function doSort(index) {
    var tbody = $('#tbResults');

    var sortBy = columnNames.normal[index];
    var sortData = $.map(searchResults, function (n, i) {
        return { index: i, data: n[sortBy] };
    });

    var sortMethod = getSortMethod(sortBy);

    sortData.sort(sortMethod);

    var rows = tbody.find('>tr').get();
    var rows_indices = [];

    for (i = 0; i < rows.length; i += 2) {
        rows_indices[rows[i].i] = i;
    }

    for (i = 0; i < sortData.length; i++) {
        var row_index = rows_indices[sortData[i].index];

        var row = rows[row_index];
        var expanded_row = rows[row_index + 1];

        var addClass = i % 2 == 1 ? 'White' : 'Blue';
        var removeClass = i % 2 == 1 ? 'Blue' : 'White';

        $(row).addClass(addClass).removeClass(removeClass);
        $(expanded_row).addClass(addClass).removeClass(removeClass);

        tbody.append(row);
        tbody.append(expanded_row);
    }
}



function setClickAndBlur(className, value) {
    $('.' + className).click(
    function () {
        if (active_dropdown != null) {
            active_dropdown.clean();
            active_dropdown.hide();
        }
        if ($(this).val() == value) $(this).val('');
    }).blur(function () {
        if ($(this).val() == '') $(this).val(value);
    }).val(value);

}
function setFocusInAndBlur(className, value) {
    $('.' + className).focusin(
    function () {
        if (active_dropdown != null) {
            active_dropdown.clean();
            active_dropdown.hide();
        }
        if ($(this).val() == value) $(this).val('');
    }).blur(function () {
        if ($(this).val() == '') $(this).val(value);
    }).val(value);

}


function showError(e, msg, cssClass) {
    e.append('<div class="Error ' + cssClass + '"><p>' + msg + '</p><div class="ErrorLeft"></div></div>');
}

function clearErrors() {
  
            $('.Error').remove();
            $('.ErrorLeft').remove();
      
}

function customShowErrors(x, errorList) {

    clearErrors();
    if (errorList.length > 0) {
        var message = errorList[0].message;
        showError($('.LoginItem'), message, 'Login');
    }
}

function login(event) {

    if (loginInProgress) return false;

    loginInProgress = true;

    clearErrors();
    //var username,password;

    //if (activeLogin != null) {
    var username = $('.username', Logins.active).val();
    //    var    password = $('.password', Logins.active).val();
    var password = $('.password-password', Logins.active).val();
    //}
    //    var p = $(this).parent();

    //    var id = $(this).attr('id');

    //    username = $('.username', p).val();
    //    password = $('.password', p).val();

    $.ajax({ url: baseHref + 'Login/Authenticate', type: "POST",

        data: "username=" + username + "&password=" + password,
        success: function (result) {

            if (result != 'ok') {
                if (result == 'invalid') {
                    showError(Logins.active, 'Invalid Username or Password', 'Login');
                }
                else {
                    showError(Logins.active, 'Unable to login please try again.', 'Login');
                }
            } else {

                if ($('#remember').attr('checked')) {
                    // set cookies to expire in 14 days
                    $.cookie('username', username, { expires: 14 });
                    $.cookie('password', password, { expires: 14 });
                    $.cookie('remember', true, { expires: 14 });
                    $.cookie('checkbox', true, { expires: 14 });

                } else {
                    // reset cookies
                    $.cookie('username', null);
                    $.cookie('password', null);
                    $.cookie('remember', null);
                    $.cookie('checkbox', null);
                }


                window.location.href = baseHref + 'Search';
                //firstTime = true;

            }

            loginInProgress = false;
        },
        error: function (req, status, error) {
            alert("Error: " + error);
            loginInProgress = false;
        }
    });

    // TODO: set timeout to clear loginInProgress flag

    return false;
}

function logout(e, timeout) {

    if (typeof (timeout) != 'undefined') {
        // handle timeout.
    }

    $.ajax({ url: baseHref + 'Login/Logout', type: "POST",

        success: function (result) {
            if (result != 'ok') {
                alert("Logout failed.");
            } else {
                window.location.href = baseHref;
            }
        },
        error: function (req, status, error) {
            alert("Error: " + error);
        }
    });
}

var searchParameters = {};
var currentPageNumber = -1;
var lastPageNumber = -1;

function searchFirstPage() {
    hideDetails();
    hideAdvance();
    if (active_dropdown != null) {
        active_dropdown.clean();
        active_dropdown.hide();
    }
    selected_inventories = []; // new search clears selected inventories
    search(1);
    $('#pages').val(1);
}

function prevPage() {
    $(this).attr('disabled', 'disabled');
    if (currentPageNumber > 1) {
        search(parseInt(currentPageNumber) - 1);
        $('#pages').val(parseInt(currentPageNumber) - 1);
    }
    $(this).removeAttr('disabled');
    return false;
}

function nextPage() {
    $(this).attr('disabled', 'disabled');
    if (currentPageNumber < lastPageNumber) {
        search(parseInt(currentPageNumber) + 1);
        $('#pages').val(parseInt(currentPageNumber) + 1);
    }
    $(this).removeAttr('disabled');
    return false;
}

var selected_inventories = [];

function handleSelectedInventories(func) {
    if (typeof (addToCartChkbox) != 'undefined' && addToCartChkbox.length > 0 && searchResults.length > 0) {
        for (var i = 0; i < addToCartChkbox.length; i++) {
            var inv = searchResults[i];
            var inv_index = indexOf(selected_inventories, 'InventoryID', inv);
            func(i, inv, inv_index);
        }
    }

}

function saveSelectedInventoriesState(i, inv, inv_index) {
    if (addToCartChkbox[i].is(':checked')) {
        // add to selected
        if (inv_index == -1) {
            selected_inventories[selected_inventories.length] = inv;
        }
    } else {
        // remove from selected
        if (inv_index != -1) {
            selected_inventories.splice(inv_index, 1);
        }
    }
}

function loadSelectedInventoriesState(i, inv, inv_index) {
    if (inv_index != -1) {
        // check and remove from selected array
        addToCartChkbox[i].attr('checked', true);
        selected_inventories.splice(inv_index, 1);
    }
}

function downloadFile(filename) {
    var iframe;
    iframe = document.getElementById("hiddenDownloader");
    if (iframe === null) {
        iframe = document.createElement('iframe');
        iframe.id = "hiddenDownloader";
        iframe.style.visibility = 'hidden';
        document.body.appendChild(iframe);
    }
    iframe.src = baseHref + 'Search/DownloadFile/?filename=' + filename;

}

var lastSearchFilter = null;
var isExportingToExcel = false;
function exportToExcel() {
    // prevent mutliple export actions
    if (isExportingToExcel) return;
    isExportingToExcel = true;

    handleSelectedInventories(saveSelectedInventoriesState);

    var inventoryIDs = $.map(selected_inventories, function (n) { return n.InventoryID; });
    var data = $.extend({ InventoryIDs: inventoryIDs }, lastSearchFilter);

    var json = JSON.stringify(data);
    if (inventoryIDs.length != 0) {
        $.ajax({ url: baseHref + 'Search/ExportToExcel/', type: "POST",

            // dataType: "json",
            contentType: 'application/json; charset=utf-8',
            processData: false,
            data: json,
            success: function (result) {
                downloadFile(result);
                isExportingToExcel = false;
                // window.status = 'success';
            },
            error: function (req, status, error) {
                isExportingToExcel = false;
                //window.status = 'Error: ' + error;
            }

        });
    }
    else {
        //alert('Please check items to export');
        clearErrors();
        showError($(this).parent(), 'Please check items to export', 'Export');
        isExportingToExcel = false;
        return false;
    }


}

function search(pageNumber) {

    var data = $.extend(getSearchParameters(), { PageNumber: pageNumber });

    var json = JSON.stringify(data);
    lastSearchFilter = data;
    // lock screen
    showPreloader();

    handleSelectedInventories(saveSelectedInventoriesState);

    $.ajax({ url: baseHref + 'Search/Search/', type: "POST",

        dataType: "json",
        contentType: 'application/json; charset=utf-8',
        processData: false,
        data: json,
        success: function (result) {

            searchResults = handleSearchResults(result, pageNumber);
            handleSelectedInventories(loadSelectedInventoriesState);
            currentPageNumber = pageNumber;
            lastPageNumber = result.PageCount;
            //unlock screen
            $("#myTable").tablesorter();
            hidePreloader();
            TableHeight = $('#results').height();
        },
        error: function (req, status, error) {
            //unlock screen
            hidePreloader();
            alert("Error: " + error);
        }

    });
}

function indexOf(arr, property_name, obj) {
    if (arr.length == 0) return -1;
    var val = obj[property_name];

    for (i = 0; i < arr.length; i++) {
        if (arr[i][property_name] == val) break;
    }

    if (i < arr.length) return i;

    return -1;
}

function showZeroResults() {

}

var searchResults = {};
var addToCartButtons = {};

function showMinimal() {
    currentViewMode = viewModes.minimal;
    $('.WrapBigTable').find('td.extended').hide().end().addClass('MinimalView');
    //$('.SearchResultsBottom').removeClass('ExtendedView');
    $('.SearchResultsTop').find('span.Advanced').removeClass('Selected');
    $('.SearchResultsTop').find('span.Basic').addClass('Selected');
    return false;
}

function showExtended() {
    currentViewMode = viewModes.extended;
    $('.WrapBigTable').find('td.extended').show().end().removeClass('MinimalView');
    //$('.SearchResultsBottom').addClass('ExtendedView');
    $('.SearchResultsTop').find('span.Advanced').addClass('Selected');
    $('.SearchResultsTop').find('span.Basic').removeClass('Selected');

    //    var action = 'Extend';
    //    $.ajax({ url: baseHref + 'Search/Extend', type: "POST",
    //        data: "Action=" + action 
    //    });
    return false;
}



var newwindow;
function poptastic(url) {
    newwindow = window.open(url, 'name', 'height=400,width=200');
    if (window.focus) { newwindow.focus() }
}

function showModalImage(url) {


    $('#modalImage').modal({ onClose: function (dialog) { $.modal.close(); } });
    var img = new Image();
    $(img).load(function () {
        $(this).hide();
        $('#modalImage').append(this);          // fade our image in to create a nice effect     
        $(this).fadeIn();

    })        // if there was an error loading the image, react accordingly    
             .error(function () {      // notify the user that the image could not be loaded    
                 alert('image not found');
             })        // *finally*, set the src attribute of the new image to our image    
    //.attr('src', '/Content/images/pictures/C10000023835.JPG')
             .attr('src', url)
    //.mouseover(function () { TJPzoom(this) });



}

function showModalVideo(url) {
    $('#modalVideo').modal({ onClose: function (dialog) { $.modal.close(); } });
   
    $('#modalVideo').jwPlayer({
        id: 'jwPlayer' + jwPlayerId,
        //swf: 'jwplayer/player.swf',
        flashplayer: 'player.swf',
        provider: 'video',
        file: url,
        autostart: (true),
        repeat: 'always',
        height: 540,
        width: 620
    });
   
    $('#modalVideo').addClass('loaded');
    
    jwPlayerId++;
}

function handleSearchResults(results, pageNumber) {

    function templateContainer(container, template) {
        this.template = template;
        this.container = container;
    }

    // empty containers
    //$('#addToCarts tr:not(:first-child)').empty(); //delete
    // $('#totals tr:not(:first-child)').empty(); //delete
    $('#tbResults').empty();

    if (results.Total == 0) {
        $('#hideWhenNoResults').addClass('hidden');
        $('.NoResults').removeClass('hidden');
        $('.RightBtns').addClass('hidden');
        $('.Tables').addClass('hidden');
        $('#results').removeClass('hidden');
        return false;
    }
    else {
        $('.NoResults').addClass('hidden');
    }

    $('#hideWhenNoResults').removeClass('hidden');
    $('.RightBtns').removeClass('hidden');
    $('.Tables').removeClass('hidden');


    var tExpand = $('#Expandtemplate tr:eq(0)');

    var tc = new templateContainer($('#tbResults'), $('#trtemplate tr'));
    //    var tw = new templateContainer($('#Expandtemplate tr'));

    // Todo: only on first time
    $('div.View').find('.View1').click(showExtended).end().find('.View2').click(showMinimal).end();




    searchButtons = {};
    var names = ['Shape', 'Carats', 'Color', 'Clarity', 'Shade', 'DiameterAverage', 'DepthPercent', 'TablePercent', 'CutGrade', 'Polish', 'Symmetry', 'Fluorescence', 'Lab', 'RapPercent'
                   , 'CertificateNumber', 'GirdleAverage', 'Brilliance', 'InclusionPattern', 'BlackInclusion'
                   , 'TableInclusion', 'OpenTable', 'OpenCrown', 'OpenPavilion', 'Naturals', 'EyeVisibility', 'InternalGraining', 'CrownAngle', 'CrownHeight'
                   , 'PavilionAngle', 'PavilionDepth', 'Measurements', 'Culet'
                   , 'Faceted', 'Inscription', 'Item'/*, 'TotalPrice'*/];
    var expandedNames = ['Item', 'DepthPercent', 'Shade', 'Shape', 'TablePercent', 'InternalGraining', 'Carats', 'Diameter', 'Naturals', 'Color', 'DiameterAverage', 'InclusionType',
                        'Clarity', 'CrownAngle', 'TableInclusion', 'Measurements', 'CrownHeight', 'BlackInclusion', 'CutGrade', 'PavilionAngle', 'InclusionPattern',
                        'Symmetry', 'PavilionDepth', 'OpenTable', 'Polish', 'StarLength', 'OpenCrown', 'Fluorescence', 'LowerHalf', 'OpenPavilion',
                        'FluorColor', 'GirdleAverage', 'EyeVisibility', 'Lab', 'Faceted', 'Brilliance', 'CertificateNumber',
                        'Culet', 'Remark', 'RapPrice', 'RapPercent', 'Price', 'TotalPrice'];
    addToCartChkbox = [];

    $.each(results.Inventories, function (i, inv) {
        // insert each inventory data into row

        var row = tc.template.clone(true).attr('i', i).addClass(i % 2 == 1 ? 'White' : 'Blue');
        var expand_row = tExpand.clone(true).attr('i', i).addClass(i % 2 == 1 ? 'White Open' : 'Blue Open').hide();
        //var expand_row = tExpand.clone(true).attr('i', i).addClass(i % 2 == 1 ? 'White Open' : 'Blue Open');

        addToCartButtons[inv.InventoryID] = $(row).find('.AddToCartBtn');
        addToCartChkbox[i] = $(row).find(':checkbox');

        mybasket.changeStatus(inv.Status, addToCartButtons[inv.InventoryID], inv.NewStone);

        // main results
        var cells = $('td', row);



        //link for the picture in table
        var i = 1;
        //        var link = "../Content/images/pictures/";
        //        var param1 = inv['Item'] + ".jpg";

        //        var uurl = link + param1;
        var uurl = 'getImage.ashx?id=' + inv['InventoryID'];
        var url1 = "#";
        var link2 = "../Content/images/stoneImage2.png"

        //                    cell.html('<a  rel="lightbox" href= ' + url + '>' + inv[name] + '</a>');
        // cell.html("<a onClick=\"openpopup('" + uurl + "' );return false;\" href=" + url1 + ">" + inv[name] + "</a>");
        if (inv['Image'] == 1) {
            $(cells[i]).html("<a onClick=\"showModalImage('" + uurl + "' );return false;\" href=" + url1 + "><img src=" + link2 + " /></a>");
        }
        else {
            $(cells[i]).html("<a href=" + url1 + "><img src=" + link2 + " /></a>");
        }
        // body
        for (j = 2; j < cells.length - 2; j++) {
            var name = names[j - 2];
            var cell = $(cells[j]);


            if (name == 'Lab') {
                if (inv[name] == 'GIA') {

                    var link = "http://www2.gia.edu/reportcheck/index.cfm?fuseaction=home.showReportVerification";
                    var param1 = "reportno=" + inv['CertificateNumber'];
                    var param2 = "weight=" + inv['Carats'];

                    var url = link + '&' + param1 + '&' + param2;
                    var id = inv['InventoryID'];
                    var url1 = "#";
                    var _2args = id + ',' + url;

                    cell.html("<a target=\"_blank\" onClick=\"OpenGiaReport('" + id + "','" + url + "');return false;\" href=" + url1 + ">" + inv[name] + "</a>");
                }
                else {
                    cell.html(inv[name]);
                }
            }
//            else if ((name == 'RapPercent') || (name == 'TablePercent') || (name == 'DepthPercent')) {

//                cell.html(inv[name]+'%');
//                
//            }
            else {
                cell.html(inv[name]);
            }

            var namedesc = inv[name + 'Desc'];
            if (namedesc == undefined) {
                cell.attr('title', [name] + ':' + inv[name]);
            }
            else {
                cell.attr('title', [name] + ':' + namedesc);
            }
        }
        // total
        $(cells[j + 1]).html(inv.Price).formatCurrency();

        /************expanded results****************/
        // expanded results
        var expandedcells = $('.AlignCenter', expand_row);

        var tabs = $('a.tab', expand_row);

        /*$('#Expandtemplate div.Menu ul li a.tab').click(function () {
        showSearchTab(this);
        }
        );

    
        */
        // show image and clip tab only if available

        if (inv['Image'] == 1) {
            // $('li.StoneImage').show();
            expand_row.find('li.StoneImage').show();
        }
        else {
            //$('li.StoneImage').hide();
            expand_row.find('li.StoneImage').hide();
        }

        if (inv['Clip'] == 1) {
            //$('li.VideoClip').show();
            expand_row.find('li.VideoClip').show();
        }
        else {
            // $('li.VideoClip').hide();
            expand_row.find('li.VideoClip').hide();
        }

        $('a.tab', expand_row).click(function () {
            showSearchTab(this, inv['InventoryID']);
        });
        // body
        for (i = 1; i < expandedcells.length; i++) {
            var expandedname = expandedNames[i - 1];

            //this is for the totalprice in the expand.
            if (i == (expandedcells.length - 1)) {
                var expandedcell = $(expandedcells[i]);
            }
            else {
                var expandedcell = $(expandedcells[i - 1]);
            }

            var expandednamedesc = inv[expandedname + 'Desc'];
            if (expandednamedesc == undefined) {
                if ((expandedname == 'RapPrice') || (expandedname == 'Price') || (expandedname == 'TotalPrice')) {

                    expandedcell.html(inv[expandedname]).formatCurrency();
                }
                else if ((expandedname == 'RapPercent') || (expandedname == 'TablePercent') || (expandedname == 'DepthPercent')) {

                    //expandedcell.html(inv[expandedname]).FormatPercent();
                    expandedcell.html(inv[expandedname] + '%');
                }
                else {
                    expandedcell.html(inv[expandedname]);
                }
            }
            else {
                expandedcell.html(expandednamedesc);
            }

        }
        /******************************************/


        tc.container.append(row);
        tc.container.append(expand_row);
    });

    $('#results').removeClass('hidden');

    handlePagingDisplay(results, pageNumber);

    if (currentViewMode == viewModes.minimal) {
        //showExtended();
        showMinimal();
    }
    else {
        showExtended();
    }
    return results.Inventories;
}

var IsOpenGia = false;
function OpenGiaReport(inv, url) {

    if (IsOpenGia) return;
    IsOpenGia = true;

    var action = 'GIA';

    $.ajax({ url: baseHref + 'Search/GIA', type: "POST",

        data: "Action=" + action + "&InventoryId=" + inv
    });

    mywindow = window.open(url, "", "location=1,status=1,scrollbars=1,  width=600,height=600 ,resizable=yes");
    IsOpenGia = false;
}
function openpopup(url) {

    mywindow = window.open(url, "", "location=1,status=1,scrollbars=1,  width=600,height=600");

    mywindow.moveTo(320, 200);

}

function handlePagingDisplay(results, pageNumber) {
    var first = (pageNumber - 1) * 12 + 1;
    var last = first + results.Inventories.length - 1;
    var paging = first + '-' + last;
    var total = results.Total;
    $('.Paging').find('#records').text(paging).end().find('#total').text(results.Total).end();
}

function getSearchParameters(pageNumber) {

    $.each(controls.MinMax, function (i, minmax) {
        $.extend(searchParameters, minmax.getSelected());
    });

    handleWeightParameters();
    handlePriceParameters();
    handleGirdleParameters();

    return searchParameters;
}

function handleGirdleParameters() {
    //    delete searchParameters.GirdleAvgFrom;
    //    delete searchParameters.GirdleAvgTo;


    if (searchParameters.GirdleAvg) {
        var g = searchParameters.GirdleAvg;

        if (g.Avg) {
            searchParameters.GirdleAvgFrom = g.Avg.from;
            searchParameters.GirdleAvgTo = g.Avg.to;
        }

        delete searchParameters.GirdleAvg;
    }

}


function handlePriceParameters() {
    //    delete searchParameters.PricePerCaratFrom;
    //    delete searchParameters.PricePerCaratTo;
    //    delete searchParameters.TotalPriceFrom;
    //    delete searchParameters.TotalPriceTo;

    // handle weight
    if (searchParameters.Price) {
        var p = searchParameters.Price;
        // carats:
        if (p.PerCarat) {
            searchParameters.PricePerCaratFrom = p.PerCarat.from;
            searchParameters.PricePerCaratTo = p.PerCarat.to;
        }
        else {
            if (p.Rap) {
                searchParameters.RapFrom = p.Rap.from;
                searchParameters.RapTo = p.Rap.to;
            }
            else {
                searchParameters.TotalPriceFrom = p.Total.from;
                searchParameters.TotalPriceTo = p.Total.to;
            }
        }

        delete searchParameters.Price;
    }

}
function handleWeightParameters() {
    //    delete searchParameters.CaratsFrom;
    //    delete searchParameters.CaratsTo;
    //    delete searchParameters.WeightFrom;
    //    delete searchParameters.WeightTo;

    // handle weight
    if (searchParameters.Weight) {
        var w = searchParameters.Weight;
        // carats:
        if (w.carats) {
            searchParameters.CaratsFrom = $.map(w.carats, function (n) {
                return n.from;
            });
            searchParameters.CaratsTo = $.map(w.carats, function (n) {
                return n.to;
            });
        } else {
            searchParameters.WeightFrom = w.weight.from;
            searchParameters.WeightTo = w.weight.to;
        }

        delete searchParameters.Weight;
    }
}

// tabs

var tabs = { 'home': 0, 'about': 1, 'contact':2, 'pricing':3, 'terms':4 };
tabs.length = 5;

function setActiveTab(tabIndex) {

    $('.Header li:nth-child(' + (tabs.length - tabIndex) + ')').addClass('Active');
   // $('.Footer li:nth-child(' + (tabIndex + 1) + ')').addClass('Active');


}

function showPreloader() {
    $('div.preloader').modal();
}

function hidePreloader() {
    $.modal.close();
}

function showWelcome() {
    clearErrors();
    if (active_dropdown != null) {
        active_dropdown.clean();
        active_dropdown.hide();
    }
    $('div.Welcome').modal({ onClose: function (dialog) { $.modal.close(); Logins.active = Logins.home; } });
    Logins.active = Logins.welcome;

    $('.password-clear', Logins.active).show();

    $('.password-password', Logins.active).hide();



    $('.password-clear', Logins.active).focus(function () {

        $('.password-clear', Logins.active).hide();

        $('.password-password', Logins.active).show();

        $('.password-password', Logins.active).focus();

    });
    $('.password-password', Logins.active).blur(function () {

        if ($('.password-password', Logins.active).val() == '') {

            $('.password-clear', Logins.active).show();

            $('.password-password', Logins.active).hide();

        }

    });

}

function addToCart() {
    $('div.MyBasketDropDown').show();
    var index = $(this).parents('tr').attr('i');
    if (index == undefined) {
        for (i = 0; i < addToCartChkbox.length; i++) {
            var cb = addToCartChkbox[i];
            if (cb.is(':checked')) {
                selected_inv = [searchResults[i]];
                mybasket.add(selected_inv, cb.parents('tr').find('.AddToCartBtn'));
                cb.attr({ disabled: true, checked: false });
            }
        }
        // add also inventories from other pages
        for (i = 0; i < selected_inventories.length; i++) {
            mybasket.add([selected_inventories[i]], null);
        }
        selected_inventories = [];
    }
    else {
        var selected_inv = [searchResults[index]];
        mybasket.add(selected_inv, this);
    }

    $(this).parents("tr").find(":checkbox").attr("disabled", "true");
    $(this).parents("tr").find(":checkbox").attr("checked", false);

    return false;
    //    $('#addToCarts :checked').attr("disabled", "true");
}

function showBasket() {

    $('.MyBasketDropDown').removeAttr('style');

    //    var $div = $('.MyBasketDropDown')
    //    $div.click(function (event) { event.stopPropagation; });

    //    $('body').click(function () {
    //        $('.MyBasketDropDown').hide();
    //        // todo: remove event binding
    //    });

    //    event.stopPropagation();


    return false;
}

function hideBasket() {
    $('.MyBasketDropDown').hide();
    return false;
}

var lastError = {};

function basket(maxVisible) {
    var inventories = [];
    var maxVisible = maxVisible;
    var index = 0;
    var $obj = this;

    this.changeStatus = function (status, btn, newstone) {
        switch (status) {
            case 'M':
                switch (newstone) {
                    case '1':
                        btn.hide().after('<div class="NewIcon"></div>').after('<div class="Added"></div>').next('.Busy').remove();
                        break;
                    case '0':
                        btn.hide().after('<div class="Added"></div>').next('.Busy').remove();
                        break;
                }
                // btn.hide().after('<div class="Added"></div>').next('.Busy').remove();
                btn.parents("tr").find(":checkbox").attr('checked', false);
                btn.parents("tr").find(":checkbox").attr("disabled", "true");
                break;
            case 'F':
                switch (newstone) {
                    case '1':
                        btn.show().after('<div class="NewIcon"></div>').next('.Added,.Busy').remove();
                        break;
                    case '0':
                        btn.show().next('.Added,.Busy').remove();
                        break;
                }
                // btn.show().next('.Added,.Busy').remove();
                btn.parents("tr").find(":checkbox").attr('checked', false);
                btn.parents("tr").find(":checkbox").removeAttr('disabled');
                break;
            case 'B':
                switch (newstone) {
                    case '1':
                        btn.hide().after('<div class="NewIcon"></div>').after('<div class="Busy"></div>').next('.Added').remove();
                        break;
                    case '0':
                        btn.hide().after('<div class="Busy"></div>').next('.Added').remove();
                        break;
                }
                // btn.hide().after('<div class="Busy"></div>').next('.Added').remove();
                btn.parents("tr").find(":checkbox").attr('checked', false);
                btn.parents("tr").find(":checkbox").attr("disabled", "true");
                break;
        }
        //        switch (newstone) {
        //            case '1':
        //                btn.show().after('<div class="NewIcon"></div>');
        //                break;

        //        }
    }

    this.add = function (selected_inventories, btn) {
        $('.CheckoutBtn').show();
        $('.CheckoutBtnDisable').hide();
        while (index > 0) { this.scrollUp(); }
        var inventoryIDs = $.map(selected_inventories, function (n) { return n.InventoryID; });
        var json = JSON.stringify(inventoryIDs);
        $.ajax({ url: baseHref + 'Basket/Add/', type: "POST",

            dataType: "json",
            contentType: 'application/json; charset=utf-8',
            processData: false,
            data: json,
            success: function (result) {
                if (result.busy) {
                    $(btn).css('display', 'none').after('<div class="Busy"></div>');
                    alert(result.busy);
                } else {
                    if (result.internalError) {
                        alert(result.internalError);
                        lastError = result;
                    } else {
                        handleAddUI(selected_inventories, result.inventoryID, btn);
                    }
                }
            },
            error: function (req, status, error) {
                alert("Error: " + error);
            }

        });
    }

    this.remove = function (inventoryID, btn, source) {
        while (index > 0) { this.scrollUp(); }
        var json = JSON.stringify(inventoryID);
        $.ajax({ url: baseHref + 'Basket/Remove/', type: "POST",

            dataType: "json",
            contentType: 'application/json; charset=utf-8',
            processData: false,
            data: json,
            success: function (result) {
                if (result.internalError) {

                    alert(result.internalError);
                    lastError = result;
                } else {
                    if (typeof (source) == 'undefined') {
                        handleRemoveUI(result.inventoryID, btn);
                    }
                }
            },
            error: function (req, status, error) {
                alert("Error: " + error);
            }

        });
    }

    function handleRemoveUI(removed_inventories) {
        if (inventories.length == 1) {
            $('.CheckoutBtn').hide();
            $('.CheckoutBtnDisable').show();
        }
        $.each(removed_inventories, function (i, inv) {
            $(addToCartButtons[inv]).css('display', '').next('.Added').remove();
            $(addToCartButtons[inv]).parents("tr").find(":checkbox").attr('checked', false);
            $(addToCartButtons[inv]).parents("tr").find(":checkbox").removeAttr('disabled');
            $(".MyBasketDropDownMiddle div.Item[inv='" + inv + "']").remove();


            //            inventories.splice(inventories[inv], 1);
            //            delete inventories[inv];

            // remove from CartContetns
            for (var i = 0; i < inventories.length; i++) {
                if (inventories[i].InventoryID == inv) {
                    inventories.splice(i, 1);
                    break;
                }
            }

        });

        // make one visible instead of the one removed
        var divs = $(".MyBasketDropDownMiddle div.Item[inv]");
        var first = 0;
        while (first < divs.length && $(divs[first]).hasClass('Hidden')) { first++; }
        var last = first;
        while (last < divs.length && !$(divs[last]).hasClass('Hidden')) { last++; }

        if (last < divs.length) {
            $(divs[last]).removeClass('Hidden');
        } else {
            if (first > 0) {
                $(divs[first - 1]).removeClass('Hidden');
            }
        }


        updateAlternateStyle();
        updateTotal();
    }

    function updateAlternateStyle() {
        $('.MyBasketDropDownMiddle div.Item[inv]').each(function (i, n) {
            var $n = $(n);
            //            if (i == 0 || $n.hasClass('Bottom'))
            //                return;
            if (i % 2 == 1) {
                $n.removeClass('Blue');
            } else {
                $n.addClass('Blue');
            }
        });
    }

    function handleAddUI(selected_inventories, added_inventories, btn) {
        $.each(selected_inventories, function (i, n) {
            inventories[inventories.length] = n;
            inventories[n.Item] = inventories.length - 1;
            var item = $('#cart_template div.Item').clone();
            var rap = inventories[inventories.length - 1].RapPrice;
            if (rap == '') {
                $(item)
                .attr('inv', n.InventoryID)
                .find('.Close').click(function () { $obj.remove([n.InventoryID]); return false; }).end()
                .find('.DiamondPrice').html('$' + n.TotalPrice).formatCurrency().end()
                .find('.DiamondName strong').html(n.Shape + '&nbsp;' + n.Carats + '&nbsp;' + n.Color + '&nbsp;' + n.Clarity).end()
                .find('.DiamondProperties').find('.left').html(n.Price).formatCurrency().end().find('.right').html('&nbsp;' + n.Item + '&nbsp;').end()
                //.find('.Close').click(function () { $obj.remove([n.InventoryID]); return false; }).end()
                .addClass(inventories.length % 2 == 1 ? '' : 'Blue');
            }
            else {
                $(item)
                .attr('inv', n.InventoryID)
                .find('.Close').click(function () { $obj.remove([n.InventoryID]); return false; }).end()
                .find('.DiamondPrice').html('$' + n.TotalPrice).formatCurrency().end()
                .find('.DiamondName strong').html(n.Shape + '&nbsp;' + n.Carats + '&nbsp;' + n.Color + '&nbsp;' + n.Clarity).end()
                .find('.DiamondProperties').find('.left').html(n.Price).formatCurrency().end().find('.middle').html('&nbsp;' + n.RapPercent +'%').end().find('.right').html('&nbsp;' + n.Item + '&nbsp;').end()
                //.find('.Close').click(function () { $obj.remove([n.InventoryID]); return false; }).end()
                .addClass(inventories.length % 2 == 1 ? '' : 'Blue');
            }

            if (inventories.length > maxVisible) {
                $($('.MyBasketDropDownMiddle div.Item')[maxVisible]).addClass('Hidden');
            }

            $('#cart_template').after(item);
        });

        updateAlternateStyle();
        updateTotal();

        if (btn != null) {
            $(btn).css('display', 'none').after('<div class="Added"></div>');
        }

    }




    this.scrollUp = function () {
        if (index > 0) {
            var divs = $('.MyBasketDropDownMiddle div.Item');
            var top = divs[index];
            var bottom = divs[index + maxVisible];
            $(bottom).addClass('Hidden');
            $(top).removeClass('Hidden');
            index--;
        }
        return false;
    }

    this.scrollDown = function () {
        if (index < inventories.length - maxVisible) {
            var divs = $('.MyBasketDropDownMiddle div.Item');
            var top = divs[index + 1];
            var bottom = divs[index + maxVisible + 1];
            $(top).addClass('Hidden');
            $(bottom).removeClass('Hidden');
            index++;
        }
        return false;
    }

    function updateTotal() {
        var total = 0;
        var totalCarats = 0;

        $.each(inventories, function (i, inv) {
            total += Number(inv.TotalPrice);
            totalCarats += Number(inv.Carats);
        });

        // $('.MyBasketDropDownMiddle .TotalPrice em').html('$' + total.toFixed(2));
        $('.MyBasketDropDownMiddle .TotalPrice em').html(total).formatCurrency();
        //        $('.MyBasketDropDownMiddle .TotalPrice em').formatCurrency();
        $('.MyBasketDropDownMiddle .TotalCarats em').html(totalCarats.toFixed(2));
        $('.basketCount').html('(' + inventories.length + ')');
    }

    this.init = function (initialBasket) {
        if (initialBasket.length && initialBasket.length > 0) {
            handleAddUI(initialBasket);
        }
    }

}

function redirectToCheckout() {
    window.location.href = baseHref + 'Checkout';
}

function redirectToRegister() {
    window.location.href = baseHref + 'Register';

}

function Addvar() {
    var stopPropagations = true;
}


function showForgotPassword(event) {
    if (active_dropdown != null) {
        active_dropdown.clean();
        active_dropdown.hide();
    }
    var $div = $(this).next().show();
    clearErrors();




    event.stopPropagation();
}



function remindPassword(event) {
    clearErrors();


    var email = $(this).prev().val();

    $.ajax({ url: baseHref + 'Login/ForgotPassword', type: "POST",

        data: "email=" + email,
        success: function (result) {
            if (result != "ok") {
                //showError($('.LoginItem'), 'Invalid Email', 'Login');
                showError($('.LoginItem'), 'Invalid Email', 'Password');
            }
            else {
                showError($('.LoginItem'), 'Mail has been send to your email', 'Password');

            }

            if (result.internalError)
                alert(result.internalError);

        },
        error: function (req, status, error) {
            alert("Error: " + error);

        }
    });

    $(this).parent('.passwordReminder').hide();
    event.stopPropagation();


}

var mybasket = new basket(4);


function RegistrationMessage() {
    clearErrors();
    showError($(this).parent(), 'Please contact our customer support team for registration', 'Register');
    // alert('Please contact our customer support team for registration:CustomerCare@dQue.com ');
    return false;
}

function toggleExpanded() {
    var el = $(this).parents("tr").find('.OpenBtn , .CloseBtn , +tr').toggle();

    var isClosed = el.end().find('.CloseBtn:hidden').length == 1;

    if (isClosed) {
        $('#results').height(TableHeight);
    }
    //$(this).parents("tr").find('.CloseBtn').toggle();
    //$(this).parents("tr").find('+tr').toggle();

    if (!isClosed) {
        var index = $(this).parents('tr').attr('i');
        var InventoryID = [searchResults[index]][0].InventoryID;
        var action = 'Expand';


        $.ajax({ url: baseHref + 'Search/Expand', type: "POST",

            data: "Action=" + action + "&InventoryId=" + InventoryID
        });
    }

    return false;
}

function showExpanded() {
    $(this).parents("tr").find('.OpenBtn').hide();
    $(this).parents("tr").find('.CloseBtn').show();
    var parent = $(this).parents("tr");
    parent.find('+tr').show();
    //$('.White Open').show();
    var index = $(this).parents('tr').attr('i');
    var InventoryID = [searchResults[index]];
    var action = 'Expand';


    $.ajax({ url: baseHref + 'Search/Expand', type: "POST",

        data: "Action=" + action + "&InventoryId=" + InventoryID
    });
    return false;
}
function hideExpanded() {
    $(this).parents("tr").find('.CloseBtn').hide();
    $(this).parents("tr").find('.OpenBtn').show();
    var parent = $(this).parents("tr");
    parent.find('+tr').hide();
    //$('.White Open').hide();
    $('#results').height(TableHeight);


    return false;

}

$(function () {
    $('.MyBasket').click(showBasket);
    $('.MyBasketDropDownMiddle .CloseBtn2').click(hideBasket);
    $('.AddToCartBtn').click(addToCart);
    $('.MyBasketDropDown')
            .find('.ArrowUp').click(mybasket.scrollUp).end()
            .find('.ArrowDown').click(mybasket.scrollDown).end();

    $('.CheckoutBtn').click(redirectToCheckout);
    $('.RegisterBTN').click(redirectToRegister);
   // $('.RegisterBTN').click(RegistrationMessage);

    if (typeof (basketContents) != 'undefined') {
        mybasket.init(basketContents);
        if (basketContents.length > 0) {
            $('.CheckoutBtn').show();
        }
        else {
            $('.CheckoutBtnDisable').show();
        }
    }
    $('.OpenBtn , .CloseBtn').click(toggleExpanded);
    //$('.CloseBtn').click(hideExpanded);

    $('a.passwordReminder').click(showForgotPassword);

    $('div.passwordReminder').each(function (i, div) {

        var $div = $(div);

        $div.find('.SendBtn').click(remindPassword);
        $div.click(function (event) { event.stopPropagation(); });

        $('body').click(function () {
            $div.hide();
            // todo: remove event binding
        });
    });
    $('div.MyBasketDropDown').each(function (i, div) {
        var $div = $(div);
        $div.click(function (event) { event.stopPropagation(); });
        $('body').click(function () {
            $div.hide();
        });
    });

    // $('div.LoginItem > form').validate({  showErrors: customShowErrors });

    //$('div.passwordReminder form').validate({ onkeyup: false, onfocusout: false, showErrors: customShowErrors });
    $('.Paging').find('.LeftArrow').click(prevPage).end().find('.RightArrow').click(nextPage).end();


});


