// cookie storage support...
//
// Cookies

function _getCookie()
{
	if (!mainDatabase){
		mainDatabase = CreateRecordStore();//opens connection to device database with SQLight
	}
	// odata, teachers, fdata ... observations
	// if no database support, useCookies should now be true
	// use ownerData info to get teacherList and formData off the 'net
	//
	if (!useCookies){
		_clearCookie();
		// owner data
		_loadOwnerData();
		// form data
		_loadFormData();
		// teacher list
		_loadTeacherData();
		// observations
		_loadObservationData();
		//
	} else {
		_loadOwnerData();
		// get form and teacher data
		if (!ownerID==0){
			getOwnerAndFormFromServer();// get data from the 'net
			getTeacherListFromServer();
			// observations
			_loadObservationData();	
		}	
	}

	//
}

function _updateCookie()
{
	//
	_saveObservationData();
	// observations
	//createCookie("observations",escape(getObservationData()),30);
	//
	//alert("_updateCookie = "+document.cookie );
	//
}
function _loadObservationCookieData() {
	// useCookies
	var theCookieString = readCookie('observations');
	//
	//debugON = true;
	//theCookieString = "1205679%261000011%26%221208449350824%22%26null%26%220100%257E000000000%257E0000%257E0000%257E000000%257E000000%257E000000%257E000000%257E00000%257E000000000000%22";
	if (debugON)
		alert("_loadObservationCookieData theCookieString:"+theCookieString);
	//
	if (theCookieString){
		var theData = unescape(theCookieString).split('\\');
		//
		//clear array
		observations = [];
		//
		if (debugON)
			alert("_loadObservationCookieData Cookie observations:"+theData);
		//
		var tempObject;
		
		for (var i = 0; i < theData.length; i++) {
		
			var a = theData[i].split('&&');// one observation
            if (theData[i].indexOf('&&') == -1)
                    a = theData[i].split('&');// in case it was stored with a single &
            //
			// try catch!
			var teacherid = new Number(a[0]);
			if (debugON)
				alert("_loadObservationCookieData *teacherid* = "+teacherid);
			var formid = new Number(a[1]);
			if (debugON)
				alert("_loadObservationCookieData *formid* = "+formid);
			var begindate = new Date();
			begindate.setTime(new Number(a[2].cleanstring()));
			if (debugON)
				alert("_loadObservationCookieData *begindate* = "+begindate);
			//
			var enddate = false;			
			//
			if (null !== a[3] && !(""==a[3]) && !("null"==a[3])){
				enddate = new Date();
				enddate.setTime(new Number(a[3].cleanstring()));
			}
			if (debugON)
				alert("_loadObservationCookieData *enddate* = "+enddate);	
			//	
			var packedValues = decodeString(a[4]);//encoded with "~"'s
			if (debugON)
				alert("_loadObservationCookieData *packedValues* ="+packedValues);
			//
			tempObject = new observation(teacherid);
			//	
			// pacedValues.replace(",""~");
			setPackedValues(tempObject,packedValues);
			
			// dates
			tempObject.beginDate = begindate;
			if (enddate){
				tempObject.endDate = enddate;
				tempObject.done = true; 
			} else {
				tempObject.endDate = null;
				tempObject.done = false; 
            }
			// comments
			if (a.length > 4){
				var tiComment = decodeString(a[5]);
				tempObject.comment = tiComment.cleanstring();
			}
			//
			observations[i] = tempObject;
			needsDisplay = true;//added one so we need to change the display
			//	
			if (debugON)
				alert("_loadObservationCookieData *observations.length* ="+observations.length);
			//	
		}
		
	}
	return;
}

function replaceCookie(name, theData, days){
	// clear old
	eraseCookie(name);
	// write new
	createCookie(name,escape(theData),days);
	//
	return;
}
function createCookie(name,value,days) {
	/* IMPORTANT a cookie over 2048 doesn't seem to write
	   so check size
	*/
	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=/";
	//
	if (value.length > 2048)
		alert("Warning! *"+name+"* is too large. ("+value.length+" bytes)");
}

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);
}
function _clearCookie()
{
	eraseCookie('odata');
	//eraseCookie('fdata');
	//eraseCookie('teachers');
	eraseCookie('observations');
}


// little used functions
  
