$(document).ready(function () {
	
	//globals
	window.browser = $.browser;
	window.maxVisibleCols = 6;

	if(browserIsIE6()) {
		// fix background flicker in IE6
		document.execCommand("BackgroundImageCache", false, true);
	}
	
	attachEvents();
	
});

function browserIsIE6() {
	
	var oBrowser = window.browser;

	return (oBrowser.msie && parseInt(oBrowser.version) <= 6);
	
}

function updateColumnsStyleSheet(sSelector, sRule) {

	clearColumnsStyleSheetRules();

	var rStyleSheets = document.styleSheets;
	
	var oSheet;
	for(var i=0, nLen = rStyleSheets.length; i < nLen; i++) {
		if(rStyleSheets[i].title == "columnStyles") {
			oSheet = rStyleSheets[i];
			break;
		}
	}
	
	if(!oSheet) {
		return;
	}

	if(oSheet.cssRules != undefined) {
		
		oSheet.insertRule(sSelector + "{" + sRule + "}", 0);

	} else if(oSheet.rules != undefined) {
		
		var rSelectors = sSelector.split(",");
		for(var i=0, nLen = rSelectors.length; i < nLen; i++) {
			oSheet.addRule(rSelectors[i], sRule, i);		
		}
		
	}

}

function clearColumnsStyleSheetRules() {
	
	var rStyleSheets = document.styleSheets;
	
	var oSheet;
	for(var i=0, nLen = rStyleSheets.length; i < nLen; i++) {
		if(rStyleSheets[i].title == "columnStyles") {
			oSheet = rStyleSheets[i];
			break;
		}
	}
	
	if(!oSheet) {
		return;
	}

	if(oSheet.cssRules != undefined) {

		while(oSheet.cssRules.length) {
			oSheet.deleteRule(0);
		}
		
	} else if(oSheet.rules != undefined) {

		while(oSheet.rules.length) {
			oSheet.removeRule(0);
		}
		
	}
	
}

function attachEvents() {
	
	$("#btnCloseTerms").bind("click", null, closeTerms);
	$("#lbShowTerms").bind("click", null, showTerms);
	
	$("#lbAccountSettings, #btnCloseAccountSettings").bind("click", null, toggleAccountSettings);
	$("#lbForgotPassword, #btnCloseForgotPassword").bind("click", null, toggleForgotPassword);
	
	$("#toggleSearchOptionsCR").bind("click", null, toggleAdvancedSearchOptionsCreateReport);
	
	
	$(".selectedCounty.select, .selectedHealthSystem.select, .selectedReferralRegion.select").live('click', function(){
 	    $(this).prev(":not(input:radio:checked)").click();
 	});
 	
 	$("#ddState li").live("click", function() {
 	    var data = $(this).metadata();
 	    $("#hospitalCriteria", $(this).closest(".searchCriteria")).toggle(!data.first);
 	});
 	
 	$("#ctSearchOptions .stateCriteria ul.radioGroup").find("input:radio").live("click", function() {
 	    $(this).parent("li").siblings().children("div.select").each(function(idx) {
 	        $(this).attr("value", null).children("em").html($(this).find("ul li:first").html());
        })
 	});
 	
	$("dt.ecControl", "div.benchmarks").bind("click", null, toggleBenchmarkDetails);
	
	var oManageReports = $("#ctManageReports");
	
	if(oManageReports.length) {
		
		$("a", "#menuManageReports").bind("click", null, handleReportsMenuItem);
		$("a.lbMoreInfo", "#ctReportViewHead")
		    .click(toggleMoreInfoPanel)
		    .hover(
		        function() { hoverMoreInfoPanel($(this), "over"); },
		        function() { hoverMoreInfoPanel($(this), "out"); }
		    );
		$("a.lbMoreInfo", "#ctReportViewBody")
		    .click(toggleMoreInfoPanelRow)
		    .hover(
		        function() { hoverMoreInfoPanelRow($(this), "over"); },
		        function() { hoverMoreInfoPanelRow($(this), "out"); }
		    );
		
		$("#colToggleControlShiftRight, #colToggleControlShiftLeft").click(updateDisplayedColumns);
		
		//select/deselect all
		$("#lbSelectMeasuresAll").click(selectAllColumns);
		$("#lbSelectMeasuresNone").click(deselectAllColumns);
		
		//toggle deselected cell visibility
		$("#cbHideDeselected").click(toggleDeselectedCellVisibility);
		
		//column status controls
		$("input", "#reportViewHead td.control").click(toggleColumnStatus);
		
      
    }

	var oSavedReportsTable = $("#tblSavedReports");
	
	if(oSavedReportsTable.length) {
		$("div.ecControl", "#tblSavedReports").bind("click", null, toggleSavedReportSummaries);
	}
	
	var oCreateRptOptions = {};
	
	if($("#ctCreateNewReportTop").get(0)) {
		oCreateRptOptions.reportDetailsPage = true;
	}
	
	$("#toggleCreateReport").bind("click", oCreateRptOptions, toggleCreateReportPanel);
	
	$("#toggleSearchOptions").bind("click", null, toggleAdvancedSearchOptions);
	$(".search-tab").each(function(idx) {
	    //Active tab is a div, inactive tab is an anchor.
	    var data = $(this).metadata();
	    if (!data['for']) return;
	    $(this).data("for", $(data['for'], $(this).closest(".content")))
	           .click(function() {
	                if ($.browser.msie && $.browser.version == 6) {
	                    $(this).closest(".search-tabs").css("position", "static").css("position", "relative");
	                }
                    if ($(this).hasClass("active-tab")) return false;
	                $(this).siblings(".search-tab")
	                        .removeClass("active-tab")
	                        .each(function(idx) {
	                            $(this).data("for").hide();
	                        });
	                $("#searchOptions", $(this).closest(".content")).toggleClass("wide");
	                var content = $(this).data("for");
	                $(this).addClass("active-tab").blur();
	                content.show();
	                
	                /*if ($.browser.msie && $.browser.version <= 7) {
	                    var height = null;
	                    if (content.height() > 150) height = 190;
	                    $("#searchOptions").css("height", height);
                    }*/
                    
	                return false;
	           })
	});
	
	// custom select elements
	attachCustomSelectEvents();
	
}







