var Uploader = new Object();
Uploader.version = '6.3.1';
Uploader.iconsURL = 'templates/default2/images/icons/';

var userAgent = navigator.userAgent.toLowerCase();
var is_ie = userAgent.indexOf('msie') > -1;
var is_opera = userAgent.indexOf('opera') > -1;

function rand(){return String(Math.floor(Math.random()*10000000000));}
function rand2(){return rand()+rand()+rand()+rand()+rand();}
function getObj(sId){return document.getElementById(sId);}
function checkIt(b,c){if(b){b.checked=!c;b.click();b.checked=c;}}
function showIt(sId,v){var x=$(sId);if(x)x.style.display=(v?'block':'none');}
function togView(sId){var el=$(sId);if(el){el.style.display=el.style.display=='none'?'':'none';}}
function checkAllBoxes(form,fieldName,chkVal){formObj=$(form);if(!formObj)return false;var checkBoxes=formObj.getElementsByTagName('input');for(var i=0;i<checkBoxes.length;i++){if(checkBoxes[i].name==fieldName&&!checkBoxes[i].disabled){checkBoxes[i].checked=chkVal;}}}
function countCheckedBoxes(form,fieldName){formObj=$(form);if(!formObj)return false;var checkBoxes=formObj.getElementsByTagName('input');var checkedBoxes=0;for(var i=0;i<checkBoxes.length;i++){checkedBoxes+=(checkBoxes[i].name==fieldName&&!checkBoxes[i].disabled&&checkBoxes[i].checked)?1:0;}return checkedBoxes;}
function pInt(oF){if(oF){oF.value=parseInt(oF.value);if(oF.value=='NaN'){oF.value=0;}}}
function pop(sURL){return!window.open(sURL);}
function go(url){if(url.substr(0,7)!='http://')url=base_url+url;window.location=url;return false;}
function htmlspecialchars(s){var t={'&':'&amp;','"':'&quot;',"'":'&#039;','<':'&lt;','>':'&gt;'};for(var k in t){rx=new RegExp(k,'g');s=s.replace(rx,t[k]);}return s;}
function addslashes(s){s=s.replace(/'/gi,"&#039;");s=s.replace(/"/gi,"&quot;");return s;}
function alternateRowColor(obj,el,c1,c2){if(obj){var els=obj.getElementsByTagName(el);var j=0;for(var i=0;i<els.length;i++)if(!els[i].getAttribute('skip_alternate')){els[i].style.backgroundColor=(j&1?c2:c1);j++;}}}
function basename(s){var p=-1;for(var i=0;i<s.length;i++){if( s.charAt(i)=='\\'||s.charAt(i)=='/')p=i;}if(p<0)return s;return s.substr(p+1,s.length-p);}
function dirname(s){var p=-1;for(var i=0;i<s.length;i++){if( s.charAt(i)=='\\'||s.charAt(i)=='/')p=i;}if(p<0)return s;return s.substr(0,p+1);}
function togImage(im,n){if(!im)return false;var alt=im.getAttribute('alternateImage');if(!alt)alt=dirname(im.src)+'/'+n;var cur=im.src;im.src=alt;im.setAttribute('alternateImage',cur);}
function get_extension(n){n=n.substr(n.lastIndexOf('.')+1);return n.toLowerCase();}
function str_slice(s,l){if(s.length>l)return s.substr(0,l/2)+'...'+s.substr(s.length-(l/2));return s;}
function str_preview(s,l){return s.length>l?s.substr(0,l)+'...':s;}
function setStyles(obj,styles){if(!obj)return false;for(var k in styles)obj.style[k]=styles[k];}
function number_format(n){n+='';x=n.split('.');x1=x[0];x2=x.length>1?'.'+x[1]:'';var rgx=/(\d+)(\d{3})/;while(rgx.test(x1)){x1 = x1.replace(rgx,'$1'+','+'$2');}return x1+x2;}
function setParentSize(i,s){if(!s)s=2;i.parentNode.parentNode.style.width=i.width+s+'px';i.parentNode.parentNode.style.height=i.height+s+'px';}
function set_border(i,p,s){if(typeof s=='undefined')s=2;p.style.width=i.width+s+'px';p.style.height=i.height+s+'px';}
function trim(v,p){var t=Math.pow(10,p);return Math.round(v*t)/t;}
function get_size(v,u){if(!u)u='B';if(v>1024){if(u=='B')return get_size(v/1024,'KB');if(u=='KB')return get_size(v/1024,'MB');if(u=='MB')return get_size(v/1024,'GB');if(u=='GB')return get_size(v/1024,'TB');}return trim(v,0)+'&nbsp;'+u;}
function deleteNode(n){return n.parentNode.removeChild(n);}
function confirmGo(s,url){if(confirm(s))go(url);return false;}
function str_replace(from,to,str){while(str!=str.replace(from,to))str=str.replace(from,to);return str;}

function get_icon ( ext )
{
    var icons =
    {
        'default':'file.gif',
        // images
        'jpg'	: 'images.gif',
        'jpeg'	: 'images.gif',
        'png'	: 'png.gif',
        'gif'	: 'gif.gif',
        // media
        'avi'	: 'video.gif',
        'wmv'	: 'video.gif',
        'mpeg'	: 'video2.gif',
        'mpg'	: 'video2.gif',
        'mov'	: 'quicktime.gif',
        'mp3'	: 'mp3.gif',
        // Archives
        'zip'	: 'zip.gif',
        'rar'	: 'winrar.gif',
        'tar'	: 'winrar.gif',
        // documents
        'pdf'	: 'acrobat.gif',
        'ppt'	: 'powerpoint.gif',
        'txt'	: 'text.gif',
        'doc'	: 'word.gif',
        'xls'	: 'excel.gif',
        'csv'   : 'excel.gif'
    }
    return icons[ext] ? icons[ext] : icons['default'];
}

function copyTextArea (id) {
    var field = $(id);
    if(!field) return;
    field.select();

    if ( !is_ie ) {
        alert ( 'Sorry, this feature is only enabled for Internet Explorer at the moment. Select the text and press Ctrl+C to copy and Ctrl+V to paste.' );
        return;
    } else {
        field.createTextRange().execCommand('copy');
    }
}

function help ( str, container )
{
    container = container || 'message_content';
    var x = $(container);
    if(!x)return false;
    x.innerHTML = str.replace(/\n/g,'<br />');
    showIt ( 'message', true );
}

function showOverlay ( visible )
{
    var overlay = $('overlay');

    if ( overlay ) {
        Element.setOpacity ( overlay, ( visible ? 50 : 0 ) );
        overlay.style.display = visible ? 'block' : 'none';
    } else {
        var overlay = document.body.appendChild ( document.createElement ( 'div' ) );
        overlay.id = 'overlay';
        Element.setOpacity ( overlay, 50 );
    }

    // for IE
    if ( is_ie ) {
        var selects = document.getElementsByTagName ( 'select' );
        for ( var i = 0; i < selects.length; ++i )
            selects[i].style.visibility = visible ? 'hidden' : 'visible';
    }
}

function uplAlert ( str, title )
{
    showOverlay ( true );
    var alertBox = document.body.appendChild ( document.createElement ( 'div' ) );
    alertBox.id = 'alert_box';
    alertBox.style.visibility = 'hidden';
    alertBox.innerHTML = '<div class="top"><!-- --></div>' +
    '<div class="center">' +
        '<div class="left"><h1>' + (title?title:'UpFilez.org Alert') + '</h1></div>' +
        '<div class="right"><img src="templates/default2/images/close2.gif" alt="close" id="alert_close_button" /></div><div class="spacer"></div>' +
        '<p>' + str + '</p>' +
        '<p><input type="button" value="&nbsp;OK&nbsp;" id="alert_ok_button" /></p>' +
    '</div><div class="bottom"><!-- --></div>';
    alertBox.style.visibility = 'visible';

    Event.observe ( document, 'keypress', function ( event ) {
        event = event || window.event;
        if ( event.keyCode == Event.KEY_ESC )
            hideAlert();
    });

    Event.observe ( $('alert_close_button'), 'click', hideAlert );
    Event.observe ( $('alert_ok_button'), 'click', hideAlert );
}

function hideAlert ( )
{
    showOverlay ( false );
    var alert_box = $('alert_box');
    if ( alert_box )
        document.body.removeChild ( $('alert_box') );
}


var quickEditFolderDescription = Class.create();
quickEditFolderDescription.prototype = Object.extend(new quickEditBase(), {

    initialize : function(folderId, description, container, maxLength)
    {
        this.folderId = folderId;
        this.setOptions({inputSize:50, maxInput:255, maxCharsVisible:maxLength, maxWidth:400});
        this.container = $(container);
        this.value = description;
        this.initContainer();
        this.ajax = null;
    },

    ajaxCallback : function()
    {
        var response = this.ajax.response;
        if(response.result != 'success') alert(response.message);
        this.hideEditable(this.value==''?'No Description':this.value);
    },

    doUpdate : function()
    {
        if(this.inputField.value != this.value)
        {
            this.value = this.inputField.value;
            var postData = {action:'update_description', folder_id:this.folderId, description:this.value};
            this.ajax = new AjaxRequest(base_url+'folders.php?action=update_description', {method:'post', 'postData':postData, response:'json'});
            this.ajax.oncomplete = this.ajaxCallback.bind(this);
            this.ajax.request();
        }
        else this.hideEditable(this.value==''?'No Description':this.value);
    }
});

var Slider = Class.create();
Slider.prototype = {
    initialize: function(track, handle, options) {
        this.track = $(track);
        if(!this.track)return false;
        this.handle = $(handle);
        if(!this.handle) return false;

        this.options = { barBackgroundColor: '#aaa' };
        Object.extend(this.options, options || {});

        this.onslide = null;
        this.onchange = null;

        this.dragger = new Drag(this.handle);
        this.dragger.setOptions({vertical:false});
        this.dragger.setBoundingObject(this.track);
        this.dragger.ondrag = this.startSlide.bind(this);
        this.dragger.ondragend = this.endSlide.bind(this);

        this.trackOffset = Element.getOffset ( this.track );
    },

    getValue: function(barOffset) {
        var barPosition = barOffset.offsetLeft - this.trackOffset.offsetLeft;
        return barPosition / ( this.trackOffset.offsetWidth - this.handle.offsetWidth );
    },

    setValue: function(percentage) {
        var barPosition = (percentage * this.trackOffset.offsetWidth) + this.trackOffset.offsetLeft;
        this.handle.style.left = barPosition + 'px';
    },

    endSlide: function(barOffset) {
        var scaleOffset = Element.getOffset ( this.track );
        var barPosition = barOffset.offsetLeft - scaleOffset.offsetLeft;
        if( typeof this.onchange == 'function' )
            this.onchange(this.getValue(barOffset));
    },

    startSlide: function(barOffset) {
        if ( typeof this.onslide == 'function' ) this.onslide ( this.getValue(barOffset) );
    }
};

function togFolderPerm(img, url, update_container)
{
    if ( !Ajax.enabled ) return go (url);

    var ajax = new AjaxRequest ( url, {method:'get', response:'json'} );
    ajax.oncomplete = function ( )
    {
        var response = this.response;
        if ( response.result == 'success' )
        {
            if ( response.current_perm == 'public' )
            img.src = base_url + 'templates/default2/images/icon_folder_public.gif';
            else if ( response.current_perm == 'hidden' ) img.src = base_url + 'templates/default2/images/icon_folder_hidden.gif';
            else img.src = base_url + 'templates/default2/images/icon_folder_private.gif';

            if ( typeof update_container != 'undefined' )
            {
                // remind user that this folder is public
                var share_private_reminder = $('share_private_reminder');
                var permission = response.permission;
                update_container = $(update_container);
                var str = "This folder is set as <strong>" + permission['access'] + "</strong>.";
                if ( permission['access'] == 'public' )
                {
                    str += " Anyone may browse and access the files in this folder.";
                    share_private_reminder.style.display = 'none';
                }
                else if ( permission['access'] == 'hidden' )
                {
                    str += ' Anyone may browse and access the files in this folder if they know <a href="' + response.browse_url + '" class="special">the URL</a>.';
                    share_private_reminder.style.display = 'none';
                }
                else
                {
                    str += " Only " +
                    (permission['friend']?'your <strong class="colgreen">friends</strong>':'') +
                    (permission['family']?(permission['friend']?' and <strong class="colfuscia">family</strong>':'your <strong class="colfuscia">family</strong>'):'') +
                    (!permission['family']&&!permission['friend']?'<strong>you</strong>':'') +
                    ' may browse and access the files in this folder.';
                    share_private_reminder.style.display = 'inline';
                }
                update_container.innerHTML = str;
            }
        }
    }
    ajax.request();
}