<?php /* -*- Mode: php; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */

include_once($UTIL_DIR . "/modules.php");

class Ref {
	public $mod;
	public $id;

	function show()
	{
		$str = "";
		$module = loadModule($this->mod);
		if($module && method_exists($module, "showRef")) {
			$str .= "<div class=\"ref\">\n";
			$str .= /*"[".$this->mod."] - ".*/$module->showRef($this->id);
			$str .= "</div>\n";
		}
		return $str;
	}

	function Ref($mod, $id)
	{
		$this->mod = $mod;
		$this->id = $id;
	}
}

class Refs {
	public $refs = array();

	function show()
	{
		$str = "";
		$str .= "<div class=\"refs\">\n";
		$str .= "  <div class=\"refs_header\">References:</div>\n";
		foreach($this->refs as $ref) {
			$str .= $ref->show();
		}
		$str .= "</div>";
		return $str;
	}

  public function write($fp, $indent)
  {
    if($this->refs) {
      fwrite($fp, $indent."<refs>\n");
      foreach($this->refs as $ref) {
        fwrite($fp, $indent."  <ref mod=\"".$ref->mod."\" id=\"".$ref->id."\"/>\n");
      }
      fwrite($fp, $indent."</refs>\n");
    }
  }

	public function add($ref)
	{
		array_push($this->refs, $ref);
	}

  public function Refs($refsnode = NULL)
	{
		if(!$refsnode) return;

		$refs = $refsnode->getElementsByTagName('ref');
		foreach($refs as $r) {
			$ref = new Ref($r->getAttribute('mod'),
										 $r->getAttribute('id'));
			$this->add($ref);
		}

	}

}

function refsAddWidget($form, $refslist)
{
  $form->addWidget(new ListEditor("References:", "refslist",
                                  new LineEdit("ID", "ref_id"),
                                  new LineEdit("Module", "ref_mod"),
                                  $refslist, true));
}

function refsAddHiddenWidget($form, $lst)
{
  $vallst = array();
  $vallst["refslist_hidden"] = serialize(refsGetCommaListFromRefs($lst));
  $form->addWidget(new Hidden($vallst));
}

function refsGetFromHidden($vals)
{
  $refslist = unserialize($vals["refslist_hidden"]);
  return $refslist;
}

function refsGetCommaListFromRefs($refs)
{
  $lst = array();
  foreach($refs->refs as $ref) {
    array_push($lst, $ref->mod.":".$ref->id);
  }
  return $lst;
}

function refsGetRefsFromHidden($vals)
{
  $r = refsGetFromHidden($vals);

  $refs = new Refs();
  foreach($r as $k => $val) {
    $v = explode(":", $val);
    $refmod = $v[0];
    $refid = $v[1];
    $ref = new Ref($refmod, $refid);
    $refs->add($ref);
  }

  return $refs;
}

function refsGetRefsFromWidget()
{
  $lst = refsGetValuesFromWidget();
  $refs = new Refs();
  foreach($lst as $val) {
    $v = explode(":", $val);
    $refmod = $v[0];
    $refid = $v[1];
    $ref = new Ref($refmod, $refid);
    $refs->add($ref);
  }
  return $refs;
}

function refsGetValuesFromWidget()
{
  global $GLOBALS;
  return $GLOBALS["refslist"];
}
?>