// This stuff happens RIGHT AWAY - before we have DOM or anything else.
// Should only be used for session and cookie checking.

// Check to see if a user is logged in or not.
var blnSessionActive;
var strUserName;
var intSubID;
var intWidgetCount;
var strEmail;
var aryEntitlement = new Array();
var blnInEdit = false;
var intEditWidgId = 0;

function goP2CSignUp() {
	
	$("#page2callhome-content").empty();
	$("#page2callhome-content").append('<img id="newsmainloading" src="graphics/cosinity-loading2.gif" />');
	$("#page2callhome-content").load("ajax/content/p2c-signup.html");	
	return false;
};


// cookie handling
function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
};

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
};

function eraseCookie(name) {
	createCookie(name,"",-1);
};


// Scroll position
function getScrollingPosition()
{
 var position = [0, 0];

 if (typeof window.pageYOffset != 'undefined')
 {
   //alert("using yoffset");
   position = [
       window.pageXOffset,
       window.pageYOffset
   ];
 }

 else if (typeof document.documentElement.scrollTop
     != 'undefined' && document.documentElement.scrollTop > 0)
 {
   //alert("Using documentElement");
   position = [
       document.documentElement.scrollLeft,
       document.documentElement.scrollTop
   ];
 }

 else if (typeof document.body.scrollTop != 'undefined')
 {
   //alert("Using body");
   position = [
       document.body.scrollLeft,
       document.body.scrollTop
   ];
 }

 return position;
};

// This function update the character count for entry fields and updates the specified object
function countTypedChars(e, txtCaller, txtUpdate, intMax) {
	// e is the actual event, txtCaller is the object that called me and txtUpdate is 
	// what I update with the new character count; intMax is the max characters for txtCaller
	
	var intCurLen;
	var intMaxPct = 75;	// intMaxPct is the max % of intMax the length can be before we change color to red.
	var keynum;
    var keychar;
    var alphacheck;

    if(window.event) { // IE
            keynum = e.keyCode;
    }
    else if(e.which) { // Netscape/Firefox/Opera
            keynum = e.which;
    }

	intCurLen = $(txtCaller).val().length;
	
	if(intCurLen < intMax) { 
		// OK... no error... see if the difference is within the threshold
		$(txtUpdate).val(intMax - intCurLen - 1);
		if(((intCurLen/intMax) * 100) > 75) {
			// OK the current length is 75% or more of the max
			// change the font color to red.
			$(txtUpdate).css("color", "red");
		} else {
			$(txtUpdate).css("color", "#000000");
		}
		return true;
	} else {
		//alert($(txtCaller).val().length);
		if(keynum == 8 || keynum == 9 || keynum == 13) {
			$(txtUpdate).val(intMax - intCurLen - 1);
			if(((intCurLen/intMax) * 100) > 75) {
				// OK the current length is 75% or more of the max
				// change the font color to red.
				$(txtUpdate).css("color", "red");
			} else {
				$(txtUpdate).css("color", "#000000");
			}
			return true;
		} else {
			return false;
		}
	}

};
// Get xml data 

function getXMLData(URL, SuccessFunc, ErrorFunc) {
	// accpets the URL (for GET) and the function to call on success
	$.ajax({
		url: URL,
		type: 'GET',
		dataType: 'xml',
		timeout: 10000,
		error: function() {
			// do nothing... assume not logged in
			ErrorFunc();
			//alert("Failed getXML call");
		},
		success: function(xml) {
			SuccessFunc(xml);
			//alert("Good getXML call: ");
		}
	});

};

// Check log in state
function amILoggedIn() {
	var BASEURL = "ajax/getstate.php";
	var blnSessionGood;
	var j;
	
	blnSessionGood = $.ajax({
		url: BASEURL,
		type: 'GET',
		dataType: 'xml',
		timeout: 10000,
		error: function() {
			// do nothing... assume not logged in
		},
		success: function(xml) {
			var ckVal;
			if($("result", xml).text() == "true") {
				//alert("You are logged in");
				j = 0;
				ckVal = "true|" + $("email", xml).text() + "|" + $("subid", xml).text();
				$(xml).find('entitlement').each(function() {
					aryEntitlement[j] = $(this).attr('sku');
					// if we get a callRecord entitlement drop the cookie
					if($(this).attr('sku') == "cr2008") {
						createCookie("callRecordcookie", ckVal, 1);
					}
					++j;
				});
				blnSessionActive = true;
				strUserName = $("username", xml).text();
				strEmail = $("email", xml).text();
				intSubID = $("subid", xml).text();
				setLoggedIn();
			} else {
				//alert("You are not logged in");
				blnSessionActive = false;
				setLoggedIn();
			}
		}
	});
};
// Load main "widgets" page of page2call
function p2cMyWidgets(thisTarget) {
	// First we need to call the xml and see how many (if any) widgets the 
	// subscriber has
	var GETWIDGETSXML = "ajax/p2capp.php?getwidgets=true";
	if(thisTarget == "" || thisTarget == null) thisTarget = 'mywidgets';
	$("#reportSelectNav").remove();
	$("#page2callapp-content").empty()
	$("#page2callapp-content").append("<img id='newsmainloading' src='graphics/cosinity-loading2.gif' />");
	$.ajax({
		url: GETWIDGETSXML,
		type: 'GET',
		dataType: 'xml',
		timeout: 10000,
		error: function() {
			// Handle error
		},
		success: function(xml) {
			var objError;
			if($(xml).find('error').attr('number') == null) {
				// No errors in the XML... proceed
				if($("widgetcount", xml).text() == "0") {
					// call function to help use make first widget.
					p2cNoWidgets();
				} else {
					// call function to turn the widget xml into display
					//alert("now we display the widgets");
					if(thisTarget == 'mywidgets') {
						p2cWidgets(xml);
					} else if(thisTarget == 'mywidgetreports') {
						p2cWidgetReports(xml);
					}
				}
			} else {
				alert("Error number: " + $(xml).find('error').attr('number') + " has occured");
				alert("MYSQL " + $(xml).find('mysql').text());
			}
		}
	});
	
	return false;
};
// This function will draw the UI for the user with no page2call widgets defined
function p2cNoWidgets() {
	var cssObj;
	var strHTML;

	$("#page2callapp-content").append("<div id='headdiv'></div>");
	$("#headdiv").hide();
	cssObj = {
		backgroundColor: "#dee5de",
		float: "left",
		height: "100px",
		width: "610px",
		padding: "20px 18px 40px 20px",
		textAlign: "center"
	}
	$("#headdiv").css(cssObj);
	$("#headdiv").show();
	$("#headdiv").append("<p class='blockhead'>Welcome to cosinity page2call.<br/><br/>Let's get started. Make your first widget now.</p>");
	newWidget.setname();

};

// function to add a new widget
function p2cAddNewWidget() {
	// Only need to check how many they have enabled (<10 for now)
	// and then call newWidget.setname();
	if(intWidgetCount < 10) {
		$("#page2callapp-content").empty();
		newWidget.setname();	
	} else {
		alert("You have the maximum number of widgets (10). You must delete a widget in order to create a new one.");
	}
	return false;
};
	
var newWidget = {
	setname: function() {
		// now add the div for widget generation
		
		$("#page2callapp-content").append("<div id='createwidget'></div>");
		$("#createwidget").hide();
		cssObj = {
			backgroundColor: "#dee5de",
			float: "left",
			height: "130px",
			width: "610px",
			padding: "20px 18px 40px 20px",
			textAlign: "left"
		}
		
		$("#createwidget").css(cssObj);
		strHTML = "<p class='heading'>First, give your widget a name.</p><p class='bodytext'>Widget Name: </p><form onkeypress='return formEnter(event, \"namenext\")'><input type='text' id='p2cwidgetname' /><br/><br/><input type='button' value='next' onclick='newWidget.getdefphone()' id='namenext' /></form>";
		$("#createwidget").append(strHTML);
		$("#createwidget").show("slow");
	},
	getdefphone: function() {
		var strURL = "ajax/p2capp.php?getdefaultphone=true";
		
		getXMLData(strURL, newWidget.setphone, newWidget.phonefail);	
		
	},
	
	phonefail: function() {
		
		alert("could not look up the default phone number.");
	
	},
	
	setphone: function(xml) {
	//Second step in creating a new page2call widget
	
		var strWidgName;
		var strHTML;
		var blnXMLError;
		
		if($(xml).find('error').attr('number') == null) {
			// No errors in the XML... proceed
			blnXMLError = false;
		} else {
			blnXMLError = true;
			alert("Error number: " + $(xml).find('error').attr('number') + " has occured");
			alert("mysql error: " + $("mysql", xml).text());
		}
		
		// Validate the widget name
		
		strWidgName = $("#p2cwidgetname").val();
		
		if(strWidgName.length > 0) {
			$("#createwidget").hide();
			
			$("#page2callapp-content").append("<div id='createwidget2'></div>");
			$("#createwidget2").hide();
			cssObj = {
				backgroundColor: "#dee5de",
				float: "left",
				height: "130px",
				width: "610px",
				padding: "20px 18px 40px 20px",
				textAlign: "left"
			}
			
			$("#createwidget2").css(cssObj);
			
			$("#createwidget2").empty();
			strHTML = "<p class='heading'>Now we need the phone number you want this widget to call.</p><p class='bodytext'>Phone Number:</p><form onkeypress='return formEnter(event, \"phonenext\")'><input type='text' id='p2cwidgetphone' maxlength='10' value='" + $("defaultphone", xml).text() + "' onkeypress='return noAlpha(event)'/><br/><br/><input type='button' id='phonenext' value='next' onclick='newWidget.setbutton()' /></form>";
			$("#createwidget2").append(strHTML);
			$("#createwidget2").show("slow");
		}
	},	

	setbutton: function() {
	// Third step in setting up the new widget
	
		var strW;
		var strP;
		
		strW = $("#p2cwidgetname").val();
		strP = $("#p2cwidgetphone").val();
		// Now we need to get the text the user would like to display on the button
		
		// validate the phone number
		
		if(strP.length == 10) {
			$("#createwidget2").hide();
			
			$("#page2callapp-content").append("<div id='createwidget3'></div>");
			$("#createwidget3").hide();
			cssObj = {
				backgroundColor: "#dee5de",
				float: "left",
				height: "130px",
				width: "610px",
				padding: "20px 18px 40px 20px",
				textAlign: "left"
			}
			
			$("#createwidget3").css(cssObj);
			
			$("#createwidget3").empty();
			strHTML = "<p class='heading'>Now we need to know what you would like the button to say.</p><p class='bodytext'>Button Text:</p><form onkeypress='return formEnter(event, \"buttonnext\")'><input type='text' id='p2cwidgetbtn' value='Call Us Now' /><br/><br/><input type='button' id='buttonnext' value='create widget' onclick='newWidget.createwidget()' /></form>";
			$("#createwidget3").append(strHTML);
			$("#createwidget3").show("slow");
		}
			
	},
	
	createwidget: function () {
		
		//alert("wow... we are creating a widget...");	
		
		var strURL = "ajax/p2capp.php?createwidget=true&name=";
		var strW;
		var strP;
		var strBtn;
		
		strW = $("#p2cwidgetname").val();
		strP = $("#p2cwidgetphone").val();
		strBtn = $("#p2cwidgetbtn").val();
		
		if(strBtn.length > 0) {
			strURL += escape(strW) + "&phone=" + escape(strP) + "&btn=" + escape(strBtn);
			$("#createwidget3").empty()
			$("#createwidget3").append("<img id='newsmainloading' src='graphics/cosinity-loading2.gif' />");
			getXMLData(strURL, newWidget.widgetcreated, newWidget.widgetcreatefailed);
			
		}
		
	},
	
	widgetcreated: function(xml) {
		var blnXMLError = false;
		
		if($(xml).find('error').attr('number') == null) {
			// No errors in the XML... proceed
			blnXMLError = false;
		} else {
			blnXMLError = true;
			alert("Error number: " + $(xml).find('error').attr('number') + " has occured");
			alert("mysql error: " + $("mysql", xml).text());
		}
		//alert("in created");
		if(!blnXMLError) {
			//alert("no xml error clearing and starting over");
			$("#page2callapp-content").empty();
			$("#page2callapp-content").append("<img id='newsmainloading' src='graphics/cosinity-loading2.gif' />");
			p2cMyWidgets();
		} else {
			// no else... error already thrown.
			//alert("Huh? XML Error but no alert?");
		}
	},
	
	widgetcreatefailed: function() {
		alert("xml call failed... bummer");
		
	}
	
}; // end var newWidget

