DPFileControlExtender = function(parentObject, appPath, objBulkUploader, folderID, reflectionObject, descriptionObject, fromPublic, isPrivateCCSSO) {
    this.parentObject = parentObject;
    this.AppPath = appPath;
    this.fileObject;
    this.fileCell;
    this.fileIcon = null;
    this.fileTextHolder = null;
    this.fileID = null;
    this.assessmentFileId = null;
    this.folderID = folderID;
    this.selectCommand = null;
    this.progressContainer = null;
    this.progressTextContainer = null;
    this.progressBar = null;
    this.showProgressText = null;
    this.BulkUploader = objBulkUploader;
    this.Reflection = null;
    this.Description = null;
    this.isUploaded = false;
    this.waterMarkText = '';
    this.selectButtonText = '';
    //Modified By: Mayank Sharma
    //Add some variables used for upload file by CCSSO.
    this.controlLeft = '345px;';
    this.fromPublic = fromPublic;

    this.isPrivateCCSSO = isPrivateCCSSO;
    //Modification Ends here 

    if (reflectionObject) {
        this.Reflection = reflectionObject;
    }

    if (descriptionObject) {
        this.Description = descriptionObject;
    }

    this.init();
}


DPFileControlExtender.prototype.init = function()
{
    var objTable = document.createElement("table");
    var objRow = objTable.insertRow(objTable.rows.length);
    
    objTable.cellPadding = "0px";
    objTable.cellSpacing = "0px";  
    
   //Modified By : Mayank Sharma
   //Add check for control comes from CCSSO public page
    if(this.fromPublic=='True')
    {
        objTable.width = "355px";    
    }
    else
    {
        objTable.width = "525px";    
    }
    objTable.border="0";
        
    //Creating text column
    objCell = document.createElement("td");
    objCell.id = "tdText_" + this.generateUniqueNumber();
    objCell.align = "left";
    objCell.height="25px";
    objCell.vAlign = "top";    
    objCell.width='80%';
    
    objCell.style.cssText="padding:5px;";

    var objIcon = document.createElement("img");
    objIcon.id='imgFileIcon_' + this.generateUniqueNumber();
    objIcon.src= this.AppPath + '/Images/Icons/icon_file.gif';
    objIcon.style.cssText = "vertical-align:middle";
    this.fileIcon = objIcon;
    
    objCell.appendChild(objIcon);    
    
    var objText = document.createElement("span");
    objText.id="spnFileName_" + this.generateUniqueNumber();
    objText.innerHTML='&nbsp;<font color="#D1D1D1"><i>Select a file by clicking Add File button</i></font>';

    this.fileTextHolder = objText;
    objCell.appendChild(objText);
    objRow.appendChild(objCell);

    //Creating command column
    objCell = document.createElement("td");
    objCell.id = "tdText_" + this.generateUniqueNumber();
    objCell.align = "right";
    objCell.vAlign = "top";    
    objCell.width='20%';
    

    
    var objSelect = document.createElement("a");
    objSelect.style.zIndex = "2";
    objSelect.id="ancSelectFile_" + this.generateUniqueNumber();
    objSelect.href="#";
    objSelect.innerHTML='Add File';
    objSelect.className='button4';
    this.selectCommand = objSelect;
    
    var objFileControl = document.createElement("input");
    objFileControl.type = "file";
    objFileControl.className="hidden";
    objFileControl.style.zIndex = "3";
    //Modified By : Mayank Sharma
    if(this.fromPublic=='True')//Add check for control comes from CCSSO public page
    {
        
        if(this.isPrivateCCSSO=='True')//Add check for control comes from logged in CCSSO pages.
        {
            if(navigator.userAgent.toLowerCase().indexOf("ie") != -1) {
                objFileControl.style.left = '292px';
                this.controlLeft = '292px';
            }
            else {
                objFileControl.style.left = '310px';
                this.controlLeft = '310px';
            }
        }
        else
        {
            if(navigator.userAgent.toLowerCase().indexOf("ie") != -1) {
                objFileControl.style.left = '474px';
                this.controlLeft = '474px';
            }
            else {
                objFileControl.style.left = '495px';   
                this.controlLeft = '495px';   
            }
        }
    }
    else
    {
        if(navigator.userAgent.toLowerCase().indexOf("ie") != -1){
            objFileControl.style.left = '310px';
            this.controlLeft = '310px';
        }
        else{
            objFileControl.style.left = '345px';
            this.controlLeft = '345px';
        }
    }
    
    objFileControl.id="DPFileControlExtender_" + this.generateUniqueNumber();
    objFileControl.name="DPFileControlExtender_" + this.generateUniqueNumber();
    this.fileObject=objFileControl;
    
    objCell.appendChild(objFileControl);
    objCell.appendChild(objSelect);
    this.fileCell=objCell;
    // adding Events
    var self = this;
    this.fileObject.onchange = function()
    {
        self.createRow(this.fileObject);    
    }
    
    objSelect.onclick=function()
    {
        self.addFile(this.fileObject);
    }
    objRow.appendChild(objCell);

    // Creating Progress Bar    
    objRow = objTable.insertRow(objTable.rows.length);    

    objCell = document.createElement("td");
    objCell.id = "tdIcon";
    objCell.align = "center";
    objCell.vAlign = "middle";        
    objCell.colSpan="2";

    var objIcon = document.createElement("div");
    objIcon.style.width='100%';
    objIcon.style.cssText = 'border: solid 1px #000000';
    //objIcon.id='imgProgress_' + this.generateUniqueNumber();
    //objIcon.src=this.AppPath + '/images/BulkFileUploader.gif';
    objIcon.style.display = 'none';
    
    
    this.progressContainer= objIcon;
    
    
    objCell.appendChild(objIcon);        
    
    objRow.appendChild(objCell);    
        
    this.parentObject.appendChild(objTable);
    this.createProgress();
}

