Slightly modified Inventory module?

General Chat, Comments
Post Reply
User avatar
cbsarge
Posts: 195
Joined: Mon Sep 14, 2015 3:20 pm

Slightly modified Inventory module?

Post by cbsarge »

I wasn't really crazy about the way the inventory module popped out a window to show the details of an item. With a little editing of the content.php file I've changed it so it now drops down another row in the table to display the stats. Does anyone else like it better this way? I had to drop the link from the equipped items. I'm using the item number as the ID of the table row so it can't exist in both places unless someone can come up with a way to assign an ID unique to equipped items?

Code: Select all

<?php

function sort_objects ($a, $b)
{
    $v = strcmp($a->object_type, $b->object_type);
    if ($v != 0)
        return $v;
    return strcmp($a->name, $b->name);
}

// We are dropping items
if (isset($_GET['drop']))
{
    $obj = Item::GetInventoryObject($_GET['drop']);
    // Somebody tried to play here!
    if ($obj == null)
        return;
        
        // There is more than one item, thefore we need to ask how many to drop.
    if ($obj->quantity + 0 > 1 && ! isset($_POST['confirm']))
    {
        echo "<form method='post' name='dropItems'>";
        TableHeader("How many to drop");
        echo "<input type='text' name='confirm' value='{$obj->quantity}'>";
        TableFooter();
        
        ButtonArea();
        SubmitButton("Drop", "dropItems");
        LinkButton("Cancel", "index.php?p=inventory");
        EndButtonArea();
        return;
    }
    // Only one or we know how many.
    else
    {
        try
        {
            // User defined number
            if (isset($_POST['confirm']))
            {
                Item::InventoryRemove($_GET['drop'], floatval($_POST['confirm']));
                if (function_exists("StorePersonalLog"))
                    StorePersonalLog(Translate("Dropped %d %s", intval($_POST['confirm']), $obj->name));
            }
            // Drop them all
            else
            {
                if (function_exists("StorePersonalLog"))
                    StorePersonalLog(Translate("Dropped %d %s", $obj->quantity, $obj->name));
                Item::InventoryRemove($_GET['drop'], $obj->quantity);
            }
            
            ResultMessage("Item(s) dropped.");
        }
        catch (Exception $ex)
        {
            ErrorMessage($ex->getMessage());
        }
    }
}
// Equip an item
else if (isset($_GET['equip']))
{
    try
    {
        $obj = Item::GetInventoryObject($_GET['equip']);
        $oldObj = Item::Equip($_GET['equip'], $_GET['health']);
        if (function_exists("StorePersonalLog") && $oldObj != null)
        {
            StorePersonalLog(Translate("Unequipped %s", $oldObj->name));
        }
        ResultMessage("Item equipped.");
        if (function_exists("StorePersonalLog"))
            StorePersonalLog(Translate("Equipped %s", $obj->name));
    }
    catch (Exception $ex)
    {
        ErrorMessage($ex->getMessage());
    }
}
// Un-Equip an item
else if (isset($_GET['unequip']))
{
    try
    {
        Item::GetInventoryObject($_GET['unequip']);
        $obj = Item::UnEquip($_GET['unequip']);
        ResultMessage("Item removed.");
        if (function_exists("StorePersonalLog") && $obj != null)
        {
            StorePersonalLog(Translate("Unequipped %s", $obj->name));
        }
    }
    catch (Exception $ex)
    {
        ErrorMessage($ex->getMessage());
    }
}
// Use an item
else if (isset($_GET['use']))
{
    global $object;
    $object = Item::GetInventoryObject($_GET['use'], $_GET['health']);
    if ($object == NULL)
    {
        ErrorMessage("You don't have this item.");
    }
    else if ($object->usage_label == NULL)
    {
        ErrorMessage("You cannot use this item.");
    }
    else
    {
        NWEval("global \$object;\r\n" . $object->usage_code);
        if (function_exists("StorePersonalLog"))
            StorePersonalLog(Translate("Used %s", $object->name));
    }
}

echo "<table class='plainTable'>";
echo "<tr valign='top'><td width='50%'>";