// This variable will contain the functions for editing an existing widget
var p2cEditWidget = {
	startWidgetEdit: function(widgId){
		var strHTML;
		var strPopURL = "ajax/p2capp.php?getsinglewidget=true&widgId=";
		
		strPopURL += widgId;
		// clear the widget detail
		$("#p2cwidgetdetail-" + widgId).hide();
		$("#p2cWidgActions" + widgId).hide();
			
		// set up the form to edit the widget
		strHTML = "<div id='widgEdit-" + widgId + "' >";
		strHTML += "<form >";
		strHTML += "<div id='EditPreview-" + widgId + "'></div>";
		strHTML += "<table width='55%'><tr>";
		strHTML += "<td width='120'><p class='widgetedit'>Widget Name: </p></td>";
		strHTML += "<td><input type='text' id='txtWidgEditName" + widgId + "' maxlength='80'/></td></tr>";
		strHTML += "<td width='120'><p class='widgetedit'>Phone Number: </p></td>";
		strHTML += "<td><input type='text' id='txtWidgEditPhone" + widgId + "' onkeypress='return noAlpha(event)' maxlength='10'/></td></tr>";
		strHTML += "<tr><td width='120'><p class='widgetedit'>Button Text: </p></td>";
		strHTML += "<td><input type='text' id='txtWidgEditBtn" + widgId + "' maxlength='20'/></td></tr></table>";
		strHTML += "<p class='widgetedit'>Description: ";
		strHTML += "<input type='text' readonly='true' value='200' class='EntrySpace' id='txtDescSpace"+ widgId + "' /></p>";
		strHTML += "<textarea rows='6' cols='40' id='txtWidgEditDesc" + widgId + "' onkeypress='return countTypedChars(event, \"#txtWidgEditDesc" + widgId + "\", \"#txtDescSpace" + widgId + "\", 200)' /><br/><br/>";
		strHTML += "<table width='75%'><tr>";
		strHTML += "<td><div class='linkimage' ><a href='#' onclick='return p2cEditWidget.saveFromEdit($(\"#txtWidgEditName" + widgId + "\"), $(\"#txtWidgEditPhone" + widgId + "\"), $(\"#txtWidgEditBtn" + widgId + "\"), $(\"#txtWidgEditDesc" + widgId + "\"), " + widgId + ")' id='btnSaveWidget'><img src='graphics/save.png' border='0' class='floatlefttoplink' />save</a></div></td>";
		strHTML += "<td><div class='linkimage' ><a href='#' onclick='return p2cEditWidget.cancelEdit(" + widgId + ")' id='btnCancelEdit'><img src='graphics/cancel.png' border='0' class='floatlefttoplink' />cancel</a></div></td>";
		strHTML += "<td><div class='linkimage' ><a href='#' onclick='return p2cEditWidget.loadPreview(" + widgId + ", $(\"#txtWidgEditBtn" + widgId + "\"))' id='btnPreviewWidg'><img src='graphics/preview.png' border='0' class='floatlefttoplink' />preview</a></div></td>";
		strHTML += "</tr></table></form>";
		strHTML += "</div>";
		
		$("#p2cwidget" + widgId).animate({
			height: "360px"
		});
		
		$("#p2cwidget" + widgId).append(strHTML);
		$("#EditPreview-" + widgId).hide();
		
		getXMLData(strPopURL, p2cEditWidget.populateForEdit, p2cEditWidget.xmlFailure);
		
		return false;
		
	},
	
	loadPreview: function(widgId, frmBtn) {
		
		var objCSS;
		var strUrl = "ajax/ineditpreview.php?pageid=";
		var rgbGrey = "rgb(222, 229, 222)";
		var hexGrey = "#dee5de";
		var rgbYelo = "rgb(254, 249, 201)";
		var hexYelo = "#fef9c9";
		var txtImgPath;
		//alert($("#p2cwidget" + widgId).css("background-color"));
		if(hexGrey == $("#p2cwidget" + widgId).css("background-color") || rgbGrey == $("#p2cwidget" + widgId).css("background-color")) {
			txtImgPath = "url(graphics/preview-p2c-grey.jpg)";
		} else if(hexYelo == $("#p2cwidget" + widgId).css("background-color") || rgbYelo == $("#p2cwidget" + widgId).css("background-color")) {
			txtImgPath = "url(graphics/preview-p2c-yellow.jpg)";
		}
		objCSS = {
			float: "right",
			height: "202px",
			width: "260px",
			backgroundImage: txtImgPath,
			textAlign: "center"
		}
		$("#EditPreview-" + widgId).hide();
		$("#EditPreview-" + widgId).empty();

		$("#EditPreview-" + widgId).append("<p class='heading'>Preview</p><div id='editWidgPrev" + widgId + "'></div>");
		strUrl += escape(hex_md5(widgId));
		strUrl += "&btn=" + escape(frmBtn.val());
		$("#editWidgPrev" + widgId).load(strUrl);
		$("#EditPreview-" + widgId).css(objCSS);
		$("#EditPreview-" + widgId).show("slow");
		
		return false;
	},
	
	cancelEdit: function(widgId) {
		$("#widgEdit-" + widgId).remove();
		$("#p2cwidget" + widgId).animate({
			height: "240px"
		});
		$("#p2cwidgetdetail-" + widgId).show("slow");
		$("#p2cWidgActions" + widgId).show();
		return false;
	},
		
	populateForEdit: function(xmlDoc) {
		var blnXMLError;
		var intWidgId;
		
		if($(xmlDoc).find('error').attr('number') == null) {
			// No errors in the XML... proceed
			blnXMLError = false;
		} else {
			blnXMLError = true;
			alert("Error number: " + $(xmlDoc).find('error').attr('number') + " has occured");
			alert("mysql error: " + $("mysql", xmlDoc).text());
		}
		
		if(!blnXMLError) {
			intWidgId = $("widgId", xmlDoc).text();
			// load the data from xml into the form
			$("#txtWidgEditName" + intWidgId).val($("widgetname", xmlDoc).text());
			$("#txtWidgEditPhone" + intWidgId).val($("phonenumber", xmlDoc).text());
			$("#txtWidgEditBtn" + intWidgId).val($("btntext", xmlDoc).text());
			$("#txtWidgEditDesc" + intWidgId).val($("description", xmlDoc).text());
			$("#txtDescSpace" + intWidgId).val(200 - Number($("#txtWidgEditDesc" + intWidgId).val().length));
			if($("#txtDescSpace" + intWidgId).val() < 50) {
				$("#txtDescSpace" + intWidgId).css("color", "red");
			}
		}
		
	},
	
	saveFromEdit: function(frmName, frmPhone, frmBtn, frmDesc, widgId) {
		// Need to validate input... specifically phone number
		// Next we'll build the AJAX URL and send off the request.
		var blnValid = true;
		var strUpdURL = "ajax/p2capp.php?updatewidget=true&";

		if(frmPhone.val().length == 10 && !(isNaN(frmPhone.val()))) {
			// OK, the phone number is 10 digits and a number
			blnValid = true;
		} else {
			blnValid = false;
			alert("The phone number must be 10 digits and all numbers.");
		}
		if(blnValid) {
			if(frmBtn.val().length > 0 && frmBtn.val().length < 21)  {
				blnValid = true;
			} else {
				blnValid = false;
				alert("You must supply Button Text for this widget.");
			}
		}
		if(blnValid) {
			if(frmName.val().length > 0 && frmName.val().length < 81) {
				blnValid = true;
			} else {
				blnValid = false;
				alert("You must supply a name for this widget.");
			}
		}
		
		if(blnValid) {
			// We don't check description... it is not required. If it is empty we will not 
			// pass it to the server side. The server side updates it to "" if nothing is passed.
			strUpdURL += "widgId=" + widgId;
			strUpdURL += "&btn=" + escape(frmBtn.val());
			strUpdURL += "&phonenumber=" + escape(frmPhone.val());
			strUpdURL += "&name=" + escape(frmName.val());
			if(frmDesc.val().length > 0) {
				if(frmDesc.val().length < 201) {
					// send it to the server side
					strUpdURL += "&description=" + escape(frmDesc.val());
				} else {
					blnValid = false;
					alert("The description is limited to 200 characters.");
				}
			}
			
		}
		
		if(blnValid) {
			// OK... do the AJAX request
			getXMLData(strUpdURL, p2cEditWidget.editComplete, p2cEditWidget.xmlFailure);
		}
		return false;
	},
	
	editComplete: function(xmlDoc) {
		var blnXMLError;
		
		if($(xmlDoc).find('error').attr('number') == null) {
			// No errors in the XML... proceed
			blnXMLError = false;
		} else {
			blnXMLError = true;
			alert("Error number: " + $(xmlDoc).find('error').attr('number') + " has occured");
			alert("mysql error: " + $("mysql", xmlDoc).text());
		}
		
		if(!blnXMLError) {
			blnInEdit = true;
			intEditWidgId = $("widgId", xmlDoc).text();
			p2cMyWidgets();
		} else {
			alert("there was an error?");
		}
		
	}, 
	
	xmlFailure: function() {
		
		
	}
	
	
}; // end var p2cEditWidget

// Select all the text in an input
function SelectAll(id) {
	document.getElementById(id).focus();
	document.getElementById(id).select();
};

