// This code allows HTML templates - from a blog by Rick Strahl
var _tmplCache = {}
this.parseTemplate = function (str, data)
{
    /// <summary>
    /// Client side template parser that uses &lt;#= #&gt; and &lt;# code #&gt; expressions.
    /// and # # code blocks for template expansion.
    /// NOTE: chokes on single quotes in the document in some situations. use &amp;rsquo; for literals in text and avoid any single quote attribute delimiters.
    /// </summary>    
    /// <param name="str" type="string">The text of the template to expand</param>    
    /// <param name="data" type="var">
    /// Any data that is to be merged. Pass an object and that object's properties are visible as variables.
    /// </param>    
    /// <returns type="string" />  
    var err = "";
    try
    {
        var func = _tmplCache[str];
        if (1==1)// (!func)
        {
            var strFunc =
            "var p=[],print=function(){p.push.apply(p,arguments);};" +
                        "with(obj){p.push('" +

            str.replace(/[\r\t\n]/g, " ")
               .replace(/'(?=[^#]*#>)/g, "\t")
               .split("'").join("\\'")
               .split("\t").join("'")
               .replace(/<#=(.+?)#>/g, "',$1,'")
               .split("<#").join("');")
               .split("#>").join("p.push('")
               + "');}return p.join('');";

            //alert(strFunc);
            func = new Function("obj", strFunc);
            _tmplCache[str] = func;
        }
        return func(data);
    } catch (e) { err = e.message; }
    return "< # ERROR: " + err + " # >";
}

// This code adds a sort function to all objects, courtesy of WM
jQuery.fn.customsort = function ()
{
    return this.pushStack([].sort.apply(this, arguments), []);
};

// This code removes dupes from arrays
function removeDuplicateElement(arrayName)
{
    var newArray = new Array();
    label: for (var i = 0; i < arrayName.length; i++)
    {
        for (var j = 0; j < newArray.length; j++)
        {
            if (newArray[j] == arrayName[i])
                continue label;
        }
        newArray[newArray.length] = arrayName[i];
    }
    return newArray;
}
