var timerlen = 5;
var slideAniLen = 500;

var timerID = new Array();
var startTime = new Array();
var obj = new Array();
var endHeight = new Array();
var moving = new Array();
var dir = new Array();
var ie = (document.all && !window.opera);
ieVersion = function() {
    var arr = navigator.appVersion.split("MSIE");
    return arr[1] ? parseFloat(arr[1]) : null;
}
function toggleSlide(objname) {
    if ($get(objname).style.display == "none") {
        // div is hidden, so let's slide down
        slidedown(objname);
    } else {
        // div is not hidden, so slide up
        slideup(objname);
    }
}

function slidedown(objname){
        if(moving[objname])
                return;

        if($get(objname).style.display != "none")
                return; // cannot slide down something that is already visible

        moving[objname] = true;
        dir[objname] = "down";
        startslide(objname);
}

function slideup(objname){
        if(moving[objname])
                return;

        if($get(objname).style.display == "none")
                return; // cannot slide up something that is already hidden

        moving[objname] = true;
        dir[objname] = "up";
        startslide(objname);
}

function startslide(objname){
        obj[objname] = $get(objname);

        endHeight[objname] = parseInt(obj[objname].style.height);
        startTime[objname] = (new Date()).getTime();

        if(dir[objname] == "down"){
                obj[objname].style.height = "1px";
        }

        obj[objname].style.display = "block";

        timerID[objname] = setInterval('slidetick(\'' + objname + '\');',timerlen);
}

function slidetick(objname){
        var elapsed = (new Date()).getTime() - startTime[objname];

        if (elapsed > slideAniLen)
                endSlide(objname)
        else {
                var d =Math.round(elapsed / slideAniLen * endHeight[objname]);
                if(dir[objname] == "up")
                        d = endHeight[objname] - d;

                obj[objname].style.height = d + "px";
        }

        return;
}

function endSlide(objname){
        clearInterval(timerID[objname]);

        if(dir[objname] == "up")
                obj[objname].style.display = "none";

        obj[objname].style.height = endHeight[objname] + "px";

        delete(moving[objname]);
        delete(timerID[objname]);
        delete(startTime[objname]);
        delete(endHeight[objname]);
        delete(obj[objname]);
        delete(dir[objname]);

        return;
    }

    