// This will draw the UI for widget reports
function p2cWidgetReports(xmlDoc) {
	// Loop through the XML and dislay the widget information.
	
	// Check for errors
	var blnXMLError = false;
	var strHTML;
	var objCSSMain;
	var objCSSPre;
	var objCSSWdgtSpacer;
	var objCSSWidgDetail;
	var strSrc;
	var blnIsGrey = false;
	var strSrc = "<script src='http://www.cosinity.com/webcall/callus.php?pageid=";
	var strEmbed;
	
	if($(xmlDoc).find('error').attr('number') == null) {
		// No errors in the XML... proceed
		blnXMLError = false;
	} else {
		blnXMLError = true;
		alert("Error number: " + $(xmlDoc).find('error').attr('number') + " has occured");
		alert("mysql error: " + $("mysql", xmlDoc).text());
	}
	
	if(!blnXMLError) {
		$("#page2callapp-content").empty();
		
		$("#page2callapp-content").append("<div class='floatrighttop'><a href='#' onclick='return p2cAddNewWidget()'><img src='graphics/add-plus.gif' border='0' class='floatlefttoplink'/>new widget</a></div>");
		$("#page2callapp-content").append("<p class'blockhead'>my page2call widget reports</p>");
		intWidgetCount = $("widgetcount", xmlDoc).text();

		$(xmlDoc).find('widget').each(function() {
			// create the embed source
			strEmbed = strSrc + $("pageid", this).text() + "'></script>";
			// create the html to display the widget info
			strDivID = "#p2cwidgetreport" + $("id", this).text();
			strHTML = "<div id='p2cwidgetreport" + $("id", this).text() + "'>";
			strHTML += "<div class='widgetclose' id='p2cClose" + $("id", this).text() + "' ><a href='#' onclick='return p2cCloseWidgetDetail(" + $("id", this).text() + ")' ><img src='graphics/x-close-12px.jpg' border='0'/></a></div>";
			strHTML += "<span class='widgetlink'><a href='#' onclick='return p2cWidgetReporting.showp2cWidgetReport(" + $("id", this).text() + ")' >" + $("name", this).text() + "</a></span>";
			strHTML += "</div>";
			strHTML += "<div id='wdgtspacer" + $("id", this).text() + "'></div>";
			if(blnIsGrey) {
				objCSSMain = {
					backgroundColor: "#dee5de",
					float: "left",
					height: "25px",
					width: "610px",
					padding: "5px 5px 5px 5px",
					textAlign: "left",
					border: "1px solid #000000"
				}
				blnIsGrey = false;
			} else {
				objCSSMain = {
					backgroundColor: "#fef9c9",
					float: "left",
					height: "25px",
					width: "610px",
					padding: "5px 5px 5px 5px",
					textAlign: "left",
					border: "1px solid #000000"
				}
				blnIsGrey = true;
			}
			objCSSWdgtSpacer = {
				float: "left",
				height: "2px",
				width: "260px",
				backgroundColor: "#ffffff"
			}
			$("#page2callapp-content").append(strHTML)
			$("#p2cClose" + $("id", this).text()).hide();
			$(strDivID).css(objCSSMain);
			$("#wdgtspacer" + $("id", this).text()).css(objCSSWdgtSpacer);
		});

	}			

};

// this variable will contain all the methods for the widget reporting 
// functionality

