rows = [];
function prepare_query(input) {
  if(input==undefined || input==null || input.length===0) {
    return '';
  }
  input = input.replace(/<[^>]+>/g,'');
  input_parts = input.match(/([a-zA-Z0-9\.\-]+)/g);
  if(input_parts==null || input_parts.length===0) {
    return '';
  }
  else {
    return input_parts.join(',');
  }
}
function searchBoxGo(val){
    var query = $('#pr_search_text').val();
    enterResult(query);
}

function filterTable(){
    $("#search_ajax_loader").css('display', 'block');
    obj = {
        scanner: true,
        min_pr: $("#csmin-pr").val(),
        max_pr: $("#csmax-pr").val(),
        min_price: $("#csmin-price").val(),
        max_price: $("#csmax-price").val(),
        sector: $("#cssector").val(),
        exchange: $("#csexchange").val(),
        ma200: $("#csma200").val(),
        page: $("#page-num").val(),
        limit: 100
    };
    
    
    if (parseInt($("#page-num").val()) === 1) {
        $(".csback").attr('disabled', true);
    }
    else {
        $(".csback").attr('disabled', false);
    }
    
    obj = addSorting(obj);
    $.getJSON('/longterm/scripts/search.php', obj, function(data){
        try {
            if (rows == undefined || rows === null) {
                rows = $("table.default tbody tr");
            }
        } 
        catch (e) {
            rows = $("table.default tbody tr");
        }
        if (parseInt(data.total) > 0) {
            $(".filter_hide").removeClass('filter_hide');
            $(".table-wrapper .no-res").hide();
            swapCells(data.matches, rows);
        }
        else {
            rows.addClass('filter_hide');
            $(".table-wrapper .no-res").show();
        }
        setSummary(data);
        if ($(".table-wrapper").hasClass('filter_hide')) {
            $(".table-wrapper").removeClass('filter_hide');
        }
        if (data.last === 1) {
            $(".csnext").attr('disabled', true);
        }
        else {
            $(".csnext").attr('disabled', false);
        }
        $("#search_ajax_loader").css('display', 'none');
    });
}

function setSummary(data){
    $(".search-summary .min-result-num").text(data.results_start);
    $(".search-summary .max-result-num").text(data.results_end);
    $(".num-stocks").text(data.total);
    $(".search-summary .pr-min").text(data.filter.min_pr);
    $(".search-summary .pr-max").text(data.filter.max_pr);
    $(".search-summary .price-min").text(data.filter.min_price);
    $(".search-summary .price-max").text(data.filter.max_price);
    $(".search-summary .masummary").text(data.filter.masummary);
    if (data.filter.sector == 'All') {
        $(".sector-article").hide();
        $(".search-summary .sector-name").text("any");
    }
    else {
        $(".sector-article").show();
        $(".search-summary .sector-name").text(data.filter.sector);
    }
    if (data.filter.exchange == 'All') {
        $(".exchange-article").hide();
        $(".search-summary .exchange-name").text("any");
    }
    else {
        $(".exchange-article").show();
        $(".search-summary .exchange-name").text(data.filter.exchange);
    }
    
}

function addSorting(obj){
    if ($(".headerSortUp").length > 0) {
        obj.sortCol = $(".headerSortUp")[0].id;
        obj.sortOrder = 1;
    }
    else 
        if ($(".headerSortDown").length > 0) {
            obj.sortCol = $(".headerSortDown")[0].id;
            obj.sortOrder = 2;
        }
        else {
            obj.sortCol = 'rank', obj.sortOrder = 2;
        }
    return obj;
}

function swapCells(datarows, rows){
    rows = $("table.default tbody tr");
    if (datarows.length < 100) {
        $(".csnext").attr("disabled", true);
        $(".default tbody tr:gt(" + (datarows.length - 1) + ")").addClass('filter_hide');
    }
    else {
        rows.removeClass('filter_hide');
    }
    for (i = 0; i < datarows.length; i++) {
        data = datarows[i];
        rowid = data.ticker.replace('.', '_');
        rowid = rowid.replace('*', '');
        rows[i].cells[0].innerHTML = '<a href="/longterm/chart/' + data.ticker + '/">' + data.ticker + '</a>';
        rows[i].cells[1].innerHTML = '<a href="/longterm/chart/' + data.ticker + '/">' + data.name + '</a>';
        rows[i].cells[2].innerHTML = data.close;
        rows[i].cells[3].innerHTML = '<div class="rating pr' + data.rank + '">' + data.rank + '</div>';
        
        rows[i].cells[4].innerHTML = '<span class="date-added">' + data.date_added + "</span>";
        rows[i].cells[5].innerHTML = data.price_added;
        chng = parseFloat(data.change_added);
        if (chng >= 0) {
            rows[i].cells[6].innerHTML = '<span class="positive">+' + data.change_added + '%</span>';
        }
        else {
            rows[i].cells[6].innerHTML = '<span class="negative">' + data.change_added + '%</span>';
        }
        
    }
}