function simplePreload() { 
  var args = simplePreload.arguments;
  document.imageArray = new Array(args.length*2);
  for (var i = 0; i < (args.length*2); i+2) {
    //normal "Imaes/filename.png"
    document.imageArray[i] = new Image;
    document.imageArray[i].src = "Images/"+args[i]+".png";
    // clicked "Imaes/filename_clicked.png"
    document.imageArray[i+1] = new Image;
    document.imageArray[i+1].src = "Images/"+args[i+1]+"_clicked.png";
  }
}
function checkConnectionStatus(){
	//var testURL = "http://oldmary.lqhome.com/server-status";
	var testURL = "http://"+dataServer+"/server-status";
	var onloadHandler = function() { checkConnection(xmlRequest); };	
	
	// XMLHttpRequest setup code
	var xmlRequest = new XMLHttpRequest();
	xmlRequest.onload = onloadHandler;
	xmlRequest.open("GET", testURL);
	xmlRequest.setRequestHeader("Cache-Control", "no-cache");
	// need asycronous call setting (wait for reply)
	xmlRequest.send(null);
}
//
function  checkConnection(xmlRequest) 
{
	var indicatorObject = document.getElementById('indicator');
	var connectedText = document.getElementById('connected');
	var disconnectedText = document.getElementById('notConnected');
	//
	if (xmlRequest.status == 200) {
		// Parse and interpret results
		// XML results found in xmlRequest.responseXML
		/*
		disconnectedText.style.display="none";      // hide the disconnectedText
		//disconnectedText.hide();
		
		connectedText.style.display="block";    // show the connectedText
		//connectedText.show();
		
		message.value = "Connected";
		indicatorObject.object.setValue(1);
		*/
	}
	else {
		/*
		connectedText.style.display="none";      // hide the connectedText
		//connectedText.hide();
		disconnectedText.style.display="block";    // show the disconnectedText
		//disconnectedText.show();

		message.value ="Disconnected " + xmlRequest.status;
		indicatorObject.object.setValue(15);
		*/
		alert("You are not connected to the Internet.  Connect to the Internet and try again");
	}
	//alert("checkConnection: "+ xmlRequest.status);
}
// ************************************************************************************************************************************
// General purpose useful utilities
// ************************************************************************************************************************************

String.prototype.trim = function()
{
	/*strip spaces from beginning and end of string - removes trailing LF's too */
	return this.replace(/^\s+|\s+$/g,"");
}

String.prototype.strip = function()
{  /* strip HTML tags */
	return this.replace(/(<([^>]+)>)/ig, '').replace('>','').replace('<','');
}

String.prototype.cleanstring = function()
{
	/* remove unwanted charactors */
	var allowed = ' _-,.?()+=#%*!abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';

	var o = '';
	for (i = 0; i < this.length; i++) {
		c = this.charAt(i);
		if (allowed.indexOf(c) > -1)
			o += c;
	}
	return o;
}

String.prototype.space = function()
{
	/* replace underlines with spaces */
	return this.replace(/_/g, ' ');
}
/*
Object.prototype.show = function()
{
	this.style.display = 'block';
}
*/
/*
Object.prototype.hide = function()
{
	this.style.display = 'none';
}
*/

/*
Object.prototype.destroy = function()
{
	this.parentNode.removeChild(this);
}
*/
function getOwnerData(){
	// turn ownerData into flat string for cookie
	var od = '';
	if (ownerID !== 0){
		// id, userid, pswd, rememberme
		od = ownerID+'&&'+document.getElementById('userID').value+'&&'+document.getElementById('pswd').value+'&&'+document.getElementById('rememberCheckbox').checked;
	}
	return new String(od);
}

function getFormData(){

	//return observerTemplateString;
	
	// turn formData into flat string  observationTemplate: title, data, description
	var fd = '';
	if (formTemplate){
		// formTemplate
		fd = formID+'&&'+formTemplate.title.join("~")+'&&'+formTemplate.description.join("~")+'&&'+formTemplate.data.join("~");
	}
	//
	//alert("getFormData ="+fd);
	//
	return new String(fd);
}

function getTeacherData(){
	// turn teachers array into flat string
	var c = '';	
	for (var i = 0; i < teachers.length; i++)
	{
		c += teachers[i].name + '&&' + teachers[i].email + '&&' + teachers[i].id;
		if (i !== teachers.length - 1)
			c += '\\';
	}
	//
	//alert("getTeacherData ="+C);
	//
	return new String(c);
}

function getObservationData(){
	var data = '';
	//
		var tempObservation;
		for (var i = 0; i < observations.length; i++){		
			tempObservation = observations[i];
			var theData = packedValues(tempObservation);
			var beginDate = encodeString(tempObservation.beginDate.getTime());
			var endDate = "null";
			if (null !== tempObservation.endDate)
			   endDate = encodeString(tempObservation.endDate.getTime());
			//
			//mainDatabase.addRow("observations",["teacherid","formid","begindate","enddate","packedValues"],[tempObservation.teacherID,formID,beginDate,endDate,encodeString(theData)]);
			data += tempObservation.teacherID+"~"+formID+"~"+beginDate+"~"+endDate+"~"+encodeString(theData);
			if (i !== observations.length - 1)
				data += '\\';
		}
	
	//
	return new String(data);
}
