﻿Array.prototype.pos = function(obj) {
	for (i = 0; i < this.length; i++) {
		if (this[i] == obj) return i;
	}
	return -1;
} 
Array.prototype.has = function(obj) {
	if (this.pos(obj) >= 0) return true;
	else return false;
	//return this.indexOf(obj) !== -1;
};



var selectedListings = new Array();
var relatedCutoff = 600; // The max # of listings that can be printed / exported with the "Show Related" option turned on.
var listingTables = new Array();
var exportLimit = 100;
var dailyExportLimit = 1000;

function showExportLimitReachedDialog(selections, functionName) 
{
    var handler;
    var messageTxt = document.getElementById('exportLimitReachedMessage');
    var message = 'You may export a maximum of <b>' + exportLimit + '</b> '
            + 'records at a time. Currently you have <b>' + selections + '</b>'
            + ' listings selected.<br /><br /> '
            + 'Please narrow your search or limit your selections.<br /><br />';
    messageTxt.innerHTML = message;    
    
    if (functionName == null) handler = null;
    else handler = "nextFunction = exportLimitReachedDialogHandler('" + functionName + "')";
    
    showModalBox('exportLimitReachedDialog', 400, 90, "", handler);    
}

function showDailyExportLimitReachedDialog(currentCount, selections, functionName) 
{
    var handler;
    var messageTxt = document.getElementById('dailyExportLimitReachedMessage');
    var message;
    
    if (currentCount >= dailyExportLimit) 
        message = ' You have reached your daily export limit of <b>' + dailyExportLimit + '</b> listings.';
    else
        message = 'You may export a maximum of <b>' + dailyExportLimit + '</b> listings each day. '
            + ' You have <b>' + (dailyExportLimit - currentCount) + '</b> listings left, but you have '
            + '<b>' + selections + '</b> listings selected. '
            + '<br /><br /> '
            + 'Please narrow your search or limit your selections.';
            
    message += '<br /><br />';
    messageTxt.innerHTML = message;
    
    if (functionName == null) handler = null;
    else handler = "nextFunction = dailyExportLimitReachedDialogHandler('" + functionName + "', " + (dailyExportLimit - currentCount) + ")";
    
    showModalBox('dailyExportLimitReachedDialog', 400, 90, "", handler);   
}

function printSelections() {
    var count = getDailyExportCount();
    
	if (!hasFreeAccess) {
	    showModalBox('accessDeniedFREEDialog', 270, 80, '', null); 	
    }
	else if (selectedListings.length == 0) {
		showListingsTableMessage("Please select one or more listings to print.");
	}  
	else if (count + selectedListings.length > dailyExportLimit) {
       showDailyExportLimitReachedDialog(count, selectedListings.length, 'printSelections()');	    
    }
    else if (selectedListings.length > 100) {
       showExportLimitReachedDialog(selectedListings.length, 'printSelections()');		   
    } 
	else {
	    var form = document.getElementById("PrintForm");
	    var messageDiv = document.getElementById("printMessageDiv");
	    
	    form.ordby.value = sortOrder;
	    
        window.name = "MainWindow";
	    
	    form.SelectedRecord.value = selectedListings.join(',');
	    if (selectionsHaveRelated() == true) {
	        if (selectedListings.length > relatedCutoff) {
	            messageDiv.innerHTML = "<span style='color: #FF0000;'>Because there are over " + relatedCutoff + " listings selected, print related notices is not available.</span>";
	        } else {
	            messageDiv.innerHTML = "Would you like to print related listings?";
	        }
	        showModalBox('printSelectionsDialog', 300, 90, "", "printSelectionsDialogHandler()");	
	    } else {
	        form.submit();
	    }
	}
}

