BSUploadPhotos = 
{
    createUploadIframe: function(id, params, uri)
    {
        var frameId = 'ifr_'+id;
        if(window.ActiveXObject) 
        {
            var io = new Element('iframe', {'id': frameId, 'name': frameId});

            if(typeof uri== 'boolean'){
                io.src = 'javascript:false';
            }
            else if(typeof uri== 'string'){
                io.src = uri;
            }
        }
        else {
            var io = new Element('iframe');
            io.id = frameId;
            io.name = frameId;
        }

        if (Prototype.Browser.IE || Prototype.Browser.Opera)
             io.src = 'javascript:false;document.write("");';
        
        io.style.position = 'absolute';
        io.style.top = '-1000px';
        io.style.left = '-1000px';

        document.body.appendChild(io);
        
        if (params && typeof(params.onComplete) == 'function') {
            io.onComplete = params.onComplete;
        }
       
        return io;
    },
    
    showErrorInfo: function (e) 
    {
      alert(e+":\nError line: "+((e.number >> 16) & 0x1FFF)+"\nError number: "+(e.number & 0xFFFF)+"\nError description: "+e.description);
    }, 
    
    doUpload : function(form, params) 
    {
        if (params && typeof(params.onStart) == 'function') {
            params.onStart();
        }

        var id = Math.floor(Math.random() * 99999);
        var io = BSUploadPhotos.createUploadIframe(id, params, false);
        
        //save prev form attributes
        try { 
            var prev_action   = form.action;
            var prev_method   = form.method;
            var prev_target   = form.target;
            var prev_encoding = (form.encoding ? form.encoding : form.enctype );   //enctype="multipart/form-data"
        } 
        catch(e) {
          BSUploadPhotos.showErrorInfo(e);
        }
            
        form.action = params.url;
        form.method = 'POST';
        form.target = io.id;
        if(form.encoding)
            form.encoding = 'multipart/form-data';
        else
            form.enctype = 'multipart/form-data';
            
        var uploadCallback = function()
        {
            io.detachEvent ? io.detachEvent('onload', uploadCallback) : io.removeEventListener('load', uploadCallback, false);

            var operaHack = 0;          
            try {
                var doc = io.contentWindow ? io.contentWindow.document : io.contentDocument ? io.contentDocument : io.document;
                                
                if ( doc.body == null && !operaHack && Prototype.Browser.Opera ) 
                {
                    // In Opera 9.2.x the iframe DOM is not always traversable when
                    // the onload callback fires so we give Opera 150ms to right itself
                    operaHack = 1; 
                    setTimeout(uploadCallback, 150);
                    return;
                }

                if (typeof(io.onComplete) == 'function')
                {   
                    var responseText = doc.body ? doc.body.innerHTML : null;
                    io.onComplete( responseText );  
                }
                
                // clean up
                setTimeout(function() { io.remove(); }, 100);
                
                //return prev form attributes
                form.action = prev_action;
                form.method = prev_method;
                form.target = prev_target;
                if(form.encoding)
                    form.encoding = prev_encoding;
                else
                    form.enctype  = prev_encoding;            
            }
            catch(e)
            {
              BSUploadPhotos.showErrorInfo(e);
            }
            
        }
                
        //attach onload event
        io.attachEvent ? io.attachEvent('onload', uploadCallback) : io.addEventListener('load', uploadCallback, false);

        form.submit(); 

       
    }
}