DPFileControlExtender.prototype.setSelectButtonText = function()
{
    if(this.selectButtonText=='')
        this.selectButtonText = 'Add File';

    this.selectCommand.innerHTML = this.selectButtonText;
}

DPFileControlExtender.prototype.createProgress = function()
{
    this.progressContainer.width = '100%';
    this.progressContainer.className = 'progressBg';
    this.progressContainer.style.cssText = 'vertical-align:middle;height:20px;';
    
    var objProgressText = document.createElement('span');
    objProgressText.style.cssText = 'font-size:10px;position:absolute;z-index:5;width:99%;text-align:center;';
    this.progressTextContainer = objProgressText;
    this.progressContainer.appendChild(objProgressText);
    
    var objProgressBar = document.createElement('div');
    objProgressBar.className = 'progressBar';
    objProgressBar.style.cssText = 'width:0px;z-index:4';
    this.progressBar = objProgressBar;
    this.progressContainer.appendChild(objProgressBar);
    this.progressContainer.style.display = 'none';

}

DPFileControlExtender.prototype.doProgress = function(currentProgress)
{
    this.progressTextContainer.innerHTML=currentProgress + '%';
    this.progressBar.style.width=currentProgress + '%';
}

DPFileControlExtender.prototype.setWaterMarkText = function()
{
    var waterMarkStyleElement='&nbsp;<font color="#D1D1D1"><i>#text#</i></font>';

    if(this.waterMarkText== '')
        this.waterMarkText =  'Select a file by clicking Add File button';
    
    waterMarkStyleElement = waterMarkStyleElement.replace('#text#', this.waterMarkText);
    this.fileTextHolder.innerHTML = waterMarkStyleElement;
}

DPFileControlExtender.prototype.addFile = function()
{
    this.fileObject.click();
}

DPFileControlExtender.prototype.generateUniqueNumber = function()
{
    return this.parentObject.id;
}

DPFileControlExtender.prototype.createRow = function()
{
    if(!this.isValidFile(this.getFileName()))
    {
        alert('Please select a file with a valid extension to upload.');
        return;
    }
    
    this.isUploaded=false;
    
    this.fileIcon.style.display='';
    this.fileIcon.src=this.getFileIcon();
    this.fileTextHolder.style.display='';
    this.fileTextHolder.innerHTML = this.getFileName();
    this.fileObject=this.BulkUploader.addFile(this.fileObject, this.controlLeft);
    this.fileCell.appendChild(this.fileObject);
    var self = this;
    this.fileObject.onchange = function()
    {
        self.createRow(this.fileObject);    
    }    
}