var p2cWidgetReporting = {
	// this function will set up the UI and display the initial report
	showp2cWidgetReport: function(thisId, thisPeriod) {
		var strHTML;
		var defaultPeriod = 'default';
		
		// default is to show "today"
		$("#page2callapp-content").empty();
		$("#page2callapp-content").append("<img id='newsmainloading' src='graphics/cosinity-loading2.gif' />");
		
		strHTML = "<div id='reportDetail'>";
		strHTML += "<div id='reportHead'></div>"; // contains widget name and close button
		strHTML += "<div id='reportDateInfo'></div>"; // contains the date/date range for this report
		strHTML += "<div id='reportSummary'></div>"; // contains summary info for this report
		strHTML += "<div id='reportSummaryView'></div>"; // contains summary roll-up info and selectors
		strHTML += "<div id='reportDetailCtl'></div>"; //contains the report detail selectors (today, yesterday...)
		strHTML += "<div id='reportRecords'></div>"; //contains the individual records for this report
		strHTML += "</div>";	// closes reportDetail
		
		$("#page2callapp-content").append(strHTML);
		$("#reportDetail").hide();
		
		// now we need to get our report data
		
		if(thisPeriod == "" || thisPeriod == null) thisPeriod = defaultPeriod;
		
		p2cWidgetReporting.getRepData(thisId, thisPeriod);
		
		// Now ... if it isn't there already (just expanded the widget report) add the report selector to the 
		// nav section on the left.
		if(thisPeriod == defaultPeriod) {
			strHTML = "<div id='reportSelectNav'>";
			strHTML += "<p class='heading'>Report Selector</p>";
			strHTML += "<ul class='reportSelect'>";
			strHTML += "<li><input type='radio' id='rdoRptSelect0' name='reportSelect' value='0' checked onclick='p2cWidgetReporting.selectReportPeriod(" + thisId + ")'>today</li>\n";
			strHTML += "<li><input type='radio' id='rdoRptSelect1' name='reportSelect'value='1' onclick='return p2cWidgetReporting.selectReportPeriod(" + thisId + ")'>yesterday</li>\n";
			strHTML += "<li><input type='radio' id='rdoRptSelect2' name='reportSelect'value='2' onclick='return p2cWidgetReporting.selectReportPeriod(" + thisId + ")' >this month</li>\n";
			strHTML += "<li><input type='radio' id='rdoRptSelect3' name='reportSelect'value='3' onclick='return p2cWidgetReporting.selectReportPeriod(" + thisId + ")' >last month</li>\n";
			strHTML += "<li><input type='radio' id='rdoRptSelect4' name='reportSelect'value='4' onclick='return p2cWidgetReporting.selectReportPeriod(" + thisId + ")'>custom</li>\n";
			strHTML += "</ul>";
			strHTML += "</div>";
			
			$("#page2callapp-sidenav").append(strHTML);
		}
		
		return false;
	},
	
	selectReportPeriod: function(widgId) {
		// first, uncheck any other radio
		var rdoSelected;
		rdoSelected = $("input[@name='reportSelect']:checked").val();
		//alert(rdoSelected);
		switch(rdoSelected) {
			case "0":
				// today
				$("#divDateRange").remove();
				$("#reportSelectNav").animate({
					height: "180px"
				});
				p2cWidgetReporting.showp2cWidgetReport(widgId, 'today');
				break;
			case "1":
				// Yesterday
				$("#divDateRange").remove();
				$("#reportSelectNav").animate({
					height: "180px"
				});
				p2cWidgetReporting.showp2cWidgetReport(widgId, 'yesterday');
				break;
			case "2":
				// This Month
				$("#divDateRange").remove();
				$("#reportSelectNav").animate({
					height: "180px"
				});
				p2cWidgetReporting.showp2cWidgetReport(widgId, 'curmonth');
				break;
			case "3":
				// Last Month
				$("#divDateRange").remove();
				$("#reportSelectNav").animate({
					height: "180px"
				});
				p2cWidgetReporting.showp2cWidgetReport(widgId, 'lastmonth');
				break;
			case "4":
				// Custom
				p2cWidgetReporting.collectCustomPeriod(widgId);
				break;
		}	
		return true;
	},
	
	getRepData: function(thisId, thisPeriod) {
		var pToday = 'today';
		var pYesterday = 'yesterday';
		var pThisMonth = 'curmonth';
		var pLastMonth = 'lastmonth';	
		var dtNow = new Date();
		var dtNew = new Date();
		var dtHour;
		var dtDay;
		var dtMonth;
		var dtYear;
		var dtMin;
		var dtInSecs;
		var strQueryMonth;
		var strQueryDay;
		var strQueryYear;
		var intMSInDay = (1000 * 1 * 60 * 60 * 24);
		var strURL = "ajax/p2capp.php?getreport=true&";
		var blnValid = false;
		
		dtDay = dtNow.getDate();
		dtMonth = dtNow.getMonth() + 1;
		dtYear = dtNow.getFullYear();
		dtHour = dtNow.getHours();
		dtMin = dtNow.getMinutes();
		dtInSecs = dtNow.getTime();
		
		if(thisPeriod == 'default') thisPeriod = 'today';
		
		strURL += "widgId=" + escape(thisId) + "&type=";
		
		if(thisPeriod == pToday) {
			blnValid = true;
			strQueryMonth = dtMonth;
			strQueryDay = dtDay;
			strQueryYear = dtYear;
			strURL += "day&day=" + escape(strQueryDay) + "&month=" + escape(strQueryMonth) + "&year=" + escape(strQueryYear);
		}
		if(thisPeriod == pYesterday) {
			blnValid = true;
			dtNew.setTime(dtInSecs - intMSInDay);
			strQueryDay = dtNew.getDate();
			strQueryMonth = dtNew.getMonth() + 1;
			strQueryYear = dtNew.getFullYear();
			strURL += "day&day=" + escape(strQueryDay) + "&month=" + escape(strQueryMonth) + "&year=" + escape(strQueryYear);
		}
		if(thisPeriod == pThisMonth) {			
			blnValid = true;
			strQueryMonth = dtMonth;
			strQueryYear = dtYear;	
			strURL += "month&month=" + escape(strQueryMonth) + "&year=" + escape(strQueryYear);
		}
		if(thisPeriod == pLastMonth) {
			blnValid = true;
			if(dtMonth == 1) { // handle january
				dtMonth = 12;
				dtYear = dtYear - 1;
			} else {
				dtMonth = --dtMonth;
			}
			
			strQueryMonth = dtMonth;
			strQueryYear = dtYear;
			strURL += "month&month=" + escape(strQueryMonth) + "&year=" + escape(strQueryYear);
		}
		
		if(blnValid) {
			// call ajax data load
			//alert("here is the url: " + strURL);
			getXMLData(strURL, p2cWidgetReporting.loadRepData, p2cWidgetReporting.xmlLoadError)
			
			
		} else {
			alert("Invalid report period. Please contact support with the details of your request.");
		}
	},
	
	chngSmryData: function(widgId, thisMonth, thisDay, thisYear, thisStart, thisEnd) {
		// first, uncheck any other radio
		var rdoSelected;
		var strURL = "ajax/p2capp.php?getsmrydata=true";
		
		rdoSelected = $("input[@name='rdoGrpSmryBkdown']:checked").val();
		//alert(rdoSelected);
		$("#summarydata").empty();
		$("#summarydata").append("<img id='reportloading' src='graphics/cosinity-loading2.gif' />");
		strURL += "&widgId=" + widgId;
		if(thisMonth != "") strURL += "&month=" + thisMonth;
		if(thisDay != "") strURL += "&day=" + thisDay;
		if(thisYear != "") strURL += "&year=" + thisYear;
		if(thisStart != "") strURL += "&startdate=" + thisStart;
		if(thisEnd != "") strURL += "&enddate=" + thisEnd;
		
		switch(rdoSelected) {
			case "0":
				// by hour of day
				strURL += "&type=hourofday";
				getXMLData(strURL, p2cWidgetReporting.loadSmryData, p2cWidgetReporting.xmlLoadError)
				break;
			case "1":
				// by day of week
				strURL += "&type=dayofweek";
				getXMLData(strURL, p2cWidgetReporting.loadSmryData, p2cWidgetReporting.xmlLoadError)
				break;
			case "2":
				// by month of year
				strURL += "&type=monthofyear";
				getXMLData(strURL, p2cWidgetReporting.loadSmryData, p2cWidgetReporting.xmlLoadError)
				break;
			case "3":
				// by day of month
				strURL += "&type=dayofmonth";
				getXMLData(strURL, p2cWidgetReporting.loadSmryData, p2cWidgetReporting.xmlLoadError)
				break;
		}	
		return true;
		
	},
	
	loadSmryData: function(xmlDoc) {
		var strHTML;
		var blnXMLError;
		var strColOne;
		
		if($(xmlDoc).find('error').attr('number') == null) {
			// No errors in the XML... proceed
			blnXMLError = false;
		} else {
			blnXMLError = true;
			alert("Error number: " + $(xmlDoc).find('error').attr('number') + " has occured");
			alert("mysql error: " + $("mysql", xmlDoc).text());
		}
		
		switch($("reporttype", xmlDoc).text()) {
			case "hourofday":
				strColOne = "Hour";
				break;
			case "dayofweek":
				strColOne = "Day";
				break;
			case "monthofyear":
				strColOne = "Month";
				break;
			case "dayofmonth":
				strColOne = "Day";
				break;
		}
		
		if(!blnXMLError) {
			strHTML = "<table width='100%' id='p2cRptSmryTable' class='tablesorter' border='0' cellpadding='0' cellspacing='1'>\n<thead>\n";
			strHTML += "<tr>\n<th>" + strColOne + "</th>";
			strHTML += "<th>Widget Loads</th>";
			strHTML += "<th>Widget Clicks</th>";
			strHTML += "<th>Widget Calls</th>\n</tr>\n";
			strHTML += "</thead>\n";
			strHTML += "<tbody>";
			$(xmlDoc).find("summarydata").children().each(function() {
				var strMainVal;
				
				if(strColOne == "Month") {
					strMainVal = getMonthName($(this).attr("value"));
				} else if(strColOne == "Hour") {
					strMainVal = getClockHour($(this).attr("value"));
				} else {
					strMainVal = $(this).attr("value");
				}	
				strHTML += "<tr><td>" + strMainVal + "</td><td>" + $("loads", this).text() + "</td><td>" + $("clicks", this).text() + "</td><td>" + $("calls", this).text() + "</td></tr>\n";
			});				
			strHTML += "</tbody></table>";
			//alert(strHTML);
			$("#summarydata").empty();
			$("#summarydata").append(strHTML);	
			
			$.tablesorter.addParser({
				id: 'SimpleNumber',
				is: function(s) {
					return false;
				},
				format: function(s) {
					return s;
				}, 
				type: 'numeric'
			});
			
			$("#p2cRptSmryTable").tablesorter({
				debug: false,
				headers: {
					0: {
						sorter: false
					},
					1: {
						sorter: 'SimpleNumber'
					},
					2: {
						sorter: 'SimpleNumber'
					},
					3: {
						sorter: 'SimpleNumber'
					}
				}
			});
		}
	},
	
	loadRepData: function(xmlDoc) {
		var blnXMLError;
		var strHTML;
		var i;
		var intWidgId;
		var strReportMonth;
		var strReportDay;
		var strReportYear;
		var strReportStart;
		var strReportEnd;
		
		if($(xmlDoc).find('error').attr('number') == null) {
			// No errors in the XML... proceed
			blnXMLError = false;
		} else {
			blnXMLError = true;
			alert("Error number: " + $(xmlDoc).find('error').attr('number') + " has occured");
			alert("mysql error: " + $("mysql", xmlDoc).text());
		}	
		
		if(!blnXMLError) {
			// do the output
			// Populate the reportHead
			strHTML = "<div class='widgetclose' id='p2cReportClose' ><a href='#' onclick='return p2cWidgetReporting.p2cCloseWidgetReport()' ><img src='graphics/x-close-12px.jpg' border='0'/></a></div>";
			strHTML += "<span class='widgetlink'><a href='#' onclick='return false' >" + $("thiswidgetname", xmlDoc).text() + "</a></span>";
			$("#reportHead").append(strHTML);
			
			intWidgId = "\"" + $("thiswidgetid", xmlDoc).text() + "\"";
			strReportMonth = "\"" + $("reportmonth", xmlDoc).text() + "\"";
			strReportDay = "\"" + $("reportday", xmlDoc).text() + "\"";
			strReportYear = "\"" + $("reportyear", xmlDoc).text() + "\"";
			strReportStart = "\"" + $("reportstartdate", xmlDoc).text() + "\"";
			strReportEnd = "\"" + $("reportenddate", xmlDoc).text() + "\"";
			
			//populate the report Date Info
			strHTML = "<p class='bodytext'>" + $("reportspan", xmlDoc).text() + "</p>";
			$("#reportDateInfo").append(strHTML);
			
			// Populate the summary data
			$(xmlDoc).find('summary').each(function() {
				strHTML = "<p class='heading'>Summary:</p>";
				strHTML += "<table width='100%'><tr><td>";
				strHTML += "<p class='bodytext'>Widget Loads: " + $("loads", this).text() + "</p></td>";
				strHTML += "<td><p class='bodytext'>Widget Clicks: " + $("clicks", this).text() + "</p></td>";
				strHTML += "<td><p class='bodytext'>Widget Calls: " + $("calls", this).text() + "</p></td></tr></table>";
			});
			$("#reportSummary").append(strHTML);
			
			// Populate the report summary view
			strHTML = "<div id='summaryBreakdown'>"; 	// This div contains the header and the expander/shrinker
			strHTML += "<div class='linkimageright' id='divExpandSumryBkdown'><a href='#' onclick='return p2cWidgetReporting.expandSumryBkdown(\"byhour\")'><img class='floatrighttoplink' src='graphics/more.png' border='0' />expand</a></div>";
			strHTML += "<div class='linkimageright' id='divColapseSumryBkdown'><a href='#' onclick='return p2cWidgetReporting.colapseSumryBkdown()'><img class='floatrighttoplink' src='graphics/less.png' border='0' />colapse</a></div>";
			strHTML += "<p class='heading'>Summary Breakdown</p>";
			strHTML += "</div>";
			strHTML += "<div id='summarynav'>";
			strHTML += "<table width='100%'><tr>";
			strHTML += "<td><input type='radio' id='rdoHourly' name='rdoGrpSmryBkdown' value='0' onclick='p2cWidgetReporting.chngSmryData(" + intWidgId + ", " + strReportMonth + ", " + strReportDay + ", " + strReportYear + "," + strReportStart + ", " + strReportEnd + ")' checked='true' >by hour</input</td>";
			strHTML += "<td><input type='radio' id='rdoDayOfWeek' name='rdoGrpSmryBkdown' value='1' onclick='p2cWidgetReporting.chngSmryData(" + intWidgId + ", " + strReportMonth + ", " + strReportDay + ", " + strReportYear + "," + strReportStart + ", " + strReportEnd + ")'  >by day of week</input></td>";
			strHTML += "<td><input type='radio' id='rdoMonthOfYear' name='rdoGrpSmryBkdown' value='2' onclick='p2cWidgetReporting.chngSmryData(" + intWidgId + ", " + strReportMonth + ", " + strReportDay + ", " + strReportYear + "," + strReportStart + ", " + strReportEnd + ")'  >by month</input></td>";
			strHTML += "<td><input type='radio' id='rdoDayOfMonth' name='rdoGrpSmryBkdown' value='3' onclick='p2cWidgetReporting.chngSmryData(" + intWidgId + ", " + strReportMonth + ", " + strReportDay + ", " + strReportYear + "," + strReportStart + ", " + strReportEnd + ")'  >by day of month</input></td>";
			strHTML += "</tr></table>";
			strHTML += "</div>";
			strHTML += "<div id='summarydata' class='scrolltable'>";
			strHTML += "<table width='100%' id='p2cRptSmryTable' class='tablesorter' border='0' cellpadding='0' cellspacing='1'>\n<thead>\n";
			strHTML += "<tr>\n<th>Hour</th>";
			strHTML += "<th>Widget Loads</th>";
			strHTML += "<th>Widget Clicks</th>";
			strHTML += "<th>Widget Calls</th>\n</tr>\n";
			strHTML += "</thead>\n";
			strHTML += "<tbody>";
			$(xmlDoc).find("byhour").children().each(function() {
				strHTML += "<tr><td>" + getClockHour($(this).attr("number")) + "</td><td>" + $("loads", this).text() + "</td><td>" + $("clicks", this).text() + "</td><td>" + $("calls", this).text() + "</td></tr>\n";
			});				
			strHTML += "</tbody></table></div>";
			//alert(strHTML);
			$("#reportSummaryView").append(strHTML);
			$("#summarynav").hide();
			$("#summarydata").hide();
			$("#divExpandSumryBkdown").show();
			$("#divColapseSumryBkdown").hide();
			
			
			// Populate the idividual record veiw
			strHTML = "<div id='eventView'>"; 	// This div contains the header and the expander/shrinker
			strHTML += "<div class='linkimageright' id='divExpandEventView'><a href='#' onclick='return p2cWidgetReporting.expandEventView()'><img class='floatrighttoplink' src='graphics/more.png' border='0' />expand</a></div>";
			strHTML += "<div class='linkimageright' id='divColapseEventView'><a href='#' onclick='return p2cWidgetReporting.colapseEventView()'><img class='floatrighttoplink' src='graphics/less.png' border='0' />colapse</a></div>";
			strHTML += "<p class='heading'>Widget Events</p>";
			strHTML += "</div>";
			strHTML += "<div id='eventdata' class='scrolltable'>";
			strHTML += "<table width='100%' id='p2cRptEventTable' class='tablesorter' border='0' cellpadding='0' cellspacing='1'>\n<thead>\n";
			strHTML += "<tr>\n<th>Widget</th>";
			strHTML += "<th>Event Time</th>";
			strHTML += "<th>Event</th>";
			strHTML += "<th>Day</th>";
			strHTML += "<th>Month</th>";
			strHTML += "<th>Year</th>";
			strHTML += "<th>Hour</th>";
			strHTML += "<th>Day Of Week</th>";
			strHTML += "</tr>\n";
			strHTML += "</thead>\n";
			strHTML += "<tbody>";
			$(xmlDoc).find("events").children().each(function() {
				strHTML += "<tr><td>" + $("widgetname", this).text() + "</td><td>" + $("timestamp", this).text() + "</td><td>" + $("type", this).text() + "</td><td>" + $("day", this).text() + "</td>";
				strHTML += "<td>" + $("month", this).text() + "</td><td>" + $("year", this).text() + "</td><td>" + $("hour", this).text() + "</td><td>" + $("dayofweek", this).text() + "</td>";
				strHTML += "</tr>\n";
			});				
			strHTML += "</tbody></table></div>";
			
			$("#reportRecords").append(strHTML);
			$("#eventdata").hide();
			$("#divExpandEventView").show();
			$("#divColapseEventView").hide();
			
			// finish
			
			$("#newsmainloading").remove();
			$("#reportDetail").show("slow");
			$.tablesorter.addParser({
				id: 'SimpleNumber',
				is: function(s) {
					return false;
				},
				format: function(s) {
					return s;
				}, 
				type: 'numeric'
			});
			$("#p2cRptEventTable").tablesorter({
				debug: false,
				/* no default sort for now... it throws an error 
				sortList: [[1,1]],
				*/
				headers: {
					3: {
						sorter: 'SimpleNumber'
					},
					4: {
						sorter: 'SimpleNumber'
					},
					5: {
						sorter: 'SimpleNumber'
					},
					6: {
						sorter: 'SimpleNumber'
					}
				}
			});
			$("#p2cRptSmryTable").tablesorter({
				debug: false,
				headers: {
					0: {
						sorter: false
					},
					1: {
						sorter: 'SimpleNumber'
					},
					2: {
						sorter: 'SimpleNumber'
					},
					3: {
						sorter: 'SimpleNumber'
					}
				}
			});
			
			
		}
		
	},
	
	expandSumryBkdown: function(thisView) {
		var newHeight;
		if(thisView == 'byhour') newHeight = "400px";
		
		$("#reportSummaryView").animate({
			height: newHeight
		});
		$("#summarynav").show();
		$("#summarydata").show();
		$("#divExpandSumryBkdown").hide();
		$("#divColapseSumryBkdown").show();
		
		return false;
		
	},
	
	colapseSumryBkdown: function() {
		
		$("#reportSummaryView").animate({
			height: "95px"
		});
		
		$("#summarynav").hide();
		$("#summarydata").hide();
		$("#divExpandSumryBkdown").show();
		$("#divColapseSumryBkdown").hide();
		
		return false;
		
	},
	expandEventView: function() {
		
		$("#reportRecords").animate({
			height: "400px"
		});
		$("#eventdata").show();
		$("#divExpandEventView").hide();
		$("#divColapseEventView").show();
		
		return false;
		
	},
	
	colapseEventView: function() {
		
		$("#reportRecords").animate({
			height: "95px"
		});
		
		$("#eventdata").hide();
		$("#divExpandEventView").show();
		$("#divColapseEventView").hide();
		
		return false;
		
	},
	p2cCloseWidgetReport: function() {
		$("#reportDetail").remove();
		$("#reportSelectNav").remove();
		p2cMyWidgets('mywidgetreports');
		return false;
	},
	
	getRepDataCustom: function(thisId) {
		var rangeDates;
		var strURL = "ajax/p2capp.php?getreport=true&type=daterange&widgId=";
		var thisYear;
		rangeDates = $("#txtCustRange").datepicker("getDate");
		
		if(rangeDates[0] != null && rangeDates[1] != null) {

			strURL += thisId + "&startdate=" + escape((rangeDates[0].getMonth() + 1)) + "/" + escape(rangeDates[0].getDate()) + "/" + escape(rangeDates[0].getFullYear());
			strURL += "&enddate=" + escape((rangeDates[1].getMonth() + 1)) + "/" + escape(rangeDates[1].getDate()) + "/" + escape(rangeDates[1].getFullYear());
			
			// Set up the DIV
			$("#page2callapp-content").empty();
			$("#page2callapp-content").append("<img id='newsmainloading' src='graphics/cosinity-loading2.gif' />");
			
			strHTML = "<div id='reportDetail'>";
			strHTML += "<div id='reportHead'></div>"; // contains widget name and close button
			strHTML += "<div id='reportDateInfo'></div>"; // contains the date/date range for this report
			strHTML += "<div id='reportSummary'></div>"; // contains summary info for this report
			strHTML += "<div id='reportSummaryView'></div>"; // contains summary roll-up info and selectors
			strHTML += "<div id='reportDetailCtl'></div>"; //contains the report detail selectors (today, yesterday...)
			strHTML += "<div id='reportRecords'></div>"; //contains the individual records for this report
			strHTML += "</div>";	// closes reportDetail
			
			$("#page2callapp-content").append(strHTML);
			$("#reportDetail").hide();
			
			// now we need to get our report data
			
			getXMLData(strURL, p2cWidgetReporting.loadRepData, p2cWidgetReporting.xmlLoadError)
		
		} else {
			alert("You must select a valid date range.");
		}
		
	},
	
	collectCustomPeriod: function(thisId) {
		var strHTML;
		
		strHTML = "<div id='divDateRange'>";
		strHTML += "<input type='text' id='txtCustRange' width='200px' />";
		strHTML += "<input type='button' id='btnProcRange' onclick='p2cWidgetReporting.getRepDataCustom(" + thisId + ")' value='go' />";
		strHTML += "</div>";
		
		//alert("Adding the date picker");
		
		$("#reportSelectNav").append(strHTML);
		
		$("#txtCustRange").datepicker({
			showOn: "both",
			buttonImage: "graphics/calendar.gif",
			buttonImageOnly: true,
			rangeSelect: true
		});
		
		$("#reportSelectNav").animate({
			height: "250px"
		});
	
	},
	
	xmlLoadError: function() {
		alert("xml load error");	
	}
};

