//attachOps      = {};
refAttachments = {};
titleImageOps  = null;
customerOps    = null;
categoryOps    = null;

/**
 * Trigger edit
 * @param  string  type object type
 * @param  integer id   object id
 * @return void
 */
function cms_edit( type, id ) {
    switch ( type ) {
        case 'news':
            cms_editNews( id );
            break;
        case 'reference':
            cms_editReference( id );
            break;
        case 'job':
            cms_editJob( id );
            break;
        case 'partner':
            cms_editPartner( id );
            break;
        case 'string':
            cms_editString( id );
            break;
        default:
            break;
    }
}

/**
 *
 */
function cms_editReference( id ) {
    if ( id ) {
        ajaxCall(
            'ajax.php?t=Reference/GetExt',
            'GET',
            new Array(
                'id='+id
            ),
            function( reference ) {
                cms_initReferenceDlg( reference );
            }
        );
    } else {
        cms_initReferenceDlg( null );
    }
}

/**
 *
 */
function cms_initReferenceDlg( reference ) {
    titleImageOps = null;
    customerOps   = null;
    categoryOps   = null;
    
    var dlg = document.getElementById( 'cms_reference_edit' );
    if ( reference ) {
        document.getElementById( 'cms_reference_edit_title' ).value = reference.title;
        document.getElementById( 'cms_reference_edit_content' ).value = reference.body;
    } else {
        document.getElementById( 'cms_reference_edit_title' ).value = '';
        document.getElementById( 'cms_reference_edit_content' ).value = '';
    }
    document.getElementById( 'cms_reference_edit_save' ).onclick = function() {
        var attach = '';
        for ( var i = 0; i < refAttachments.length; i++ ) {
            attach=attach+','+refAttachments[i].type+'.'+refAttachments[i].object.id;
        }
        var params = new Array(
            'title='+encodeURIComponent( document.getElementById( 'cms_reference_edit_title' ).value ),
            'body='+encodeURIComponent( document.getElementById( 'cms_reference_edit_content' ).value ),
            'attach='+attach,
            'titleImage='+titleImageOps,
            'weight='+encodeURIComponent( document.getElementById( 'cms_reference_edit_weight' ).value ),
            'customer_id='+customerOps,
            'category_id='+categoryOps
        );
        if ( document.getElementById('cms_reference_edit_intro').checked ) {
            params.push( 'intro='+document.getElementById('cms_reference_edit_intro').value );
        } else {
            params.push( 'intro=0' );
        }
        if ( reference ) {
            params.push( 'id='+reference.id );
        }
        ajaxCall(
            'ajax.php?t=Reference/Update',
            'POST',
            params,
            function( r ) {
                cms_closeDlg( dlg );
                location.reload();
            }
        );
    }
    document.getElementById( 'cms_reference_edit_cancel' ).onclick = function() {
        cms_closeDlg( dlg );
    }
    document.getElementById( 'cms_reference_edit_copy' ).onclick = function() {
        if ( reference ) {
            cms_openCopyDlg(
                reference,
                'reference',
                document.getElementById( 'cms_copy' ),
                function( copy ) {
                }
            );
        }
    }
    document.getElementById( 'cms_reference_edit_delete' ).onclick = function() {
        if ( reference ) {
            if ( confirm( 'Do you really want to delete reference object' ) == true ) {
                ajaxCall(
                    'ajax.php?t=Reference/Delete',
                    'POST',
                    new Array(
                        'id='+reference.id
                    ),
                    function( r ) {
                        cms_closeDlg( dlg );
                    }
                );
            }
        }
    }
    document.getElementById( 'cms_reference_edit_image' ).onclick = function() {
        cms_openFilebrowser(
            function( file ) {
                titleImageOps = file.id;
                var cont = document.getElementById( 'cms_reference_edit_image_content' );
                while ( cont.childNodes.length > 0 ) {
                    cont.removeChild( cont.firstChild );    
                }
                var img = document.createElement( 'img' );
                img.setAttribute( 'src', 'index.php?t=File/GetThumbnail&id='+file.id+'&size=75' );
                cont.appendChild ( img );
            }
        );
    }
    document.getElementById( 'cms_reference_edit_attachment' ).onclick = function() {
        cms_openFilebrowser(
            function( file ) {
                cms_addRefAttachmentListItem( file, 'file' );
            }
        );
    }
    document.getElementById( 'cms_reference_edit_banner' ).onclick = function() {
        cms_openBannerbrowser(
            function( banner ) {
                cms_addRefAttachmentListItem( banner, 'banner' );
            }
        );
    }
    document.getElementById( 'cms_reference_edit_customer' ).onclick = function() {
        cms_openCustomerList(
            function( customer ) {
                document.getElementById( 'cms_reference_edit_customer_name' ).innerHTML = customer.name;
                customerOps = customer.id;
            }
        );
    }
    document.getElementById( 'cms_reference_edit_category' ).onclick = function() {
        cms_openCategoryList(
            function( category ) {
                document.getElementById( 'cms_reference_edit_category_name' ).innerHTML = category.name;
                categoryOps = category.id;
            }
        );
    }
    
    if ( reference && reference.flags & 1 ) {            
        document.getElementById( 'cms_reference_edit_intro' ).checked = 'checked';
    } else {
        document.getElementById( 'cms_reference_edit_intro' ).checked = false;
    }

    if ( reference && reference.customer ) {
        document.getElementById( 'cms_reference_edit_customer_name' ).innerHTML = reference.customer.name;
    } else {
        document.getElementById( 'cms_reference_edit_customer_name' ).innerHTML = '';
    }
    
    if ( reference && reference.category ) {
        document.getElementById( 'cms_reference_edit_category_name' ).innerHTML = reference.category.name;
    } else {
        document.getElementById( 'cms_reference_edit_category_name' ).innerHTML = '';;
    }
    
    if ( reference ) {
        document.getElementById( 'cms_reference_edit_weight' ).value = reference.weight;
    } else {
        document.getElementById( 'cms_reference_edit_weight' ).value = 0;
    }
    
    var cont = document.getElementById( 'cms_reference_edit_image_content' );
    while ( cont.childNodes.length > 0 ) {
        cont.removeChild( cont.firstChild );
    }
    if ( reference && reference.titleImage ) {
        var img = document.createElement( 'img' );
        img.setAttribute( 'src', 'index.php?t=File/GetThumbnail&id='+reference.titleImage.id+'&size=75' );
        cont.appendChild ( img );
    }

    refAttachments = new Array();
    if ( reference ) {
        for ( var i = 0; i < reference.attachments.length; i++ ) {
            if ( reference.attachments[i].filesize ) {
                refAttachments.push({
                    'type'   : 'file',
                    'object' : reference.attachments[i]
                });
            } else {
                refAttachments.push({
                    'type'   : 'banner',
                    'object' : reference.attachments[i]
                });
            }
        }
    }
    cms_updateRefAttachmentList();
    cms_openDlg( dlg );
}

