var FORM={};

if(typeof(link_browser) == "undefined"){
	link_browser = "";
}

function connectAJAX(H,url){
var query=hashToString(H);
if(document.getElementById('test')){
document.getElementById('test').innerHTML = query;}
if(! url){
url='/cgi-bin/ajax_projects.pl';
}
var status = false; var contentType = "application/x-www-form-urlencoded; charset=ISO-8859-1";
var request;

if(! link_browser){

    // Native XMLHttpRequest object
if(window.XMLHttpRequest){
	request = new XMLHttpRequest();
    // ActiveX XMLHttpRequest object
    } else if (window.ActiveXObject) {
        request = new ActiveXObject("Microsoft.XMLHTTP");
	}

}

if (request){
	request.onreadystatechange = function(){
	if(request.readyState == 4 && request.status == 200){
 	return processAJAX(request,H)}
		}
	request.open("post", url, true);
	request.setRequestHeader("Content-Type", contentType);
	request.send(query);
	status = true;
	}
	return status;
}
var ajax;
function processAJAX(AJAX,H){
ajax=eval('(' + AJAX.responseText + ')');
try{eval(ajax.instructions.return_function)}catch(e){}
}

function hashToString(H){
var date=new Date();
if(! H['ajax_id']){H['ajax_id'] = date.valueOf() + Math.floor(Math.random()*101)/100;}
var content='';
for(var item in H){
	content += item + '=' + escape(H[item]) + '&';
	}
return content;
}

// FORM utilities

function makePopupMenu(H){
var values = H['values'];
var labels = H['labels'];
if(! values){return '';}
if(! labels){labels={}}
var content='<select name="'+H['name']+'">\n';
for(var i =0; i< values.length;i++){
	var selected_='';
	if(H['value'] == values[i]){selected_ = 'selected'} 
	var label_ = labels[values[i]];
	if(! label_){label_ = values[i]}
	content += '<option value="'+values[i]+'"'+ selected_ +'>' + label_ + '</option>\n';
	}
content += '</select>';
return content;
}

function makeTextarea(EL){
var value_=EL['value'];var rows_=EL['rows'];var cols_=EL['cols'];
if(! value_){value_ = ''}
var content = '<textarea name="'+EL['name']+'" rows="'+rows_+'" cols="'+cols_+'" class="'+EL['class']+'">' + value_ + '</textarea>';
return content;
}

function makeCheckbox(EL){
var checked='';
if(EL.value){checked='checked';}
var content='<input type="checkbox" name="' +EL.name+ '"' +checked+'>';
return content;
}

function makeTextfield(EL){
var value_=EL['value'];var size_=EL['size'];
if(! value_){value_ = ''}
value_=value_.replace(/"/g,'&quot;');
var content = '<input type="text" name="'+EL['name']+'" size="'+size_+'" value="'+value_+'">';
return content;
}

function makeDateGroup(EL){
var content='';
var month='01';var year='2008';var day='01';
var re=/(\d{4})(\d{2})(\d{2})/;
if(re.test(EL['value'])){
var res=re.exec(EL['value']);
}
MONTH['value']=month;
MONTH['values']=('01','02','03','04','05','06','07','08','09','10','11','12');
content +=makePopupMenu(MONTH);
content += ' ';
DAY['value']=day;
DAY['values']=('01','02','03','04','05','06','07','08','09','10','11','12','13','14','15','16','17','18','19','20','21','22','23','24','25','26','27','28','29','30','31');
content +=makePopupMenu(DAY);
content += ' ';
YEAR['value']=year;
YEAR['values']=('2008','2009','2010','2011');
content +=makePopupMenu(YEAR);
}

function makeEditable(obj){
var content='';
var classname_=obj.className;
var id_=obj.parentNode.id;
var EL=new Object;
EL.name=classname_ + '-' + id_;
obj.id=id_ + '-' + classname_;
EL.value=obj.innerHTML;
if(FORM_PROPERTIES){
if(FORM_PROPERTIES[classname_]){
	obj.id=id_+ '-' + classname_;
	EL.size=FORM_PROPERTIES[classname_]['size'];
	EL.rows=FORM_PROPERTIES[classname_]['rows'];
	EL.cols=FORM_PROPERTIES[classname_]['cols'];

	if(FORM_PROPERTIES[classname_]['type'] == 'text'){
	content += makeTextfield(EL);
	}
	if(FORM_PROPERTIES[classname_]['type'] == 'select'){

	if(FORM_PROPERTIES[classname_]['values']){
		EL['values']= FORM_PROPERTIES[classname_]['values'];  
	}else{
	EL['values'] =  eval(classname_);}
	content += makePopupMenu(EL);
	}
	if(FORM_PROPERTIES[classname_]['type'] == 'textarea'){
	content +=makeTextarea(EL);
	}
	if(FORM_PROPERTIES[classname_]['type'] == 'checkbox'){
	content +=makeCheckbox(EL);
	}
	if(FORM_PROPERTIES[classname_]['type'] == 'date'){
	content +=makeDateGroup(EL);
	}

content += '<input type="button" value="update" onclick="editableUpdate('+id_+',\''+classname_+'\')">';
obj.innerHTML = content;		

	} // end if(FORM_PROPERTIES[classname_])
	}
}

function editableUpdate(id_field,classname_){// classname_ is field name
var form_element=document.forms['ajax_editable'][classname_ + '-' +id_field];
var val;
var H = new Array();
if(form_element.type=='text'){
	val=form_element.value;
	}
if(form_element.type=='checkbox'){
	val='';
	if(form_element.checked){val='on';}
	}
if(form_element.type=='textarea'){
	val=form_element.value;
	}
if(form_element.type=='select-one'){
	val=form_element.options[form_element.selectedIndex].value;
	}
H['ajax_return']='update';
H[classname_]=val;
H['id_field']=id_field;
H['field_list']='products,'+classname_+',id_field';
connectAJAX(H);
document.getElementById(id_field + '-' + classname_).innerHTML=val;
}

function replacer(str,m1,offset,s){
if(FORM[m1]){
	switch(FORM[m1]['type']){
	case "text": return makeTextfield(FORM[m1]);
	break;
	case "select": return makePopupMenu(FORM[m1]);
	break;
	case "textarea": return makeTextarea(FORM[m1]);
	break;
	case "checkbox": return makeCheckbox(FORM[m1]);
	default: return '';
	}
	}
return '';
}

