var Opera=navigator.userAgent.toLowerCase().indexOf("opera")!=-1?true:false;                
var Opera8=navigator.userAgent.toLowerCase().indexOf("opera 8")!=-1?true:false;
var Opera7=navigator.userAgent.toLowerCase().indexOf("opera 7")!=-1?true:false;
var Opera6=navigator.userAgent.toLowerCase().indexOf("opera 6")!=-1?true:false;
var Opera5=navigator.userAgent.toLowerCase().indexOf("opera 5")!=-1?true:false;
var Opera4=navigator.userAgent.toLowerCase().indexOf("opera 4")!=-1?true:false;
var Netscape4=navigator.userAgent.toLowerCase().indexOf("mozilla/4.79")!=-1?true:false;
var Netscape6=navigator.userAgent.toLowerCase().indexOf("netscape6")!=-1?true:false;
var Netscape7=navigator.userAgent.toLowerCase().indexOf("netscape/7")!=-1?true:false;
var Netscape8=navigator.userAgent.toLowerCase().indexOf("netscape/8")!=-1?true:false;
var MozillaFireFoxRev0=(navigator.userAgent.toLowerCase().indexOf("mozilla")!=-1?true:false) && (navigator.userAgent.toLowerCase().indexOf("gecko")!=-1?true:false) && (navigator.userAgent.toLowerCase().indexOf("rv:0")!=-1?true:false);

var MozillaFireFoxRev10=(navigator.userAgent.toLowerCase().indexOf("mozilla")!=-1?true:false) && (navigator.userAgent.toLowerCase().indexOf("gecko")!=-1?true:false) && (navigator.userAgent.toLowerCase().indexOf("rv:1.0")!=-1?true:false);

var MozillaFireFoxRev11=(navigator.userAgent.toLowerCase().indexOf("mozilla")!=-1?true:false) && (navigator.userAgent.toLowerCase().indexOf("gecko")!=-1?true:false) && (navigator.userAgent.toLowerCase().indexOf("rv:1.1")!=-1?true:false);

var MozillaFireFoxRev12=(navigator.userAgent.toLowerCase().indexOf("mozilla")!=-1?true:false) && (navigator.userAgent.toLowerCase().indexOf("gecko")!=-1?true:false) && (navigator.userAgent.toLowerCase().indexOf("rv:1.2")!=-1?true:false);

var MozillaFireFoxRev13=(navigator.userAgent.toLowerCase().indexOf("mozilla")!=-1?true:false) && (navigator.userAgent.toLowerCase().indexOf("gecko")!=-1?true:false) && (navigator.userAgent.toLowerCase().indexOf("rv:1.3")!=-1?true:false);

var MozillaFireFoxRev14=(navigator.userAgent.toLowerCase().indexOf("mozilla")!=-1?true:false) && (navigator.userAgent.toLowerCase().indexOf("gecko")!=-1?true:false) && (navigator.userAgent.toLowerCase().indexOf("rv:1.4")!=-1?true:false);

var MozillaFireFoxRev15=(navigator.userAgent.toLowerCase().indexOf("mozilla")!=-1?true:false) && (navigator.userAgent.toLowerCase().indexOf("gecko")!=-1?true:false) && (navigator.userAgent.toLowerCase().indexOf("rv:1.5")!=-1?true:false);

var MozillaFireFoxRevOlder15 = MozillaFireFoxRev0 || MozillaFireFoxRev10 || MozillaFireFoxRev11 || MozillaFireFoxRev12 || MozillaFireFoxRev13 || MozillaFireFoxRev14 || MozillaFireFoxRev15;
var IE4=navigator.userAgent.toLowerCase().indexOf("msie 4")!=-1?true:false;
    
