function scorm12PlayerUnload()
    {
        global $ilUser, $ilDB;
        $user_id = $ilUser->getID();
        $ref_id = $_GET["ref_id"];
        $obj_id = ilObject::_lookupObjId($ref_id);
        if ($obj_id <= 1) {
            $GLOBALS['ilLog']->write(__METHOD__ . ' no valid obj_id');
        } else {
            $data = $_POST['last_visited'];
            //			$GLOBALS['ilLog']->write(__METHOD__.' last_visited: '.$data);
            if ($data) {
                $set = $ilDB->queryF('
				SELECT rvalue FROM scorm_tracking 
				WHERE user_id = %s
				AND sco_id =  %s
				AND lvalue =  %s
				AND obj_id = %s', array('integer', 'integer', 'text', 'integer'), array($user_id, 0, 'last_visited', $obj_id));
                if ($rec = $ilDB->fetchAssoc($set)) {
                    $ilDB->update('scorm_tracking', array('rvalue' => array('clob', $data), 'c_timestamp' => array('timestamp', ilUtil::now())), array('user_id' => array('integer', $user_id), 'sco_id' => array('integer', 0), 'lvalue' => array('text', 'last_visited'), 'obj_id' => array('integer', $obj_id)));
                } else {
                    $ilDB->insert('scorm_tracking', array('obj_id' => array('integer', $obj_id), 'user_id' => array('integer', $user_id), 'sco_id' => array('integer', 0), 'lvalue' => array('text', 'last_visited'), 'rvalue' => array('clob', $data), 'c_timestamp' => array('timestamp', ilUtil::now())));
                }
            }
            // update time and numbers of attempts in change event
            //NOTE: here it is correct (not count of commit with changed values); be careful to performance issues
            ilObjSCORMTracking::_syncReadEvent($obj_id, $user_id, "sahs", $ref_id);
        }
        header('Content-Type: text/plain; charset=UTF-8');
        print "";
    }