/**
 *
 */
function cms_updateRefAttachmentList() {
    var container = document.getElementById( 'cms_reference_edit_attachment_content' );
    while ( container.childNodes.length > 0 ) {
        container.removeChild( container.firstChild );
    }
    for ( var i = 0; i < refAttachments.length; i++ ) {
        with ( { item: refAttachments[i] } ) {
            var tr = document.createElement( 'tr' );
            
            // delete button
            var td = document.createElement( 'td' );
            var img = document.createElement( 'img' );
            img.setAttribute( 'alt', '' );
            img.setAttribute( 'src', 'images/icons/delete.png' );
            img.onclick = function() {
                cms_removeRefAttachmentListItem( item.object, item.type );
            }
            td.appendChild( img );
            tr.appendChild( td );
            
            // up button
            var td = document.createElement( 'td' );
            var img = document.createElement( 'img' );
            img.setAttribute( 'alt', '' );
            img.setAttribute( 'src', 'images/icons/arrow_top.gif' );
            img.onclick = function() {
                cms_moveRefAttachmentListItem( item.object, item.type, true );
            }
            td.appendChild( img );
            tr.appendChild( td );
            
            // down button
            var td = document.createElement( 'td' );
            var img = document.createElement( 'img' );
            img.setAttribute( 'alt', '' );
            img.setAttribute( 'src', 'images/icons/arrow_down.gif' );
            img.onclick = function() {
                cms_moveRefAttachmentListItem( item.object, item.type, false );
            }
            td.appendChild( img );
            tr.appendChild( td );
            
            var td = document.createElement( 'td' );
            switch ( item.type ) {
                case 'file':
                    td.innerHTML = item.object.org_filename;
                    break;
                case 'banner':
                    td.innerHTML = item.object.name;
                    break;
                default:
                    break;
            }
            tr.appendChild( td );

            container.appendChild( tr );
        }
    }
}

/**
 *
 */
function cms_addRefAttachmentListItem( attachment, type ) {
    switch ( type ) {
        case 'file':
        case 'banner':
            for ( var i = 0; i < refAttachments.length; i++ ) {
                if ( refAttachments[i].type == type && refAttachments[i].object.id == attachment.id ) {
                    return;
                }
            }
            break;
        default:
            break;
    }
    refAttachments.push({
        'type'  : type,
        'object': attachment
    });
    cms_updateRefAttachmentList();
}

/**
 *
 */
function cms_removeRefAttachmentListItem( attachment, type ) {
    var tmp = new Array();
    var   i = 0;
    switch ( type ) {
        case 'file':
        case 'banner':
            for ( var j = 0; j < refAttachments.length; j++ ) {
                if ( refAttachments[j].type != type || refAttachments[j].object.id != attachment.id ) {
                    tmp.push( refAttachments[j] );
                    i++;
                }
            }
            break;
        default:
            break;
    }
    refAttachments=tmp;
    cms_updateRefAttachmentList();
}

/**
 *
 */
function cms_moveRefAttachmentListItem( attachment, type, up ) {
    for ( var i = 0; i < refAttachments.length; i++ ) {
        if ( refAttachments[i].type == type && refAttachments[i].object.id == attachment.id ) {
            if ( up == true ) {
                if ( i > 0 ) {
                    var tmp = refAttachments[i];
                    refAttachments[i]=refAttachments[i-1];
                    refAttachments[i-1]=tmp;
                    cms_updateRefAttachmentList();
                }
                return;
            } else {
                if ( i < refAttachments.length-1 ) {
                    var tmp = refAttachments[i];
                    refAttachments[i]=refAttachments[i+1];
                    refAttachments[i+1]=tmp;
                    cms_updateRefAttachmentList();
                }
                return;
            }
        }
    }
}

/**
 * Open news edit dialog, and perform editing
 * @param  integer id news object id
 * @return void
 */
function cms_editNews( id ) {
    if ( id ) {
        ajaxCall(
            'ajax.php?t=News/Get',
            'GET',
            new Array(
                'id='+id
            ),
            function( news ) {
                cms_initNewsDlg( news );
            }
        );
    } else {
        cms_initNewsDlg( null );
    }
}

/**
 *
 */
