


function getCookie(c_name)
{
if (document.cookie.length>0)
  {
  c_start=document.cookie.indexOf(c_name + "=");
  if (c_start!=-1)
    {
    c_start=c_start + c_name.length+1;
    c_end=document.cookie.indexOf(";",c_start);
    if (c_end==-1) c_end=document.cookie.length;
    return unescape(document.cookie.substring(c_start,c_end));
    }
  }
return "";
}


// for ajax

function get_all_ajax(url,onComplete,cookie_iden){
	var table_name='';
	var table_id='';
	

	new Ajax.Request(site_url+'/form_autosave/get_autosaved_data/', 
			{asynchronous:true, evalScripts:true, 
			onComplete:onComplete,
			onLoading:function(request, json){
				
			},
			parameters: 'table_name='+table_name+'&table_id='+table_id+'&name='+url+'&identifier='+cookie_iden+'&mode=json'
		});
	
}


function _save_field_ajax(obj,all,cookie_iden){
	var table_name='';
	var table_id='';
	//var cookie_iden='';
	var url=path;
	///////
	var all={};
	var value='';
	var new_value='';
	//all=get_all(path);
	if(!all)all={};

	var field=get_field_data(obj);
	all[field.name]=field.value;
	value=Object.toJSON(all);	

	new Ajax.Request(site_url+'/form_autosave/set_autosaved_data/', 
			{asynchronous:true, evalScripts:true, 
			onComplete:function(request, json){},
			onLoading:function(request, json){
				
			},
			parameters: 'table_name='+table_name+'&table_id='+table_id+'&name='+url+'&identifier='+cookie_iden+'&json='+value+'&mode=json'
		});
	
}


function save_field(obj){
	var table_name='';
	var table_id='';
	var cookie_iden=getCookie(path);
	var url=path;
	///////
	_save_field_ajax(obj,false,cookie_iden);
	
}


/*//for cookies 
function get_all(url){
	var cookie_string='';
	var i=0;
	part=getCookie(url+'_'+i);
	while(part){i++; 
		cookie_string+=part;
		part=getCookie(url+'_'+i);
	}
	
	if(cookie_string)	return cookie_string.evalJSON();
	else return false;


	
}

function save_field(obj){
	var all={};
	var value='';
	var new_value='';
	all=get_all(path);
	if(!all)all={};

	var field=get_field_data(obj);
	all[field.name]=field.value;
	value=Object.toJSON(all);	
	var i=0;
	var part=[];
	while(value.length>4000){
		part[i]=value.substring(0, 4000);
		new_value=value.substring(4000,value.length);
		value=''+new_value;	
		i++;
	}
	part[i]=value.substring(0, 4000);
	
	for(var ind=0;ind<part.length; ind++){
		createCookie(path+'_'+ind,part[ind],30);
	}			
}

*/