function exportSelections() {
    if (!hasFullAccess) {
	    showModalBox('accessDeniedFULLDialog', 270, 80, '', null); 	
    }
	else if (selectedListings.length == 0) {
		showListingsTableMessage("Please select one or more listings to export.");
	} 
	else {
	    var form = document.getElementById("ExportForm");
	    var relDiv = document.getElementById("exportRelatedDiv");
	    var exportTooManyDiv = document.getElementById("exportTooManyDiv");
	    
	    form.ordby.value = sortOrder;
	    form.ExportRelatedRecords.checked = false;
	    
	    if (selectionsHaveRelated() == true) {
	        if (selectedListings.length > relatedCutoff) {
	            exportTooManyDiv.style.display = "block";
	            exportTooManyDiv.innerHTML = "<br /><span style='color: #FF0000;'>Because there are over " + relatedCutoff + " listings selected, export related notices is not available.</span>";
	            relDiv.style.display = "none";
	        } else {
	            exportTooManyDiv.style.display = "none";
	            relDiv.style.display = "block";
	        }
	            
            if (form.ExportQueue[form.ExportQueue.selectedIndex].value == "HTM"
                || form.ExportQueue[form.ExportQueue.selectedIndex].value == "PDF")
            {
                relDiv.style.display = "inline";
            } 
            else { relDiv.style.display = "none"; }
            
            form.ExportRelatedRecords.disabled = false;
	        
	    } else {
	        form.ExportRelatedRecords.disabled = true;  
	        exportTooManyDiv.style.display = "none";
	        relDiv.style.display = "none";
	    }
	    
	    var count = getDailyExportCount();
	    if (count + selectedListings.length > dailyExportLimit) {
	       showDailyExportLimitReachedDialog(count, selectedListings.length, 'exportSelections()');	    
	    }
	    else if (selectedListings.length > 100) {
	       showExportLimitReachedDialog(selectedListings.length, 'exportSelections()');
	    } 
	    else {
	        form.SelectedRecord.value = selectedListings.join(',');
	        showModalBox('exportSelectionsDialog', 300, 90, "", "exportSelectionsDialogHandler()");		   
	    }
	}
}

function emailSelections() {
    if (!hasFullAccess) {
	    showModalBox('accessDeniedFULLDialog', 270, 80, '', null); 	
    }
	else if (selectedListings.length == 0) {
		showListingsTableMessage("Please select one or more listings to e-mail.");
	} 
	else {
		var form = document.getElementById("EmailForm");
	    var relDiv = document.getElementById("emailRelatedDiv");
	    var emailTooManyDiv = document.getElementById("emailTooManyDiv");
	    
	    form.EmailRelatedRecords.checked = false;
	    
	    if (selectionsHaveRelated() == true) {
	        if (selectedListings.length > relatedCutoff) {
	            emailTooManyDiv.style.display = "block";
	            emailTooManyDiv.innerHTML = "<br /><span style='color: #FF0000;'>Because there are over " + relatedCutoff + " listings selected, email related notices is not available.</span>";
	            relDiv.style.display = "none";
	        } else {
	            emailTooManyDiv.style.display = "none";
	            relDiv.style.display = "block";
	        }	        
	            
            if (form.EmailQueue[form.EmailQueue.selectedIndex].value == "HTM"
                || form.EmailQueue[form.EmailQueue.selectedIndex].value == "PDF")
            {
                relDiv.style.display = "inline";
            } 
            else 
            {
                relDiv.style.display = "none";
            }
            
            form.EmailRelatedRecords.disabled = false;
	        
	    } else {
	        form.EmailRelatedRecords.disabled = true;  
	        emailTooManyDiv.style.display = "none";
	        relDiv.style.display = "none";
	    }
	    
	    var count = getDailyExportCount();
	    if (count + selectedListings.length > dailyExportLimit) {
	       showDailyExportLimitReachedDialog(count, selectedListings.length, 'emailSelections()');	    
	    }
	    else if (selectedListings.length > 100) {
	       showExportLimitReachedDialog(selectedListings.length, 'emailSelections()');		   
	    } 
	    else {
	        showModalBox('emailSelectionsDialog', 300, 90, "", "emailSelectionsDialogHandler()");	
	    }
	}
}