DPFileControlExtender.prototype.enableControl=function()
{
    this.selectCommand.disabled=false;
    this.selectCommand.cssClass='button4';
    this.fileObject.disabled=false;
}

DPFileControlExtender.prototype.disableControl=function()
{
    this.selectCommand.disabled=true;
    this.selectCommand.cssClass='button4Disabled';
    this.fileObject.disabled=true;
                
}

DPFileControlExtender.prototype.getFileName = function()
{
    var fileName=this.fileObject.value;
    var reversedPath = this.Reverse(this.fileObject.value);
    if(reversedPath.indexOf('\\')>=0)
    {
        var splReversePath = reversedPath.split('\\');
        fileName = this.Reverse(splReversePath[0]);
    }
    else if(reversedPath.indexOf('/')>=0)
    {
        var splReversePath = reversedPath.split('/');
        fileName = this.Reverse(splReversePath[0]);
    }
    
    var filteredFileName = '';
    var specialChar = "`~!@#$%^&*()_-+=|\\}]{[\"':;?/><,";
    
    for(var i=0;i<fileName.length;i++)
    {
        if(specialChar.indexOf(fileName.charAt(i))<0)
        {
            filteredFileName+=fileName.charAt(i);
        }
    }
    
    fileName = filteredFileName;
    return "&nbsp;" + fileName;
}

DPFileControlExtender.prototype.Reverse = function(text)
{
    var reversedtext='';
    var fileNameLength = text.length;
    for(var i = fileNameLength; i >=0;i--)
    {
        reversedtext+=text.charAt(i);
    }
    return reversedtext;
}

