//--- Author: Karl Rudd, emlab, University of Wollongong
//--- Last modified: 7/6/03

//--- base cookie functions

function setCookie( name, value, expire ) {
	document.cookie = name + "=" + escape( value ) + "; expires=" + expire.toGMTString();
}

function getCookie( name ) {
	var rg = new RegExp(name + "=([^;]+)");
	var cv = rg.exec(document.cookie);
	return ( cv != null ) ? unescape( cv[ 1 ] ) : null;
}

function killCookie( name ) {
		document.cookie = name + '=; expires=Fri, 13-Apr-1977 00:00:00 GMT;';
}

//--- forms data saving and restoring

var timeToExpire = 2 * 24 * 3600000; 	// 2 days
var pagesCookieName = "QTPSCI_" + calchash( location.pathname );

function saveFormsData()
{
	var d = document; if( d.forms.length < 1 ) return;
	var expire = new Date(); expire.setTime( expire.getTime() + timeToExpire );

	var i, j;
	for( i = 0; i < d.forms.length; i++ ) {
		var data = "";
		for( j = 0; j < d.forms[ i ].length; j++ ) {
			var elem = d.forms[ i ].elements[ j ];
			switch( elem.type ) {
				case "text": case "textarea":
					data += (elem.value).length + "*" + elem.value; break;
				case "checkbox": case "radio":
					data += (elem.checked ? "t" : "f"); break;
			}
		}
		if( data.length > 0 ) {
			setCookie( pagesCookieName + "_" + i, data, expire );
		}
	}

	setCookie( "QTPSCI_PREVPAGE", pagesCookieName, expire );	// for use by loadFormsDataFromPrevious()
}

function loadFormsData()
{
	var d = document; if( d.forms.length < 1 ) return;

	for( var i = 0; i < d.forms.length; i++ ) {

		var di = 0;
		var data = getCookie( pagesCookieName + "_" + i );
		if( data == null ) continue;

		for( var j = 0; j < d.forms[ i ].length && di < data.length; j++ ) {
			var elem = d.forms[ i ].elements[ j ];
			switch( elem.type ) {
				case "text": case "textarea":
					var end = data.indexOf( "*", di );
					var len = parseInt( data.substring( di, end ) ); di = end + 1;
					elem.value = data.substr( di, len ); di += len;
					break;
				case "checkbox": case "radio":
					elem.checked = (data.charAt( di ) == "t") ? true : false; di++;
					break;
			}
		}
	}
}

function clearFormsData() {
	killCookie( pagesCookieName );
}

//--

function loadFormsDataFromPrevious()
{
	var data = getCookie( "QTPSCI_PREVPAGE" );
	if( data == null ) return;

	var temp = pagesCookieName;
	pagesCookieName = data;
	
		loadFormsData();
	
	pagesCookieName = temp;
}

//--- 

function hex(num)
{
	var hex_chr = "0123456789abcdef";
	var str = "";
	for( var j = 7; j >= 0; j-- )
		str += hex_chr.charAt( ( num >>> ( j * 4 ) ) & 0x0F );
	return str;
}

// very simple hash function
function calchash( str )
{
	var ch = 0;
	for( var i = 0; i < str.length; i++ ) {
		ch = ( ( ch << 1 ) | ( ch >>> 31 ) ) ^ 0x95BCE86D;
		ch ^= str.charCodeAt( i ) & 0xFF;
	}
	return hex( ch );
}