// Month name from month number
function getMonthName(n) {
	switch(n) {
		
		case "1":
			return "January";
		case "2":
			return "February";
		case "3":
			return "March";
		case "4":
			return "April";
		case "5":
			return "May";
		case "6":
			return "June";
		case "7":
			return "July";
		case "8":
			return "August";
		case "9":
			return "September";
		case "10":
			return "October";
		case "11":
			return "November";
		case "12":
			return "December";	
		default:
			return "Unknown";
	}	
	
};

// Clock hour from 24 hour 
function getClockHour(n) {
	switch(n) {
		case "0":
			return "12 AM";
		case "1":
			return "1 AM";
		case "2":
			return "2 AM";
		case "3":
			return "3 AM";
		case "4":
			return "4 AM";
		case "5":
			return "5 AM";
		case "6":
			return "6 AM";
		case "7":
			return "7 AM";
		case "8":
			return "8 AM";
		case "9":
			return "9 AM";
		case "10":
			return "10 AM";
		case "11":
			return "11 AM";
		case "12":
			return "12 PM";
		case "13":
			return "1 PM";
		case "14":
			return "2 PM";
		case "15":
			return "3 PM";
		case "16":
			return "4 PM";
		case "17":
			return "5 PM";
		case "18":
			return "6 PM";
		case "19":
			return "7 PM";
		case "20":
			return "8 PM";
		case "21":
			return "9 PM";
		case "22":
			return "10 PM";
		case "23":
			return "11 PM";	
		default:
			return "Unknown";
	}	
	
};

// This will draw the UI for users with existing widget sets in page2call
// accepts an xml document with widget information
function p2cWidgets(xmlDoc) {
	// Loop through the XML and dislay the widget information.
	
	// Check for errors
	var blnXMLError = false;
	var strHTML;
	var objCSSMain;
	var objCSSPre;
	var objCSSWdgtSpacer;
	var objCSSWidgDetail;
	var strSrc;
	var blnIsGrey = false;
	var strSrc = "<script src='http://www.cosinity.com/webcall/callus.php?pageid=";
	var strEmbed;
	
	if($(xmlDoc).find('error').attr('number') == null) {
		// No errors in the XML... proceed
		blnXMLError = false;
	} else {
		blnXMLError = true;
		alert("Error number: " + $(xmlDoc).find('error').attr('number') + " has occured");
		alert("mysql error: " + $("mysql", xmlDoc).text());
	}
	
	if(!blnXMLError) {
		$("#page2callapp-content").empty();
		
		$("#page2callapp-content").append("<div class='floatrighttop'><a href='#' onclick='return p2cAddNewWidget()'><img src='graphics/add-plus.gif' border='0' class='floatlefttoplink'/>new widget</a></div>");
		$("#page2callapp-content").append("<p class'blockhead'>my page2call widgets</p>");
		intWidgetCount = $("widgetcount", xmlDoc).text();
		$(xmlDoc).find('widget').each(function() {
			// create the embed source
			strEmbed = strSrc + $("pageid", this).text() + "'></script>";
			// create the html to display the widget info
			strDivID = "#p2cwidget" + $("id", this).text();
			strHTML = "<div id='p2cwidget" + $("id", this).text() + "'>";
			strHTML += "<div class='widgetclose' id='p2cClose" + $("id", this).text() + "' ><a href='#' onclick='return p2cCloseWidgetDetail(" + $("id", this).text() + ")' ><img src='graphics/x-close-12px.jpg' border='0'/></a></div>";
			strHTML += "<span class='widgetlink'><a href='#' onclick='return showp2cWidgetDetail(" + $("id", this).text() + ")' >" + $("name", this).text() + "</a></span>";
			strHTML += "<div id='p2cwidgetdetail-" + $("id", this).text() + "'>";
			strHTML += "<div id='preview-" + $("id", this).text() + "' ></div>";
			if(blnIsGrey) {
				strHTML += "<p class='widgetgrey'>Phone Number: <input type='text' class='widgetPhoneGrey' READONLY value='" + $("phonenumber", this).text() + "' /></p>";
				strHTML += "<p class='widgetgrey'>Description: <br/><textarea class='widgetDescGrey' READONLY>" + $("description", this).text() + "</textarea></p>";
				strHTML += "<p class='widgetgrey'>To use the widget in your page, copy and paste the following HTML: <br/>";
				strHTML += "<input type='text' id='widgEmbed" + $("id", this).text() + "' class='widgEmbedGrey' READONLY value=\"" + strEmbed + "\" onclick='SelectAll(\"widgEmbed" + $("id", this).text() + "\")'/></p>";
			} else {
				strHTML += "<p class='widgetviolet'>Phone Number: <input type='text' class='widgetPhoneYellow' READONLY value='" + $("phonenumber", this).text() + "' /></p>";
				strHTML += "<p class='widgetviolet'>Description: <br/><textarea class='widgetDescYellow' READONLY>" + $("description", this).text() + "</textarea></p>";
				strHTML += "<p class='widgetviolet'>To use the widget in your page, copy and paste the following HTML: <br/>";
				strHTML += "<input type='text' id='widgEmbed" + $("id", this).text() + "' class='widgEmbedYellow' READONLY value=\"" + strEmbed + "\" onclick='SelectAll(\"widgEmbed" + $("id", this).text() + "\")'/></p>";
			}
			strHTML += "</div>";
			strHTML += "<div id='p2cWidgActions" + $("id", this).text() + "' ><table><tr><td width='100'><div class='linkimage' ><a href='#' onclick='return p2cEditWidget.startWidgetEdit(" + $("id", this).text() + ")'><img src='graphics/editWidget.png' border='0' class='floatlefttoplink' />edit</a></div></td>";
			strHTML += "<td width='100'><div class='linkimage' ><a href='#' onclick='return p2cDisableWidget(event, " + $("id", this).text() + ")' ><img src='graphics/disableWidget.png' border='0' class='floatlefttoplink' />delete</a></td></tr></table></div>";
			strHTML += "</div>";
			strHTML += "<div id='wdgtspacer" + $("id", this).text() + "'></div>";
			if(blnIsGrey) {
				objCSSMain = {
					backgroundColor: "#dee5de",
					float: "left",
					height: "25px",
					width: "610px",
					padding: "5px 5px 5px 5px",
					textAlign: "left",
					border: "1px solid #000000"
				}
				objCSSPre = {
					float: "right",
					height: "202px",
					width: "260px",
					backgroundColor: "#ffffff",
					backgroundImage: "url(graphics/preview-p2c-grey.jpg)",
					textAlign: "center"
				}
				blnIsGrey = false;
			} else {
				objCSSMain = {
					backgroundColor: "#fef9c9",
					float: "left",
					height: "25px",
					width: "610px",
					padding: "5px 5px 5px 5px",
					textAlign: "left",
					border: "1px solid #000000"
				}
					objCSSPre = {
					float: "right",
					height: "202px",
					width: "260px",
					backgroundColor: "#ffffff",
					backgroundImage: "url(graphics/preview-p2c-yellow.jpg)",
					textAlign: "center"
				}
				blnIsGrey = true;
			}
			objCSSWdgtSpacer = {
				float: "left",
				height: "2px",
				width: "260px",
				backgroundColor: "#ffffff"
			}
			objCSSWidgDetail = {
				height: "180px"
			}
			$("#page2callapp-content").append(strHTML)
			$("#p2cwidgetdetail-" + $("id", this).text()).hide();
			$("#p2cWidgActions" + $("id", this).text()).hide();
			$("#p2cClose" + $("id", this).text()).hide();
			$(strDivID).css(objCSSMain);
			$("#preview-" + $("id", this).text()).css(objCSSPre);
			$("#p2cwidgetdetail-" + $("id", this).text()).css(objCSSWidgDetail);
			$("#wdgtspacer" + $("id", this).text()).css(objCSSWdgtSpacer);
			$("#preview-" + $("id", this).text()).append("<div><p class='heading'>preview</p></div><div id='widget-" + $("id", this).text() +"'></div>");
			$("#widget-" + $("id", this).text()).load("ajax/preview-proxy.php?pageid=" + escape($("pageid", this).text()));
		});
		if(blnInEdit) {
			//alert("We are in edit mode");
			showp2cWidgetDetail(intEditWidgId);
			//alert("you should see it now");
			blnInEdit = false;
			intEditWidgId = 0;
		} else {
			//alert("no widgets in edit mode");
		}
	}			

};
// This function does the ajax to disable a widget (disabled widgets no longer work or show up in "my widgets")
function p2cDisableWidget(thisEvent, widgId) {
	// Three step process
	// 1) Confirm with user
	// 2) Disable the widget
	// 3) re-load my widgets (the disabled one will go away)
	
	var strHTML;
	var intMouseX;
	var intMouseY;
	var objPopCSS;
	var intDivTop;
	var intDivLeft;
	var XOffset = 358;
	var YOffset = 379;
	var objModalCSS;
	var intScrollPos = 0;
	var aryPos;
	
	if(typeof thisEvent.pageX != "undefined") {
		//alert("using pageX");
		intMouseX = thisEvent.pageX;
		intMouseY = thisEvent.pageY;
	} else if (typeof thisEvent.clientX != "undefined") {
		//alert("Using clientX");
		intMouseX = thisEvent.clientX + document.documentElement.scrollLeft;
		intMouseY = thisEvent.clientY + document.documentElement.scrollTop;
	}
	
	
	strHTML1 = "<div id='modalbkground'> </div>";
	strHTML2 = "<div id='disablediag' class='yesnoPopUp' >";
	strHTML2 += "<p class='widgetviolet'>Deleting this widget will cause it to no longer function. It will also cease to appear in my widgets and your widget reports.</p>";
	strHTML2 += "<p class='widgetviolet'>are you sure you want to delete this widget?</p>";
	strHTML2 += "<input type='button' onclick='doDisableWidget.p2cConfirmedDisable(" + widgId + ")' value='yes' />";
	strHTML2 += "<input type='button' value='no' onclick='doDisableWidget.p2cCancelDisable()' />";
	strHTML2 += "</div>";
	
	intDivTop = String((intMouseY - 160)) + "px";
	intDivLeft = String(intMouseX - 20) + "px";
	

	aryPos = getScrollingPosition();
	
	
	$("body").append(strHTML1);
	$("body").append(strHTML2);
	document.getElementById("disablediag").style.visibility = "visible";
	
	$("#modalbkground").css("top", aryPos[1]);
	
	
	$("#disablediag").css("top", intDivTop);
	$("#disablediag").css("left", intDivLeft);
	
	$("body").css("overflow-x", "hidden");
	$("body").css("overflow-y", "hidden");
	
	document.documentElement.style.overflow = "hidden";
	
	
	return false;
	
};
// handle disable widget operations
var doDisableWidget = {

// complete the disable by calling the server side.

	p2cConfirmedDisable: function(widgId) {
		var strURL = "ajax/p2capp.php?disablewidget=true&widgId=";
		
		strURL += widgId;
		
		getXMLData(strURL, doDisableWidget.doComplete, doDisableWidget.xmlFailure)
	
	
	},
// Got a good xml reponse... check for errors
	doComplete: function(xmlDoc) {
		if($(xmlDoc).find('error').attr('number') == null) {
			// No errors in the XML... proceed
			p2cMyWidgets();
			$("#modalbkground").remove();
			$("#disablediag").remove();
			/*
			$("body").css("overflow-x", "auto");
			$("body").css("overflow-y", "auto");
			*/
			document.documentElement.style.overflow = "auto";
		} else {
			blnXMLError = true;
			alert("Error number: " + $(xmlDoc).find('error').attr('number') + " has occured");
			alert("mysql error: " + $("mysql", xmlDoc).text());
		}
		
	},
// XML error happened...
	xmlFailure: function() {
		
		
	},
//	Cancel a widget disable - called if the user says "NO" on the pop up dialog
	p2cCancelDisable: function() {
		$("#modalbkground").remove();
		$("#disablediag").remove();
		/*
		$("body").css("overflow-x", "auto");
		$("body").css("overflow-y", "auto");
		*/
		document.documentElement.style.overflow = "auto";
		
	}
}; // end var doDisableWidget