function toggleCreateReportPanel(e) {
	//reset the array any time the create new report is clicked
    // by mhalla on june 7th 2010
    watchlist = new Array();
    //alert(watchlist.length);
	var oData = e.data || {};

	$("#toggleCreateReport").toggleClass("expand");
	
	if(oData.reportDetailsPage) {
		
		$("#pnlCreateReport").toggleClass("none");
		
		if($("#pnlCreateReport").hasClass("none")) {
			hidePageMask();			
		} else {
			showPageMask($("#ctManageReports"));
		}
		
	} else {
		
		$("#pnlCreateReport").toggleClass("none");
		$("#toolsResources").toggleClass("none");

	}
	
}

function toggleBenchmarkDetails(e) {

	var oEl = e.target;
	
	$(oEl).closest("dl").toggleClass("expand");

}

function toggleSavedReportSummaries(e) {
	
	var oEl = e.target;
	
	$(oEl).closest("tbody").toggleClass("collapse");

}

function closeTerms(e) {
	$("#pnlTermsConditions").addClass("none");
}

function showTerms(e) {
	
	e.preventDefault();
	$("#pnlTermsConditions").removeClass("none");

}

function toggleAdvancedSearchOptions(e) {
	
	$("#ctSearchByLocation").toggleClass("expand");
	
}

function toggleAdvancedSearchOptionsCreateReport(e) {
	
	$("#ctSearchByLocationCR").toggleClass("expand");

}

function toggleAccountSettings(e) {

	e.preventDefault();
	
	if($("#pnlAccountSettings").hasClass("none")) {
		showPageMask();
	} else {
		hidePageMask();
	}
	
	$("#pnlAccountSettings").toggleClass("none");
	
}

function toggleForgotPassword(e) {
	
	e.preventDefault();
	
	if($("#pnlForgotPassword").hasClass("none")) {
		showPageMask();
	} else {
		hidePageMask();
	}
	
	$("#pnlForgotPassword").toggleClass("none");
	
}

