var scroller  = null;
var scrollbar = null;


var js;
function include_js(file) {
    var html_doc = document.getElementsByTagName('head')[0];
    js = document.createElement('script');
    js.setAttribute('type', 'text/javascript');
    js.setAttribute('src', file);
    html_doc.appendChild(js);

    js.onreadystatechange = function () {
        if (js.readyState == 'complete') {
            //alert('JS onreadystate fired');
        }
    }

    js.onload = function () {
        //alert('JS onload fired');
    }
    return false;
}

$(window).load(function () {

if (($.browser.msie) && ($.browser.version == '6.0')) {
    include_js("/js/jquery.mousewheel.min.js");
    include_js("/js/jScrollPane-1.2.3.min.js");
    //document.write('<script type="text/javascript" src="/js/jquery.mousewheel.min.js"></script>');
    //document.write('<script type="text/javascript" src="/js/jScrollPane-1.2.3.min.js"></script>');
    $("#justListedList").html("<div id=\"justListedListings\"></div>");
    startLiveListings();
    //$("#justListedList").jScrollPane();
} else {
    $.getScript("/js/jquery.mousewheel.min.js", function() {});
    $.getScript("/js/jScrollPane-1.2.3.min.js", function() {
        $("#justListedList").html("<div id=\"justListedListings\"></div>");
        startLiveListings();
        $("#justListedList").jScrollPane();
    });
}
});

//jQuery preload images plugin
jQuery.fn.onImagesLoaded = function(_cb) {
    return this.each(function() {

        var $imgs = (this.tagName.toLowerCase()==='img')?$(this):$('img',this),
        _cont = this,
        i = 0,
        _done=function() {
            if( typeof _cb === 'function' ) _cb(_cont);
        };

        if( $imgs.length ) {
            $imgs.each(function() {
                var _img = this,
                _checki=function(e) {
                    if((_img.complete) || (_img.readyState=='complete'&&e.type=='readystatechange') )
                    {
                        if( ++i===$imgs.length ) _done();
                    }
                    else if( _img.readyState === undefined ) // dont for IE
                    {
                        $(_img).attr('src',$(_img).attr('src')); // re-fire load event
                    }
                }; // _checki \\

                $(_img).bind('load readystatechange', function(e){
                    _checki(e);
                });
                _checki({
                    type:'readystatechange'
                }); // bind to 'load' event...
            });
        } else _done();
    });
};

var MAX_NEW_LISTINGS = 25;
var counter = 0;
var serverTime = 0;
var listings = new Array();
var hiddenListings = new Array();
var visibleListings = new Array();

function requestListings(showImmediately) {

    var servletURL = servletURL = "/getJustListedListings.do";

    if (listings.length > 0) {
        var latestListingIndex = listings.length-1;
        servletURL = "/getJustListedListings.do?newestId=" + listings[latestListingIndex].id + "&newestFirstSeen=" + listings[latestListingIndex].firstSeen + "&newestAddress=" + listings[latestListingIndex].address;
    }
/*
    $.ajax({
        url: servletURL,
        context: document.body,
        success: function(data) {alert(data);
            var jsonResponse = eval("("+data+")");

            serverTime = jsonResponse.serverTime;
            var newListings = jsonResponse.listings;
            addNewListings(newListings);
            if (showImmediately) {
                showNextListing();
                showNextListing();
            }
        }
    });
*/
$.getJSON(servletURL, function(data) {
	if (data){
            //alert(data.serverTime);
            serverTime = data.serverTime;
            var newListings = data.listings;
            addNewListings(newListings);
            if (showImmediately) {
                showNextListing();
                showNextListing();
            }
	}
});
}

function addNewListings(newListings) {

    $("#justListedListings").empty();

    for (var i = 0; i < visibleListings.length; i++) {
        var existingListingElement = createListingElement(visibleListings[i]);
        $("#justListedListings").prepend(existingListingElement);
    }

    for (var j = 0; j < newListings.length; j++) {
        listings.push(newListings[j]);
        hiddenListings.push(newListings[j]);
    }

    for (var k = 0; k < hiddenListings.length; k++) {
        var newListingElement = createListingElement(hiddenListings[k]);
        //newListingElement.css("background-color", "red");
        newListingElement.hide();
        $("#justListedListings").prepend(newListingElement);
    }
}