function addSelectionsToQueue() {
	var cookieValue = _queue;
	var valueStr = "";
	var addCount = 0;
	
	if (!hasFreeAccess) {
	    showModalBox('accessDeniedFREEDialog', 270, 80, '', null); 	
    }
	else if (selectedListings.length == 0) {
		showListingsTableMessage("Please select one or more listings before adding them to My Picks.");
	} 
	else {
		addMultipleToQueue(selectedListings);
    }
}

function removeSelectionsFromQueue(deleteRows) {
	var removeCount = 0;
	
	if (!hasFreeAccess) {
	    showModalBox('accessDeniedFREEDialog', 270, 80, '', null); 	
    }
	else if (selectedListings.length == 0) {
		showListingsTableMessage("Please select one or more listings to remove from My Picks.");
	} 
	else if (_queueCount <= selectedListings.length) {
	    showModalBox("emptyQueueDialog", 300, 80, "", "emptyQueueDialogHandler(" + deleteRows + ")");
	}
	else {
	    removeMultipleFromQueue(selectedListings);
	    
	    if (deleteRows && selectedListings.length <= 150) {		    
	        deleteSelectedRows();
	        clearSelections();
	    }
    }
}

function addToSelections(listingNum) {
    var cookieValue = readCookie("myListSelections");
        
	if (!selectedListings.has(listingNum)) selectedListings.push(listingNum);
	
	if((","+cookieValue).indexOf(","+listingNum+",") == -1) cookieValue = listingNum + "," + cookieValue;
			
	var expire = cookieExp;
	expire = "; expires=" + expire.toGMTString();

    document.cookie = "myListSelections=" + cookieValue + expire + "; domain=foreclosures.com; path=/";
    
    showSelectionCount();
    
    SelectionsHelp();
}

function showSelectionCount() {
    showListingsTableMessageNoScroll("You have a total of " 
        + selectedListings.length + " listing" + ((selectedListings.length != 1) ? "s" : "") + " selected.");
}

function removeFromSelections(listingNum) {
    var cookieValue = readCookie("myListSelections");
    
	var position = selectedListings.pos(listingNum);

	if (position >= 0) {
		selectedListings.splice(position, 1);
	}
	
	cookieValue = (","+cookieValue).replace(","+listingNum+",", ",").substring(1);
	
	var expire = cookieExp;
	expire = "; expires=" + expire.toGMTString();

    showSelectionCount();

  	document.cookie = "myListSelections=" + cookieValue + expire + "; domain=foreclosures.com; path=/";
}

function clearSelections() {
    selectedListings = new Array();

    var othersValue = readCookieOthers("myListQuery", "mySelections");
    var expire = cookieExp;
	expire = "; expires=" + expire.toGMTString();
  	document.cookie = "myListQuery=" + othersValue + expire + "; domain=foreclosures.com; path=/";
}

function numSelectedListingsWithRelated() {
    var count = 0;
    
    for (var i = 0; i < selectedListings.length; i++) {
        var listingNum = selectedListings[i];
        var relatedNotices = document.getElementById("RelatedNotices" + listingNum).value;
        var additionalAPNs = document.getElementById("additionalAPNs" + listingNum).value;
		
        if ((relatedNotices.length > 0 && relatedNotices != "0") || (additionalAPNs.length > 0 && additionalAPNs != "0")) {
	        count++;
        }
    }
    
    return count;
}

function selectionsHaveRelated() {
    var url = ServerURL + "/Lists/webmethods/_selectionshaverelated.aspx";
    var paramString = "listings=" + escape(selectedListings.join(','));
    var xmlHttp;
    
    xmlHttp = GetSynchronousXmlHttpObject();	
    xmlHttp.open("POST", url, false); 
    xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xmlHttp.send(paramString);
    
    if (xmlHttp.responseText != "failure") {
        var relatedCount = xmlHttp.responseText;
        
        if (relatedCount > 0) return true;
        else return false;
    } 
    else {
        return false;
    }
}