function updateDisplayedColumns(e) {
    if (ipt) window.clearTimeout(ipt);
    if (iptr) window.clearTimeout(iptr);
    $("#pnlInfoPanelTemp,#pnlMoreInfoTemp").remove();
    $("a.lbMoreInfo", "#ctReportViewBody").removeClass("lbMoreInfo-open");
    $("a.lbMoreInfo", "#ctReportViewHead").removeClass("lbMoreInfo-open");	
    
	var sDirection = "";
	
	if(e) {

		var oEl = e.target;
		var sDirection = $(oEl).attr("direction");

	}

	var bInactiveCellsHidden = $("#cbHideDeselected").get(0).checked;
	var oFirstRow = $("tr:eq(0)", "#ctReportViewBody");
	
	var rAvailableCells = $("td", oFirstRow);
	
	var rValidIndexes = [];
	
	if(bInactiveCellsHidden) {
		
		var rTemp = [];
		
		rAvailableCells.each(function(nIndex, oTd){
			
			if(!$(oTd).hasClass("inactive")) {
				rValidIndexes.push(nIndex);
			}
			
		});
		
	} else {
		
		rAvailableCells.each(function(nIndex, oTd){
			rValidIndexes.push(nIndex);
		});
		
	}
	
	// no active/visible cells	
	if(!rValidIndexes.length) {
		updateToggleControlStates(0, 0);
		return;
	}
	var nAvailableCellCount = rValidIndexes.length;
	var nFirstAvailableCellIndex;
	
	for(var i=0, nLen = rValidIndexes.length; i < nLen; i++) {
		if($(rAvailableCells[rValidIndexes[i]]).css("display") != "none") {
			nFirstAvailableCellIndex = i;
			break;
		}
	}
	if(sDirection == "right" && nFirstAvailableCellIndex === 0){
		return;	
	} else if(sDirection == "left" && (nFirstAvailableCellIndex + maxVisibleCols) >= rValidIndexes.length) {
		return;
	}

	if(sDirection == "left") {
		nFirstAvailableCellIndex++;
	} else if(sDirection == "right") {
		nFirstAvailableCellIndex--;
	}

	if(rValidIndexes.length <= maxVisibleCols) {
		nFirstAvailableCellIndex = rValidIndexes[0];
	}
	
	var rSelectors = [];
		
	for (var i = nFirstAvailableCellIndex, nLen = rValidIndexes.length; i < nLen; i++) {

		rSelectors.push(".col" + (rValidIndexes[i] + 1));

		if (rSelectors.length >= maxVisibleCols) {
			break;
		}

	}

	updateColumnsStyleSheet(rSelectors.join(","), "display:table-cell !important;*display:block !important;");
	
	updateToggleControlStates(nFirstAvailableCellIndex, rValidIndexes.length);
}

function updateToggleControlStates(nFirstAvailableCellIndex, nValidIndexesLength) {
	
	//update column-toggle-control state
	if(nValidIndexesLength <= maxVisibleCols) {
		$("#colToggleControlShiftRight").addClass("noShift");
		$("#colToggleControlShiftLeft").addClass("noShift");
	} else {
		$("#colToggleControlShiftRight").removeClass("noShift");
		$("#colToggleControlShiftLeft").removeClass("noShift");
	}
	
	if(nFirstAvailableCellIndex === 0){
		$("#colToggleControlShiftRight").addClass("noShift");
	}
	
	if((nFirstAvailableCellIndex + maxVisibleCols) >= nValidIndexesLength) {
		$("#colToggleControlShiftLeft").addClass("noShift");
	}
	
}

function selectAllColumns(e){
	
	e.preventDefault();
	
	$("th,td", "#reportViewHead").removeClass("inactive");
	$("td", "#ctReportViewBody").removeClass("inactive");
	$("input", "#reportViewHead td.control").attr("checked", "checked");
	
	updateDisplayedColumns();
	
}

function deselectAllColumns(e) {

	e.preventDefault();
	
	$("th:not(.omit), td:not(.omit)", "#reportViewHead").addClass("inactive");

	$("td", "#ctReportViewBody").addClass("inactive");
	$("input", "#reportViewHead td.control").removeAttr("checked");
	
	updateDisplayedColumns();

}

function toggleDeselectedCellVisibility(e){
	
	var oInput = e.target;
	var bHideCells = (oInput.checked);
	
	if(bHideCells) {

		$("#ctReportView").addClass("hideInactive");

	} else {

		$("#ctReportView").removeClass("hideInactive");

	}

	updateDisplayedColumns();

}