function cms_initNewsDlg( news ) {
    var dlg = document.getElementById( 'cms_news_edit' );
    
    if ( news ) {
        document.getElementById( 'cms_news_edit_title' ).value = news.title;
        document.getElementById( 'cms_news_edit_content' ).value = news.body;
        document.getElementById( 'cms_news_edit_date_content' ).value = news.created_format;
    } else {
        document.getElementById( 'cms_news_edit_title' ).value = '';
        document.getElementById( 'cms_news_edit_content' ).value = '';
        document.getElementById( 'cms_news_edit_date_content' ).value = '';
    }
    document.getElementById( 'cms_news_edit_save' ).onclick = function() {
        var params = new Array(
            'title='+encodeURIComponent( document.getElementById( 'cms_news_edit_title' ).value ),
            'body='+encodeURIComponent( document.getElementById( 'cms_news_edit_content' ).value ),
            'created='+encodeURIComponent( document.getElementById( 'cms_news_edit_date_content' ).value ),
            'titleImage='+titleImageOps
        );
        if ( news ) {
            params.push( 'id='+news.id )
        }
        ajaxCall(
            'ajax.php?t=News/Update',
            'POST',
            params,
            function( r ) {
                cms_closeDlg( dlg );
                location.reload();
            }
        );
    }
    document.getElementById( 'cms_news_edit_cancel' ).onclick = function() {
        cms_closeDlg( dlg );
    }
    document.getElementById( 'cms_news_edit_copy' ).onclick = function() {
        if ( news ) {
            cms_openCopyDlg(
                news,
                'news',
                document.getElementById( 'cms_copy' ),
                function( copy ) {
                }
            );
        }
    }
    document.getElementById( 'cms_news_edit_delete' ).onclick = function() {
        if ( news ) {
            if ( confirm( 'Do you really want to delete news object' ) == true ) {
                ajaxCall(
                    'ajax.php?t=News/Delete',
                    'POST',
                    new Array(
                        'id='+news.id
                    ),
                    function( r ) {
                        cms_closeDlg( dlg );
                    }
                );
            }
        }
    }
    document.getElementById( 'cms_news_edit_date' ).onclick = function() {
        jQuery('#cms_news_edit_date_ticker').datepicker(
            'dialog',
            jQuery('#cms_news_edit_date_content').value,
            function(dateText, inst) {
            },{
            showButtonPanel: false,
            closeText: 'close',
            altField: 'input#cms_news_edit_date_content',
            altFormat: 'yy-mm-dd',
            dateFormat: 'yy-mm-dd'
        });
    }
    document.getElementById( 'cms_news_edit_image' ).onclick = function() {
        cms_openFilebrowser(
            function( file ) {
                titleImageOps = file.id;
                var cont = document.getElementById( 'cms_news_edit_image_content' );
                while ( cont.childNodes.length > 0 ) {
                    cont.removeChild( cont.firstChild );
                }
                var img = document.createElement( 'img' );
                img.setAttribute( 'src', 'index.php?t=File/GetThumbnail&id='+file.id+'&size=75' );
                cont.appendChild ( img );
            }
        );
    }

    var cont = document.getElementById( 'cms_news_edit_image_content' );
    while ( cont.childNodes.length > 0 ) {
        cont.removeChild( cont.firstChild );
    }
    if ( news ) {
        ajaxCall(
            'ajax.php?t=News/GetTitleImage',
            'GET',
            new Array(
                'news_id='+news.id
            ),
            function( image ) {
                if ( image != false ) {
                    var img = document.createElement( 'img' );
                    img.setAttribute( 'src', 'index.php?t=File/GetThumbnail&id='+image.id+'&size=75' );
                    cont.appendChild ( img );
                }
            }
        );
    }
    cms_openDlg( dlg );
}

/**
 * Open partner edit dialog, and perform editing
 * @param  integer id partner object id
 * @return void
 */
function cms_editPartner( id ) {
    if ( id ) {
        ajaxCall(
            'ajax.php?t=Partner/Get',
            'GET',
            new Array(
                'id='+id
            ),
            function( partner ) {
                cms_initPartnerDlg( partner );
            }
        );
    } else {
        cms_initPartnerDlg( null );
    }
}

/**
 *
 */
function cms_initPartnerDlg( partner ) {
    titleImageOps = null;
    
    var dlg = document.getElementById( 'cms_partner_edit' );
    if ( partner ) {
        document.getElementById( 'cms_partner_edit_name' ).value = partner.name;
        document.getElementById( 'cms_partner_edit_text' ).value = partner.text;
    } else {
        document.getElementById( 'cms_partner_edit_name' ).value = '';
        document.getElementById( 'cms_partner_edit_text' ).value = '';
    }
    document.getElementById( 'cms_partner_edit_save' ).onclick = function() {
        var params = new Array(
            'name='+encodeURIComponent( document.getElementById( 'cms_partner_edit_name' ).value ),
            'text='+encodeURIComponent( document.getElementById( 'cms_partner_edit_text' ).value ),
            'titleImage='+titleImageOps
        );
        if ( partner ) {
            params.push( 'id='+partner.id );
        }
        ajaxCall(
            'ajax.php?t=Partner/Update',
            'POST',
            params,
            function( r ) {
                cms_closeDlg( dlg );
                location.reload();
            }
        );
    }
    document.getElementById( 'cms_partner_edit_cancel' ).onclick = function() {
        cms_closeDlg( dlg );
    }
    document.getElementById( 'cms_partner_edit_copy' ).onclick = function() {
        if ( partner ) {
            cms_openCopyDlg(
                partner,
                'partner',
                document.getElementById( 'cms_copy' ),
                function( copy ) {
                }
            );
        }
    }
    document.getElementById( 'cms_partner_edit_delete' ).onclick = function() {
        if ( partner ) {
            if ( confirm( 'Do you really want to delete partner object' ) == true ) {
                ajaxCall(
                    'ajax.php?t=Partner/Delete',
                    'POST',
                    new Array(
                        'id='+partner.id
                    ),
                    function( r ) {
                        cms_closeDlg( dlg );
                    }
                );
            }
        }
    }
    document.getElementById( 'cms_partner_edit_image' ).onclick = function() {
        cms_openFilebrowser(
            function( file ) {
                titleImageOps = file.id;
                var cont = document.getElementById( 'cms_partner_edit_image_content' );
                while ( cont.childNodes.length > 0 ) {
                    cont.removeChild( cont.firstChild );
                }
                var img = document.createElement( 'img' );
                img.setAttribute( 'src', 'index.php?t=File/GetThumbnail&id='+file.id+'&size=75' );
                cont.appendChild ( img );
            }
        );
    }
    
    var cont = document.getElementById( 'cms_partner_edit_image_content' );
    while ( cont.childNodes.length > 0 ) {
        cont.removeChild( cont.firstChild );
    }
    if ( partner ) {
        ajaxCall(
            'ajax.php?t=Partner/GetTitleImage',
            'GET',
            new Array(
                'partner_id='+partner.id
            ),
            function( image ) {
                if ( image != false ) {
                    var img = document.createElement( 'img' );
                    img.setAttribute( 'src', 'index.php?t=File/GetThumbnail&id='+image.id+'&size=75' );
                    cont.appendChild ( img );
                }
            }
        );
    }
    cms_openDlg( dlg );
}