// Shows the slots and current equipment on it
TableHeader("Equipped");
echo "<table class='plainTable'>";
echo "<tr class='titleLine'>";
echo "<td width='1%'> </td><td width='1%'> </td>";
echo "<td>Slot</td><td>Item</td><td>State</td>";
echo "</tr>";
$row = 0;
$objects = Item::AllEquiped();
foreach ($objects as $obj)
{
    if ($row % 2 == 0)
        echo "<tr class='evenLine'>";
    else
        echo "<tr class='oddLine'>";
        // The slot is emtpy
    if ($obj->name == "")
        echo "<td> </td>";
        // The slot contains something we should give the option to un-equip
    else
    {
        echo "<td>";
        LinkButton("Un-Equip", "index.php?p=inventory&unequip=" . urlencode($obj->slot));
        echo "</td>";
    }
    echo "<td width='1%'>" . ($obj->image_file == NULL ? " " : "<img src='{$webBaseDir}modules/inventory/images/$obj->image_file'>") . "</td>";
    echo "<td>{$obj->slot}</td>";
    if ($obj->name == "")
        echo "<td> </td>";
    else
        echo "<td><b>{$obj->name}</b></td>";
    echo "<td>{$obj->object_health}</td>";
    echo "</tr>";
    $row ++;
}
echo "</table>";
TableFooter();

echo "</td><td>";

$typesToEquip = Item::ObjectTypesToEquip();

$objectType = "";
// Make the list of all the items in the inventory
$objects = Item::AllInventory();
usort($objects, "sort_objects");

TableHeader("Inventory");
echo "<table class='plainTable' cellpadding='0'>";
$row = 0;

$descLine = "<tr class='titleLine'>";
$descLine .= "<td width='1%'> </td>";
$descLine .= "<td width='1%'> </td>";
// Can items be dropped?
if (GetConfigValue("itemsCanBeDropped") == "true")
    $descLine .= "<td width='1%'> </td>";
$descLine .= "<td width='1%'> </td>";
$descLine .= "<td>Name</td>";
$descLine .= "<td>Quantity</td>";
// Do items have an health?
if (GetConfigValue("itemsHealth") == "true")
    $descLine .= "<td>Health</td>";
echo "</tr>";

$group_id = 0;
$toContract=(count($objects) > 10);
foreach ($objects as $obj)
{
    if ($objectType != $obj->object_type)
    {
        if ($group_id != 0)
            echo "</table></td></tr>";
        $objectType = $obj->object_type;
        
        echo "<tr class='titleLine'>";
        echo "<td style='text-align: center; cursor: pointer;' onclick='InventoryGroupClick({$group_id});'>";
        echo "<img id='iv_img_{$group_id}' src='$webBaseDir/images/plus.png' align='left'>";
        
        echo Translate($objectType) . "</td></tr>";
        echo "<tr><td id='iv_grp_{$group_id}'";
        if($toContract)
            echo " style='visibility: hidden; display: none;'";
        echo "><table class='plainTable'>";
        echo $descLine;
        
        $group_id ++;
    }
    
    if ($row % 2 == 0)
        echo "<tr class='evenLine'>";
    else
        echo "<tr class='oddLine'>";
        // Is the object of any kind we can equip?
    if (isset($typesToEquip[$obj->object_type_id]))
    {
        echo "<td>";
        LinkButton("Equip", "index.php?p=inventory&equip={$obj->id}&health={$obj->object_health}");
        echo "</td>";
    }
    // No then skip
    else
        echo "<td> </td>";
    if ($obj->usage_label != NULL)
    {
        echo "<td>";
        LinkButton($obj->usage_label, "index.php?p=inventory&use={$obj->id}&health={$obj->object_health}");
        echo "</td>";
    }
    else
        echo "<td> </td>";
        // Is the game configured to allow dropping items?
    if (GetConfigValue("itemsCanBeDropped") == "true")
    {
        // Is it a quest item (therefore we cannot drop)
        if ($obj->quest_item == 'yes')
            echo "<td> </td>";
            // Show the drop item link
        else
        {
            echo "<td>";
            LinkButton("Drop", "index.php?p=inventory&drop={$obj->id}&health={$obj->object_health}", ($obj->quantity + 0 == 1 ? "return confirm(unescape('" . rawurlencode(Translate("Are you sure you want to drop this item?")) . "'));" : NULL));
            echo "</td>";
        }
    }
    echo "<td width='1%'>" . ($obj->image_file == NULL ? " " : "<img src='{$webBaseDir}modules/inventory/images/$obj->image_file'>") . "</td>";
    echo "<td style='text-align: center; cursor: pointer;' onclick='FJdisplayStats({$obj->id});'><b>{$obj->name}</b></td>";
    echo "<td>{$obj->quantity}</td>";
    if (GetConfigValue("itemsHealth") == "true")
        echo "<td>{$obj->object_health}</td>";
    echo "</tr>";
//-----------------------------------------------------Details Panel Added--------------------
	echo "<tr id='{$obj->id}' style='display:none;'><td colspan='7'>";
	$attr = $obj->GetAttributes();
	$ignoreAttr = array("id", "name", "description", "allow_fraction", "quest_item", "object_type_id", "usage_label", "usage_code", "image_file", "requirements");
	foreach ($attr as $key => $val)
	{
	if (in_array($key, $ignoreAttr))continue;
	if ($val == NULL)continue;
	echo "<b>" . str_replace(array("_", " "), array(" ", " "), $key) . ":  </b>$val<br>";
	}
	echo "</td></tr>";
//-----------------------------------------------------Details Panel Added--------------------
	
	
    echo "</tr>";
    $row ++;
}