function toggleColumnStatus(e) {

	var oInput = e.target;
	
	var bActive = (oInput.checked);
	var sAction = (bActive) ? "removeClass" : "addClass";
	
	//determine columns orientation within a row
	var oParentCell = $(oInput).closest("td").get(0);
	var oParentRow = $(oParentCell).closest("tr");
	
	var rCells = $("td:not(.masterControls)", oParentRow);
	
	var nCellPositionIndex;
	for(var i=0, nLen = rCells.length; i < nLen; i++) {
		if(rCells[i] == oParentCell) {
			nCellPositionIndex = i;
			break
		}
	}

	if(nCellPositionIndex === undefined) {
		return;
	}

	var $tr = $("tr", "#ctReportViewBody");
	var oCell;

	//thead cell
	
	var $thead = $("thead", "#reportViewHead");
	
	$("th:eq(" + nCellPositionIndex + ")", $("tr:eq(0)", $thead))[sAction]("inactive");
	$("td:eq(" + nCellPositionIndex + ")", $("tr:eq(1)", $thead))[sAction]("inactive");
	$("td:eq(" + (nCellPositionIndex + 1) + ")", $("tr:eq(2)", $thead))[sAction]("inactive");

	//tbody cells	
	$($tr).each(function(nIndex, oTr) {
		$("td:eq(" + nCellPositionIndex + ")", oTr)[sAction]("inactive");
	});
	
	updateDisplayedColumns();
	
}

function showPageMask(oContainer) {

	var oContainer = oContainer || $("#wrapper");
	
	var oSize = {
		height:$(oContainer).innerHeight(),
		width:$(oContainer).innerWidth()
	};
	
	var oMask = $("#pageMask").get(0) || $('<div id="pageMask"></div>');
	
	$(oMask).css({'height':oSize.height, 'width':oSize.width});
	$(oMask).removeClass("none");
	$(oMask).appendTo(oContainer);

}

function hidePageMask(){
	
	$("#pageMask").addClass("none");
	
}

function handleReportsMenuItem(e) {
	
	e.preventDefault();
	
	var oEl = e.target;
	
	var oLi = $(oEl).closest("li");
	
	var bActiveItemClicked = ($(oLi).hasClass("active"));
	
	if(bActiveItemClicked) {
		hidePageMask();
	} else {
		showPageMask($("#ctReportView"));
	}
	
	// reset all buttons
	$("li", "#menuManageReports").removeClass("active");
	
	// hide all panels
	$("div.reportAdmin", "#ctMenuManageReports").addClass("none");
	
	if(bActiveItemClicked) { return; }
		
	$(oLi).addClass("active");
	
	var sAction = $(oEl).attr("action");
	
	// show active panel
	switch(sAction) {
		
		case "save":
			$("#pnlSaveReport").removeClass("none");
			break;
		
		case "edit":
			$("#pnlEditReport").removeClass("none");
			break;
		case "print":
			$(oLi).removeClass("active");
			hidePageMask();
			alert('For best results please change your print settings to Landscape printing');
			window.print();
			break;
			
		case "export":
			$("#pnlExportReport").removeClass("none");
			break;
			
	}
	
}

function attachCustomSelectEvents() {
	
	var rCustomSelects = $("div.select");

	if(!rCustomSelects.length) { return; }

	$(rCustomSelects).bind("click", null, toggleCustomSelectOptions);
	$(rCustomSelects).bind("mouseleave", null, hideCustomSelectOptions);
	
	// attach hover events to select dropdown items
	if(browserIsIE6()) {

		$("li", rCustomSelects).hover(showCustomSelectOptionHighlight, hideCustomSelectOptionHighlight);

	}
	
    $("li", rCustomSelects).bind("click", null, updateCustomSelectLabel);
	//$("li", rCustomSelects).click(function() { updateCustomSelectLabel });
    	
	var oTest = $("ul", rCustomSelects);

	$("ul", rCustomSelects).bind("mouseleave", null, hideCustomSelectOptions);
	
}

function showCustomSelectOptionHighlight(e) {
	var oEl = e.target;
	$(oEl).addClass("hover");
}

function hideCustomSelectOptionHighlight(e) {
	var oEl = e.target;
	$(oEl).removeClass("hover");
}

function toggleCustomSelectOptions(e) {
	
	var oEl = e.target;
	var oSelectContainer = $(oEl).closest("div.select");
	
	$(oSelectContainer).toggleClass("selectActive");
	/*if($(oSelectContainer).hasClass("selectActive")) {
		$(oSelectContainer).removeClass("selectActive");
	} else {
		$(oSelectContainer).addClass("selectActive");
	}*/

}

function showCustomSelectOptions(e){

	var oEl = e.target;

	$(oEl).closest("div.select").addClass("selectActive");
	
}

function hideCustomSelectOptions(e){

	var oEl = e.target;
	var oRelatedTarget = e.relatedTarget;
	//var sRelatedTargetTag = String(oRelatedTarget.tagName).toLowerCase();
	var oSelect = $(oEl).closest("div.select").get(0);
	
	// prevent hide if user mouses back into the parent select from the options panel
	if($(oRelatedTarget).closest("div.select").get(0) == oSelect) {
		return;
	}
	
	$(oSelect).removeClass("selectActive");
	
}