DPFileControlExtender.prototype.isValidFile = function(fileName)
{
    var splfileName = fileName.split('.');
    var fileExt = '.'+splfileName[splfileName.length-1];
    
    var functionReturnValue = false;
    functionReturnValue = false;

    switch (fileExt.toLowerCase())
    {
        case ".mmap":
        case ".mpp":
        case ".pub":
        case ".flv":
            functionReturnValue = true;
            break;
        case ".mdb":
        case ".aif":
        case ".aifc":
        case ".aiff":
        case ".asc":
        case ".au":
        case ".avi":
        case ".c":
        case ".cc":
        case ".css":
        case ".doc":
        case ".drw":
        case ".dvi":
        case ".dwg":
        case ".f":
        case ".f90":
        case ".fli":
        case ".gif":
        case ".gtar":
        case ".gz":
        case ".h":
        case ".htm":
        case ".html":
        case ".ief":
        case ".iges":
        case ".igs":
        case ".jpe":
        case ".jpg":
        case ".jpeg":
        case ".isf": //Bug Resolution Ep2-6503
        case ".kid": //Bug Resolution Ep2-6503
        case ".skp": //Bug Resolution Ep2-6583
        case ".kmz": //Bug Resolution Ep2-5260
        case ".kml": //Bug Resolution Ep2-5260
        case ".notebook": //Bug Resolution Ep2-8142
        case ".xbk": //Bug Resolution Ep2-8142
        case ".kar":
        case ".lzh":
        case ".m":
        case ".mesh":
        case ".mid":
        case ".midi":
        case ".mov":
        case ".movie":
        case ".mp2":
        case ".mp3":
        case ".mp4":
        case ".mpe":
        case ".mpeg":
        case ".mpg":
            functionReturnValue = true;
            break;
        case ".mpga":
        case ".msh":
        case ".m4a":
        case ".m4v":
        case ".pbm":
        case ".pdb":
        case ".pdf":
        case ".pgm":
        case ".png":
        case ".pnm":
        case ".pot":
        case ".ppm":
        case ".pps":
        case ".ppt":
        case ".ppz":
        case ".qt":
        case ".ra":
        case ".ram":
        case ".ras":
        case ".rgb":
        case ".rm":
        case ".rpm":
        case ".rtf":
        case ".rtx":
        case ".sgm":
        case ".sgml":
        case ".silo":
        case ".snd":
        case ".swf":
        case ".tar":
        case ".tiff":
        case ".tif":
        case ".tsi":
        case ".tsv":
        case ".txt":
        case ".viv":
        case ".vivo":
        case ".vrml":
        case ".vsd":
        case ".vst":
        case ".vss":
        case ".vdx":
        case ".vtx":
        case ".vsx":
        case ".sb":
            functionReturnValue = true;
            break;
        case ".wav":
        case ".wrl":
        case ".xbm":
        case ".xlc":
        case ".xll":
        case ".xlm":
        case ".xls":
        case ".xlw":
        case ".xml":
        case ".xpm":
        case ".xwd":
        case ".zip":
        case ".rar":
        case ".xxe":
        case ".z":
        case ".arc":
        case ".arj":
        case ".b64":
        case ".bhx":
        case ".cab":
        case ".hqx":
        case ".mim":
        case ".taz":
        case ".tgz":
        case ".tz":
        case ".uu":
        case ".uue":
        case ".wave":
        case ".7z":
        case ".csv":
            functionReturnValue = true;
            break;
        case ".mpg3":
        case ".mpg2":
        case ".mpeg3":
        case ".mpeg2":
        case ".bmp":
        case ".rle":
        case ".pcx":
        case ".tga":
        case ".targa":
            functionReturnValue = true;
            break;
        case ".xlst":
        case ".xhtm":
        case ".xhtml":
        case ".mhtm":
        case ".mhtml":
        case ".dot":
        case ".rft":
        case ".wps":
        case ".wks":
        case ".wri":
        case ".text":
        case ".dat":
        case ".sql":
        case ".log":
        case ".logs":
        case ".mht":
        case ".olk":
        case ".pab":
        case ".wpd":
        case ".abc":
        case ".afl":
        case ".art":
        case ".asf":
        case ".asx":
        case ".avs":
        case ".bm":
        case ".boo":
        case ".book":
        case ".boz":
        case ".bz":
        case ".bz2":
        case ".c++":
        case ".conf":
        case ".cpp":
            functionReturnValue = true;
            break;
        case ".gsd":
        case ".gsm":
        case ".htmls":
        case ".ico":
        case ".isu":
        case ".it":
        case ".ivr":
        case ".jam":
        case ".jfif":
        case ".jut":
        case ".la":
        case ".lam":
        case ".list":
        case ".lst":
        case ".m1v":
        case ".m2a":
        case ".m2v":
        case ".m3u":
        case ".mcf":
        case ".mjf":
        case ".mjpg":
        case ".mod":
        case ".moov":
        case ".mpa":
        case ".mv":
        case ".my":
        case ".nap":
        case ".nif":
        case ".niff":
        case ".pfunk":
        case ".pic":
        case ".pm":
        case ".pov":
        case ".psd":
        case ".qif":
            functionReturnValue = true;
            break;
        case ".qtc":
        case ".qti":
        case ".qtif":
        case ".rast":
        case ".rf":
        case ".rmi":
        case ".rmm":
        case ".rmp":
        case ".rt":
        case ".rv":
        case ".s3m":
        case ".scm":
        case ".shtml":
        case ".shtm":
        case ".sid":
        case ".svf":
        case ".tsp":
        case ".turbot":
        case ".vdo":
        case ".voc":
        case ".vos":
        case ".vox":
        case "vqe":
        case ".vqf":
        case ".vql":
        case ".word":
        case ".wrz":
        case ".xdr":
        case ".zgz":
        case ".xif":
        case ".def":
        case ".dif":
        case ".dl":
        case ".dv":
        case ".dxf":
        case ".fif":
        case ".flo":
        case ".fmf":
        case ".for":
        case ".fpx":
        case ".funk":
        case ".g3":
        case ".gl":
        case ".xm":
        case ".xmz":
        case ".xsr":
            functionReturnValue = true;
            break;
        case ".wmv":
        case ".divx":
        case ".dvx":
        case ".m2p":
        case ".ogm":
        case ".omf":
        case ".vob":
        case ".aam":
        case ".dcr":
        case ".dir":
        case ".fla":
            functionReturnValue = true;
            break;
        case ".ac3":
        case ".wma":
        case ".mp1":
        case ".ogg":
        case ".aac":
            functionReturnValue = true;
            break;
        case ".docx":
        case ".docm":
        case ".dotx":
        case ".dotm":
        case ".xlsx":
        case ".xlsm":
        case ".xltx":
        case ".xltm":
        case ".xlsb":
        case ".xlam":
        case ".pptx":
        case ".pptm":
        case ".potx":
        case ".potm":
        case ".ppam":
        case ".ppsx":
        case ".ppsm":
            functionReturnValue = true;
            break;
        default:
            functionReturnValue = false;
            break;
    }
    return functionReturnValue;

}