function addPRCell(value){
    if (value == null) {
        data = '<td><div class="rating none">-</div></td>';
    }
    else {
        data = '<td><div class="rating pr' + value + '">' + value + '</div></td>';
    }
    return data;
}

function getSortOrder(table){
    sorts = $(table + ".header");
    sortLister = new Array();
    sortkeys = [1, 2, 3, 4]
    for (i = 0; i < sorts.length; i++) {
        if (sorts[i].className.indexOf('headerSortUp') !== -1) {
            sortLister.push([sortkeys[i], 1]);
        }
        else 
            if (sorts[i].className.indexOf('headerSortDown') !== -1) {
                sortLister.push([sortkeys[i], 0]);
            }
    }
    if (sortLister.length == 0) {
        sortLister = [[sortkeys[0], 0]];
    }
    return new Array(sortLister);
}


function buildPRRow(rowdata){
    rowid = rowdata.ticker.replace('.', '_');
    rowid = rowid.replace('*', '');
    row = '<tr id="row-' + rowid + '"><td><input type="checkbox" id="select-' + rowid + '" value="' + rowdata.ticker + '" name="select-' + rowid + '" /></td>';
    row += '<td><a href="/longterm/chart/' + rowdata.ticker + '">' + rowdata.ticker + "</a></td>";
    row += '<td class="company-name"><a class="full-name" href="/longterm/chart/' + rowdata.ticker + '">' + rowdata.name + "</a></td>";
    row += '<td>' + rowdata.close + '</td>';
    row += addPRCell(rowdata.rank);
    row += '<td><b>' + rowdata.date_added + '</b></td>';
    row += '<td>' + rowdata.price_added + '</td>';
    chng = parseFloat(rowdata.change_added);
    if (chng >= 0) {
        row += '<td class="positive">+' + rowdata.change_added + '</td>';
    }
    else {
        row += '<td class="negative">' + rowdata.change_added + '</td>';
    }
    
    return row;
}

function addTableData(tablename, rowsdata){
    sortOrder = getSortOrder(".default");
    if (rowsdata.length === 1) {
        nrow = $(tablename + " tbody").append(buildPRRow(rowsdata[0].data));
        $(tablename).trigger("update");
        $(tablename).trigger("sorton", sortOrder);
        $("#stock-name").addClass('shift-box');
        $("#stock-name").effect("transfer", {
            className: "shift-box",
            to: $("#row-" + rowsdata[0].data.ticker.replace('.', '_').replace('*', '') + " td:eq(2)")
        }, 1000);
        $("#stock-name").removeClass('shift-box');
    }
    else {
        for (i = 0; i < rowsdata.length; i++) {
            nrow = $(tablename + " tbody").append(buildPRRow(rowsdata[i].data));
            $(tablename).trigger("update");
            $(tablename).trigger("sorton", sortOrder);
        }
    }
    $("#stock-name").val("");
    return true;
}



function enterResult(qry){
    query = prepare_query(qry);
    if (query.indexOf(',') == -1 && $("#search-results tr td").text() != 'No Results') {
        window.location.assign('http://www.powerratings.net/longterm/search/' + query + '/');
    }
    else {
        window.location.assign('http://www.powerratings.net/longterm/search/' + query + '/');
    }
}