var interval = null;
var showNextListingInterval = null;

function createListingElement(listing) {
    var minutesSinceFirstSeen = parseInt((serverTime - listing.firstSeen) / 60000);
    var minutesPlural = minutesSinceFirstSeen > 1 ? "s" : "";
    var hoursPlural = minutesSinceFirstSeen > 119 ? "s" : "";
    var bedsPlural = listing.bedrooms == 1 ? "" : "s";
    var bathsPlural = listing.bathrooms == 1 ? "" : "s";

    var timeSinceFirstSeen = "";

    if (minutesSinceFirstSeen < 1) {
        timeSinceFirstSeen = "seconds ago";
    }
    else if (minutesSinceFirstSeen < 60) {
        timeSinceFirstSeen =  minutesSinceFirstSeen + " minute" + minutesPlural + " ago";
    }
    else {
        timeSinceFirstSeen =  parseInt(minutesSinceFirstSeen / 60) + " hour" + hoursPlural + " ago";
    }

    var s = "";
    s +=   "<div id=\"justListedListing_" + listing.id + "\" class=\"justListedListing\" >" + "<div><a href=\"" + "/listing?id=" + listing.id + "\">"
    + "<img title=\"More info about " + listing.address + "\"" + (listing.image > 0 ? (" src=\"/listing/image/thumb_" + listing.id + "0.jpg\"") :" src=\"/gui/images/background/thumb_listing_placeholder2.png\"")
    + " alt=\"Image of MLS® property number " + listing.mls + "\""
    + "align=\"left\" >"
    + "</a>"
    + "<p align=\"left\" >"
    + "<span class=\"address\" >" + listing.address + "</span>"
    + "<br>"
    + "<span class=\"price\" > $" +  listing.price + "</span> - "
    + (listing.floorArea != 0 ? listing.floorArea + " sqft, " : "" ) + listing.bedrooms + " Bed" + bedsPlural + ", " + listing.bathrooms + " Bath" + bathsPlural + " "
    + "<br>"
    + "<i>" + timeSinceFirstSeen
    + "</i><span class=\"moreInfo\"><a href=\"" + "/listing?id=" + listing.id + "\">more</a></span></p>"
    +  "</div></div>";

    return $(s);
}

function showNextListing() {
    var listing = hiddenListings.shift();
    if (listing != null) {
        visibleListings.push(listing);

        if (visibleListings.length > MAX_NEW_LISTINGS) {
            var removedListing = visibleListings.shift();
            $("#justListedListing_" + removedListing.id).slideUp(1000);
        }

        var element = $("#justListedListing_" + listing.id);

        element.onImagesLoaded(function(){ //Pre-load images
            element.show(1000, function() {
                $("#justListedList").jScrollPane();//Resize scroll pane
            }).children().hide().fadeIn(2000);
        });
    }
}

function startLiveListings() {
    clearInterval(interval);
    requestListings(true);
    interval = setInterval("requestListings()", 33000);
    showNextListingInterval = setInterval("showNextListing()", 10000);
}


function pauseLiveListings(){

    if($("#justListedPause").html() == "pause"){
        clearInterval(interval);
        clearInterval(showNextListingInterval);
        $("#justListedPause").html("resume");
        $("#justListedLiveText").stop(true, true);
        $("#justListedLiveText").fadeOut(500, function() {
            $("#justListedLiveText").html("Paused");
            $("#justListedLiveText").fadeIn(500);
        });
    }
    else if($("#justListedPause").html() == "resume"){
        startLiveListings();
        $("#justListedPause").html("pause");
        $("#justListedLiveText").stop(true, true);
        $("#justListedLiveText").fadeOut(500, function() {
            $("#justListedLiveText").html("Live");
            $("#justListedLiveText").fadeIn(500);
        });

    }
}

