1 2 function df_getElementsWithAttribute(parent,tagname,attname){var els=parent.getElementsByTagName(tagname);var out=[];for(var i=0,max=els.length;i<max;i++){if(els[i].getAttribute(attname))out.push(els[i]);} 3 return out;} 4 var df_addNew_target_element;var df_addNew_form_element;function df_addNew(target,formel){if(typeof target=='string'){target=document.getElementById(target);} 5 if(typeof formel=='string'){formel=document.getElementById(formel);} 6 if(!target){throw new Exception("Cannot add new item when no target is specified");} 7 if(!formel){alert(target.tagName);if(target.tagName.toLowerCase()=='tr'){alert("we have a tr tag");var numcols=0;for(var i=0,max=target.childNodes.length;i<max;i++){if(target.childNodes[i].tagName.toLowerCase()=='td'||target.childNodes[i].tagName.toLowerCase()=='th'){var colspan=target.childNodes[i].getAttribute('colspan');if(colspan){numcols+=parseInt(colspan);}else{numcols++;}}} 8 var formtr=document.createElement('tr');var random=Math.round(Math.random()*100);formtr.setAttribute('id','form-'+random);var formtd=document.createElement('td');if(numcols>6){formtd.setAttribute('colspan',6);var formtd2=document.createElement('td');formtd2.setAttribute('colspan',numcols-6);formtr.appendChild(formtd);formtr.appendChild(formtd2);}else{formtd.setAttribute('colspan',numcols-6);formtr.appendChild(formtd);} 9 if(target.nextSibling){target.parentNode.insertBefore(formtr,target.nextSibling);}else{target.parentNode.appendChild(formtr);} 10 formel=formtr;}else{formel=document.createElement('div');var random=Math.round(Math.random()*100);formel.setAttribute('id','form-'+random);if(target.nextSibling){target.parentNode.insertBefore(formel,target.nextSibling);}else{target.parentNode.appendChild(formel);}}} 11 var editableFields=df_getElementsWithAttribute(target,'span','df:field');var fieldnames=[];for(var i=0,max=editableFields.length;i<max;i++){fieldnames.push(editableFields[i].getAttribute('df:field'));} 12 fieldnames=fieldnames.join(',');var relationship=target.getAttribute('df:relationship');var formUrl=null;if(relationship){var id=target.getAttribute('df:id');formUrl='?-action=ajax_form&-record='+escape(id)+'&-relationship='+escape(relationship)+'&-form-type=new_related_record&-fields='+escape(fieldnames);} 13 else{var table=target.getAttribute('df:table');var targetid=target.getAttribute('id');formUrl='?-action=ajax_form&-form-type=new&-fields='+escape(fieldnames)+'&-table='+escape(table)+'&-target-id='+escape(targetid);} 14 target.http=getHTTPObject();target.http.onreadystatechange=df_addNew_handle;target.http.open('GET',formUrl);target.http.send(null);target.handleResponse=df_addNew_handleResponse;df_addNew_target_element=target;df_addNew_form_element=formel;target.edit_form=formel;} 15 function df_addNew_handle(){var target=df_addNew_target_element;var formel=df_addNew_form_element;if(!target)return;var http=target.http;if(http.readyState==4){if(formel.tagName.toLowerCase()=='tr'){formel.firstChild.innerHTML=http.responseText;}else{formel.innerHTML=http.responseText;}}} 16 function df_addNew_handleResponse(targetid,values){var targetel=document.getElementById(targetid);if(!targetel){throw new Exception("Could not find target element "+targetid);} 17 var newrow=targetel.cloneNode(true);var fieldEls=df_getElementsWithAttribute(newrow,'span','df:field');for(var i=0,max=fieldEls.length;i<max;i++){var fieldname=fieldEls[i].getAttribute('df:field');if(values[fieldname]){fieldEls[i].innerHTML=values[fieldname];}} 18 targetel.parentNode.insertBefore(newrow,targetel);if(df_add_editable_awareness){alert("We have awareness");df_add_editable_awareness(newrow);}}