
var debugging = true;
var backupRegisteredObjects = new Array();
window.setTimeout('backupData();',15000);

function backupRegisterObject(obj){
	// Register state of elements
	for(var i=0;i<obj.ids.length;i++){
		element = document.getElementById(obj.ids[i]);
		if(element){
			/*switch(element.type){
				case "text":
				case "textarea":
					element.def
					break;
				case "checkbox":
					break;
			}*/
		} else {
			alert("Warning: Element with ID ("+obj.ids[i]+") does not exist. Not found while registering object for backup.");
		}
	}
	backupRegisteredObjects.push(obj);
	backupMarkAsBackedUp(obj.token);
}
function backupDeregisterObject(token,deleteData){
	for(var i=0;i<backupRegisteredObjects.length;i++){
		if(backupRegisteredObjects[i].token==token){
			obj = backupRegisteredObjects[i];
			backupRegisteredObjects.splice(i,1);
			if(deleteData){
				// Send request
				postDataReturnText("/code/script.backup.php", "token="+escapeBlackout(obj.token)+"&label="+escapeBlackout(obj.label)+"&data=&url="+escapeBlackout(obj.url), backupResponse, backupErrorResponse, false, 0, null, obj);
			}
		}
	}
}
function backupData(){
	for(var i=0;i<backupRegisteredObjects.length;i++){
		obj = backupRegisteredObjects[i];
		obj = backupGetDataString(obj);
		if(obj.data!=obj.previousdata){
			// Send request
			postDataReturnText("/code/script.backup.php", "token="+escapeBlackout(obj.token)+"&label="+escapeBlackout(obj.label)+"&data="+escapeBlackout(obj.data)+"&url="+escapeBlackout(obj.url)+(obj.shouldBackup?"&backup=1":""), backupResponse, backupErrorResponse, false, 0, null, obj);
			// Save current data so that we can compare against it later
			backupRegisteredObjects[i].previousdata = obj.data;
		}
	}
	window.setTimeout('backupData();',15000);
}

function backupGetDataString(obj){
	obj.data = "";
	obj.shouldBackup=false;
	for(i2 in obj.ids){
		element = document.getElementById(obj.ids[i2]);
		if(element){
			switch(element.type){
				case "text":
				case "textarea":
					obj.data += "&"+obj.ids[i2]+"="+escapeBlackout(element.value);
					if(element.value) obj.shouldBackup = true; // Only backup if there's textual data to store
					break;
				case "checkbox":
					obj.data += "&"+obj.ids[i2]+"="+(element.checked?"1":"0");
					break;
				case "radio":
				case "select":
					obj.data += "&"+obj.ids[i2]+"="+escapeBlackout(element.value);
					break;
			}
		}
	}
	return obj;
}

function backupMarkAsBackedUp(token){
	for(var i=0;i<backupRegisteredObjects.length;i++){
		obj = backupRegisteredObjects[i];
		if(obj.token == token){
			obj = backupGetDataString(obj);
			obj.previousdata = obj.data;
		}
	}
}

function backupResponse(text,url,obj){
	if(document.getElementById(obj.token+"_status")){
		if(text.substr(0,8)=="success:"){
			document.getElementById(obj.token+"_status").innerHTML = text.substr(8);
			backupDisplayStatus(obj.token);
		} else if(text.substr(0,8)=="removed:"){
			backupHideStatus(obj.token);
		} else {
			document.getElementById(obj.token+"_status").innerHTML = '<span class="red fat">Warning:</span> Could not save your data'+(debugging?' ('+text+')':'');
			backupDisplayStatus(obj.token);
		}
	}
}

function backupErrorResponse(status,data,url,attempts,obj){
	if(attempts<3){
		postDataReturnText(url, data, backupResponse, backupErrorResponse, false, attempts, null, obj);
	} else {
		if(document.getElementById(obj.token+"_status")) document.getElementById(obj.token+"_status").innerHTML = '<div style="padding-top:5px;"><span class="red fat">Warning:</span> Could not save your data'+(debugging?' ('+text+')':'')+'</div>';
		backupDisplayStatus();
	}
}

function backupDisplayStatus(token){
	if(document.getElementById(token+"_status_parent")){
		document.getElementById(token+"_status_parent").style.display = 'block';
	} else {
		document.getElementById(token+"_status").style.display = 'inline';
	}
}

function backupHideStatus(token){
	if(document.getElementById(token+"_status_parent")){
		document.getElementById(token+"_status_parent").style.display = 'none';
	} else {
		document.getElementById(token+"_status").style.display = 'none';
	}
}

function deleteUnsavedData(id){
	if(confirm("Are you sure?")){
		// Show loader
		document.getElementById("unsaved_"+id).innerHTML = getLoader("Deleting...");
		// Send request
		postDataReturnText("/server/unsaved.php", "delete="+id, unsavedResponse, unsavedErrorResponse, false);
	}
}

function deleteAllUnsavedData(){
	if(confirm("Are you sure?")){
		// Show loader
		document.getElementById("unsaved_all").innerHTML = getLoader("Deleting...");
		// Send request
		postDataReturnText("/server/unsaved.php", "delete=all", unsavedResponse, unsavedErrorResponse, false);
	}
}

function checkForUnsavedData(){
	postDataReturnText("/server/unsaved.php", "refresh=1", unsavedResponse, unsavedErrorResponse, false);
}

backup_unsavedIsHidden = false;
function unsavedResponse(text){
	if(text.indexOf('noUnsavedData')>0){
		$('#unsavedBox').slideToggle('fast');
		backup_unsavedIsHidden = true;
	} else {
		document.getElementById("unsavedBox").innerHTML = text;
		if(backup_unsavedIsHidden){
			$('#unsavedBox').slideToggle('fast');
			backup_unsavedIsHidden = false;
		}
	}
}

function unsavedErrorResponse(status,data,url,attempts){
	if(attempts<3){
		postDataReturnText(url, data, unsavedResponse, unsavedErrorResponse, false, attempts);
	} else {
		document.getElementById("unsavedBox").innerHTML = '<span class="red fat">There was an error.</span> <b>Please try again</b>';
	}
}