//Function ShowProgressInNewWindow() to show progress bar in new window.
function ShowProgressInNewWindow(uniqueID, URL, width, height)
{
    var l = (screen.width - width) / 2;
    var t = (screen.height - height) / 2;
    var winParams = 'toolbar=no,scrollbars=no,location=no,status=no,menubar=no,resizable=yes';
    winParams += ',width=' + width + ',height=' + height + ',left=' + l + ',top=' + t;
    var fullURL = URL;
    thePos = fullURL.indexOf("UploadID");
    //Cut earlier added UploadID.
    if (thePos >= 1)
            fullURL = fullURL.substring(0, thePos-1);
    if(URL.indexOf("?")==-1)
        fullURL += '?UploadID=' + uniqueID;
    else
        fullURL += '&UploadID=' + uniqueID;    
    var newProgressWindow = window.open(fullURL, uniqueID, winParams);
    return newProgressWindow;
}

// Function that checks if ZIP file was selected and adds UnZIP? checkbox
function CheckAddUnZIP(fileInputObj, unZIPContObjID)
{
    var unZIPContObj = document.getElementById(unZIPContObjID);
    if(IsMatchExt(fileInputObj.value, new Array('.zip')))
    {                        
        if(unZIPContObj)
            unZIPContObj.style.visibility = "visible";    
    }
    else
    {
        if(unZIPContObj)
            unZIPContObj.style.visibility = "hidden";
    }
}

// Function to remove file input
function RemoveFileInput(objToRemoveID)
{
    if(Opera6 || Opera5)                
    {
        window.alert("This feature not supported in your browser!");
        return;                
    };
    var ObjToRemove = document.getElementById(objToRemoveID);
    var parentObj = ObjToRemove.parentNode;    
    parentObj.removeChild(ObjToRemove);
}

// Function to clear file input
function ClearInputField(inputID) 
{
    if(Opera4 || Opera5 || Opera6 || Opera7 || Netscape4 || Netscape6)                
    {
        window.alert("This feature not supported in your browser!");
        return;                
    };
    var inputObj = document.getElementById(inputID);
    var parentObj = inputObj.parentNode;    
    var nextObj = inputObj.nextSibling;
    var EmptyFileInput;

    if(!Opera && inputObj.outerHTML)
    {                
        
        EmptyFileInput = document.createElement(inputObj.outerHTML);
        parentObj.removeChild(inputObj);
        parentObj.insertBefore(EmptyFileInput, nextObj);
        
    }
    else //for FireFox that doesn't supports outerHTML property
    {                        
        var tmpParentObj = document.createElement('font');                                        
        tmpParentObj.appendChild(inputObj);
        var innerHTMLCode = tmpParentObj.innerHTML;
        tmpParentObj.removeChild(inputObj);
        EmptyFileInput = document.createElement('font');
        EmptyFileInput.innerHTML = innerHTMLCode;                    
        parentObj.insertBefore(EmptyFileInput.childNodes[0], nextObj);
        
    }                
}
//__________________________________________________________________________________________


//Functions for CANCEL UPLOAD button logic. START
function PowUploadCanCancel()
{
    return (window.stop || window.document.execCommand);
}

function InitCancelButton(cancelButtonID)
{
    var CancelButton = document.getElementById(cancelButtonID);
    if (PowUploadCanCancel())
    {
        if (CancelButton)
            CancelButton.style.visibility = "visible";        
    }
    else
    {
        if (CancelButton) 
            CancelButton.parentNode.removeChild(CancelButton);
    }    
}

function PowUploadGetParentWindow() 
{
    var mainWindow;
    if (window.opener) 
        mainWindow = window.opener;
    else 
        mainWindow = window.parent;
    return mainWindow;
}

function CancelUploadFromProgress(btnObjID) 
{
    var mainWindow = PowUploadGetParentWindow();
    if (mainWindow && mainWindow.stop)
        mainWindow.stop();
    else if (mainWindow && mainWindow.document && mainWindow.document.execCommand)
        mainWindow.document.execCommand('Stop');
    //Hide Cancel button and also botton in main window(should has the same ID as at progress page).
    if(typeof btnObjID != 'undefined' && btnObjID != '' && btnObjID != null)
    {
        if(mainWindow && mainWindow.document)
        {
            var btnMainCancel =  mainWindow.document.getElementById(btnObjID);
            if(btnMainCancel && btnMainCancel.style)
                btnMainCancel.style.visibility = "hidden";
        }
        var btnCancel =  document.getElementById(btnObjID);
        if(btnCancel && btnCancel.style)
            btnCancel.style.visibility = "hidden";
    }
    //Close progressbar window
    if(window && window.close)
        window.close();    
}