/**
 * Open job edit dialog, and perform editing
 * @param  integer id job object id
 * @return void
 */
function cms_editJob( id ) {
    if ( id ) {
        ajaxCall(
            'ajax.php?t=Job/Get',
            'GET',
            new Array(
                'id='+id
            ),
            function( job ) {
                cms_initJobDlg( job );
            }
        );
    } else {
        cms_initJobDlg( null );
    }
}

/**
 *
 */
function cms_initJobDlg( job ) {
    var dlg = document.getElementById( 'cms_job_edit' );
    if ( job ) {
        document.getElementById( 'cms_job_edit_title' ).value = job.title;
        document.getElementById( 'cms_job_edit_content' ).value = job.body;
    } else {
        document.getElementById( 'cms_job_edit_title' ).value = '';
        document.getElementById( 'cms_job_edit_content' ).value = '';
    }
    document.getElementById( 'cms_job_edit_save' ).onclick = function() {
        var params = new Array(
            'title='+encodeURIComponent( document.getElementById( 'cms_job_edit_title' ).value ),
            'body='+encodeURIComponent( document.getElementById( 'cms_job_edit_content' ).value )
        );
        if ( job ) {
            params.push( 'id='+job.id );
        }
        ajaxCall(
            'ajax.php?t=Job/Update',
            'POST',
            params,
            function( r ) {
                cms_closeDlg( dlg );
                location.reload();
            }
        );
    }
    document.getElementById( 'cms_job_edit_cancel' ).onclick = function() {
        cms_closeDlg( dlg );
    }
    document.getElementById( 'cms_job_edit_copy' ).onclick = function() {
        if ( job ) {
            cms_openCopyDlg(
                job,
                'job',
                document.getElementById( 'cms_copy' ),
                function( copy ) {
                }
            );
        }
    }
    document.getElementById( 'cms_job_edit_delete' ).onclick = function() {
        if ( job ) {
            if ( confirm( 'Do you really want to delete job object' ) == true ) {
                ajaxCall(
                    'ajax.php?t=Job/Delete',
                    'POST',
                    new Array(
                        'id='+job.id
                    ),
                    function( r ) {
                        cms_closeDlg( dlg );
                    }
                );
            }
        }
    }
    cms_openDlg( dlg );
}

/**
 * Open string edit dialog, and perform editing
 * @param  integer id string object id
 * @return void
 */
function cms_editString( id ) {
    ajaxCall(
        'ajax.php?t=String/Get',
        'GET',
        new Array(
            'id='+id
        ),
        function( string ) {
            var dlg = document.getElementById( 'cms_string_edit' );
            document.getElementById( 'cms_string_edit_text' ).value = string.text;
            document.getElementById( 'cms_string_edit_save' ).onclick = function() {
                ajaxCall(
                    'ajax.php?t=String/Update',
                    'POST',
                    new Array(
                        'id='+id,
                        'text='+encodeURIComponent( document.getElementById( 'cms_string_edit_text' ).value )
                    ),
                    function( r ) {
                        cms_closeDlg( dlg );
                        location.reload();
                    }
                );
            }
            document.getElementById( 'cms_string_edit_cancel' ).onclick = function() {
                cms_closeDlg( dlg );
            }
            document.getElementById( 'cms_string_edit_file' ).onclick = function() {
                cms_openFilebrowser( 
                    function( file ) {
                        var textarea = document.getElementById( 'cms_string_edit_text' );
                        textarea.value = textarea.value + '[img]'+file.id+'[/img]';
                    }
                );
            }
            cms_openDlg( dlg );
        }
    );
}

/**
 * Open dialog
 * @param  object dialog object
 * @return void
 */
function cms_openDlg( dlg ) {
    var count = 0;
    jQuery(".cms_Dlg").each(function(){
        if(jQuery(this).css('display')=='inline'){
            count=count+1;
        }
    });
    if(count==0){
        cms_openShadow();
    }
    jQuery.ui.dialog.defaults.bgiframe = true;
    jQuery(function() {
        jQuery('#'+dlg.id).dialog({
            width: 480,
            close: function(event, ui){
                var count = 0;
                jQuery(".cms_Dlg").each(function(){
                    if(jQuery(this).css('display')=='inline'){
                        count=count+1;
                    }
                });
                if(count<=1){
                    cms_closeShadow();
                }
                dlg.style.display = 'none';
            }
        })
    });
    dlg.style.display = 'inline';
}

/** 
 * Close dialog
 * @param  object dialog object
 * @return void
 */
function cms_closeDlg( dlg ) {
    jQuery('#'+dlg.id).dialog('close');
    jQuery('#'+dlg.id).dialog('destroy');
}

/**
 * Close all dialogs
 * @return void
 */
function cms_closeDlgs() {
    jQuery(".cms_Dlg").each(function(){
        jQuery(this).css('display','none');
    });
    cms_closeShadow();
}

/**
 * Open banner browser
 * @return void
 */