$(document).ready(function(){

    
    
    
    /* auto-complete code*/
    if ($("#pr_search_text").length > 0) {
    
        $("#pr_search_button").click(function(){
            var qry = $('#pr_search_text').val();
            enterResult(qry);
            
        });
        $("#pr_search_text").click(function(event){
            event.target.value = '';
        });
        
        
        
    }
    if ($("#search-box-wrapper").length > 0) {
        rows = $(".default tbody tr");
        $("#search-box-wrapper select").change(function(){
            $("#page-num").val(1)
            $(".csprev").attr('disabled', true);
            
        });
        $("#search-box-wrapper input").blur(function(){
            if ($("#csmin-pr").val() != $(".search-summary .pr-min").text()) {
                $("#page-num").val(1);
                $(".csprev").attr('disabled', true);
            }
            else 
                if ($("#csmax-pr").val() != $(".search-summary .pr-max").text()) {
                    $("#page-num").val(1);
                    $(".csprev").attr('disabled', true);
                }
                else 
                    if ($("#csmin-price").val() != $(".search-summary .price-min").text()) {
                        $("#page-num").val(1);
                        $(".csprev").attr('disabled', true);
                    }
                    else 
                        if ($("#csmax-price").val() != $(".search-summary .price-max").text()) {
                            $("#page-num").val(1);
                            $(".csprev").attr('disabled', true);
                        }
        });
        
        $(".search-trigger").click(function(event){
            pagenumber = parseInt($("#page-num").val());
            if (event.target.value == 'Search') {
                $("#page-num").val(1);
            }
            else 
                if (event.target.value == 'Next') {
                    $("#page-num").val(pagenumber + 1);
                }
                else 
                    if (event.target.value == 'Previous') {
                        $("#page-num").val(pagenumber - 1);
                    }
                    else 
                        if (event.target.value == 'Reset') {
                            $("#csmin-pr").val(1);
                            $("#csmax-pr").val(10);
                            $("#csmin-price").val('1.00');
                            $("#csmax-price").val('999.00');
                            $("#cssector").val(0);
                            $("#csexchange").val(0);
                            $("#csma200").val(0);
                        }
            filterTable();
            
        });
    }
    if ($("body.search").length > 0) {
        try {
            if (user_search_symbol != undefined) {
                if ($("tr.pr_table_" + user_search_symbol).length > 0) {
                    $("tr.pr_table_" + user_search_symbol).addClass('highlight');
                }
            }
        } 
        catch (e) {
        }
    }
    
    if ($(".query").length > 0) {
        thequeryrx = new RegExp('(' + $(".query").text().replace(', ', "|") + ')', 'ig');
        $(".default tr td a").each(function(i){
            this.innerHTML = this.innerHTML.replace(thequeryrx, '<span class="query">$1</span>');
        });
    }
    
    $('a.showExtra').click(function(){
    
        $('.extra').show();
        $('a.showExtra').fadeOut('slow');
    });
    
    /*table sorting code*/
    if ($(".default").length > 0 && $("#search-box").length === 0) {
    
        /* start up table-sorter */
        $(".default").tablesorter({
            title_row: '.header2'
        });
        /* highlight table results on hover */
        $("table.default tbody tr").hover(function(){
            $(this).addClass('highlight');
        }, function(){
            $(this).removeClass('highlight');
        });
    }
    else 
        if ($("#search-box").length > 0) {
            $(".header2 th").slice(0, 5).addClass('header');
            $(".header2 .header").click(function(){
            
                if ($(this).hasClass('headerSortUp')) {
                    newsort = "headerSortDown";
                }
                else 
                    if ($(this).hasClass('headerSortDown')) {
                        newsort = "headerSortUp";
                    }
                    else {
                        newsort = "headerSortUp";
                    }
                $(".headerSortUp").removeClass('headerSortUp');
                $(".headerSortDown").removeClass('headerSortDown');
                $(this).addClass(newsort);
                $("#page-num").val(1);
                filterTable();
                
                
            });
        }
    
    $(".ui-dialog-buttonpane").append('<img class="loader" alt="Operation running, please wait" title="Operation running" src="/longterm/images/ajax-loader.gif" />');
});



function trim_string(string, width){
    if (string.length > width) {
        string = string.substring(0, (width - 1)) + "...";
    }
    
    return string;
    
    
}

jQuery.cookie = function(name, value, options){
    if (typeof value != 'undefined') { // name and value given, set cookie
        options = options || {};
        if (value === null) {
            value = '';
            options.expires = -1;
        }
        var expires = '';
        if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
            var date;
            if (typeof options.expires == 'number') {
                date = new Date();
                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
            }
            else {
                date = options.expires;
            }
            expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
        }
        // CAUTION: Needed to parenthesize options.path and options.domain
        // in the following expressions, otherwise they evaluate to undefined
        // in the packed version for some reason...
        var path = options.path ? '; path=' + (options.path) : '';
        var domain = options.domain ? '; domain=' + (options.domain) : '';
        var secure = options.secure ? '; secure' : '';
        document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
    }
    else { // only name given, get cookie
        var cookieValue = null;
        if (document.cookie && document.cookie != '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
};
