// Nico Westerdale - 2/2005  - www.iconico.com

// Persist.js


// Sets a userData 'cookie' with specified name and value
function setPersist(strName, strValue){
	strValue = escape(strValue.toString());
	strName = strName.replace(new RegExp('[/\\._]','ig'), '');	// slashes not allowed in string name, dots + underlines break ids
	try {
		var objPersist = createPersist(strName);
		objPersist.value = strValue;
		objPersist.setAttribute(strName, objPersist.value);
		objPersist.save('llnxStore' + strName);
	} catch(e) {}
}

// Sets a userData 'cookie' with specified name and value
// The seven offset attributes can be used to set when the 'cookie' expires
//  specifing minuteOffset=2 will expire the 'cookie' in two minutes.
//  Multiple offsets can be specified and negative numbers can be specified too.
function setPersistExpires(strName, strValue, yearOffset, monthOffset, dayOffset, hourOffset, minuteOffset, secondOffset, millisecondOffset){
	strValue = escape(strValue.toString());
	strName = strName.replace(new RegExp('[/\\._]','ig'), '');	// slashes not allowed in string name, dots + underlines break ids
	try {
		var objPersist = createPersist(strName);
		objPersist.value = strValue;
		objPersist.setAttribute(strName, objPersist.value);
		var objDate = new Date();
		objDate.setFullYear			(objDate.getFullYear() + yearOffset);
		objDate.setMonth				(objDate.getMonth() + monthOffset);
		objDate.setDate					(objDate.getDate() + dayOffset);
		objDate.setHours				(objDate.getHours() + hourOffset);
		objDate.setMinutes			(objDate.getMinutes() + minuteOffset);
		objDate.setSeconds			(objDate.getSeconds() + secondOffset);
		objDate.setMilliseconds	(objDate.getMilliseconds() + millisecondOffset);
		objPersist.expires = objDate.toUTCString();
		objPersist.save('llnxStore' + strName);
	} catch(e) {}
}

// Removes a userData 'cookie' specifed by the name
function removePersist(strName){
	strName = strName.replace(new RegExp('[/\\._]','ig'), '');	// slashes not allowed in string name, dots + underlines break ids
	try {
		var objPersist = createPersist(strName);
		objPersist.value = null;
		objPersist.setAttribute(strName, objPersist.value);
		objPersist.save('llnxStore');
	} catch(e) {}
}

// Returns the value of a userData 'cookie' specified by the name
function getPersist(strName){
	strName = strName.replace(new RegExp('[/\\._]','ig'), '');	// slashes not allowed in string name, dots + underlines break ids
	var objPersist = createPersist(strName);
	try {
		objPersist.load('llnxStore' + strName);		//need unique id here too so that large data fields don't fill up stores
		objPersist.value = objPersist.getAttribute(strName);
		return unescape(objPersist.value);
	} catch(e) {}
}

// Internal function to create a userData persistance object on a page
function createPersist(strName) {
	var objPersist = document.getElementById('persist' + strName)
	try {
		if (!objPersist) {			//create persist hidden text field to assign data too
			objPersist = document.createElement('INPUT');
			objPersist.type = 'Hidden';
			objPersist.id = 'persist' + strName;
			objPersist.addBehavior('#default#userData');		//enable persistance on DOM object
			document.body.insertBefore(objPersist, null);		//Change this to assign to a form if you want to post it to the server - may be useful sometimes
		}
	} catch(e) {}
	return objPersist;
}