function cms_openBannerbrowser( callback ) {
    var page  = 1;
    var limit = 50;
    
    var dlg = document.getElementById( 'cms_bannerbrowser' );
    document.getElementById( 'cms_bannerbrowser_close' ).onclick = function() {
        cms_closeDlg( dlg );
    }
    
    ajaxCall(
        'ajax.php?t=Banner/Fetch',
        'GET',
        new Array(
            'p='+page,
            'limit='+limit
        ),
        function( r ) {
            var cont = document.getElementById( 'cms_bannerbrowser_content' );
            while ( cont.childNodes.length > 0 ) {
                cont.removeChild( cont.firstChild );
            }
            for ( var i = 0; i < r['objects'].length; i++ ) {
                with( { s: r['objects'][i] } ) {
                    var wrapper = document.createElement( 'div' );
                    wrapper.className = 'cms_categorylist_itemwrapper';
                    var name = document.createElement( 'div' );
                    name.className = 'cms_categorylist_itemname';
                    name.innerHTML = s.name;
                    name.onclick = function() {
                        callback( s );
                        cms_closeDlg( dlg );
                    }
                    wrapper.appendChild( name );
                }
                cont.appendChild( wrapper );
            }
            var clear = document.createElement( 'div' );
            clear.className = 'clear';
            cont.appendChild( clear );
            cms_openDlg( dlg );
        }
    );
}

/**
 * Open file browser
 * @param  callback for result selection
 * @return void
 */
function cms_openFilebrowser( callback ) {
    var dlg = document.getElementById( 'cms_filebrowser' );
    
    cms_updateFilebrowser(
        dlg,
        '',
        document.getElementById( 'cms_filebrowser_search_type' ).value,
        1,
        callback
    );
    
    document.getElementById( 'cms_filebrowser_search' ).onclick = function() {
        cms_updateFilebrowser(
            dlg,
            document.getElementById( 'cms_filebrowser_search_text' ).value,
            document.getElementById( 'cms_filebrowser_search_type' ).value,
            1,
            callback
        );
    }
    document.getElementById( 'cms_filebrowser_cancel' ).onclick = function() {
        cms_closeDlg( dlg );
    }
    document.getElementById( 'cms_filebrowser_upload' ).onclick = function() {
        cms_openUpload(
            function() {
                cms_updateFilebrowser(
                    dlg,
                    '',
                    document.getElementById( 'cms_filebrowser_search_type' ).value,
                    1,
                    callback
                );
            }
        );
    }
}

/**
 * Open file upload dialog
 * @param  callback
 * @return void
 */
function cms_openUpload( callback ) {
    var dlg = document.getElementById( 'cms_upload' );
    document.getElementById( 'cms_upload_close' ).onclick = function() {
        cms_closeDlg( dlg );
        if ( callback != null ) {
            callback();
        }
    }
    document.getElementById( 'cms_upload_frame' ).src = document.getElementById( 'cms_upload_url' ).value;
    cms_openDlg( dlg );
}

/**
 * Update file browser content
 * @param  object   dlg    file browser dialog object
 * @param  string   search search string
 * @param  integer  type   search filter type
 * @param  integer  page   page number
 * @param  callback callback
 * @return void
 */
function cms_updateFilebrowser( dlg, search, type, page, callback ) {
    var limit = 40;
    ajaxCall(
        'ajax.php?t=File/Fetch',
        'POST',
        new Array(
            'search='+encodeURIComponent(search),
            'type='+type,
            'p='+page,
            'limit='+limit
        ),
        function( r ) {
            var cont = document.getElementById( 'cms_filebrowser_content' );
            while ( cont.childNodes.length > 0 ) {
                cont.removeChild( cont.firstChild );
            }
            for ( var i = 0; i < r['files'].length; i++ ) {
                var file = document.createElement( 'div' );
                file.className = 'cms_file';
                var img = document.createElement( 'img' );
                img.setAttribute( 'alt', '' );
                img.setAttribute( 'title', r['files'][i].org_filename );
                
                switch ( r['files'][i].type ) {
                    case 2: // image
                        img.setAttribute( 'src', 'index.php?t=File/GetThumbnail&id='+r['files'][i].id+'&size=75' );
                        break;
                    case 3: // video
                        img.setAttribute( 'src', 'images/icons/movie.png' );
                        img.setAttribute( 'style', 'padding:29px' );
                        break;
                    default:
                        img.setAttribute( 'src', 'images/icons/file.png' );
                        img.setAttribute( 'style', 'padding:29px' );
                        break;
                }
                
                with ( { s: r['files'][i] } ) {
                    img.onclick = function() {
                        callback( s );
                        cms_closeDlg( dlg );
                    }
                }
                
                file.appendChild( img );
                cont.appendChild( file );
            }
            
            cms_showPager(
                document.getElementById( 'cms_filebrowser_pager' ),
                r['total'],
                limit,
                page,
                function( p ) {
                    cms_updateFilebrowser( dlg, search, type, p, callback )
                }
            );

            cms_openDlg( dlg );
        }
    );
}

/**
 * Render pager
 * @param  object   parent   parent container object
 * @param  integer  total    total number of elements
 * @param  integer  limit    number of elements per page
 * @param  integer  page     current page number
 * @param  callback callback
 * @return void
 */
