
jQuery.fn.populate=function(obj,options){function parseJSON(obj,path)
{path=path||'';if(obj==undefined)
{}
else if(obj.constructor==Object)
{for(var prop in obj)
{var name=path+(path==''?prop:'['+prop+']');parseJSON(obj[prop],name);}}
else if(obj.constructor==Array)
{for(var i=0;i<obj.length;i++)
{var index=options.useIndices?i:'';index=options.phpNaming?'['+index+']':index;var name=path+index;parseJSON(obj[i],name);}}
else
{if(arr[path]==undefined)
{arr[path]=obj;}
else if(arr[path].constructor!=Array)
{arr[path]=[arr[path],obj];}
else
{arr[path].push(obj);}}};function debug(str)
{if(window.console&&console.log)
{console.log(str);}}
function getElementName(name)
{if(!options.phpNaming)
{name=name.replace(/\[\]$/,'');}
return name;}
function populateElement(parentElement,name,value)
{var selector=options.identifier=='id'?'#'+name:'['+options.identifier+'="'+name+'"]';var element=jQuery(selector,parentElement);value=value.toString();value=value=='null'?'':value;element.html(value);}
function populateFormElement(form,name,value)
{var name=getElementName(name);var element=$(form).find("*[name="+name+"]");if(element==undefined)
{element=jQuery('#'+name,form);if(element)
{element.html(value);return true;}
if(options.debug)
{debug('No such element as '+name);}
return false;}
if(options.debug)
{_populate.elements.push(element);}
elements=element.type==undefined&&element.length?element:[element];for(var e=0;e<elements.length;e++)
{var element=elements[e];if(!element||typeof element=='undefined'||typeof element=='function')
{continue;}
switch(element.type||element.tagName)
{case'radio':element.checked=(element.value!=''&&value.toString()==element.value);case'checkbox':var values=value.constructor==Array?value:[value];for(var j=0;j<values.length;j++)
{element.checked|=element.value==values[j];}
break;case'select-multiple':var values=value.constructor==Array?value:[value];for(var i=0;i<element.options.length;i++)
{for(var j=0;j<values.length;j++)
{element.options[i].selected|=element.options[i].value==values[j];}}
break;case'select':case'select-one':element.value=value.toString()||value;break;case'text':case'button':case'textarea':case'submit':default:value=value==null?'':value;element.value=value;}}}
if(obj===undefined)
{return this;};var options=jQuery.extend
({phpNaming:true,phpIndices:false,resetForm:true,identifier:'id',debug:false},options);if(options.phpIndices)
{options.phpNaming=true;}
var arr=[];parseJSON(obj);if(options.debug)
{_populate={arr:arr,obj:obj,elements:[]}}
this.each
(function()
{var tagName=this.tagName.toLowerCase();var method=tagName=='form'?populateFormElement:populateElement;if(tagName=='form'&&options.resetForm)
{this.reset();}
for(var i in arr)
{method(this,i,arr[i]);}});return this;};