// *********************************************
// code for scrolling ajax div - Cheeka
// *********************************************  
    var ListingHeader;
    var cheekaObj;
    var ti = 0;
    var pinClickedEvent = false;
    var highLightMls = null;
    var highLightBucket = 1;
    function CheekaScroller(bucketSize, recordsOnScreen, listingHeaderHt, totalRecords) {
        this.BucketSize = bucketSize;
        this.RecOnScr = recordsOnScreen;
        this.HdrHt = listingHeaderHt;
        this.SummaryHt = 300;
        this.TotalRecords = totalRecords;
        this.TotalBuckets = Math.ceil(totalRecords / bucketSize);
        this.CurrentBucket = 1;
        this.FollowTop = 0;
        this.FollowBottom = this.BucketSize * this.HdrHt - this.HdrHt * this.RecOnScr;
    }
    
    function initializeCheeka(bucketSize, recordsOnScreen, listingHeaderHt, totalRecords) {
        cheekaObj = new CheekaScroller(bucketSize, recordsOnScreen, listingHeaderHt, totalRecords);
        $get('SummaryResultDiv').scrollTop = 0;
        highLightBucket = 1;
        highLightMls = null;
    }
    function repopulateSummaryDiv() {
        // create Bucket Div and add it to SummaryResultDiv...
        $get('SummaryResultDiv').innerHTML = "";
        for (i = 1; i <= cheekaObj.TotalBuckets; i++) {
            var recordsInBucket = cheekaObj.BucketSize;
            if (i == cheekaObj.TotalBuckets)
                recordsInBucket = cheekaObj.TotalRecords - (i - 1) * cheekaObj.BucketSize;

            var bucketDiv = document.createElement("div");
            bucketDiv.id = "Bucket_" + i;
            bucketDiv.style.height = recordsInBucket * cheekaObj.HdrHt + "px";
            if (ie && ieVersion() <=7)
                bucketDiv.style.width = '95%';
            else
                bucketDiv.style.width = '100%';
            $get('SummaryResultDiv').appendChild(bucketDiv);
        }
    }
    function getScrolledHeight() {
        // On the basis of scrolled height, populate required bucket..
        if ($get('SummaryResultDiv').scrollTop > cheekaObj.FollowBottom && cheekaObj.CurrentBucket < cheekaObj.TotalBuckets) {
            // scroll down
            cheekaObj.CurrentBucket++;
            pinClickedEvent = false;
            populateBucket(cheekaObj.CurrentBucket);
        }
        else if ($get('SummaryResultDiv').scrollTop < cheekaObj.FollowTop && cheekaObj.CurrentBucket > 1) {
            // scroll up
            cheekaObj.CurrentBucket--;
            pinClickedEvent = false;
            populateBucket(cheekaObj.CurrentBucket);
        }
    }
    function populateBucket(bucketNo) {
        if(cheekaObj.CurrentBucket != bucketNo)
            cheekaObj.CurrentBucket = bucketNo;

        if ($get('Bucket_' + bucketNo).innerHTML == "") {
            if (bucketNo == 1)
                $get("Bucket_" + bucketNo).innerHTML = $get(prefix + 'ListingHeaderField').value;
            else
                Real_Estate_Search.LoadSummaryBucket(cheekaObj.CurrentBucket, populateBucket_CallBack);
        }
        else if (pinClickedEvent) {
            // scroll summaryDiv to the start of corresponding bucuket and show the listing summary
            $get('SummaryResultDiv').scrollTop = Math.floor(pinIDPlotted / cheekaObj.RecOnScr) * cheekaObj.RecOnScr * cheekaObj.HdrHt;
            toggleBodyDiv(mlsNumber, mlsCompanyID, cheekaObj.CurrentBucket, pinIDPlotted % cheekaObj.BucketSize);
        }
        
        cheekaObj.FollowBottom = cheekaObj.CurrentBucket * cheekaObj.BucketSize * cheekaObj.HdrHt - cheekaObj.HdrHt * cheekaObj.RecOnScr;
        cheekaObj.FollowTop = (cheekaObj.CurrentBucket - 1) * cheekaObj.BucketSize * cheekaObj.HdrHt - cheekaObj.HdrHt * cheekaObj.RecOnScr - 100;
//        $get('MlsInfo').innerHTML = "SummaryScrollTop: " + $get('SummaryResultDiv').scrollTop
//                                                     + "<br/>FollowTop: " + cheekaObj.FollowTop
//                                                     + "<br/>FollowBottom: " + cheekaObj.FollowBottom
//                                                     + "<br/>CurrentBucket: " + cheekaObj.CurrentBucket
//                                                     + "<br/>TotalBucket: " + cheekaObj.TotalBuckets;                
    }
    function populateBucket_CallBack(result) { 
        if(result.value != null && result.value != "")
            $get("Bucket_" + cheekaObj.CurrentBucket).innerHTML = result.value;

        if (pinClickedEvent) {
        // scroll summaryDiv to the start of corresponding bucuket and show the listing summary
            $get('SummaryResultDiv').scrollTop = Math.floor(pinIDPlotted / cheekaObj.RecOnScr) * cheekaObj.RecOnScr * cheekaObj.HdrHt;
            toggleBodyDiv(mlsNumber, mlsCompanyID, cheekaObj.CurrentBucket , pinIDPlotted % cheekaObj.BucketSize);
        }
    }
    var currentListIndex;
    var mlsNumberFav;
    var mlsCompanyIdFav;
    var BucketFav;
    function toggleBodyDiv(mlsNumber, mlsCompanyID, bucketNo,listIndex) {
        try {       
            currentListIndex=listIndex;
            var currentBucketObj = $get("Bucket_" + bucketNo);
            highlightPushpin(bucketNo, listIndex);
            if (highLightMls != null) {
                // hide the currently open summary div
                var lastBucketObj = $get("Bucket_" + highLightBucket);
                if ($get('BodyDiv_' + highLightMls) != null) {
                    slideup('BodyDiv_' + highLightMls);
                    $get('HeaderDiv_' + highLightMls).style.display = 'block';              
                    if (lastBucketObj != null && lastBucketObj.style.pixelHeight > cheekaObj.SummaryHt) {
                        lastBucketObj.style.height = lastBucketObj.style.pixelHeight - cheekaObj.SummaryHt + "px";
                        if (highLightMls == mlsNumber) {
                            highLightMls = null;
                            if($get('checkbox_'+mlsCompanyID+"_"+mlsNumber)!=null&& $get("listingCount").innerHTML ==1)
                                $get('checkbox_'+mlsCompanyID+"_"+mlsNumber).style.display="none";
                            return;
                        }
                    }
                }
            }
           
            var headerDiv = 'HeaderDiv_' + mlsNumber;
            var bodyDiv = 'BodyDiv_' + mlsNumber;
            currentBucketObj.style.height = currentBucketObj.style.pixelHeight + cheekaObj.SummaryHt + "px";
            setSummaryDivPos($get(headerDiv), (bucketNo - 1) * cheekaObj.BucketSize + parseInt(listIndex));
            if ($get(bodyDiv).innerHTML == "" || $get(bodyDiv).innerHTML == "\n") {
                var listingSummaryHTML = Real_Estate_Search.ShowListingSummary(mlsNumber, mlsCompanyID, bucketNo);                
                $get(bodyDiv).innerHTML = listingSummaryHTML.value.split('^')[0];
                mlsNumberFav= listingSummaryHTML.value.split('^')[1];
                mlsCompanyIdFav= listingSummaryHTML.value.split('^')[2];
                BucketFav=bucketNo;
                
                if($get('chk_'+mlsNumber)!=null&& $get("listingCount").innerHTML ==1)
                    $get('chk_'+mlsNumber).style.display="none";
            }
            toggleSlide(bodyDiv);
            if($get('checkbox_'+mlsCompanyID+"_"+mlsNumber).checked)
                {
                    $get('chk_'+mlsNumber).checked=true;
                    Real_Estate_Search.ManageCompareListing(mlsNumber,mlsCompanyID,"1")
                }
            else
                {
                    $get('chk_'+mlsNumber).checked=false;
                    Real_Estate_Search.ManageCompareListing(mlsNumber,mlsCompanyID,"0")
                }
            $get(headerDiv).style.display = 'none';
            highLightMls = mlsNumber;
            highLightBucket = bucketNo;
        }
        catch (err) {
            return false;
       } 
    }
    
    function toggleBodyDivByMyFavorites(mlsNumber, mlsCompanyID, bucketNo,listIndex) {
        try {    
            var currentBucketObj = $get("Bucket_" + bucketNo);         
            var headerDiv = 'HeaderDiv_' + mlsNumber;
            var bodyDiv = 'BodyDiv_' + mlsNumber;
            currentBucketObj.style.height = currentBucketObj.style.pixelHeight + cheekaObj.SummaryHt + "px";
            setSummaryDivPos($get(headerDiv), (bucketNo - 1) * cheekaObj.BucketSize + parseInt(listIndex));
                var listingSummaryHTML = Real_Estate_Search.ShowListingSummary(mlsNumber, mlsCompanyID, bucketNo);                
                $get(bodyDiv).innerHTML = listingSummaryHTML.value.split('^')[0];
                if($get('chk_'+mlsNumber)!=null&& $get("listingCount").innerHTML ==1)
                    $get('chk_'+mlsNumber).style.display="none";
        }
        catch (err) {
            return false;
       } 
    }
    
    
    function highlightPushpin(bucketNo, listIndex) {
       
        // Highlight the corresponding pushpin
        pinIndex = (bucketNo - 1) * cheekaObj.BucketSize + parseInt(listIndex);
        pinObj = $get('Pushpin_' + pinIndex);
        if (pinObj != "undefined") {
            t = pinObj.children[0];
            if ((t.src.indexOf('single-family') != -1) || (t.src.indexOf('AreaDetails') != -1)) {
                t.src = 'images/single-nearby-16.gif';
            }
            else if (t.src.indexOf('OH') != -1) {
                t.src = 'images/OH-visited-16.gif';
            }
        }
    }
    function setSummaryDivPos(headerObj, listIndex) {
        var summaryScrlHt = $get('SummaryResultDiv').scrollTop;
        if (listIndex*cheekaObj.HdrHt - summaryScrlHt > cheekaObj.HdrHt * cheekaObj.RecOnScr / 2) {
            animateScroller(headerObj.id,listIndex);
        } 
        else if (listIndex * cheekaObj.HdrHt < summaryScrlHt)
            $get('SummaryResultDiv').scrollTop -= (cheekaObj.SummaryHt - 30);
        
    }

    function animateScroller(headerObjID, listIndex) {
        var summaryScrlHt = $get('SummaryResultDiv').scrollTop;
        var headerObj = $get(headerObjID);
        if (listIndex*cheekaObj.HdrHt - summaryScrlHt >= cheekaObj.HdrHt * cheekaObj.RecOnScr / 2 - 50) {
            var currentScrollTop = $get('SummaryResultDiv').scrollTop;
            $get('SummaryResultDiv').scrollTop += 60;
            if (currentScrollTop == $get('SummaryResultDiv').scrollTop)
                clearTimeout(ti); // Max scroll reached..
            else
                ti = setTimeout("animateScroller('" + headerObjID + "', "+ listIndex+")", 10);
        }
        else 
            clearTimeout(ti);
    } 