function cms_showPager( parent, total, limit, page, callback ) {
    while ( parent.childNodes.length > 0 ) {
        parent.removeChild( parent.firstChild );
    }

    var pageCount = 0;
    if ( total%limit != 0 ) {
        pageCount = parseInt( total/limit ) +1;
    } else {
        pageCount = parseInt( total/limit );
    }
    
    if ( pageCount > 0 && page > pageCount ) {
        return false;
    }
    
    var begin = page -3;
    var end   = page +3;
    
    if ( begin < 1 ) {
        end   = end + ( begin * -1 ) +1;
        begin = 1;
    }
    
    if ( end > pageCount ) {
        begin = begin -(end -pageCount);
        end   = pageCount;
        
        if ( begin < 1 ) {
            begin = 1;
        }
    }
    
    if ( page > 1 ) {
        var elem = document.createElement( 'a' );
        elem.setAttribute( 'class', 'pager_item_text' );
        elem.setAttribute( 'href', '' );
        with ( { p: page } ) {
            elem.onclick = function() {
                cms_showPager( parent, total, limit, p-1, callback );
                callback( p-1 );
                return false;
            }
        }
        elem.innerHTML = 'prev';
        parent.appendChild( elem );
    }
    
    if ( begin > 1 ) {
        var elem = document.createElement( 'a' );
        elem.setAttribute( 'class', 'pager_item' );
        elem.setAttribute( 'href', '' );
        elem.innerHTML = '1';
        elem.onclick = function() {
            cms_showPager( parent, total, limit, 1, callback );
            callback( 1 );
            return false;
        }
        parent.appendChild( elem );
        elem = document.createElement( 'span' );
        elem.setAttribute( 'class', 'pager_item_text' );
        elem.innerHTML = '...';
        parent.appendChild( elem );
    }
    
    for ( i = begin; i <= end; i++ ) {
        if ( page == i ) {
            var elem = document.createElement( 'a' );
            elem.setAttribute( 'class', 'pager_item pager_item_active' );
            elem.setAttribute( 'href', '' );
            elem.innerHTML = i;
            parent.appendChild( elem );
        } else {
            var elem = document.createElement( 'a' );
            elem.setAttribute( 'class', 'pager_item' );
            elem.setAttribute( 'href', '' );
            with ( { p: i } ) {
                elem.onclick = function() {
                    cms_showPager( parent, total, limit, p, callback );
                    callback( p );
                    return false;
                }
            }
            elem.innerHTML = i;
            parent.appendChild( elem );
        }
    }
    
    if ( end < pageCount ) {
        var elem = document.createElement( 'span' );
        elem.setAttribute( 'class', 'pager_item_text' );
        elem.innerHTML = '...';
        parent.appendChild( elem );
        elem = document.createElement( 'a' );
        elem.setAttribute( 'class', 'pager_item' );
        elem.setAttribute( 'href', '' );
        elem.onclick = function() {
            cms_showPager( parent, total, limit, pageCount, callback );
            callback( pageCount );
            return false;
        }
        elem.innerHTML = pageCount;
        parent.appendChild( elem );
        
        elem = document.createElement( 'a' );
        elem.setAttribute( 'class', 'pager_item_text' );
        elem.setAttribute( 'href', '' );
        with ( { p: page } ) {
            elem.onclick = function() {
                cms_showPager( parent, total, limit, p+1, callback );
                callback( p+1 );
                return false;
            }
        }
        elem.innerHTML = 'next';
        parent.appendChild( elem );
    } else if ( page < end ) {
        elem = document.createElement( 'a' );
        elem.setAttribute( 'class', 'pager_item_text' );
        elem.setAttribute( 'href', '' );
        with ( { p: page } ) {
            elem.onclick = function() {
                cms_showPager( parent, total, limit, p+1, callback );
                callback( p+1 );
                return false;
            }
        }
        elem.innerHTML = 'next';
        parent.appendChild( elem );
    }
    
    var elem = document.createElement( 'div' );
    elem.setAttribute( 'class', 'pager_footer' );
    elem.innerHTML = total+' result(s) on '+pageCount+' page(s)';
    parent.appendChild( elem );

    return true;
}

/**
 *
 */
function cms_openShadow() {
    var shadow = document.createElement( 'div' );
    shadow.setAttribute( 'id', 'shadow' );
    shadow.style.width = document.body.offsetWidth + 'px';
    shadow.style.height = document.body.offsetHeight + 'px';
    document.body.appendChild( shadow );
    shadow.style.display = 'block';
    return shadow;
}

/**
 *
 */
function cms_closeShadow() {
    document.body.removeChild( document.getElementById( 'shadow' ) );
}

/** 
 *
 */
function cms_openCategoryList( callback ) {
    var dlg = document.getElementById( 'cms_categorylist' );
    document.getElementById( 'cms_categorylist_create' ).onclick = function() {
        cms_openCreateCategory(
            function( customer ) {
                cms_updateCategoryList( dlg, callback );
            }
        );
    }
    document.getElementById( 'cms_categorylist_cancel' ).onclick = function() {
        cms_closeDlg( dlg );
    }
    cms_updateCategoryList( dlg, callback );
    cms_openDlg( dlg );
}

/**
 *
 */
function cms_updateCategoryList( dlg, callback ) {
    ajaxCall(
        'ajax.php?t=Category/Fetch',
        'POST',
        new Array(
        ),
        function( r ) {
            var container = document.getElementById( 'cms_categorylist_content' );
            while ( container.childNodes.length > 0 ) {
                container.removeChild( container.firstChild );
            }
            for ( var i = 0; i < r['objects'].length; i++ ) {
                var wrapper = document.createElement( 'div' );
                wrapper.className = 'cms_categorylist_itemwrapper';
                
                with ( { s: r['objects'][i] } ) {
                    var del = document.createElement( 'div' );
                    del.className = 'cms_categorylist_itemdelete';
                    del.onclick = function() {
                        if ( confirm( 'Do you really want to delete this category?' ) ) {
                            ajaxCall(
                                'ajax.php?t=Category/Delete',
                                'POST',
                                new Array(
                                    'id='+s.id
                                ),
                                function() {
                                    cms_closeDlg( dlg );
                                    cms_openCategoryList( callback );
                                    return;
                                }
                            );
                        }
                    }
                    wrapper.appendChild( del );
                    
                    var name = document.createElement( 'div' );
                    name.className = 'cms_categorylist_itemname';
                    name.innerHTML = s.name;
                    name.onclick = function() {
                        callback( s );
                        cms_closeDlg( dlg );
                    }
                    wrapper.appendChild( name );
                }
                container.appendChild( wrapper );
            }
            
            var clear = document.createElement( 'div' );
            clear.className = 'clear';
            container.appendChild( clear );
        }
    );
}