function get_field_data(obj){
	var cookie_value = '';
	var objType = new String(obj.type);
	var return_value={};
	switch(objType.toLowerCase()) {
		case "radio" :
	
			var radias=obj.form[obj.name];
			for( i = 0; i < radias.length; i++ )
			{
			if( radias[i].checked == true )
				index=i;				
			}						
			if (obj.checked){
				return_value.name=obj.name;
				return_value.value=1;				
			}
			else{
				return_value.name=obj.name;
				return_value.value=-1;
			}
			break;
	
		case "checkbox" :
			if (obj.checked){
				return_value.name=obj.name;
				return_value.value=1;
			}
			else{ 
				return_value.name=obj.name;
				return_value.value=0;
				//cookie_value = obj.name + '=[0]'
			}
			break;
		/*case "undefined" :
			// a.k.a. radio field.
			for (var i = 0; i < obj.length; i++) {
				if (obj[i].checked) cookie_value = obj[i].name + '=[' + i + ']'
			}
			break;
		case "select-one" :
			cookie_value = obj.name + '=[' + obj.selectedIndex + ']';
			break;
		case "select-multiple" :
			cookie_value = obj.name + '=[';
			for (var i = 0; i < obj.options.length; i++) {
				if (obj.options[i].selected) cookie_value += '+' + i
			}
			cookie_value += ']';
			break;*/
		default :
			// We assume all other fields will have
			// a valid obj.name and obj.value
			
			return_value.name=obj.name;
			return_value.value=obj.value;
			//cookie_value = obj.name + '=[' + obj.value + ']';
	}
	return return_value;
}



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 to retrieve a field.
function retrieve_field(obj,all_fields) {
	
	if(!obj)return false;

	var objType = new String(obj.type);
	if (obj.name)
		var objName = new String(obj.name);
	else
		var objName = new String(obj[0].name);	
	
	
	if(all_fields[objName]===undefined || all_fields[objName]==='undefined')return false;
	real_value=all_fields[objName] ? all_fields[objName] : '';
	//real_value=all_fields[objName] ? all_fields[objName].value : '';
	
	switch(objType.toLowerCase()) {
	case "radio" :
		if (real_value == '1') obj.checked = 1
		else obj.checked = 0
		break;
	case "checkbox" :
			if (real_value == '1') obj.checked = 1
			else obj.checked = 0
			break;
		case "undefined" :
			if(real_value!==undefined && obj[real_value])obj[real_value].checked = 1;
			break;
		case "select-one" :
			obj.selectedIndex = real_value;
			break;
		case "select-multiple" :
			for (var i = 0; i < obj.options.length; i++) {
				if ((real_value.indexOf('+' + i)) > -1)
					obj.options[i].selected = 1;
				else
					obj.options[i].selected = 0;
			}
			break;
		default :
			obj.value = real_value;
			
			break;
	}
	return 1;
}

function check_saved_data(path) {
	return get_all(path);
}


_forms_autosave=function(saved_fields,show_info){

	var fields_for_retrive={};
	
	var all_forms=document.forms;
	for(var i=0; i < all_forms.length; i++){
		var current_form=all_forms[i];
		var form_elemnts=current_form.elements;
		for (var number = 0; number < form_elemnts.length; number++) {
			var current_elemnt=form_elemnts[number];
			fields_for_retrive[current_elemnt.name]=current_form.name;
			current_elemnt.onchange=function(){save_field(this);};//save_field;
		}
	}		
	
	
	
	domain		= '';
	if(!path)path		='/test';
	secure		= 0;
	cookie_iden='';

	//var show_info=false;
	
	//if(saved_fields)show_info=true;
	//show_info=check_saved_data(path);
			
	if(show_info && saved_fields){
	
		
		
		/*var result = confirm("Do you want to load auto saved version?");
        if (result) {*/
		
			for (var field in fields_for_retrive) {
				retrieve_field(document.forms[fields_for_retrive[field]][field],saved_fields);
				
			}
		/*}*/
	}
	
}

forms_ajax_autosave=function(show_info){
	this.show_info=show_info;
	var form_cookie=getCookie(path);
	if(!form_cookie){
		var currentTime = new Date();
		var rand_no = Math.random();
		createCookie(path,currentTime.getTime()+'_'+rand_no,30);
	}
	cookie_iden=form_cookie=getCookie(path);
	
	var saved_fields=get_all_ajax(path,
			function(request, json){
				
		saved_data=request.responseText;
		//if(saved_data){
			//saved_data=stripslashes(saved_data);
			
			if(saved_data)saved_fields=saved_data.evalJSON(true);
			else saved_fields=false;
			_forms_autosave(saved_fields,show_info);
		//}		
		
				//
			},cookie_iden
	);
	

}

function stripslashes(str) {
	str=str.replace(/\\'/g,'\'');
	str=str.replace(/\\"/g,'"');
	str=str.replace(/\\0/g,'\0');
	str=str.replace(/\\\\/g,'\\');
	return str;
	}


forms_autosave=function(){
	var saved_fields=get_all(path);
	_forms_autosave(saved_fields);

}