if ($group_id != 0)
    echo "</table></td></tr>";

echo "</table>";
TableFooter();

echo "</td></tr></table>";
echo "<script src='{$webBaseDir}js/ajax_helper.js'></script>";
echo "<script>var minusImage='{$webBaseDir}/images/minus.png';\nvar plusImage='{$webBaseDir}/images/minus.png';\n</script>";
?>
<script>
var oldIvGroup=-1;
function FJdisplayStats(itemstats)
{
        var trstyle = new String();
        trstyle = document.getElementById(itemstats).style.display;
        if(trstyle.toLowerCase()=="table-row" || trstyle == "")
        {
        document.getElementById(itemstats).style.display = "none";
        }
        else
        {
        document.getElementById(itemstats).style.display = "table-row";
        }
}
function InventoryGroupClick(grpId)
{
	var c = getCookie("settings");
	var data = new Object();
	if (c != null)
		data = jsDeserializer(c);
	
    var ivGrp=""; 
    if(data['iv_grp'] != undefined && data['iv_grp'] != null)
        ivGrp=data['iv_grp'];
    ivGrp=pad(""+ivGrp,grpId+1, '0');
	var div=null;

    div=document.getElementById('iv_grp_'+grpId);

    if(div.style.visibility=='visible')
    {
        div.style.visibility='hidden';
        div.style.display='none';
        document.getElementById('iv_img_'+grpId).src=plusImage;
        data['iv_grp'] = replaceAt(ivGrp,grpId,'0');   
    }
    else
    {
        div.style.visibility='visible';
        div.style.display='block';
        document.getElementById('iv_img_'+grpId).src=minusImage;
        data['iv_grp'] = replaceAt(ivGrp, grpId,'1');   
    } 
    setCookie("settings", jsSerializer(data), 30);
}

function InitIvGroup()
{
	var c = getCookie("settings");
	var data = new Object();
	if (c == null)
		return;
	data = jsDeserializer(c);

    if(data['iv_grp'] != undefined && data['iv_grp'] != null)
    {
        ivGrp=data['iv_grp'];
        for(var i=0;i < ivGrp.length;i++)
        {
            if(ivGrp.charAt(i) == '1')
            {
            	div=document.getElementById('iv_grp_'+i);
            	if(div != null)
            	{
            	    div.style.visibility='visible';
                    div.style.display='block';
                    document.getElementById('iv_img_'+i).src=minusImage;
            	}
            }
        }
    }
}

InitIvGroup();
</script>
Sim
Posts: 412
Joined: Sat Dec 26, 2009 5:37 pm

Re: Slightly modified Inventory module?

Post by Sim »

A screenshot would have helped. Not many people will plug any code in without seeing the results.
oRPG Creator - Make Your Own Browser Game
oRPG Creator on Facebook
User avatar
cbsarge
Posts: 195
Joined: Mon Sep 14, 2015 3:20 pm

Re: Slightly modified Inventory module?

Post by cbsarge »

Good thinking. Screenshot attached. :D
KaL
Posts: 344
Joined: Mon Jan 13, 2014 5:44 am

Re: Slightly modified Inventory module?

Post by KaL »