/**
 *
 */
function cms_openCreateCategory( callback ) {
    var dlg = document.getElementById( 'cms_categorycreate' );
    document.getElementById( 'cms_categorycreate_create' ).onclick = function() {
        ajaxCall(
            'ajax.php?t=Category/Create',
            'POST',
            new Array(
                'name='+encodeURIComponent( document.getElementById( 'cms_categorycreate_name' ).value )
            ),
            function( category ) {
                cms_closeDlg( dlg );
                callback( category );
            }
        );
    }
    document.getElementById( 'cms_categorycreate_cancel' ).onclick = function() {
        cms_closeDlg( dlg );
    }
    cms_openDlg( dlg );
}

/**
 *
 */
function cms_openCustomerList( callback ) {
    var dlg = document.getElementById( 'cms_customerlist' );
    document.getElementById( 'cms_customerlist_create' ).onclick = function() {
        cms_openCreateCustomer(
            function( customer ) {
                cms_updateCustomerList( dlg, callback );
            }
        );
    }
    document.getElementById( 'cms_customerlist_cancel' ).onclick = function() {
        cms_closeDlg( dlg );
    }
    cms_updateCustomerList( dlg, callback );
    cms_openDlg( dlg );
}

/**
 *
 */
function cms_updateCustomerList( dlg, callback ) {
    ajaxCall(
        'ajax.php?t=Customer/Fetch',
        'POST',
        new Array(
        ),
        function( r ) {
            var container = document.getElementById( 'cms_customerlist_content' );
            while ( container.childNodes.length > 0 ) {
                container.removeChild( container.firstChild );
            }
            for ( var i = 0; i < r['objects'].length; i++ ) {
            
                var wrapper = document.createElement( 'div' );
                wrapper.className = 'cms_customerlist_itemwrapper';
                
                with ( { s: r['objects'][i] } ) {
                    var del = document.createElement( 'div' );
                    del.className = 'cms_customerlist_itemdelete';
                    del.onclick = function() {
                        if ( confirm( 'Do you really want to delete this customer?' ) ) {
                            ajaxCall(
                                'ajax.php?t=Customer/Delete',
                                'POST',
                                new Array(
                                    'id='+s.id
                                ),
                                function() {
                                    cms_closeDlg( dlg );
                                    cms_openCustomerList( callback );
                                    return;
                                }
                            );
                        }
                    }
                    wrapper.appendChild( del );
                    
                    var name = document.createElement( 'div' );
                    name.className = 'cms_customerlist_itemname';
                    name.innerHTML = s.name;
                    name.onclick = function() {
                        callback( s );
                        cms_closeDlg( dlg );
                    }
                    wrapper.appendChild( name );
                }
                container.appendChild( wrapper );
            }
            
            var clear = document.createElement( 'div' );
            clear.className = 'clear';
            container.appendChild( clear );
        }
    );
}

/**
 *
 */
function cms_openCreateCustomer( callback ) {
    var dlg = document.getElementById( 'cms_customercreate' );
    document.getElementById( 'cms_customercreate_create' ).onclick = function() {
        ajaxCall(
            'ajax.php?t=Customer/Create',
            'POST',
            new Array(
                'name='+encodeURIComponent( document.getElementById( 'cms_customercreate_name' ).value )
            ),
            function( customer ) {
                cms_closeDlg( dlg );
                callback( customer );
            }
        );
    }
    document.getElementById( 'cms_customercreate_cancel' ).onclick = function() {
        cms_closeDlg( dlg );
    }
    cms_openDlg( dlg );
}

/**
 *
 */
function cms_createLanguage() {
    var dlg = document.getElementById( 'cms_langcreate' );
    document.getElementById( 'cms_langcreate_create' ).onclick = function() {
        ajaxCall(
            'ajax.php?t=Language/Create',
            'POST',
            new Array(
                'name='+encodeURIComponent( document.getElementById( 'cms_langcreate_name' ).value ),
                'code='+encodeURIComponent( document.getElementById( 'cms_langcreate_code' ).value )
            ),
            function( language ) {
                cms_closeDlg( dlg );
            }
        );
    }
    document.getElementById( 'cms_langcreate_cancel' ).onclick = function() {
        cms_closeDlg( dlg );
    }
    cms_openDlg( dlg );
}

/**
 *
 */
function cms_pageTitle( pageName ) {
    if ( pageName == null ) {
        pageName = document.getElementById( 'cms_page_title_page' ).value;
    }
    ajaxCall(
        'ajax.php?t=Page/Get',
        'GET',
        new Array(
            'page='+pageName
        ),
        function( page ) {
            var dlg = document.getElementById( 'cms_page_title' );
            if ( page.title != undefined ) {
                document.getElementById( 'cms_page_title_title' ).value = page.title;
            }
            document.getElementById( 'cms_page_title_save' ).onclick = function() {
                ajaxCall(
                    'ajax.php?t=Page/SetTitle',
                    'POST',
                    new Array(
                        'page='+pageName,
                        'title='+document.getElementById( 'cms_page_title_title' ).value
                    ),
                    function(r) {
                        cms_closeDlg( dlg );
                    }
                );
            }
            document.getElementById( 'cms_page_title_cancel' ).onclick = function() {
                cms_closeDlg( dlg );
            }
            cms_openDlg( dlg );
        }
    );
}

/**
 *
 */