function CancelUploadFromMainWindow(btnObjID, progressWindowObj) 
{
    if (window.stop)
        window.stop();
    else if (window.document && window.document.execCommand)
        window.document.execCommand('Stop');
    //Hide Cancel button
    if(typeof btnObjID != 'undefined' && btnObjID != '' && btnObjID != null)
    {
        var CancelButton = document.getElementById(btnObjID);
        if(CancelButton && CancelButton.style)
            CancelButton.style.visibility = "hidden";
    }
    //Close Progress Bar window
    if(typeof progressWindowObj != 'undefined' && progressWindowObj != '' && progressWindowObj != null)
    {
        if(progressWindowObj && progressWindowObj.close)
            progressWindowObj.close();
    }
}
//Functions for CANCEL UPLOAD button logic. END
//__________________________________________________________________________________________


//Functions for CLIENT SIDE FILE TYPES VALIDATION logic. START
/*
    form - String ID of the Form or Form Object.
    TypesArray - Array of file types. Ex: new Array('.jpg', '.gif')
    checktype - String. Available values: 'include' or 'exclude' 
*/
function CheckTypes(form, TypesArray, checktype)
{                
    var formObj;
    if(typeof(form)=="string")
        formObj = document.getElementById(form);
    else    
        formObj = form;
    
    if(ValidateExtensions(formObj, TypesArray)) 
    {
        if(checktype.toUpperCase()=='INCLUDE')
            return true;
        else if(checktype.toUpperCase()=='EXCLUDE' || checktype.toUpperCase()=='EXCEPT')
        {
            window.alert('You selected forbidden file types');
            return false;
        }
    }
    else 
    {
        if(checktype.toUpperCase()=='EXCLUDE' || checktype.toUpperCase()=='EXCEPT')
            return true;
        else if(checktype.toUpperCase()=='INCLUDE')
        {
            window.alert('You selected forbidden file types');
            return false;
        }
    }            
}

function ValidateExtensions(formObj, TypesArray)
{    
    if(ScanParent(formObj, TypesArray))
    {
        return true;
    }
    else
    {
        return false;
    }
    return true;                  
}

function ScanParent(ObjToCheck, TypesArray)
{    
    var nodes;    
    if(ObjToCheck.children)
        nodes = ObjToCheck.children;
    else if(ObjToCheck.childNodes)
        nodes = ObjToCheck.childNodes;        
    for (var i=0; i<nodes.length; i++)
    {
        var childObj = nodes[i];
        if(IsFileInput(childObj))
        {
            var Ie = childObj.value;
            if (!IsMatchExt(Ie, TypesArray))
            {                
                return false;
            }
        }
        else
        {
            if(ScanParent(childObj, TypesArray)==false)
                return false;
        };
    }
    return true;
};
  
function IsFileInput(obj)
{
    if (obj && obj.type && obj.type.toUpperCase()=="FILE" && obj.tagName && obj.tagName.toUpperCase()=="INPUT" )
        return true;
    return false;
};
 
function IsMatchExt(value, TypesArray)
{
    if (value=="")return true;
    for (var j=0; j<TypesArray.length; j++)
    {
        var ext=TypesArray[j].substring(1);
        if (EndsWith(replace(value,'"',''), ext))
        {
            return true;
        }
    }
    return false;
};
//Functions for CLIENT SIDE FILE TYPES VALIDATION logic. END
//__________________________________________________________________________________________


//Some helpfull functions
function EndsWith(str, end)
{
    var n=str.toUpperCase().lastIndexOf(end.toUpperCase())
    if( n==-1 || n!=(str.length-end.length))
        return false;
    return true    
}

function replace(str, symbol, symbol2)
{
    var s=str.toUpperCase();
    var i;
    i=s.indexOf(symbol.toUpperCase(), 0);
    while (i>=0)
    {
        s=s.substring(0,i) + symbol2 + s.substring(i+symbol.length, s.length)
        i=s.indexOf(symbol.toUpperCase(), i+ symbol2.length);
    }
    return(s)
}
