//
// jsm - 2011.08.03
//

var jsm = 
 {
 template : jsxTemplate,
 obj : jsxObj,
 jid : jsxJid,
 data : jsxData
 }


function jsxJid(resid)
{ // given a resourceid .. jsx12, ui.folder, guid, freindly-name
  // returns the jsxid .. jsx12
  // {"1.boot":"jsx1","1.theme":"jsx2","g":"jsx3","layer.desktop":"jsx4","layer.login":"jsx5","ui.background":"jsx6"};

 var result = false;

 if(in_array(resid,jsmmap))
  { // jsx10
  result = resid;
  }
 else
  { // page.home
  if(jsmmap[resid] !== undefined)// && (types === true))
   result = jsmmap[resid];
  }//else

 return result;
}

function jsxObj(resid)
 {
 var result = null;

 var j = jsm.jid(resid);
 var c = 'var r = '+j+'obj;';

      
 try
  {
  eval(c); // get function object to 'f'
  result = r;
  }
  catch(err)
  {
  ////console.log("warning: ",err)
  }

 return result;
 }


function jsxData(resid,tag)
 {

 if(tag === undefined)
  tag = '';

 var jid = jsm.jid(resid);

 var result = ""

 if(jsmhtml[jid][tag] !== undefined)
  result = jsmhtml[jid][tag];

 return result;
 }


function jsxTemplate(d,varlist,deflist)
{ //
  // 2011.08.04
  //
  // builds html code from an input string d
  // varlist = optional
  //   - local tag,value set (or an array of sets to multipass generate)
  // deflist = optional
  //   - tag,values for default values if var missing (optional - doesn't need be the whole set)

 var o = "";

// console.log('d',d,varlist,deflist)

 if(varlist === undefined) varlist = {};
 if(deflist === undefined) deflist = {};


// d ='something something [display][hello][time-and-temp] .... [abcd] more to foloows';

  
 if(varlist instanceof Array) //
 {
// console.log('jsxTemplate Sub calling');
 for(var i = 0;i<varlist.length;i++)
  {
  var v = varlist[i];
  o += jsm.template(d,v,deflist);
  }//for
 }//if
else
 {
 // replace data urls (this should be a plugin?)
 var mk = array_keys(jsmmedia);
 var mv = array_values(jsmmedia);
 d = str_replace(mk,mv,d);

 var l = d.split('[');

 o += l.shift()
 while(l.length > 0)
  {
  var p = l.shift();
  var x = p.split(']');
  var ip = x[0]; // time-and-temp f;

  var ix = ip.split(' ',2);
  var i = ix[0];  // time-and-temp
  var ii = ix[1]; //f;
  var jid = jsm.jid(i); // time-and-temp -> jsx6 (or false)

  if(varlist[i] !== undefined) // local params
   {
   o += varlist[i];
   }
  else
  if(deflist[i] !== undefined) // local params
   {
   o += deflist[i];
   }
  else
  if(jid !== false) // known jsx item?
   {
    var a = false;

    try
     {
     var ee = 'a = ('+jid+'obj)';
     eval(ee);
     }
    catch(err)
     {
//     console.log(0);
     }

    if((a !== false) && (a.new !== undefined))
       {
//       console.log("has a 'new' function");
       o += jsm.template(a.new(ii));
       }
     else
       {
       var dd = jsm.data(jid);
//       console.log("pulling from data",jid,dd);
       o += jsm.template(dd); // use value of html.php
       }

   }//if
  else
    o += "["+i+"]";

   o += x[1];
  }//while
 }//if

 return o;
}//func