function cms_pageMeta( pageName ) {
    if ( pageName == null ) {
        pageName = document.getElementById( 'cms_page_meta_page' ).value;
    }
    ajaxCall(
        'ajax.php?t=Page/Get',
        'GET',
        new Array(
            'page='+pageName
        ),
        function( page ) {
            var dlg = document.getElementById( 'cms_page_meta' );
            document.getElementById( 'cms_page_meta_close' ).onclick = function() {
                cms_closeDlg( dlg );
            }
            document.getElementById( 'cms_page_meta_add' ).onclick = function() {
                ajaxCall(
                    'ajax.php?t=Page/SetMeta',
                    'POST',
                    new Array(
                        'page='+pageName,
                        'name='+document.getElementById( 'cms_page_meta_name' ).value,
                        'data='+document.getElementById( 'cms_page_meta_data' ).value
                    ),
                    function(r) {
                        document.getElementById( 'cms_page_meta_name' ).value = '';
                        document.getElementById( 'cms_page_meta_data' ).value = '';
                        cms_pageMetaList( pageName );
                    }
                );
            }
            cms_pageMetaList( pageName );
            cms_openDlg( dlg );
        }
    );
}

/**
 *
 */
function cms_pageMetaList( page ) {
    ajaxCall(
        'ajax.php?t=Page/Get',
        'GET',
        new Array(
            'page='+page
        ),
        function( pageObj ) {
            var container = document.getElementById( 'cms_page_meta_meta' );
            while ( container.childNodes.length > 0 ) {
                container.removeChild( container.firstChild );
            }
            if ( pageObj.meta != null ) {
                for ( var key in pageObj.meta ) {
                    with ( { k: key } ) {
                        var tr = document.createElement( 'tr' );
                        var td = document.createElement( 'td' );
                        var img = document.createElement( 'img' );
                        img.setAttribute( 'src', getBaseUrl()+'images/icons/delete.png' );
                        img.setAttribute( 'alt', 'Delete meta entry' );
                        img.setAttribute( 'title', 'Delete meta entry' );
                        img.onclick = function() {
                            if ( confirm( 'Do you really want to delete meta entry?' ) == true ) {
                                ajaxCall(
                                    'ajax.php?t=Page/RemoveMeta',
                                    'POST',
                                    new Array(
                                        'page='+page,
                                        'name='+k
                                    ),
                                    function(r) {
                                        cms_pageMetaList( page );
                                    }
                                );
                            }
                        }
                        td.appendChild( img );
                        tr.appendChild( td );
                        var td = document.createElement( 'td' );
                        var img = document.createElement( 'img' );
                        img.setAttribute( 'src', getBaseUrl()+'images/icons/pencil.png' );
                        img.setAttribute( 'alt', 'Edit meta entry' );
                        img.setAttribute( 'title', 'Edit meta entry' );
                        img.onclick = function() {
                            var dlg = document.getElementById( 'cms_page_meta_edit' );
                            document.getElementById( 'cms_page_meta_edit_data' ).value = pageObj.meta[k];
                            document.getElementById( 'cms_page_meta_edit_save' ).onclick = function() {
                                ajaxCall(
                                    'ajax.php?t=Page/SetMeta',
                                    'POST',
                                    new Array(
                                        'page='+page,
                                        'name='+k,
                                        'data='+encodeURIComponent( document.getElementById( 'cms_page_meta_edit_data' ).value )
                                    ),
                                    function(r) {
                                        cms_pageMetaList( page );
                                        cms_closeDlg( dlg );
                                    }
                                );
                            }
                            document.getElementById( 'cms_page_meta_edit_cancel' ).onclick = function() {
                                cms_closeDlg( dlg );
                            }
                            cms_openDlg( dlg );
                        }
                        td.appendChild( img );
                        tr.appendChild( td );
                        var td = document.createElement( 'td' );
                        td.innerHTML = k;
                        tr.appendChild( td );
                        var td = document.createElement( 'td' );
                        if ( pageObj.meta[k].length > 30 ) {
                            td.innerHTML = pageObj.meta[k].substr( 0, 30 )+'...';
                        } else {
                            td.innerHTML = pageObj.meta[k];
                        }
                        tr.appendChild( td );
                        container.appendChild( tr );
                    }
                }
            }
        }
    );
}

/**
 *
 */
function cms_openCopyDlg( object, type, dlg, callback ) {
    ajaxCall(
        'ajax.php?t=Language/Fetch',
        'GET',
        new Array(
        ),
        function( languages ) {
            var select = document.getElementById( 'cms_copy_language' );
            while ( select.childNodes.length > 0 ) {
                select.removeChild( select.firstChild );
            }
            for ( var i = 0; i < languages.length; i++ ) {
                var option = document.createElement( 'option' );
                option.setAttribute( 'value', languages[i].code );
                option.innerHTML = languages[i].name;
                select.appendChild( option );
            }
            document.getElementById( 'cms_copy_copy' ).onclick = function() {
                var url = null;
                switch ( type ) {
                    case 'news':
                        url = 'ajax.php?t=News/Copy';
                        break;
                    case 'reference':
                        url = 'ajax.php?t=Reference/Copy';
                        break;
                    case 'job':
                        url = 'ajax.php?t=Job/Copy';
                        break;
                    case 'partner':
                        url = 'ajax.php?t=Partner/Copy';
                        break;
                }
                
                ajaxCall(
                    url,
                    'POST',
                    new Array(
                        'id='+object.id,
                        'lc='+document.getElementById('cms_copy_language').value
                    ),
                    function( copy ) {
                        switch ( document.getElementById( 'cms_copy_action' ).value ) {
                            case 'close':
                                cms_closeDlgs();
                                break;
                            case 'edit':
                                cms_closeDlgs();
                                cms_edit( type, copy.id );
                                break;
                        }
                    }
                );
            }
            document.getElementById( 'cms_copy_cancel' ).onclick = function() {
                cms_closeDlg( dlg );
            }
            cms_openDlg( dlg );
        }
    );
}