var SlickUpload_OriginalOnSubmit = null;

function SlickUpload_Submit()
{
    if (SlickUpload_OriginalOnSubmit != null)
    {
        if (!SlickUpload_OriginalOnSubmit())
            return false;
    }
    
    var isPageValid = true;
    
    try
    {
        if (Page_IsValid != null)
            isPageValid = Page_IsValid;
    }
    catch (ex)
    {
        isPageValid = true;
    }
        
    if (!isPageValid)
        return false;

    if (SlickUpload_HasUploadManager())
    {
        for (var i = 0; i < SlickUpload_UploadManagerList.length; i++)
            SlickUpload_UploadManagerList[i].OnSubmit();
    }
    
    if (SlickUpload_HasProgressDisplay())
    {
        for (var i = 0; i < SlickUpload_ProgressDisplayList.length; i++)
            SlickUpload_ProgressDisplayList[i].OnSubmit();
    }
       
    if (SlickUpload_HasUploadManager() && SlickUpload_UploadManagerList.length > 0)
        return false;
    else
        return true;
}

function SlickUpload_HasUploadManager()
{
    try
    {
        return (SlickUpload_UploadManagerList != null);
    }
    catch (ex)
    {
        return false;
    }
}

function SlickUpload_HasProgressDisplay()
{
    try
    {
        return (SlickUpload_ProgressDisplayList != null);
    }
    catch (ex)
    {
        return false;
    }
}

function SlickUpload_CancelUpload()
{
    var hasIframes = false;
    
    try
    {
        hasIframes = (SlickUpload_UploadManagerList != null && SlickUpload_UploadManagerList.length > 0);
    }
    catch (ex)
    {
        hasIframes = false;
    }
    
    if (hasIframes)
    {
        for (var i = 0; i < SlickUpload_UploadManagerList.length; i++)
        {
            var iframe = SlickUpload_UploadManagerList[i].iframe;
            var win;
            
            if (iframe.contentWindow != null)
                win = iframe.contentWindow;
            else
                win = iframe;
            
            win.location = "about:blank";
            
            if (win.stop != null)
                win.stop();
            else
                SlickUpload_UploadManagerList[i].iframeDoc.execCommand("Stop");
        }
    }
    else
    {        
        if (window.stop != null)
            window.stop();
        else
            document.execCommand("Stop");
        
        window.location = window.location;
    }
}

function SlickUpload_GetElementsByClassNameStartsWith(parent, className)
{
    var elements = new Array();
    var all = parent.getElementsByTagName("*");    
    
    className = className.toLowerCase();
    
    for (var i = 0; i < all.length; i++)
        if (SlickUpload_StartsWith(all[i].className.toLowerCase(), className))
            elements.push(all[i]);
            
    return elements;
}

function SlickUpload_StartsWith(string, stringCheck)
{
    if (string.length < stringCheck)
        return false;
    
    return (string.substring(0, stringCheck.length) == stringCheck);
}

function SlickUpload_UpdateInnerHTML(value, elements)
{  
    for (var i = 0; i < elements.length; i++)
        elements[i].innerHTML = value;
}

function SlickUpload_SetDisplay(value, elements)
{  
    for (var i = 0; i < elements.length; i++)
        elements[i].style.display = (value ? "inline" : "none");
}

function SlickUpload_AddHandler(eventSource, eventName, handlerName, eventParent)
{
	// TODO: factor into the event function so multiple parents are possible
	//if (eventParent != null)
	//	eventSource.parent = eventParent;
	var eventHandler = function(e) {eventSource[handlerName](e, eventParent);};
	
	if (eventSource.addEventListener)
	{
		eventSource.addEventListener(eventName, eventHandler, false);
	}
	else if (eventSource.attachEvent)
	{ 
		eventSource.attachEvent("on" + eventName, eventHandler);
	}
	else
	{
		var originalHandler = eventSource["on" + eventName];
		
		if (originalHandler)
		{
			eventHandler = function(e) {originalHandler(e); eventSource[handlerName](e, eventParent);};
		}

		eventSource["on" + eventName] = eventHandler;
	}
}

function SlickUpload_IsSafari()
{
    return /Safari/.test(navigator.userAgent);
}

function SlickUpload_GenerateGuid()
{
	var hex = new Array('0','1','2','3','4','5','6','7','8', '9','a','b','c','d','e','f');

	var outB = '';
	
	for (count = 0; count < 32; count++)
	{
		if ((count == 8) || (count == 12) || (count == 16) || (count == 20))
			outB += '-';
			
		outB += hex[Math.floor(Math.random() * 16)];
	}
	
	return outB;
}