That looks great! I'm adding that to my game too. Thanks for the code bro!
User avatar
cbsarge
Posts: 195
Joined: Mon Sep 14, 2015 3:20 pm

Re: Slightly modified Inventory module?

Post by cbsarge »

I worked out how to have the details panel available for both equipped and not equipped items for easier comparing of items.

Code: Select all

<?php

function sort_objects ($a, $b)
{
    $v = strcmp($a->object_type, $b->object_type);
    if ($v != 0)
        return $v;
    return strcmp($a->name, $b->name);
}

// We are dropping items
if (isset($_GET['drop']))
{
    $obj = Item::GetInventoryObject($_GET['drop']);
    // Somebody tried to play here!
    if ($obj == null)
        return;
        
        // There is more than one item, thefore we need to ask how many to drop.
    if ($obj->quantity + 0 > 1 && ! isset($_POST['confirm']))
    {
        echo "<form method='post' name='dropItems'>";
        TableHeader("How many to drop");
        echo "<input type='text' name='confirm' value='{$obj->quantity}'>";
        TableFooter();
        
        ButtonArea();
        SubmitButton("Drop", "dropItems");
        LinkButton("Cancel", "index.php?p=inventory");
        EndButtonArea();
        return;
    }
    // Only one or we know how many.
    else
    {
        try
        {
            // User defined number
            if (isset($_POST['confirm']))
            {
                Item::InventoryRemove($_GET['drop'], floatval($_POST['confirm']));
                if (function_exists("StorePersonalLog"))
                    StorePersonalLog(Translate("Dropped %d %s", intval($_POST['confirm']), $obj->name));
            }
            // Drop them all
            else
            {
                if (function_exists("StorePersonalLog"))
                    StorePersonalLog(Translate("Dropped %d %s", $obj->quantity, $obj->name));
                Item::InventoryRemove($_GET['drop'], $obj->quantity);
            }
            
            ResultMessage("Item(s) dropped.");
        }
        catch (Exception $ex)
        {
            ErrorMessage($ex->getMessage());
        }
    }
}
// Equip an item
else if (isset($_GET['equip']))
{
    try
    {
        $obj = Item::GetInventoryObject($_GET['equip']);
        $oldObj = Item::Equip($_GET['equip'], $_GET['health']);
        if (function_exists("StorePersonalLog") && $oldObj != null)
        {
            StorePersonalLog(Translate("Unequipped %s", $oldObj->name));
        }
        ResultMessage("Item equipped.");
        if (function_exists("StorePersonalLog"))
            StorePersonalLog(Translate("Equipped %s", $obj->name));
    }
    catch (Exception $ex)
    {
        ErrorMessage($ex->getMessage());
    }
}
// Un-Equip an item
else if (isset($_GET['unequip']))
{
    try
    {
        Item::GetInventoryObject($_GET['unequip']);
        $obj = Item::UnEquip($_GET['unequip']);
        ResultMessage("Item removed.");
        if (function_exists("StorePersonalLog") && $obj != null)
        {
            StorePersonalLog(Translate("Unequipped %s", $obj->name));
        }
    }
    catch (Exception $ex)
    {
        ErrorMessage($ex->getMessage());
    }
}
// Use an item
else if (isset($_GET['use']))
{
    global $object;
    $object = Item::GetInventoryObject($_GET['use'], $_GET['health']);
    if ($object == NULL)
    {
        ErrorMessage("You don't have this item.");
    }
    else if ($object->usage_label == NULL)
    {
        ErrorMessage("You cannot use this item.");
    }
    else
    {
        NWEval("global \$object;\r\n" . $object->usage_code);
        if (function_exists("StorePersonalLog"))
            StorePersonalLog(Translate("Used %s", $object->name));
    }
}

echo "<table class='plainTable'>";
echo "<tr valign='top'><td width='50%'>";

