// TODO: Support nested groups
jQuery.extend({
    createDB: function(DBName)
	{
        if ($("#" + DBName).is("div"))
        {
            var db = $("#" + DBName);
        } else {
            //create form	
            var db = $('<div name="' + DBName + '" id="' + DBName + '"></div>');	
            //set attributes
            $(db).css('position', 'absolute');
            $(db).css('top', '-1500px');
            $(db).css('left', '-1500px');
            $(db).appendTo('body');
        }
		return db;
    },
    createGroup: function(db, DBName, groupName)
	{
        if ($("#" + DBName + " > #" + groupName).is("div"))
        {
            var group = $("#" + groupName);
        } else {
            //create form	
            var group = $('<div id="' + groupName + '"></div>');	
            //set attributes
            $(group).appendTo(db);
        }
		return group;
    },
    deleteFromDB: function(s)
    {
        var DBName = 'db_' + s.dbName;
		var db = jQuery.createDB(DBName);
        var itemGroup = escape(s.group);
        var itemName = escape(s.name);
        if (jQuery.IsNull(itemGroup))
        {
            $("#" + DBName  + " > input").each(function(i)
            {
                if($(this).attr("id") == itemName)
                {
                    $(this).remove();
                    return false; //Break out of the loop
                }
            });
        } else {
            var group = jQuery.createGroup(db, DBName, itemGroup);
            $("#" + DBName + " > #" + itemGroup + " > input").each(function()
            {
                if($(this).attr("id") == itemName)
                {
                    $(this).remove();
                    return false; //Break out of the loop
                }
            });
        }
        return true;
    },
    loadFromDB: function(s)
    {
        var DBName = 'db_' + s.dbName;
		var db = jQuery.createDB(DBName);
        var itemGroup = escape(s.group);
        var itemName = escape(s.name);
        var itemValue = "undefined";
        if (jQuery.IsNull(itemGroup))
        {
            $("#" + DBName  + " > input").each(function(i)
            {
                if($(this).attr("id") == itemName)
                {
                    itemValue = $(this).val();
                    return false; //Break out of the loop
                }
            });
        } else {
            $("#" + DBName + " > #" + itemGroup + " > input").each(function()
            {
                if($(this).attr("id") == itemName)
                {
                    itemValue = $(this).val();
                    return false; //Break out of the loop
                }
            });
                       
        }
        
        return itemValue;
    },
    cloneToDB: function(s)
    {
        var DBName = 'db_' + s.dbName;    // Create the DB Name
		var db = jQuery.createDB(DBName); // Get a db object reference
        var elementID = s.elementID;    // ID of the element to clone
        var elementType = $("#" + elementID).attr("type");

        // Clone the element
        var xclone = $("#" + elementID).clone();

        if (elementType == "file")
        {
            // Stick the exisitng element into the database
            // Have to do it this way because ie doesn't clone the value
            // on inputs of type file
            db.append($("#" + elementID));

    
            // Put the clone next to the existing element
            $("#imageHolder").append(xclone);
            
            // Get a total count of this element's clones
            var tot = $("#" + DBName + " > ." + elementID).size();
    
            // Define the cloned elements ID
            var newID = elementID + "_" + tot;
    
            // Add a CSS class to the element that is equal to the
            // cloned elements id.  This way we can get a count
            // of any elements clones by counting elements
            // with a class of the same name as the elements id
            $("#" + DBName + " > #" + elementID).addClass(elementID);
            
            // Set the cloned elements ID
            $("#" + DBName + " > #" + elementID).attr("id", newID);
            $("#" + DBName + " > #" + newID).attr("name", newID);
    
            xclone.val("");
        } else {
            // Get a total count of this element's clones
            var tot = $("#" + DBName + " > ." + elementID).size();
    
            // Define the cloned elements ID
            var newID = elementID + "_" + tot;
    
            // Add a CSS class to the element that is equal to the
            // cloned elements id.  This way we can get a count
            // of any elements clones by counting elements
            // with a class of the same name as the elements id
            xclone.addClass(elementID);
            
            // Set the cloned elements ID
            xclone.attr("id", newID);
            xclone.attr("name", newID);
    
            $("#" + elementID).val("");
            
            db.append(xclone);
        }
        //alert($("#" + DBName).html());
    },
    addToDB: function(s)
    {
        var DBName = 'db_' + s.dbName;    // Create the DB Name
		var db = jQuery.createDB(DBName); // Get a db object reference
        var itemGroup = escape(s.group);  // Group Name
        var itemName = escape(s.name);    // Variable Name
        var itemValue = escape(s.value);  // Variable Value
        var itemExists = false;

        // Check if a group has been sent through
        if (jQuery.IsNull(itemGroup))
        {
            // No group sent through so check the root of the
            // DB to see if this item exists
            $("#" + DBName  + " > input").each(function(i)
            {
                // This item exists so update it's value
                if ($(this).attr('id') == itemName)
                {
                    $(this).val(itemValue);
                    itemExists = true;
                    return false;
                }
            });

            if (itemExists == false)
            {
                // This item was not found so append it
                // to the DB root
                db.append(newItem);
            }
        } else {
            // A group was sent through so check it for the item
            $("#" + DBName + " > #" + itemGroup + " > input").each(function()
            {
                if($(this).attr("id") == itemName)
                {
                    // The item exists so update it's value
                    $(this).val(itemValue);
                    itemExists = true;
                    return false; //Break out of the loop
                }
            });

            if (itemExists == false)
            {
                // The item was not found so append it
                // to the group
                var itemType = s.type || 'text';
                var newItem = $("<input type='" + itemType + "' value='" + itemValue + "' id='" + itemName + "'>");
                var group = jQuery.createGroup(db, DBName,  itemGroup);
                group.append(newItem);
            }
        }
        return true;
    },
    getDBQueryString: function(s)
    {
        var DBName = 'db_' + s.dbName;
        var ret = "";
        var groupName = "";
        var amp = "";
        $("#" + DBName + " > input").each(function()
        {
            ret += amp + $(this).attr("id") + "=" + unescape($(this).val()).replace("&", escape("&"));
            amp = s.delimiter || "&";
        });

        $("#" + DBName + " > div").each(function()
        {
            groupName = $(this).attr("id");
            $("#" + DBName + " > #" + groupName + " > input").each(function()
            {
                ret += amp + groupName + "-" + $(this).attr('id') + "=" + unescape($(this).val()).replace("&", escape("&"));
                amp = s.delimiter || "&";
            });
        });
        return ret;
    },
    IsNull: function IsNull(i){
		return (i==null || i=='null' || i=='' || i=='undefined');
	}
})

$.fn.displayDB = function(s)
{
    var DBName = 'db_' + s.dbName;
    var ret = "";
    $("#" + DBName + " > input").each(function()
    {
        if($(this).attr("id").match(/txtImageDescription.*/gi))
        {
            var description = unescape($(this).val()) || "No Description"; 
            ret += description + "<br>";
        } else {
            var filename = unescape($(this).val()).match(/[^\/&&^\\]*\.(jpg|gif|png)/gi);
            var removeLink = "<a class='removeLink' href='javascript:void(0)' rel='" + $(this).attr("id") + "'>remove</a> ";
            ret += removeLink + filename + " - ";
        }
    });

    this.html(ret);

    $(".removeLink").click(function()
    {
        $("#" + $(this).attr("rel")).remove();
        
        var num = $(this).attr("rel").split("_")[1];
        
        $("#txtImageDescription_" + num).remove();
        $("#divImages").displayDB({dbName: s.dbName});
    });
};