// function animates the div(s) to show the widget detail on mouse over the widget name
function showp2cWidgetDetail(widgId) {
	
	$("#p2cwidget" + widgId).animate({
		height: "240px"
	});
	$("#p2cClose" + widgId).show();
	$("#p2cwidgetdetail-" + widgId).show("slow");
	$("#p2cWidgActions" + widgId).show();

	return false;

};
// Close the widget detail DIV opened by showp2cWidgetDetail()
function p2cCloseWidgetDetail(widgId) {
	blnInEdit = false;
	intWidgEditId = 0;
	if(typeof document.getElementById("#widgEdit-" + widgId) != 'undefined') {
		$("#widgEdit-" + widgId).remove();
	}
	$("#p2cWidgActions" + widgId).hide();
	$("#p2cwidget" + widgId).animate({
		height: "25px"
	});
	$("#p2cClose" + widgId).hide();
	$("#p2cwidgetdetail-" + widgId).hide("slow");
		
	return false;
};
// Handle logged in users
function setLoggedIn() {
	var strHTML;
	//alert("in the function setLoggedIn");
	$("#topuserinfo").empty();
	if(blnSessionActive) {
		//alert("Setting topuserinfo div");
		// set the appropriate information for a logged in user
		strHTML = "<p class='userinfo'>welcome, <em><b>" + strUserName + "</b></em>";
		strHTML = strHTML + " - <a href='myaccount.html'>my account</a>";
		strHTML = strHTML + " | <a href='#' onclick='return logMeOut()'>logout</a></p>";
		$("#topuserinfo").append(strHTML);
		// The following section updates the myaccount page.
		if(getPageName() == "myaccount.html") {
			$("#myaccount-content").empty();
			$("#myaccount-content").append('<img id="newsmainloading" src="graphics/cosinity-loading2.gif" />');
			// $("#myaccount-sidenav").load("ajax/content/myacct-nav.html");
			loadMyAcct();
		}
		//The following page updates the page2call-app page
		if(getPageName() == "page2call-app.html" || getPageName() == "page2call-app.html#") {
			p2cMyWidgets()
		}
		
	} else {
		strHTML = "<p class='userinfo'>welcome | <a href='cosinity-login.html'>login</a></p>";
		$("#topuserinfo").append(strHTML);
		// Update myaccount
		if(getPageName() == "myaccount.html") {
			$("#myaccount-content").empty();
			$("#myaccount-sidenav").empty();
			$("#myaccount-sidenav").append("<p class='bodytext'>You are not logged in. Please <a href='cosinity-login.html'>log in</a> to access your account.</p>");
		}
		// update page2call app
		if(getPageName() == "page2call-app.html") {
			$("#page2callapp-content").empty();
			$("#page2callapp-sidenav").empty();
			$("#page2callapp-sidenav").append("<p class='bodytext'>You are not logged in. Please <a href='cosinity-login.html'>log in</a> to access your account.</p>");
		}
	}
	
};
function loadMyAcct() {
	var myHTML;
	var i;
	var blnPage2Call = false;
	var blnCR = false;

	myHTML = "<p class='heading'>My Applications</p>";
	for(i=0; i<aryEntitlement.length; ++i) {
		if(aryEntitlement[i] == "p2c") {
			myHTML = myHTML + "<p class='bodytext'>page2call - <a href='page2call-app.html'>page2call home</a></p>";
			blnPage2Call = true;
		} else if(aryEntitlement[i] == "cr2008") {
			myHTML = myHTML + "<p class='bodytext'>callRecord - <a href='callRecord.html'>callRecord home</a></p>";
			blnCR = true;
		}
	}
	
			
	$("#myaccount-content").empty();
	$("#myaccount-content").append(myHTML);	
	
	return false;
	
};

function loadMyInfo() {
	var myHTML;
	var i;
	var strURL = "ajax/myinfo.php?getinfo=true";
	
	
	myHTML = "<p class='blockhead'>Personal Information</p>";
	myHTML += "<p class='bodytext'>Name: " + strUserName + "</p>";
	myHTML += "<p class='bodytext'>Email: " + strEmail + "</p>";
	myHTML += "<p class='blockhead'>My Applications</p>";
	for(i=0; i<aryEntitlement.length; ++i) {
		if(aryEntitlement[i] == "p2c") {
			myHTML = myHTML + "<p class='bodytext'>page2call - <a href='page2call-app.html'>page2call home</a></p>";
			blnPage2Call = true;
		} else if(aryEntitlement[i] == "cr2008") {
			myHTML = myHTML + "<p class='bodytext'>callRecord - <a href='callRecord.html'>callRecord home</a></p>";
			blnCR = true;
		}
	}
	myHTML += "<p class='blockhead'>Applications Pending Activation</p>";
	myHTML += "<div id='divPendingApps'></div>";
	myHTML += "<p class='blockhead'>Add Application</p>";
	myHTML += "<div id='divAvailableApps'></div>";
	$("#myaccount-content").empty();
	$("#myaccount-content").append(myHTML);
	
	
	getXMLData(strURL, loadMyInfoApps, loadMyInfoAppsFail)

	return false;
	
};

function loadMyInfoApps(xmlDoc) {
	var blnXMLError;
	var strHTMLPend;
	var strHTMLSU;
	
	if($(xmlDoc).find('error').attr('number') == null) {
		// No errors in the XML... proceed
		blnXMLError = false;
	} else {
		blnXMLError = true;
		alert("Error number: " + $(xmlDoc).find('error').attr('number') + " has occured");
		alert("mysql error: " + $("mysql", xmlDoc).text());
	}
	
	if(!blnXMLError) {
		
		
		$(xmlDoc).find('pending').each(function() {
			if($("name", this).text() != "") {
				strHTMLPend = "<p class='bodytext'>The service: <b>" + $("name", this).text() + "</b> is pending activation.</p>";
			}
		});
		$(xmlDoc).find('available').each(function() {
			if($("name", this).text() != "") {
				strHTMLSU = "<p class='bodytext'>Sign Up for <a href='#' onclick='return createEntitlement(\"" + $("sku", this).text() + "\")'>" + $("name", this).text() + "</a></p>";
			}
		});
		
		
		$("#divPendingApps").append(strHTMLPend);
		$("#divAvailableApps").append(strHTMLSU);
		
	}
		
	
};
function loadMyInfoAppsFail() {
	
};

function createEntitlement(thisSku) {
	var strURL = "ajax/myinfo.php?sku=";
	
	strURL += thisSku;
	
	
	getXMLData(strURL, validNewEntitlement, loadMyInfoAppsFail);
	
};

function validNewEntitlement(xmlDoc) {
	
	var blnXMLError;
	
	if($(xmlDoc).find('error').attr('number') == null) {
		// No errors in the XML... proceed
		blnXMLError = false;
	} else {
		blnXMLError = true;
		alert("Error number: " + $(xmlDoc).find('error').attr('number') + " has occured");
		alert("mysql error: " + $("mysql", xmlDoc).text());
	}
	
	if(!blnXMLError) {
		loadMyInfo();
	}
	
};