// Shows the slots and current equipment on it
TableHeader("Equipped");
echo "<table class='plainTable'>";
echo "<tr class='titleLine'>";
echo "<td width='1%'> </td><td width='1%'> </td>";
echo "<td>Slot</td><td>Item</td><td>State</td>";
echo "</tr>";
$row = 0;
$objects = Item::AllEquiped();
foreach ($objects as $obj)
{
    global $equiped;
	if ($row % 2 == 0)
        echo "<tr class='evenLine'>";
    else
        echo "<tr class='oddLine'>";
        // The slot is emtpy
    if ($obj->name == "")
        echo "<td> </td>";
        // The slot contains something we should give the option to un-equip
    else
    {
        echo "<td>";
        LinkButton("Un-Equip", "index.php?p=inventory&unequip=" . urlencode($obj->slot));
        echo "</td>";
    }
    echo "<td width='1%'>" . ($obj->image_file == NULL ? " " : "<img src='{$webBaseDir}modules/inventory/images/$obj->image_file'>") . "</td>";
    echo "<td>{$obj->slot}</td>";
    if ($obj->name == "")
        echo "<td> </td>";
    else
	$equiped = ($obj->id) + 999999;
	echo "<td style='text-align: center; cursor: pointer;' onclick='FJdisplayStats($equiped);'><b>{$obj->name}</b></td>";
    //echo "<td><b>{$obj->name}</b></td>";
	
    echo "<td>{$obj->object_health}</td>";
//-----------------------------------------------------Details Panel Added--------------------
	echo "<tr id='$equiped' style='display:none;'><td colspan='7'>";
   $attr = $obj->GetAttributes();
   $ignoreAttr = array("id", "name", "description", "allow_fraction", "quest_item", "object_type_id", "usage_label", "usage_code", "image_file", "requirements");
   foreach ($attr as $key => $val)
   {
   if (in_array($key, $ignoreAttr))continue;
   if ($val == NULL)continue;
   echo "<b>" . str_replace(array("_", " "), array(" ", " "), $key) . ":  </b>$val<br>";
   }
   echo "</td></tr>";
//-----------------------------------------------------Details Panel Added--------------------
    echo "</tr>";
    $row ++;
}
echo "</table>";
TableFooter();

echo "</td><td>";

$typesToEquip = Item::ObjectTypesToEquip();

$objectType = "";
// Make the list of all the items in the inventory
$objects = Item::AllInventory();
usort($objects, "sort_objects");

TableHeader("Inventory");
echo "<table class='plainTable' cellpadding='0'>";
$row = 0;

$descLine = "<tr class='titleLine'>";
$descLine .= "<td width='1%'> </td>";
$descLine .= "<td width='1%'> </td>";
// Can items be dropped?
if (GetConfigValue("itemsCanBeDropped") == "true")
    $descLine .= "<td width='1%'> </td>";
$descLine .= "<td width='1%'> </td>";
$descLine .= "<td>Name</td>";
$descLine .= "<td>Quantity</td>";
// Do items have an health?
if (GetConfigValue("itemsHealth") == "true")
    $descLine .= "<td>Health</td>";
echo "</tr>";

