// Copyright Laurence Hole 2009
function cTextbox(name, value)
{
    var txt = ($(document.createElement("input")).attr("type", "text").addClass("customTextEntry").focus(function(event)
        {
            $(this).addClass("customTextEntrySelected");
            $(this).closest("form").find(":submit").addClass("customButtonSelected");
            
        }).blur(function()
        {
            $(this).removeClass("customTextEntrySelected");
            $(this).closest("form").find(":submit").removeClass("customButtonSelected");
        }));
    if(name)
    {
        txt.attr("name", name); 
    }
    if(value === 0)
    {
        txt.val(value);
    }
    return txt;
}

function cButton(text, isDefault)
{
    return($(document.createElement("input")).attr("type", (isDefault ? "submit" : "button")).val(text).addClass("customButton").mouseover(function(event)
        {
            $(this).addClass("customButtonHover");
        }).mouseout(function()
            {
                $(this).removeClass("customButtonHover");
            }).mousedown(function()
                {
                    var that = this;
                    $(this).addClass("customButtonClick");
                    function unclick()
                        {
                            $().unbind('mousemove', unclick);
                            
                            setTimeout(function(){$(that).removeClass("customButtonClick")}, 100);
                        }
                    $().mouseup(unclick);
                }));
}

function cForm(action, onChange)
{
    if (action == null)
    {
        return($(document.createElement("div")).addClass("customForm"));
    }
    else
    {
        var frm = ($(document.createElement("form")).addClass("customForm").submit(function(event)
            {
                var that = this;
                var selected = $(this).find(":submit").hasClass("customButtonSelected");
                if (selected)
                {
                    $(this).find(":submit").removeClass("customButtonSelected");
                }
                $(this).find(":submit").addClass("customButtonClick");
                setTimeout(function()
                    {
                        $(that).find(":submit").removeClass("customButtonClick");
                        if (selected)
                        {
                            $(that).find(":submit").addClass("customButtonSelected");
                        }
                    }, 200);
                if (action){return(action(this, event) == true);}
                return false;
            }));
    }
    if(onChange)
    {
        var timer;
        var lastData = [];
        function change(frm, cb)
        {
            
            var newData = [];
            $.each($(frm).find("input"), function(i, item)
                {
                    newData.push($(item).val());
                });
            if($.toJSON(newData) != $.toJSON(lastData))
            {
                lastData = newData;
                clearTimeout(timer);
                timer = setTimeout(function(){cb(frm)}, 400);
            }
        }
        
        if(onChange == true)
        {
            $(frm).find("input").live("keyup", function(){change(frm, action);});
        }
        else
        {
            $(frm).find("input").live("keyup", function(){change(frm, onChange)});
        }
    }
    return frm;
}

function cLabel(text)
{
    var lbl = $(document.createElement("span")).addClass("customLabel");
    if(text != null)
    {
        lbl.text(text);
    }
    return lbl;
}

function cTable(rows, cols, hasOutline)
{
    var tab = $(document.createElement("table"));
    var i = rows;
    while(i--)
    {
        var row = $(document.createElement("tr")).appendTo(tab);
        var j = cols;
        while (j--)
        {
            var col = $(document.createElement("td")).appendTo(row);
        }
    }
    
    tab.elem = function(row, col)
    {
        
        if(row == null && col == null)
        {
            var a =this.find("td:empty").eq(0);
            return a;
        }
        if (col == null)
        {
            return this.find("tr").eq(row);
        }
        else
        {
            var a = this.find("tr").eq(row);
            var b = a.children("td");
            return b.eq(col);
        }
    }
    
    return tab;
}

function cList(hasHover)
{
    if (hasHover == null)
    {
        hasHover = true;
    }
    var lst = $(document.createElement("ul")).addClass("customList");
    lst.elem = function(item)
    {
        var a = this.children("li").eq(item);
        if(item == null || a.length == 0)
        {
            a = $(document.createElement("li")).addClass("customListElem");
            if(hasHover)
            {
                a.hover(function()
                    {
                        $(this).addClass("customListElemHover");
                    },
                    function()
                    {
                        $(this).removeClass("customListElemHover");
                    });
            }
            a.appendTo(this);
        }
        return a;
    }
    
    return lst;
}

function cTitle(text)
{
    var h = $(document.createElement("h1")).addClass("customHead");
    if(text)
    {
        h.text(text);
    }
    return h;
}

function cLink(text, target)
{
    
    if (text.jquery)
    {
        // TODO: allow for any jQuery element
        // <applet name="blarg" params="moo">
        // <a href="http://blarg.com">
        text.html().replace();
        
    }
    else
    {
        if(target == null)
        {
            target = text;
        }
        function link(text, target)
        {
            var lnk = $(document.createElement("a"));
            lnk.addClass("customLink").attr("href", target).text(text);
            /*lnk.hover(function()
                    {
                        $(this).addClass("customLinkHover");
                    },
                    function()
                    {
                        $(this).removeClass("customLinkHover");
                    });*/
            return lnk;
        }
        return link(text, target);
    }   
}

function cError(message)
{
    var lbl = $(document.createElement("span")).addClass("customError");
    if(message)
    {
        lbl.text(message);
    }
    return lbl;
}

function Div()
{
    return $(document.createElement("div"));
}

function dockBottom(elem, ap)
{
    elem = $(elem);
    elem.css("overflow", "auto");
    elem.addClass("noRightRound");
    
    var lastHtml;
    
    if (!ap._elemResize)
    {
        ap._elemResize = [];
    }
    ap._elemResize.push(function()
    {
        var scrollTop = elem.scrollTop();
        var scrollLeft = elem.scrollLeft();
        elem.addClass("dockBottomNoStyle");
        
        var newHtml = elem.html();
        if(newHtml == lastHtml)
        {
            elem.removeClass("dockBottomNoStyle");
            return;
        }
        else
        {
            lastHtml = newHtml;
            var top = elem.position().top;
            var left = elem.position().left;
            elem.removeClass("dockBottomNoStyle");
            elem.scrollTop(scrollTop);
            elem.scrollLeft(scrollLeft);
            elem.css("top", top + "px");
            elem.css("left", left + "px");
            elem.css("right", left + "px");
            elem.css("bottom", 6 + "px");
            elem.css("position", "absolute");
        }
    });
}