// Global logout
function logMeOut() {
	// This function will call a php server side to kill the session.
	// It will also clear the two values we hold in JS
	var BASEURL = "ajax/setlogout.php";
	var blnSessionGood;
	
	blnSessionGood = $.ajax({
		url: BASEURL,
		type: 'GET',
		dataType: 'xml',
		timeout: 10000,
		error: function() {
			// do nothing... 
		},
		success: function(xml) {
			if($("result", xml).text()) {
				//alert("You are logged in");
				blnSessionActive = false;
				strUserName = "";
				intSubID = "";
				aryEntitlement = new Array;
				setLoggedIn();
				eraseCookie("callRecordcookie");
				
			} else {
				alert("An error occured logging you out. Please close your browser and try again.");
			}
		}
	});
	return false;
};
// Password Recovery
function PwdReset() {
	// load the content to allow for a password re-set
	$("#clogin-content").empty();
	$("#clogin-content").append('<img id="newsmainloading" src="graphics/cosinity-loading2.gif" />');
	$("#clogin-content").load("ajax/content/p2c-pwd-recover.html");
};
// Function to ajax re-set password
function PwdResetSubmit(pwdForm) {
	
	var URLBASE = "ajax/pwdreset.php?email=";
	var blnEmailIsValid = false;
	var blnIsValid = true;
	var strURL;
	
	//alert("Function called...");
	
	if(pwdForm.p2cpwdemail.value.length > 0) {
		// make sure it is formatted correctly
		blnEmailIsValid = true;
		intAtPos = pwdForm.p2cpwdemail.value.indexOf("@");
		intDotPos = pwdForm.p2cpwdemail.value.indexOf(".");
		
		if(intAtPos == -1 || intDotPos == -1) blnEmailIsValid = false;
		if(intDotPos - intAtPos == 1) blnEmailIsValid = false;
		if(intAtPos == 0) blnEmailIsValid = false;
		if(intDotPos == (pwdForm.p2cpwdemail.value.length - 1)) blnEmailIsValid = false;
		if(! blnEmailIsValid) {
			blnIsValid = false;
			alert("The email address appears to be invalid.");
		}
	} else {
		blnIsValid = false;
		alert("You must enter a valid email address.");
	}
	
	if(blnIsValid) {
		// ok - send the email in ajax and see if it is a known subscriber
		strURL = URLBASE + escape(pwdForm.p2cpwdemail.value);
		
		// do the ajax request and output the result to the user
		
		// Update the DIV
			
		$("#clogin-content").empty();
		$("#clogin-content").append('<img id="newsmainloading" src="graphics/cosinity-loading2.gif" />');
		
		// Do The request
		
		$.ajax({
			url: strURL,
			type: 'GET',
			dataType: 'html',
			timeout: 10000,
			error: function() {
				alert("We can not recover your password at this time. Sorry...");
				$("#clogin-content").load("ajax/content/p2c-pwd-recover.html");
			},
			success: function(html) {
				$("#clogin-content").empty();
				$("#clogin-content").append(html);
			}
		});
	}
	return false;	
	
};
// catch enter on forms and press the default button
function formEnter(e, btnID) {
	var keynum;
    var keychar;
		
	if(window.event) { // IE
            keynum = e.keyCode;
    }
    else if(e.which) { // Netscape/Firefox/Opera
            keynum = e.which;
    }
    if (keynum == 13) {
    		document.getElementById(btnID).click();
            return false;
    } else {
            return true;
    }
	
};

// do not allow digits in the phone number input
function noAlpha(e) {
        var keynum;
        var keychar;
        var alphacheck;

        if(window.event) { // IE
                keynum = e.keyCode;
        }
        else if(e.which) { // Netscape/Firefox/Opera
                keynum = e.which;
        }
        if (keynum == 8 || keynum == 9 || keynum == 13) {
                return true;
        } else {
                keychar = String.fromCharCode(keynum);
                if(isNaN(keychar)) {
                        return false;
                } else {
                        return true;
                };
        }
};
// Global login
function logMeIn(loginFrm, targetDiv) {
	
	var blnIsValid = true;
	var URLBASE = "ajax/p2cLogin.php?";
	var strEmail;
	var strPwd;
	var strURL;
	var strErrMsg;
	var j;
	
	if(!(loginFrm.p2cusername.value.length > 0)) {
		blnIsValid = false;
	}
	if(blnIsValid && loginFrm.p2cpwd.length == 0) {
		blnIsValid = false;
	}
	
	if(blnIsValid) {
		strEmail = escape(loginFrm.p2cusername.value);
		strPwd = escape(hex_md5(loginFrm.p2cpwd.value));
		
		// set up the ajax request
		strURL = URLBASE + "user=" + strEmail + "&pwd=" + strPwd;
		
		// Update the DIV
			
		$(targetDiv).empty();
		$(targetDiv).append('<img id="newsmainloading" src="graphics/cosinity-loading2.gif" />');
		
		// Do The request
		
		$.ajax({
			url: strURL,
			type: 'GET',
			dataType: 'xml',
			timeout: 10000,
			error: function(x, msg, errT) {
				alert(msg);
				alert("We can not process your login at this time. Sorry...");
				$(targetDiv).load("ajax/content/p2c-login.html");
			},
			success: function(xml) {
				if($("id", xml).text() == "200") {
					// good login
					j = 0;
					$(xml).find('entitlement').each(function() {
						aryEntitlement[j] = $(this).attr('sku');
						//alert("Found SKU " + aryEntitlement[j]);
						++j;
					});
					blnSessionActive = true;
					strUserName = $("username", xml).text();
					intSubID = $("subid", xml).text();
					amILoggedIn();
					$(targetDiv).empty();
					window.location="myaccount.html";
				} else {
					//alert("login error: " + $("id", xml).text());
					if($("id", xml).text() == "401") {
						// Bad Password	
						$(targetDiv).empty();
						strErrMsg = "<p class='bodytext'>Invalid login... please try again.</p>";
						$(targetDiv).append(strErrMsg);
					} else if ($("id", xml).text() == "402") {
						// Bad Email
						$(targetDiv).empty();
						strErrMsg = "<p class='bodytext'>Invalid login... please try again.</p>";
						$(targetDiv).append(strErrMsg);
					} else if ($("id", xml).text() == "401402") {
						$(targetDiv).empty();
                                                strErrMsg = "<p class='bodytext'>Invalid login... please try again.</p>";
                                                $(targetDiv).append(strErrMsg);
					} else if ($("id", xml).text() == "403") {
						//Dupe Email ... should never happen
						$(targetDiv).empty();
						strErrMsg = "<p class='bodytext'>There is a problem with your account. Please open a support ticket and reference error code 2acct43.</p>";
						$(targetDiv).append(strErrMsg);
					} else if ($("id", xml).text() == "400") {
						// General system related errors
						$(targetDiv).empty();
						strErrMsg = "<p class='bodytext'>System Error: " + $("error", xml).text() + "</p>";
						$(targetDiv).append(strErrMsg);
					}
				}
			}
		});
		
	} else {
		alert("Email and Password are both required.");
	}
};
// page2call Sign Up
function p2cSignUp(p2cForm) {
	
	var intAtPos;
	var intDotPos;
	var blnEmailIsValid;
	var strEmail;
	var strFName;
	var strLName;
	var strPwd;
	var strPhone;
	var strFullURL;
	var blnIsValid = true;
	var URLBase = "ajax/p2c-signup.php?";
	
	//alert("in the function");
	
	if(p2cForm.p2cemail.value.length > 0) {
		// make sure it is formatted correctly
		blnEmailIsValid = true;
		intAtPos = p2cForm.p2cemail.value.indexOf("@");
		intDotPos = p2cForm.p2cemail.value.indexOf(".");
		
		if(intAtPos == -1 || intDotPos == -1) blnEmailIsValid = false;
		if(intDotPos - intAtPos == 1) blnEmailIsValid = false;
		if(intAtPos == 0) blnEmailIsValid = false;
		if(intDotPos == (p2cForm.p2cemail.value.length - 1)) blnEmailIsValid = false;
		if(! blnEmailIsValid) {
			blnIsValid = false;
			alert("The email address appears to be invalid.");
		}
	} else {
		blnIsValid = false;
		alert("You must enter an email address.");
	}
	
	// Validate other fields
	if(blnIsValid) {
		if(p2cForm.p2cphone.value.length != 10) {
			blnIsValid = false;
			alert("The phone number is not valid - please enter a 10 digit US phone number.");
		}
	}
	if(blnIsValid) {
		if(p2cForm.p2cpwd1.value.length > 4) {
			if(p2cForm.p2cpwd1.value != p2cForm.p2cpwd2.value) {
				blnIsValid = false;
				alert("The passwords do not match.");
			}
		} else {
			blnIsValid = false;
			alert("Your password must be at least 5 characters.");
		}
	}
	if(blnIsValid) {
		if(p2cForm.p2cfname.value.length == 0) {
			blnIsValid = false;
			alert("Please enter your first name.");
		}
	}
	if(blnIsValid) {
		if(p2cForm.p2clname.value.length == 0) {
			blnIsValid = false;
			alert("Please enter your last name.");
		}
	}
	
	// OK -- if the entries are OK proceed.
	
	if(blnIsValid) {
		// Do The AJAX request to create the account.
		
		// URL encode the entries
		strLName = escape(p2cForm.p2clname.value);
		strFName = escape(p2cForm.p2cfname.value);
		strEmail = escape(p2cForm.p2cemail.value);
		strPhone = escape(p2cForm.p2cphone.value);
		strPwd = escape(hex_md5(p2cForm.p2cpwd1.value));
		
		// Create the GET URL
		strFullURL = URLBase + "fname=" + strFName + "&lname=" + strLName + "&email=" + strEmail + "&phone=" + strPhone + "&pwd=" + strPwd;
		
		// Update the DIV
		
		$("#page2callhome-content").empty();
		$("#page2callhome-content").append('<img id="newsmainloading" src="graphics/cosinity-loading2.gif" />');
		
		// Do The request
		
		$.ajax({
			url: strFullURL,
			type: 'GET',
			dataType: 'html',
			timeout: 10000,
			error: function() {
				alert("Your account request could not be submitted at this time. Sorry...");
				$("#page2callhome-content").load("ajax/content/p2c-signup.html");
			},
			success: function(html) {
				$("#page2callhome-content").empty();
				$("#page2callhome-content").append(html);
			}
		});
		
	}
		
	
	
};