$group_id = 0;
$toContract=(count($objects) > 10);
foreach ($objects as $obj)
{
	global $unequiped;
    if ($objectType != $obj->object_type)
    {
        if ($group_id != 0)
            echo "</table></td></tr>";
        $objectType = $obj->object_type;
        
        echo "<tr class='titleLine'>";
        echo "<td style='text-align: center; cursor: pointer;' onclick='InventoryGroupClick({$group_id});'>";
        echo "<img id='iv_img_{$group_id}' src='$webBaseDir/images/plus.png' align='left'>";
        
        echo Translate($objectType) . "</td></tr>";
        echo "<tr><td id='iv_grp_{$group_id}'";
        if($toContract)
            echo " style='visibility: hidden; display: none;'";
        echo "><table class='plainTable'>";
        echo $descLine;
        
        $group_id ++;
    }
    
    if ($row % 2 == 0)
        echo "<tr class='evenLine'>";
    else
        echo "<tr class='oddLine'>";
        // Is the object of any kind we can equip?
    if (isset($typesToEquip[$obj->object_type_id]))
    {
        echo "<td>";
        LinkButton("Equip", "index.php?p=inventory&equip={$obj->id}&health={$obj->object_health}");
        echo "</td>";
    }
    // No then skip
    else
        echo "<td> </td>";
    if ($obj->usage_label != NULL)
    {
        echo "<td>";
        LinkButton($obj->usage_label, "index.php?p=inventory&use={$obj->id}&health={$obj->object_health}");
        echo "</td>";
    }
    else
        echo "<td> </td>";
        // Is the game configured to allow dropping items?
    if (GetConfigValue("itemsCanBeDropped") == "true")
    {
        // Is it a quest item (therefore we cannot drop)
        if ($obj->quest_item == 'yes')
            echo "<td> </td>";
            // Show the drop item link
        else
        {
            echo "<td>";
            LinkButton("Drop", "index.php?p=inventory&drop={$obj->id}&health={$obj->object_health}", ($obj->quantity + 0 == 1 ? "return confirm(unescape('" . rawurlencode(Translate("Are you sure you want to drop this item?")) . "'));" : NULL));
            echo "</td>";
        }
    }
    echo "<td width='1%'>" . ($obj->image_file == NULL ? " " : "<img src='{$webBaseDir}modules/inventory/images/$obj->image_file'>") . "</td>";
	$unequiped = $obj->id;
    echo "<td style='text-align: center; cursor: pointer;' onclick='FJdisplayStats($unequiped);'><b>{$obj->name}</b></td>";
    echo "<td>{$obj->quantity}</td>";
    if (GetConfigValue("itemsHealth") == "true")
        echo "<td>{$obj->object_health}</td>";
    echo "</tr>";
//-----------------------------------------------------Details Panel Added--------------------
   
   echo "<tr id='$unequiped' style='display:none;'><td colspan='7'>";
   $attr = $obj->GetAttributes();
   $ignoreAttr = array("id", "name", "description", "allow_fraction", "quest_item", "object_type_id", "usage_label", "usage_code", "image_file", "requirements");
   foreach ($attr as $key => $val)
   {
   if (in_array($key, $ignoreAttr))continue;
   if ($val == NULL)continue;
   echo "<b>" . str_replace(array("_", " "), array(" ", " "), $key) . ":  </b>$val<br>";
   }
   echo "</td></tr>";
//-----------------------------------------------------Details Panel Added--------------------
   
   
    echo "</tr>";
    $row ++;
}

if ($group_id != 0)
    echo "</table></td></tr>";

echo "</table>";
TableFooter();

echo "</td></tr></table>";
echo "<script src='{$webBaseDir}js/ajax_helper.js'></script>";
echo "<script>var minusImage='{$webBaseDir}/images/minus.png';\nvar plusImage='{$webBaseDir}/images/minus.png';\n</script>";
?>
<script>
var oldIvGroup=-1;
function FJdisplayStats(itemstats)
{
        var trstyle = new String();
        trstyle = document.getElementById(itemstats).style.display;
        if(trstyle.toLowerCase()=="table-row" || trstyle == "")
        {
        document.getElementById(itemstats).style.display = "none";
        }
        else
        {
        document.getElementById(itemstats).style.display = "table-row";
        }
}
function InventoryGroupClick(grpId)
{
   var c = getCookie("settings");
   var data = new Object();
   if (c != null)
      data = jsDeserializer(c);
   
    var ivGrp=""; 
    if(data['iv_grp'] != undefined && data['iv_grp'] != null)
        ivGrp=data['iv_grp'];
    ivGrp=pad(""+ivGrp,grpId+1, '0');
   var div=null;

    div=document.getElementById('iv_grp_'+grpId);

    if(div.style.visibility=='visible')
    {
        div.style.visibility='hidden';
        div.style.display='none';
        document.getElementById('iv_img_'+grpId).src=plusImage;
        data['iv_grp'] = replaceAt(ivGrp,grpId,'0');   
    }
    else
    {
        div.style.visibility='visible';
        div.style.display='block';
        document.getElementById('iv_img_'+grpId).src=minusImage;
        data['iv_grp'] = replaceAt(ivGrp, grpId,'1');   
    } 
    setCookie("settings", jsSerializer(data), 30);
}

function InitIvGroup()
{
   var c = getCookie("settings");
   var data = new Object();
   if (c == null)
      return;
   data = jsDeserializer(c);

    if(data['iv_grp'] != undefined && data['iv_grp'] != null)
    {
        ivGrp=data['iv_grp'];
        for(var i=0;i < ivGrp.length;i++)
        {
            if(ivGrp.charAt(i) == '1')
            {
               div=document.getElementById('iv_grp_'+i);
               if(div != null)
               {
                   div.style.visibility='visible';
                    div.style.display='block';
                    document.getElementById('iv_img_'+i).src=minusImage;
               }
            }
        }
    }
}

InitIvGroup();
</script>
Post Reply

Return to “General”