		function HideOrShowDiv(div_id, hide_or_show_not) 
		{    
			var div_element = document.getElementById(div_id); 

			if (hide_or_show_not) 
			{
				div_element.style.display = "block";
			} 
			else 
			{        
				div_element.style.display = "none";  
			}   
			return false;
		}
		function CMMethPreview(whichOne) 
		{   
		    document.getElementById('divCMMethStamp_na').style.display = "none";
		    document.getElementById('divCMMethStamp_g').style.display = "none";
		    document.getElementById('divCMMethStamp_y').style.display = "none";
		    document.getElementById('divCMMethStamp_w').style.display = "none";
		    document.getElementById('divCMMethStamp_wx').style.display = "none";
		    document.getElementById('divCMMethStamp_e').style.display = "none";
		    document.getElementById('divCMMethStamp').style.display = "block";
            switch(whichOne)
            {
                case 'na':
                    document.getElementById('divCMMethStamp_na').style.display = "block";
                    break;
                case 'g':
                    document.getElementById('divCMMethStamp_g').style.display = "block";
                    break;
                case 'y':
                    document.getElementById('divCMMethStamp_y').style.display = "block";
                    break;
                case 'w':
                    document.getElementById('divCMMethStamp_w').style.display = "block";
                    break;
                case 'wx':
                    document.getElementById('divCMMethStamp_wx').style.display = "block";
                    break;
                case 'e':
                    document.getElementById('divCMMethStamp_e').style.display = "block";
                    break;
                default:
                    document.getElementById('divCMMethStamp').style.display = "none";
                    break;
            }
			return false;
		}
		function ReverseVisibility(div_id, link_id, visible_text, hidden_text, hidden_ctrl, default_visible_OR_hidden_NOT) 
		{    
			var div_element = document.getElementById(div_id); 
			var using_ie = false;
            if (/MSIE (\d+\.\d+);/.test(navigator.userAgent))
            {
                using_ie = true;
            }

			if (div_element.style.display == "none") 
			{
				div_element.style.display = "block";
				window.document.images['IMG_' + div_id].src = "images/minus.jpg";
				document.getElementById(link_id).innerHTML = hidden_text;
                if (false)  
                {  
				    if (default_visible_OR_hidden_NOT == 1) 
				    {
					    document.getElementById(hidden_ctrl).value = "0";  
				    }
				    else
				    {
					    document.getElementById(hidden_ctrl).value = "1";  
				    }
				}
			} 
			else 
			{        
				div_element.style.display = "none";  
				window.document.images['IMG_' + div_id].src = "images/plus.jpg";      
				document.getElementById(link_id).innerHTML = visible_text;
				if (false)
				{
				    if (default_visible_OR_hidden_NOT == 1) 
				    {
					    document.getElementById(hidden_ctrl).value = "1";  
				    }
				    else
				    {
					    document.getElementById(hidden_ctrl).value = "0";  
				    }
				}
			}   
			return false;
		}
		
		function OpenPopup(pageURL, popupName, width, height, toolbars, resizable) 
		{    
			window.open(pageURL, popupName,"menubar=no,width=" + width + ",height=" + height + ",toolbar=" + toolbars + ",scrollbars=1,resizable=" + resizable + ",statusbar=" + toolbars + ",menubar=" + toolbars);
		}
		
		function ShowMenuIcons(indexToShow, maxIconSets, status_text) 
		{    
			var div_element;  
			
			for(var i=1; i<=maxIconSets; i++)
			{
				div_element = document.getElementById("cssMenuChild" + i);
				div_element.style.display = "none";
			}
			div_element = document.getElementById("cssMenuChild" + indexToShow);
			div_element.style.display = "block";
			
			document.getElementById("lblMenuDescription").innerHTML = status_text;
		}
		
		function ShowMenuDescription(status_text) 
		{
			if (status_text == "") 
			{
				document.getElementById("lblMenuDescription").innerHTML = '';
			}
			else
			{
				document.getElementById("lblMenuDescription").innerHTML = status_text;
			}
		}
		
		function ReverseVisibilityOnCheck(div_id_true, div_id_false, check_id) 
		{    
			var div_element_true = document.getElementById(div_id_true);
			var div_element_false = document.getElementById(div_id_false);
			var chk_element = document.getElementById(check_id);

			if (chk_element.checked == 1) 
			{
				div_element_true.style.display = "block";
				div_element_false.style.display = "none";
			} 
			else 
			{        
				div_element_true.style.display = "none";  
				div_element_false.style.display = "block";  
			}   
			return true;
		}
		
		function load_module(url_str, div_id)
        {
            var http = false;
            var date = new Date();

            if(navigator.appName == "Microsoft Internet Explorer") {
              http = new ActiveXObject("Microsoft.XMLHTTP");
            } else {
              http = new XMLHttpRequest();
            } 
                     
            if (url_str.indexOf('?') == 0)
            {
                url_str = url_str + '?tsp=' + date.getTime();
            }
            else
            {
                url_str = url_str + '&tsp=' + date.getTime();
            }
            
            http.open("GET", url_str, true);
            http.onreadystatechange=function() {
            if(http.readyState == 4) {
              document.getElementById(div_id).innerHTML = http.responseText;
            }
          }
          http.send(null);
          return false;
        }
        function reload_image(img_id) 
        {
            var img_obj = document.getElementById(img_id);
            var img_path = img_obj.src;
            var date = new Date();
            var pos = img_path.indexOf('tsp=');
            if (pos >= 0) 
            {
                img_path = img_path.substr(0, pos-1);
            }            
            if (img_path.indexOf('?') == 0)
            {
                img_path = img_path + '?tsp=' + date.getTime();
            }
            else
            {
                img_path = img_path + '&tsp=' + date.getTime();
            }
            img_obj.src = img_path;
            return false;
        }
	    function update_bbt_choice(new_setting, cycle_id)
        {
            var http = false;
            var date = new Date();
            var url_str = 'module_ovDateTable.aspx?new_type=1&bbt_type=' + new_setting + '&cid=' + cycle_id + '?tsp=' + date.getTime();
            var div_id = 'update_status';
            var choices = new Array();

            choices[0] = "Traditional";
            choices[1] = "Coverline";
            choices[2] = "Averaging";
            choices[3] = "Smoothing";
            choices[4] = "Automatic Selection";
            document.getElementById(div_id).innerHTML = 'Saving...';
            if ((new_setting < 0) || (new_setting > 4)) 
            {
                new_setting = 0;
            }

            if(navigator.appName == "Microsoft Internet Explorer") 
            {
              http = new ActiveXObject("Microsoft.XMLHTTP");
            } else {
              http = new XMLHttpRequest();
            } 
            
            http.open("GET", url_str, true);
            http.onreadystatechange=function() {
            if(http.readyState == 4) 
            {
              document.getElementById(div_id).innerHTML = 'Updated BBT Method to ' + choices[new_setting];
              reloadOvDates();
              reload_image('imgChart');
              reloadOvConf();
            }
          }
          http.send(null);
        }
	    function update_cm_choice(new_setting, cycle_id)
        {
            var http = false;
            var date = new Date();
            var url_str = 'module_ovDateTable.aspx?new_type=1&cm_type=' + new_setting + '&cid=' + cycle_id + '?tsp=' + date.getTime();
            var div_id = 'update_status';
            var choices = new Array();

            choices[0] = "Automatic Selection";
            choices[1] = "Traditional";
            choices[2] = "Alternate";
            document.getElementById(div_id).innerHTML = 'Saving...';
            if ((new_setting < 0) || (new_setting > 2)) 
            {
                new_setting = 0;
            }

            if(navigator.appName == "Microsoft Internet Explorer") 
            {
              http = new ActiveXObject("Microsoft.XMLHTTP");
            } else {
              http = new XMLHttpRequest();
            } 
            
            http.open("GET", url_str, true);
            http.onreadystatechange=function() {
            if(http.readyState == 4) 
            {
              document.getElementById(div_id).innerHTML = 'Updated CM Method to ' + choices[new_setting];
              reloadOvDates();
              reload_image('imgChart');
              reloadOvConf();
            }
          }
          http.send(null);
        }
       
		function printGraph() 
		{    
			var div_element;  
			var maxDays = 40;
			var MAX_HEIGHT = 200;
			var temp_height;
						
			for(var i=1; i<=maxDays; i++)
			{
			    if (jsBarHts[i] <= 0)
			    {
			        jsBarHts[i] = 1;
			    }
				div_element = document.getElementById('cssDay' + i);
				temp_height = Math.round((jsBarHts[i] * MAX_HEIGHT) / 100);   
				div_element.style.height = temp_height + "px";
				div_element.style.top = MAX_HEIGHT - temp_height + 30 + "px";
				div_element.style.backgroundColor = "rgb(" + Math.round((jsRedUpper - jsRedLower)*(jsBarHts[i]/MAX_HEIGHT) + jsRedLower) + ", " + Math.round((jsGreenUpper - jsGreenLower)*(jsBarHts[i]/MAX_HEIGHT) + jsGreenLower) + ", " + Math.round((jsBlueUpper - jsBlueLower)*(jsBarHts[i]/MAX_HEIGHT) + jsBlueLower) + ")";
				
				div_element = document.getElementById('cssDayLabel' + i);
				if (jsDayLbl[i] != -1) 
				{
				    div_element.innerHTML = jsDayLbl[i];
				}
				else
				{
				    div_element.innerHTML = "-";
				}
				
				div_element = document.getElementById('cssDate' + i);
				div_element.innerHTML = jsDateLbl[i];
			}
		}
		function printCMMethod() 
		{    
			var div_element;  
			var maxDays = 50;
			var latest_index = 0;

			var babyPicURL=new Array();
			babyPicURL[0]='';
			babyPicURL[1] = '<img src="images/cmmeth_baby1.gif" />';
			babyPicURL[2] = '<img src="images/cmmeth_baby2.gif" />';
			babyPicURL[3] = '<img src="images/cmmeth_baby3.gif" />';
			babyPicURL[4] = '<img src="images/cmmeth_babyX.gif" />';
			babyPicURL[5] = '<img src="images/cmmeth_baby.gif" />';
			
			var babyPicColor=new Array();
			babyPicColor[0]='FFFFFF';
			babyPicColor[1]='00FF00';
			babyPicColor[2]='FFFF00';
			babyPicColor[3]='FFFFFF';
			babyPicColor[4]='FF0000';	
			babyPicColor[5]='BBBBBB';
						
			var BillRules=new Array();
			BillRules[0]='';
			BillRules[1]='Rule #1';
			BillRules[2]='Rule #2';
			BillRules[3]='Rule #3';
			BillRules[4]='Rule #4';
			
			var interpSymbolURL=new Array();	
		    interpSymbolURL[0]='';
		    interpSymbolURL[1] = '<img src="images/cmmeth_day.png" title=" ." />'; 
		    interpSymbolURL[2] = '<img src="images/cmmeth_moon.png" title=" ." />'; 
		    interpSymbolURL[3] = '<img src="images/cmmeth_crossout.png" title=" ." />';
		    interpSymbolURL[4] = '<img src="images/cmmeth_smile.png" title=" ." />';
		    interpSymbolURL[5] = '<img src="images/cmmeth_bigsmile.png" title=" ." />';
		    interpSymbolURL[6] = '<a href="extendsub.aspx" style="font-size: 10px">Req Sub</a>';

			var NatSymbolURL=new Array();
			NatSymbolURL[0]='';
			NatSymbolURL[1]='<img src="images/cmmeth_intnl_mens.gif">';
			NatSymbolURL[2]='<img src="images/cmmeth_intnl_g.gif">';
			NatSymbolURL[3]='<img src="images/cmmeth_intnl_g1.gif">';
			NatSymbolURL[4]='<img src="images/cmmeth_intnl_g2.gif">';
			NatSymbolURL[5]='<img src="images/cmmeth_intnl_g3.gif">';
			NatSymbolURL[6]='<img src="images/cmmeth_intnl_y.gif">';
			NatSymbolURL[7]='<img src="images/cmmeth_intnl_y1.gif">';
			NatSymbolURL[8]='<img src="images/cmmeth_intnl_y2.gif">';
			NatSymbolURL[9]='<img src="images/cmmeth_intnl_y3.gif">';
			NatSymbolURL[10]='<img src="images/cmmeth_intnl_w.gif">';
			NatSymbolURL[11]='<img src="images/cmmeth_intnl_wX.gif">';
			NatSymbolURL[12]='<img src="images/cmmeth_intnl_w1.gif">';
			NatSymbolURL[13]='<img src="images/cmmeth_intnl_w2.gif">';
			NatSymbolURL[14]='<img src="images/cmmeth_intnl_w3.gif">';
			NatSymbolURL[15]='<img src="images/cmmeth_intnl_e.gif">';

			var SpottingSymbolURL=new Array();
			SpottingSymbolURL[0]='';
			SpottingSymbolURL[1]='<img src="images/cmmeth_spotting.gif" />';
			
			var SexSymbolURL=new Array();
			SexSymbolURL[0]='';
			SexSymbolURL[1]='<img src="images/cmmeth_intercourse.gif" />';	
					
            // Loop through and build chart
			for(var i=1; i<=maxDays; i++)
			{								
				div_element = document.getElementById('Bill_Pic_' + i);
				div_element.style.backgroundColor = "#" + babyPicColor[jsColorIndex[i]];
				
				div_element = document.getElementById('Bill_Pic_' + i);
				div_element.innerHTML = babyPicURL[jsBabyPicIndex[i]]; 
				
				div_element = document.getElementById('Bill_Spotting_' + i);
				div_element.innerHTML = SpottingSymbolURL[jsSpotPicIndex[i]];	 			
				
				div_element = document.getElementById('Bill_Intern_' + i);
				div_element.innerHTML = NatSymbolURL[jsIntSymbolIndex[i]]; 
				
				div_element = document.getElementById('Bill_Notes_' + i);
				div_element.innerHTML = jsNotes[i];
				div_element.title = jsNotes[i]; 
				
				div_element = document.getElementById('Bill_Interp_' + i);
				if ((jsInterpPicIndex[i] > 0) && (jsInterpPicIndex[i] < 6) && (jsRule[i] > 0))
				{
				    div_element.innerHTML = interpSymbolURL[jsInterpPicIndex[i]].replace(' ."', ' (' + BillRules[jsRule[i]] + ')"');
				}
				else
				{
				    div_element.innerHTML = interpSymbolURL[jsInterpPicIndex[i]];
				}
				
				div_element = document.getElementById('Bill_Date_' + i);
				if (jsNavigateURL[i] == '')
				{
				    div_element.innerHTML = jsDate[i];
				}
				else
				{
				    div_element.innerHTML = '<a href="fertilitydata.aspx?load=4&' + jsNavigateURL[i] + '" title="Click to Record/Edit Data">' + jsDate[i] + '</a>';	
				}
				
				div_element = document.getElementById('Bill_Sex_' + i);
				div_element.innerHTML = SexSymbolURL[jsIntercourse[i]]; 
				
				// See if there's anything to show or if we should just hide the whole cell
				div_element = document.getElementById('Bill_CD_' + i);
				if ((jsInterpPicIndex[i] != 0) || (jsColorIndex[i] != 0) || (jsBabyPicIndex[i] != 0) || (jsSpotPicIndex[i] != 0) || (jsIntSymbolIndex[i] != 0) || (jsIntercourse[i] != 0) || (jsNotes[i] != ''))
				{
				    latest_index = i;
				    
			        // Only shows Cycle Day number if data has been recorded for the given date
			        if (jsCycleDay[i] <= 0)
			        {
			            div_element.innerHTML = '';
			        }
			        else
			        {
			            if (jsNavigateURL[i] == '')
				        {
				            div_element.innerHTML = jsCycleDay[i];
				            div_element.title = jsSexNotes[i];
				        }
				        else
				        {
				            div_element.innerHTML = '<a href="fertilitydata.aspx?load=4&' + jsNavigateURL[i] + '" title="' + jsSexNotes[i] + '">' + jsCycleDay[i] + '</a>';	
				        }
			        }
				}
				else
				{
				    div_element.innerHTML = '';
				}
			}
			
			// Loop back through and update chart visibility of cells
			for(var i=1; i<=maxDays; i++)
			{
			    div_element = document.getElementById('CMMethCell_' + i);
				if (i > (latest_index+1))
				{
				    div_element.style.display = "none";
				}
				else
				{
				    div_element.style.display = "block";
				}
			}			
		}
        function PopupDetails(link_id, visible, div_id, day_index) 
        {            
			var element_id = document.getElementById(div_id)
			if (visible)
			{
				element_id.style.display='block';			
				element_id.style.top=get_y_location(link_id) - element_id.offsetHeight ;
				if (((day_index-1) % 7) > 3)
				{
				    if (navigator.userAgent.indexOf("MSIE")!=-1)
				    {
				        // Causes javascript problems in Firefox that cause it to keep moving
					    element_id.style.left=get_x_location(link_id); - element_id.offsetWidth + 100;
					}
					else
					{
					    element_id.style.left=get_x_location(link_id) - ((((day_index-1) % 7)-3)*60);
					}
				}
				else
				{
					element_id.style.left=get_x_location(link_id);
				}
            }
            else
            {
				element_id.style.display='none';
            }
        }
        function PopupInfo(link_id, visible, div_id) 
        {            
			var element_id = document.getElementById(div_id)
			if (visible)
			{
				element_id.style.display='block';			
				element_id.style.top=get_y_location(link_id) - element_id.offsetHeight ;
				element_id.style.left=get_x_location(link_id);
            }
            else
            {
				element_id.style.display='none';
            }
        }
		function get_x_location(linkObj)
		{
			var total = linkObj.offsetLeft;
			var parentEl = linkObj.offsetParent;
			while (parentEl != null)
			{
				total = total + parentEl.offsetLeft;
				parentEl = parentEl.offsetParent;
			}
			return total;
		}

		function get_y_location(linkObj)
		{
			var total = linkObj.offsetTop;
			var parentEl = linkObj.offsetParent;
			while (parentEl != null)
			{
				total = total + parentEl.offsetTop;
				parentEl = parentEl.offsetParent;
			}
			return total;
		}
 		function switch_cm_entry(entry_type) 
		{    
		    var div_detailed1 = document.getElementById('detailedCMEntryDiv1');
		    var div_detailed2 = document.getElementById('detailedCMEntryDiv2');
		    var div_basic = document.getElementById('basicCMEntryDiv');
		   
            if (entry_type == 'D')
            {
                div_detailed1.style.display = "block";
                div_detailed2.style.display = "block";
                div_basic.style.display = "none";
            }
            else
            {
                div_detailed1.style.display = "none";
                div_detailed2.style.display = "none";
                div_basic.style.display = "block";
            }

			return true;
		}
 		function initialize_fdata_controls(entry_type) 
		{    
		    var objRadio = document.forms[0].elements['cmEntryOption'];

            for (var i = 0; i < objRadio.length; i++) 
            { 
                if(objRadio[i].checked) 
                {
                    switch_cm_entry(objRadio[i].value);
                }
            }
			return true;
		}
 		function adjust_temp(NormalTimeID, ActualTimeID, TempTakenID, ResultBoxID) 
		{    
		    
		    var NormalTime = document.getElementById(NormalTimeID).value;
		    var ActualTime = document.getElementById(ActualTimeID).value;
		    var TempTaken = document.getElementById(TempTakenID).value;
		    var ResultBox = document.getElementById(ResultBoxID);
		    var TempNotes = document.getElementById('tempTextTextbox');		    
		    var pos;
		    var error = 0;
		    var normal_min;
		    var normal_hour;
		    var actual_min;
		    var actual_hour;

            // Parse first time
            var TimeLen = NormalTime.length;
            if (TimeLen >= 3)
            {
                pos = NormalTime.indexOf(':');
                if (pos == -1)
                {
                    pos = NormalTime.indexOf('.');
                }
                if (pos == -1)
                {
                    normal_min = NormalTime.substring(TimeLen-2);
                    normal_hour = NormalTime.substring(0, TimeLen - 2);
                }
                else if ((pos >= 1) && (TimeLen > pos)) 
                {
                    normal_hour = NormalTime.substring(0, pos);
                    normal_min = NormalTime.substring(pos+1);
                }
                else
                {
                    error = 1;
                    alert(NormalTime + ' is not a valid time.  Please enter as hh:mm and try again.');                        
                }
            }
            else
            {
                error = 1;
                alert('The time you specified for when you normally take your temperature is invalid.  Please enter as hh:mm and try again.');
            }
            
            // Parse second time
            TimeLen = ActualTime.length;
            if ((TimeLen >= 3) && (error == 0))
            {
                pos = ActualTime.indexOf(':');
                if (pos == -1)
                {
                    pos = ActualTime.indexOf('.');
                }
                if (pos == -1)
                {
                    actual_min = ActualTime.substring(TimeLen-2);
                    actual_hour = ActualTime.substring(0, TimeLen - 2);
                }
                else if ((pos >= 1) && (TimeLen > pos)) 
                {
                    actual_hour = ActualTime.substring(0, pos);
                    actual_min = ActualTime.substring(pos+1);
                }
                else
                {
                    error = 1;
                    alert(ActualTime + ' is not a valid time.  Please enter as hh:mm and try again.');                        
                }
            }
            else if (error == 0)
            {
                error = 1;
                alert('The time you specified for when you normally take your temperature is invalid.  Please enter as hh:mm and try again.');
            }

            // Perform adjustment (0.1 per 0.5)
            var normal_as_min;
            var actual_as_min;
            var resultTemp;
            if (error == 0)
            {
                normal_as_min = parseInt(normal_hour) * 60 + parseInt(normal_min);
                actual_as_min = parseInt(actual_hour) * 60 + parseInt(actual_min);
            }
            if (isNaN(normal_as_min) || isNaN(actual_as_min))
            {
                alert('One of the times specified is invalid.  Please enter times as hh:mm.'); 
            }
            else if (isNaN(parseFloat(TempTaken)))
            {
                alert('The temperature you entered is invalid.  Please correct and try again.'); 
            }
            else if (error == 0)
            {
                var min_diff = actual_as_min - normal_as_min;
                ResultBox.value = Math.round(100 * (parseFloat(TempTaken) - ((min_diff / 30) * 0.1))) / 100;
                if ((min_diff >= 120) || (min_diff <= -90))
                {
                    alert('The temperature has been adjusted to ' + ResultBox.value + '.  You may want to mark the temperature uncertain because it was taken significantly late/early and the adjustment may not be entirely accurate.');
                }
                else
                {
                    alert('The temperature has been adjusted and entered for you as ' + ResultBox.value + '.  Do not forget to save your changes.');
                }
                if (TempNotes.value != '')
                {
                    TempNotes.value = TempNotes.value + ' ';
                }
                TempNotes.value = TempNotes.value + 'Taken at ' + ActualTime + ' and adjusted from ' + TempTaken + ' to ' + ResultBox.value;
            }
			return false;
		}