// submit feedback
function SubmitFeedback(fbkForm) {
	
	var intAtPos;
	var intDotPos;
	var blnEmailIsValid;
	var strEmail;
	var strName;
	var strSubj;
	var strDesc;
	var strFullURL;
	var blnIsValid = true;
	var strAMP = "&";
	var URLBase = "http://www.cosinity.com/ajax/submitfeedback.php?";	
	
	
	// form validatation
	
	// alert(tickForm.tktemail.value);
	if(fbkForm.fbkemail.value.length > 0) {
		// make sure it is formatted correctly
		blnEmailIsValid = true;
		intAtPos = fbkForm.fbkemail.value.indexOf("@");
		intDotPos = fbkForm.fbkemail.value.indexOf(".");
		
		if(intAtPos == -1 || intDotPos == -1) blnEmailIsValid = false;
		if(intDotPos - intAtPos == 1) blnEmailIsValid = false;
		if(intAtPos == 0) blnEmailIsValid = false;
		if(intDotPos == (fbkForm.fbkemail.value.length - 1)) blnEmailIsValid = false;
		if(! blnEmailIsValid) {
			blnIsValid = false;
			alert("The email address appears to be invalid.");
		}
		
		
		
	} else {
		blnIsValid = false;
		alert("You must enter an email address.");
	}
	
	
	// validate entry in other fields
	if(blnIsValid) {
		if(!(fbkForm.fbkname.value.length > 0)) {
			blnIsValid = false;
			alert("Please enter your name.");
		}
	}
	if(blnIsValid) {
		if(!(fbkForm.fbksubj.value.length > 0)) {
			blnIsValid = false;
			alert("Please enter a subject.");
		}
	}
	if(blnIsValid) {
		if(!(fbkForm.fbkdesc.value.length > 0)) {
			blnIsValid = false;
			alert("Please enter some feedback.");
		}
	}
	
	if(blnIsValid) {
	
		// URL encode the entries
		strEmail = escape(fbkForm.fbkemail.value);
		strName = escape(fbkForm.fbkname.value);
		strSubj = escape(fbkForm.fbksubj.value);
		strDesc = escape(fbkForm.fbkdesc.value);
		
		// Build the full URL for the Ajax request.
		strFullURL = URLBase + "email=" + strEmail;
		strFullURL = strFullURL + "&name=" + strName + "&subject=" + strSubj + "&description=" + strDesc;
		
		
		// alert(strFullURL);
		
		$("#contact-content").empty();
		$("#contact-content").append('<img id="newsmainloading" src="graphics/cosinity-loading2.gif" />');
		
		// do the request
		$.ajax({
			url: strFullURL,
			type: 'GET',
			dataType: 'html',
			timeout: 10000,
			error: function() {
				alert("Your feedback could not be submitted at this time. Sorry...");
				$("#contact-content").load("ajax/contact.php?section=feedback");
			},
			success: function(html) {
				$("#contact-content").empty();
				$("#contact-content").append(html);
			}
		});	
	}
	
};




// submit a ticket
function SubmitTicket(tickForm) {
	
	var intAtPos;
	var intDotPos;
	var blnEmailIsValid;
	var strEmail;
	var strName;
	var strSubj;
	var strDesc;
	var strFullURL;
	var blnIsValid = true;
	var strAMP = "&";
	var URLBase = "http://www.cosinity.com/ajax/supportticket.php?";	
	
	
	// form validatation
	
	// alert(tickForm.tktemail.value);
	if(tickForm.tktemail.value.length > 0) {
		// make sure it is formatted correctly
		blnEmailIsValid = true;
		intAtPos = tickForm.tktemail.value.indexOf("@");
		intDotPos = tickForm.tktemail.value.indexOf(".");
		
		if(intAtPos == -1 || intDotPos == -1) blnEmailIsValid = false;
		if(intDotPos - intAtPos == 1) blnEmailIsValid = false;
		if(intAtPos == 0) blnEmailIsValid = false;
		if(intDotPos == (tickForm.tktemail.value.length - 1)) blnEmailIsValid = false;
		if(! blnEmailIsValid) {
			blnIsValid = false;
			alert("The email address appears to be invalid.");
		}
		
		
		
	} else {
		blnIsValid = false;
		alert("You must enter an email address.");
	}
	
	
	// validate entry in other fields
	if(blnIsValid) {
		if(!(tickForm.tktname.value.length > 0)) {
			blnIsValid = false;
			alert("Please enter your name.");
		}
	}
	if(blnIsValid) {
		if(!(tickForm.tktpblm.value.length > 0)) {
			blnIsValid = false;
			alert("Please enter a subject.");
		}
	}
	if(blnIsValid) {
		if(!(tickForm.tktdesc.value.length > 0)) {
			blnIsValid = false;
			alert("Please an issue description.");
		}
	}
	
	if(blnIsValid) {
	
		// URL encode the entries
		strEmail = escape(tickForm.tktemail.value);
		strName = escape(tickForm.tktname.value);
		strSubj = escape(tickForm.tktpblm.value);
		strDesc = escape(tickForm.tktdesc.value);
		
		// Build the full URL for the Ajax request.
		strFullURL = URLBase + "email=" + strEmail;
		strFullURL = strFullURL + "&name=" + strName + "&subject=" + strSubj + "&description=" + strDesc;
		
		
		// alert(strFullURL);
		
		$("#support-content").empty();
		$("#support-content").append('<img id="newsmainloading" src="graphics/cosinity-loading2.gif" />');
		
		// do the request
		$.ajax({
			url: strFullURL,
			type: 'GET',
			dataType: 'html',
			timeout: 10000,
			error: function() {
				alert("Your support request could not be submitted at this time. Sorry...");
				$("#support-content").load("ajax/support.php?section=ticket");
			},
			success: function(html) {
				$("#support-content").empty();
				$("#support-content").append(html);
			}
		});	
	}
	
};

// search kb button
function dokbsearch(srchterm) {
	var strSearchFor;
	var strURL;
	
	strURL = "http://www.cosinity.com/kb/doku.php?do=search&id=";
	
	strSearchFor = srchterm.value;

	if(strSearchFor.length > 0) {
		strURL = strURL + strSearchFor;
		window.open(strURL);
	} else {
		alert("You must enter keywords to search for.");
	}
	
};
// Get the current page name
function getPageName() {
	var strPage;
	var aryPageParts = new Array;
	var strPageName;
	
	strPage = document.URL;
	aryPageParts = strPage.split('/');
	
	strPageName = aryPageParts[aryPageParts.length - 1];
	
	return strPageName;
};
	

// ajax section using jQuery

$(document).ready(function() {
	
	var strPageName;	
	amILoggedIn();
	
	strPageName = getPageName();
	

	
	// This section loads data for the "about" pages
	if(strPageName == "aboutcosinity.html") {
		$("#about-content").load("ajax/about.php?section=default");
	}

	
	// load content to about section on click of specific item.
	$("#aboutus").click(function() {
		$("#about-content").empty();
		$("#about-content").append('<img id="newsmainloading" src="graphics/cosinity-loading2.gif" />');
		$("#about-content").load("ajax/about.php?section=default");
	});
	$("#whoweare").click(function() {
		$("#about-content").empty();
		$("#about-content").append('<img id="newsmainloading" src="graphics/cosinity-loading2.gif" />');
		$("#about-content").load("ajax/about.php?section=whoweare");
	});
	$("#whywedo").click(function() {
		$("#about-content").empty();
		$("#about-content").append('<img id="newsmainloading" src="graphics/cosinity-loading2.gif" />');
		$("#about-content").load("ajax/about.php?section=whywedo");
	});
	
	
	// This section deals with the "solutions" section
	if(strPageName == "solutions.html") {
		$("#solution-content").load("ajax/solutions.php?section=oursols");
	}

	
	// Load individual content when nav section is clicked
	
	$("#oursols").click(function() {
		$("#solution-content").empty();
		$("#solution-content").append('<img id="newsmainloading" src="graphics/cosinity-loading2.gif" />');
		$("#solution-content").load("ajax/solutions.php?section=oursols");
	});
	$("#callRecord").click(function() {
		$("#solution-content").empty();
		$("#solution-content").append('<img id="newsmainloading" src="graphics/cosinity-loading2.gif" />');
		$("#solution-content").load("ajax/solutions.php?section=callRecord");
	});
	$("#page2call").click(function() {
		$("#solution-content").empty();
		$("#solution-content").append('<img id="newsmainloading" src="graphics/cosinity-loading2.gif" />');
		$("#solution-content").load("ajax/solutions.php?section=page2call");
	});
	
	
	// Load the news feed on the front page
	if(strPageName == "index.html" || strPageName == "") {
		$("#newsbody").load("http://www.cosinity.com/xml/rss2html/rss2html.php?XMLFILE=http://www.cosinity.com/cosinityblog/category/news/feed/&MAXITEMS=3");
	}
	
	// This section deals with the "news" section
	if(strPageName == "news.html") {
		$("#news-content").load("http://www.cosinity.com/xml/rss2html/rss2html.php?XMLFILE=http://www.cosinity.com/cosinityblog/category/news/feed/&MAXITEMS=5");
	}
	
	// Load individual content when nav section is clicked
	
	$("#newslink").click(function() {
		$("#news-content").empty();
		$("#news-content").append('<img id="newsmainloading" src="graphics/cosinity-loading2.gif" />');
		$("#news-content").load("http://www.cosinity.com/xml/rss2html/rss2html.php?XMLFILE=http://www.cosinity.com/cosinityblog/category/news/feed/&MAXITEMS=5");
	});
	$("#cosinityblog").click(function() {
		$("#news-content").empty();
		$("#news-content").append('<img id="newsmainloading" src="graphics/cosinity-loading2.gif" />');
		$("#news-content").load("http://www.cosinity.com/xml/rss2html/rss2html.php?XMLFILE=http://www.cosinity.com/cosinityblog/feed/&MAXITEMS=5");
	});
	$("#founderblog").click(function() {
		$("#news-content").empty();
		$("#news-content").append('<img id="newsmainloading" src="graphics/cosinity-loading2.gif" />');
		$("#news-content").load("http://www.cosinity.com/xml/rss2html/rss2html.php?XMLFILE=http://feeds.feedburner.com/BrianRoyBlog&MAXITEMS=5");
	});
	
	// This section deals with the "contact" section
	
	// $("#contact-content").load("ajax/contact.php?section=contactus");
	
	// Load individual content when nav section is clicked
	
	/*
	We cannot use jQuery to load the content with the page2call widget in it
	for some reason it causes the document.write function to send new headers...
	
	$("#contactus").click(function() {
		$("#contact-content").load("ajax/contact.php?section=contactus");
	});
	*/
	
	$("#feedback").click(function() {
		$("#contact-content").empty();
		$("#contact-content").append('<img id="newsmainloading" src="graphics/cosinity-loading2.gif" />');
		$("#contact-content").load("ajax/contact.php?section=feedback");
	});
	
	
		
	// This section deals with the "news" section
	if(strPageName == "support.html") {
		$("#support-content").load("ajax/support.php?section=kb");
	}
	
	// Load individual content when nav section is clicked
	
	$("#kb-nav").click(function() {
		$("#support-content").empty();
		$("#support-content").append('<img id="newsmainloading" src="graphics/cosinity-loading2.gif" />');
		$("#support-content").load("ajax/support.php?section=kb");
	});
	$("#forums-nav").click(function() {
		$("#support-content").empty();
		$("#support-content").append('<img id="newsmainloading" src="graphics/cosinity-loading2.gif" />');
		$("#support-content").load("ajax/support.php?section=forums");
	});
	$("#ticket-nav").click(function() {
		$("#support-content").empty();
		$("#support-content").append('<img id="newsmainloading" src="graphics/cosinity-loading2.gif" />');
		$("#support-content").load("ajax/support.php?section=ticket");
	});
	
	// This section handles page2call signup
	
	$("#p2c-signup").click(function() {
		// alert("In the right function");
		$("#page2callhome-content").empty();
		$("#page2callhome-content").append('<img id="newsmainloading" src="graphics/cosinity-loading2.gif" />');
		$("#page2callhome-content").load("ajax/content/p2c-signup.html");
	});
	
	$("#myacct-home").click(function() {
		loadMyAcct();
	});
	
	$("#myacct-edit").click(function() {
		loadMyInfo();
	});
	

	
});