function selectAllListings(tableID) {
    var cookieValue = readCookie("myListSelections");
    
	var images = document.getElementsByTagName("img");
	var tableIDLen = tableID.length;
	
	for (var i=0;i<images.length;i++)
	{
		element = images[i];
		if (element.id.substring(0, tableIDLen) == tableID 
			&& element.id.substring(tableIDLen, 6 + tableIDLen).toLowerCase() == "_recid") {

			var listingNum = element.id.substring(tableIDLen+6);
			element.src="/Lists/images/checkmark_icon.gif";
			
			if (!selectedListings.has(listingNum)) selectedListings.push(listingNum);
			if((","+cookieValue).indexOf(","+listingNum+",") == -1) cookieValue = listingNum + "," + cookieValue;
		}
	}	
	
	var expire = cookieExp;
	expire = "; expires=" + expire.toGMTString();

    document.cookie = "myListSelections=" + cookieValue + expire + "; domain=foreclosures.com; path=/";
    
    showSelectionCount();
    
    SelectionsHelp();
}

function deselectAllListings(tableID) {
    var cookieValue = readCookie("myListSelections");
	var images = document.getElementsByTagName("img");
	var tableIDLen = tableID.length;
	
	for (var i=0;i<images.length;i++)
	{
		element = images[i];
		if (element.id.substring(0, tableIDLen) == tableID 
			&& element.id.substring(tableIDLen, 6 + tableIDLen).toLowerCase() == "_recid") {
			
			var listingNum = element.id.substring(tableIDLen+6);
			element.src="images/checkwatermark_icon.gif";
			
	        var position = selectedListings.pos(listingNum);
	        if (position >= 0) {
		        selectedListings.splice(position, 1);
	        }
        	
	        cookieValue = (","+cookieValue).replace(","+listingNum+",", ",").substring(1);
		}
	}
	
    var expire = cookieExp;
    expire = "; expires=" + expire.toGMTString();
    
    showSelectionCount();

    document.cookie = "myListSelections=" + cookieValue + expire + "; domain=foreclosures.com; path=/";
}

function SelectionsHelp() {
    //Show or Hide Queue Help Window, after above confirm may have popped, so it stays in foreground
	if(readCookieParam("SiteHelp", "SelectionsHowTo") != "Hide")
	{
	    var url;
	    var xmlHttp;
    
        url = ServerURL + "/lists/tutorial/selections1.asp";        
        xmlHttp = GetSynchronousXmlHttpObject();	
        xmlHttp.open("GET", url, false); 		
        xmlHttp.send(null);        
        
        document.getElementById("genericInfoDialogTitle").innerHTML = "Selections";
        document.getElementById("genericInfoDialogContent").innerHTML = xmlHttp.responseText;
        
	    showModalBox("genericInfoDialog", 450, 350, "", "CloseSelectionsHelpHandler()");
    }
} 



function trimListingSelections(maxSelections) {
    for (i = selectedListings.length - 1; i >= maxSelections; i--) {
        removeFromSelections(selectedListings[i]); 
    }
    for (h = 0; h < listingTables.length; h++) {
        var id = listingTables[h];
        var table = document.getElementById(id);
        //var images = table.getElementsByTagName("img");
        var images = document.getElementsByTagName("img");
        
        for (var i=0;i<images.length;i++)
        {
            element = images[i];
            if (element.id.substring(0, id.length) == id 
                && element.id.substring(id.length, 6 + id.length).toLowerCase() == "_recid") {
                var listingNum;            		
                var found = false;
                listingNum = element.id.substring(id.length + 6);
                for (var j = 0; j < selectedListings.length; j++) {
                    if (selectedListings[j] == listingNum) { found = true; break; }		                
                }
                if (!found) element.src="images/checkwatermark_icon.gif";
            }
        }
    } 
}