function updateCustomSelectLabel(e) {
	
	var oEl = e.target;
	
	var sValue = oEl.getAttribute("value") || oEl.innerHTML;

	var oSelect = $(oEl).closest("div.select").get(0);
		
	var oLabel = $("em", oSelect).get(0);
	
	oSelect.setAttribute("value", sValue);
	
	oLabel.innerHTML = oEl.innerHTML;

}

var ipt = null;

function hoverMoreInfoPanel(el, state) {
    if ($(el).hasClass("lbMoreInfo-open")) {
        if (state == "over") {
             if (ipt) window.clearTimeout(ipt);
        } else {
            hideMoreInfoPanel($(el));
        }
    }
}

function toggleMoreInfoPanel() {
	var oEl = this;
	
	if (ipt) window.clearTimeout(ipt);
    $("#pnlInfoPanelTemp").remove();
    $("a.lbMoreInfo", "#ctReportViewHead").not(oEl).removeClass("lbMoreInfo-open");
    
    $(oEl).toggleClass("lbMoreInfo-open");
	
	if (!$(oEl).hasClass("lbMoreInfo-open")) {
	    return;
	}
    
	var oPosition = $(oEl).offset();
	var nIconWidth = $(oEl).outerWidth();//20;
	var nIconHeight = $(oEl).outerHeight();//19;
	
	var oTh = $(oEl).closest("th");
	var oPanel = $("div.pnlInfoPanel", oTh).get(0);
	
	if(!oPanel) { return; }
	
	var nPanelWidth = $(oPanel).outerWidth();
	var nTop = (oPosition.top + nIconHeight);
	var nLeft = (oPosition.left - nPanelWidth + nIconWidth);
	
	if(window.browser.msie) {
		/*nTop = nTop + 3;
		nLeft = nLeft + 4;*/
	}
	
	$(oPanel).css({'top':nTop + "px", 'left':nLeft + "px"});
	
	var oPanelTemp = $(oPanel).clone();
	oPanelTemp.hover(
	    function() {
	        if (ipt) window.clearTimeout(ipt);
	    }, function() {
	        hideMoreInfoPanel(oEl);
	    }
	);
	oPanelTemp.addClass("pnlInfoPanelTop").attr("id", "pnlInfoPanelTemp").appendTo("#wrapper").show();
}
function hideMoreInfoPanel(e) {
    ipt = window.setTimeout(function() {
        $(e).click();
    }, 2000);
}

var iptr = null;

function hoverMoreInfoPanelRow(el, state) {
    if ($(el).hasClass("lbMoreInfo-open")) {
        if (state == "over") {
             if (iptr) window.clearTimeout(iptr);
        } else {
            hideMoreInfoPanelRow($(el));
        }
    }
}

function toggleMoreInfoPanelRow() {
    var oEl = this;//e.target;
    
    if (iptr) window.clearTimeout(iptr);
    $("#pnlMoreInfoTemp").remove();
    $("a.lbMoreInfo", "#ctReportViewBody").not(oEl).removeClass("lbMoreInfo-open");
    
	$(oEl).toggleClass("lbMoreInfo-open");
	
	if (!$(oEl).hasClass("lbMoreInfo-open")) {
	    return;
	}
	
	var oOffset = $(oEl).offset();
	
	var oParent = $(oEl).closest("div");
	var oPanel = $("div.pnlInfoPanel", oParent);
	
	if (!oPanel) { return; }

	var nTop = (oOffset.top + 19);
	var nLeft = (oOffset.left);
	
	if(window.browser.msie) {
		nTop = nTop - 3;
		//nLeft = nLeft - 4;
	}
	
	var oPanelClone = oPanel.clone();
	oPanelClone.hover(
	    function() {
	        if (iptr) window.clearTimeout(iptr);
	    }, function() {
	        hideMoreInfoPanelRow(oEl);
	    }
	);
	oPanelClone.attr("id", "pnlMoreInfoTemp");
	oPanelClone.css({"display":"block", "top":nTop + "px", "left":nLeft + "px"});
	oPanelClone.appendTo("#wrapper");

}

function hideMoreInfoPanelRow(e) {
    iptr = window.setTimeout(function() {
        $(e).click();
    }, 2000);
}