DPFileControlExtender.prototype.getFileIcon = function()
{
    var fileName = this.Reverse(this.getFileName());
    var fileExt = '.' + this.Reverse(fileName.split('.')[0]);
    var iconName='icon_file.gif';
    switch (fileExt.toLowerCase())
    {
        case ".txt":
        case ".text":
            iconName = "icon_text.gif";
            break;

        case ".htm":
        case ".html":
        case ".xhtm":
        case ".xhtml":
        case ".mhtm":
        case ".mhtml":
        case ".log":
        case ".xml":
        case ".xslt":
            iconName = "icon_html.gif";
            break;

        case ".doc":
        case ".docx":
        case ".dot":
        case ".rft":
        case ".wps":
            iconName = "icon_word.gif";
            break;

        case ".xls":
        case ".xlsx":
        case ".xlt":
        case ".xlw":
        case ".xla":
        case ".csv":
            iconName = "icon_excel.gif";
            break;

        case ".ppt":
        case ".pptx":
        case ".pot":
        case ".pps":
        case ".ppa":
            iconName = "icon_powerPoint.gif";
            break;

        case ".pdf":
            iconName = "icon_pdf.gif";
            break;

        case ".zip":
        case ".arc":
        case ".arj":
        case ".b64":
        case ".bhx":
        case ".cab":
        case ".gz":
        case ".hqx":
        case ".lzh":
        case ".mim":
        case ".tar":
        case ".taz":
        case ".tgz":
        case ".tz":
        case ".uu":
        case ".uue":
        case ".xxe":
        case ".z":
            iconName = "icon_zip.gif";
            break;

        case ".wav":
        case ".wave":
            iconName = "icon_wav.gif";
            break;

        case ".mp3":
        case ".mp2":
        case ".mid":
        case ".midi":
        case ".aif":
        case ".aifc":
        case ".aiff":
        case ".au":
        case ".snd":
        case ".mpga":
        case ".ra":
        case ".ram":
        case ".rm":
        case ".rpm":
        case ".tsi":
            iconName = "icon_mp3.gif";
            break;

        case ".avi":
        case ".mpg":
        case ".mpg3":
        case ".mpg2":
        case ".mpeg3":
        case ".mpeg2":
        case ".vivo":
        case ".viv":
        case ".fli":
        case ".mov":
        case ".movie":
        case ".mpeg":
        case ".qt":
            iconName = "icon_mpg.gif";
            break;

        case ".tiff":
        case ".tif":
            iconName = "icon_tif.gif";
            break;

        case ".wmv":
            iconName = "icon_wmv.gif";
            break;

        case ".gif":
        case ".png":
        case ".pbm":
        case ".pnm":
            iconName = "icon_gif.gif";
            break;
        case ".jpg":
        case ".jpeg":
        case ".jpe":
        case ".rle":
        case ".pcx":
        case ".tga":
        case ".targa":
        case ".ief":
        case ".ppm":
        case ".ras":
        case ".rgb":
        case ".xbm":
        case ".xwd":
            iconName = "icon_jpg.gif";
            break;
        case ".bmp":
        case ".css":
            iconName = "icon_bmp.gif";
            break;
        case ".asp":
        case ".aspx":
            iconName = "icon_asp.gif";
            break;
        default:
            iconName = "icon_file.gif";
            break;
    }

    //Images/Icons/icon_html.gif
    return this.AppPath + '/Images/Icons/' + iconName;
}
