if(Yf === undefined) { var Yf = {};}
if(Yf.Event === undefined) { Yf.Event = {};}
var Yf_Event_Media = {
    ALLOWED_MEDIA_TYPES:  ['img'],
    ITEMS_PER_PAGE:  16,
    _initialized:  false,
    activeModal:  new Object(),
    currentPage: 1,
    data : new Object(),
    isFeatured:  null,
    itemsPerPage: null,
    lang:  'ar',
    mode:  'view',
    pageCount: 1,
    photoViewerMaxHeight:  400,
    photoViewerMaxWidth:  600,
    photoViewerStatus:  'new',
    displayAll:  false,
    
    init:  function(options) 
    {
        if(options.lang !== undefined) {
            Yf_Event_Media.lang = options.lang;
        }
        Yf_Event_Media.data = YAHOO.lang.JSON.parse(document.getElementById('mediaData').innerHTML);
        Yf_Event_Media.itemsPerPage = Yf_Event_Media.ITEMS_PER_PAGE;
        if(options !== undefined) {
            if(options.itemsPerPage !== undefined) {
                Yf_Event_Media.itemsPerPage = options.itemsPerPage;
            }
            if(options.mode !== undefined) {
                Yf_Event_Media.mode = options.mode;
                switch(options.mode){
                    case 'edit':
                    {
                        Yf_Event_Media.drawEditTable();
                        if(Yf_Event_Media.pageCount > 1) {
                            document.getElementById('showAllImages').style.display = '';
                        }
                        new YAHOO.widget.TabView('eventDetails');
                        break;
                    }
                    case 'view':
                    {
                        Yf_Event_Media.drawViewTable();
                        if(Yf_Event_Media.data.totalRecords > 0) {
                            document.getElementById('mediaMessages').innerHTML = '';
                        }
                        if(Yf_Event_Media.pageCount > 1) {
                            document.getElementById('showAllImages').style.display = '';
                        }
                        break;
                    }
                }
            }
        }
        Yf_Event_Media._initialized = true;
    }, //end init()
    
    deleteMediaCallback: {
        success:  function(o) {
            var data = YAHOO.lang.JSON.parse(o.responseText);
            Yf_Event_Media.data.results = data.results;
            Yf_Event_Media.data.totalRecords = data.totalRecords;
            Yf_Event_Media.drawEditTable();
        },
        failure:  function(o) { }
    },
    
    fetchMediaDataCallback: {
        success:  function(o) {
            var data = YAHOO.lang.JSON.parse(o.responseText);
            Yf_Event_Media.loadForm(data);
        },
        failure:  function(o) { }
    },
    
    mediaInfoUpdateCallback:  {
        success:  function(o) {
            var data = YAHOO.lang.JSON.parse(o.responseText);
            var mediaId = data.mediaId;
            var mode = data.mode;
            switch(mode) {
                case 'new':
                    document.getElementById('media_'+mediaId).parentNode.removeChild(document.getElementById('media_'+mediaId));
                    break;
                case 'edit':
                    Yf_Event_Media.activeModal.hide();
                    break;
            }
            Yf_Event_Media.data = data.newData;
            Yf_Event_Media.data.eventId = data.eventId;
            Yf_Event_Media.totalRecords = data.newData.totalRecords;
            Yf_Event_Media.drawEditTable();
        },
        failure:  function(o) {}
    },
    
    setSortOrderCallback: {
        success: function(o) {
            var results = YAHOO.lang.JSON.parse(o.responseText);
            Yf_Event_Media.data.results = results.results;
            if(Yf_Event_Media.displayAll) {
                Yf_Event_Media.showAll();
            } else {
                Yf_Event_Media.drawEditTable();
            }
        },
        failure:  function(o) { }
    },
    
    setFeaturedCallback: {
        success: function(o) {
            var data = YAHOO.lang.JSON.parse(o.responseText);
            var mediaId = data.mediaId;
            var oldIsFeatured = Yf_Event_Media.isFeatured;
            Yf_Event_Media.data.results[oldIsFeatured].isFeatured = 0;
            Yf_Event_Media.data.results[mediaId].isFeatured = 1;
            Yf_Event_Media.drawEditTable();
        },
        failure:  function(o) { }
    },
    
    setMode:  function(mode) {
        Yf_Event_Media.mode = mode;
    }
};

Yf_Event_Media.cancelForm = function(formOrMediaId)
{
    if(formOrMediaId === 'Yf_Form_EventMediaInfo') {
        Yf_Event_Media.activeModal.hide();
        return;
    } else {
        var mediaId = formOrMediaId;
        document.getElementById('media_'+mediaId).parentNode.removeChild(document.getElementById('media_'+mediaId));
    }
}
Yf_Event_Media.changeTabs = function(tabId)
{
    switch(tabId) {
        default:
        case 'tab_1':
            document.getElementById('fieldset-ar').style.display = 'none';
            document.getElementById('fieldset-en').style.display = '';
            document.getElementById(tabId).className = 'selected';
            document.getElementById('tab_2').className = '';
            var tabContainer = YAHOO.util.Dom.getElementsByClassName('tabContainer', 'div', 'yui-main')[0];
            Yf.Element.setRecursiveAttribute(tabContainer, 'dir', 'ltr');
            Yf.Element.setRecursiveAttribute(tabContainer, 'align', 'left');
            break;
        case 'tab_2':
            document.getElementById('fieldset-en').style.display = 'none';
            document.getElementById('fieldset-ar').style.display = '';
            document.getElementById(tabId).className = 'selected';
            document.getElementById('tab_1').className = '';
            var tabContainer = YAHOO.util.Dom.getElementsByClassName('tabContainer', 'div', 'yui-main')[0];
            Yf.Element.setRecursiveAttribute(tabContainer, 'dir', 'rtl');
            Yf.Element.setRecursiveAttribute(tabContainer, 'align', 'right');
            break;
    }
}
Yf_Event_Media.fetchMediaData = function(mediaId, mediaType)
{
    var uri = '/admin/event/fetch-media-data/';
    var data = new Object();
    data.mediaId = mediaId;
    data.mediaType = mediaType;
    data = '&JSONData=' + YAHOO.lang.JSON.stringify(data);
    var transaction = YAHOO.util.Connect.asyncRequest('POST', uri, Yf_Event_Media.fetchMediaDataCallback, data);
}

Yf_Event_Media.loadForm = function(data)
{
    var formData = data.formData[data.mediaId];
    Yf_Event_Media.activeModal =  new YAHOO.widget.Panel("yfPanel",   
        {
            width: "350px",
            fixedcenter:true,  
            close:true,  
            draggable:false,  
            zindex:4, 
            modal:true,
            underlay: 'shadow',
            draggable: true,
            visible:false
        }
    );
    
    Yf_Event_Media.activeModal.setHeader(document.title + ' | ' + data.mediaId);
    Yf_Event_Media.activeModal.setBody(document.getElementById('mediaFormWrapper').innerHTML);
    Yf_Event_Media.activeModal.render(document.body);
    Yf_Event_Media.activeModal.show();
    Yf_Event_Media.activeModal.eventMediaData = data;
    if(data.formData[data.mediaId].captions != null) {
        for(var i = 0; i < data.languages.length; i++) {
            var lang = data.languages[i];
            if(formData.captions[lang] !== undefined) {
                document.getElementById('CAPTION_' + lang).value = formData.captions[lang];
            } else {
                document.getElementById('CAPTION_' + lang).value = '';
            }
        }
    }
    var hiddenElement = document.createElement('input');
    hiddenElement.type = "hidden";
    hiddenElement.id = 'mediaId';
    hiddenElement.name = 'mediaId';
    hiddenElement.value = data.mediaId;
    var form = new YAHOO.util.Element('Yf_Form_EventMediaInfo');
    form.appendChild(hiddenElement);
}

Yf_Event_Media.processForm = function(formName) {
    var uri = '/admin/event/media-info-update/';
    formData = YAHOO.util.Connect.setForm(document.getElementById(formName));
    var transaction = YAHOO.util.Connect.asyncRequest('POST', uri, Yf_Event_Media.mediaInfoUpdateCallback);
}

Yf_Event_Media.deleteMedia = function(mediaId, mediaType) 
{
    var uri = '/admin/event/delete-media/';
    var data = new Object();
    data.mediaId = mediaId;
    data.mediaType = mediaType;
    data.eventId = Yf_Event_Media.data.eventId;
    data = '&JSONData=' + YAHOO.lang.JSON.stringify(data);
    var transaction = YAHOO.util.Connect.asyncRequest('POST', uri, Yf_Event_Media.deleteMediaCallback, data);
}

Yf_Event_Media.drawEditTable = function() 
{
    document.getElementById('mediaList').innerHTML = '';
    var data = Yf_Event_Media.data;
    data.currentPage = Yf_Event_Media.currentPage;
    data.itemsPerPage = Yf_Event_Media.itemsPerPage;
    var paginator = new Yf_Pagination();
    var paginatedObj = paginator.paginateDataObject(data); //reduce the result set
    Yf_Event_Media.pageCount = paginatedObj.pageCount;
    Yf_Event_Media.setPaginationLinks();
    var results = paginatedObj.results;
    var count = 1;
    var currentColumn = 1;
    for(media in results)
    {
        var thisMedia = results[media];
        var template = document.getElementById('mediaTemplate').cloneNode(true);
        template.id = 'eventImage_' + thisMedia.eventImageId;
        document.getElementById('mediaList').appendChild(template);
        var dragHandleDiv = YAHOO.util.Dom.getElementsByClassName('dragHandle', 'div', template.id)[0];
        dragHandleDiv.id = 'drag_' + thisMedia.eventImageId;
        dragHandleDiv.innerHTML = thisMedia.sortOrder;
        var imageDiv = YAHOO.util.Dom.getElementsByClassName('mediaUploadImage', 'img', template.id)[0];
        imageDiv.src = '/image/event/eventImageId/' + thisMedia.eventImageId + '/size/125';
        for(caption in thisMedia.captions) {
            var newDiv = document.createElement('div');
            if(thisMedia.captions[caption] == '' || thisMedia.captions[caption] == undefined || thisMedia.captions[caption] == null) {
                newDiv.innerHTML = '*';
            } else {
                if(thisMedia.captions[caption].length > 13) {
                    newDiv.innerHTML = thisMedia.captions[caption].substring(0,13) + ' ... ';
                } else {
                    newDiv.innerHTML = thisMedia.captions[caption];
                }
            }
            newDiv.className = 'mediaCaption floatAlign';
            newDiv.style.clear = 'both';
            YAHOO.util.Dom.insertAfter(newDiv, imageDiv.parentNode);
        }
        var editDiv = YAHOO.util.Dom.getElementsByClassName('editMediaButton', 'button', template.id);
        editDiv[0].id = thisMedia.eventImageId;
        var deleteDiv = YAHOO.util.Dom.getElementsByClassName('deleteMediaButton', 'button', template.id);
        deleteDiv[0].id = thisMedia.eventImageId;
        var sortOrderInput = YAHOO.util.Dom.getElementsByClassName('imageSortOrderInput', 'input', template.id)[0];
        sortOrderInput.setAttribute('onchange', 'Yf_Event_Media.setSortOrder(\"'+thisMedia.eventImageId+'\", this.value);');
        var sortOrderInput = YAHOO.util.Dom.getElementsByClassName('imageFeaturedCheckbox', 'input', template.id)[0];
        sortOrderInput.setAttribute('onchange', 'Yf_Event_Media.setFeatured(\"'+thisMedia.eventImageId+'\");');
        template.style.display = '';
        var isFeaturedCheckbox = YAHOO.util.Dom.getElementsByClassName('imageFeaturedCheckbox', 'input', template.id)[0];
        isFeaturedCheckbox.id = 'featured_' + thisMedia.eventImageId;
        if(thisMedia.isFeatured == 1) {
            Yf_Event_Media.isFeatured = thisMedia.eventImageId;
            isFeaturedCheckbox.checked = true;
        }
        Yf_Event_Media.makeDraggable();
        if(currentColumn == 4) {
            currentColumn = 1;
        } else {
            currentColumn++;
        }
        count++;
    }
    Yf_DragDrop.init('mediaList', Yf_Event_Media.setSortOrder);
}

Yf_Event_Media.drawViewTable = function() 
{
    document.getElementById('mediaList').innerHTML = '';
    var data = Yf_Event_Media.data;
    data.currentPage = Yf_Event_Media.currentPage;
    data.itemsPerPage = Yf_Event_Media.itemsPerPage;
    var paginator = new Yf_Pagination();
    var paginatedObj = paginator.paginateDataObject(data); //reduce the result set
    Yf_Event_Media.pageCount = paginatedObj.pageCount;
    Yf_Event_Media.setPaginationLinks();
    var results = paginatedObj.results;
    var currentColumn = 1;
    var i = 1;
    for(media in results)
    {
        var thisMedia = results[media];
        var template = document.getElementById('mediaTemplate').cloneNode(true);
        template.id = 'mediaList-thumb_' + i;
        template.className = 'photoViewer floatAlign';
        template.href = '/image/event/eventImageId/' + 
            thisMedia.eventImageId + 
            '/width/' + 
            Yf_Event_Media.photoViewerMaxWidth + 
            '/height/' + 
            Yf_Event_Media.photoViewerMaxHeight +
            '/';
        document.getElementById('mediaList').appendChild(template);
        var imageDiv = YAHOO.util.Dom.getElementsByClassName('mediaUploadImage', 'img', template.id)[0];
        imageDiv.src = '/image/event/eventImageId/' + thisMedia.eventImageId + '/size/125/';
        if(thisMedia.captions[Yf_Event_Media.lang] !== undefined) {
            var captionDiv = document.createElement('div');
            var lang = Yf_Event_Media.lang;
            if(thisMedia.captions[lang] !== null) {
                if(thisMedia.captions[lang].length > 13) {
                    captionDiv.innerHTML = thisMedia.captions[Yf_Event_Media.lang].substring(0,13) + ' ... ';
                } else {
                    captionDiv.innerHTML = thisMedia.captions[Yf_Event_Media.lang];
                }
            } else {
                captionDiv.innerHTML = '';
            }
            captionDiv.className = 'mediaCaption floatAlign';
            template.appendChild(captionDiv);
            template.title = thisMedia.captions[Yf_Event_Media.lang];
            imageDiv.alt = template.title;
        }
        if(currentColumn == 4) {
            currentColumn = 1;
            var br = document.createElement('br');
            template.appendChild(br);
        } else {
            currentColumn++;
        }
        template.style.display = '';
        i++;
    }
    Yf_Event_Media.createViewer();
}

Yf_Event_Media.createViewer = function()
{
	if (Yf_Event_Media.imagesLoaded()) {
		Yf.PhotoViewer.newViewer("mediaList");
	} else {
		setTimeout('Yf_Event_Media.createViewer();', 100);
	}
}

Yf_Event_Media.imagesLoaded = function()
{
	var mediaList = document.getElementById("mediaList");
	var images = mediaList.getElementsByTagName('img');
	for (var counter=0; counter<images.length; counter++) {
		var img = images[counter];
		if (!img.complete) {
			return false;
		}
	}
	return true;
}

Yf_Event_Media.makeDraggable = function()
{
}

Yf_Event_Media.nextPage = function()
{
    Yf_Event_Media.currentPage++;
    if(Yf_Event_Media.currentPage >= Yf_Event_Media.pageCount) {
        Yf_Event_Media.currentPage = Yf_Event_Media.pageCount;
    }
    switch(Yf_Event_Media.mode) {
        case 'new':
        case 'edit':
        Yf_Event_Media.drawEditTable();
        break;
        case 'view':
        Yf_Event_Media.drawViewTable();
        break;
    }
}

Yf_Event_Media.paginateImages = function() 
{
    document.getElementById('showAllImages').style.display = '';
    document.getElementById('paginateImages').style.display = 'none';
    Yf_Event_Media.itemsPerPage = Yf_Event_Media.ITEMS_PER_PAGE;
    Yf_Event_Media.displayAll = false;
    switch(Yf_Event_Media.mode) {
        case 'view':
            Yf_Event_Media.drawViewTable();
            break;
        case 'edit':
            Yf_Event_Media.drawEditTable();
            break;
    }
}

Yf_Event_Media.prevPage = function()
{
    Yf_Event_Media.currentPage--;
    if(Yf_Event_Media.currentPage < 1) {
        Yf_Event_Media.currentPage = 1;
    }
    switch(Yf_Event_Media.mode) {
        case 'new':
        case 'edit':
        Yf_Event_Media.drawEditTable();
        break;
        case 'view':
        Yf_Event_Media.drawViewTable();
        break;
    }
}

Yf_Event_Media.setFeatured = function(mediaId) 
{
    var uri = '/admin/event/set-featured/';
    var data = new Object();
    data.eventId = Yf_Event_Media.data.eventId;
    data.mediaId = mediaId
    data = '&JSONData=' + YAHOO.lang.JSON.stringify(data);
    var transaction = YAHOO.util.Connect.asyncRequest('POST', uri, Yf_Event_Media.setFeaturedCallback, data);
}

Yf_Event_Media.setSortOrder = function(mediaId, value) 
{
    var uri = '/admin/event/set-sort-order/';
    var results = Yf_Event_Media.data.results;
    if(mediaId === undefined) { //changes were made via DragDrop, we'll have to find the positions
        var value = null
        var sourceImageId = Yf_DragDrop.sourceElement.id.split('_')[1];
        var destinationImageId = Yf_DragDrop.destinationElement.id.split('_')[1];
        var oldSortOrder = results[sourceImageId].sortOrder;
        var newSortOrder = results[destinationImageId].sortOrder;
        var mediaId = sourceImageId;
    } else {
        var oldSortOrder = results[mediaId].sortOrder;
        var newSortOrder = value;
    }
    
    var data = new Object();
    data.eventId = Yf_Event_Media.data.eventId;
    data.mediaId = mediaId
    data.newSortOrder = newSortOrder;
    data.oldSortOrder = oldSortOrder;
    data = '&JSONData=' + YAHOO.lang.JSON.stringify(data);
    var transaction = YAHOO.util.Connect.asyncRequest('POST', uri, Yf_Event_Media.setSortOrderCallback, data);
}

Yf_Event_Media.setPaginationLinks = function()
{
    var nexts = YAHOO.util.Dom.getElementsByClassName('nextPage', 'a', 'imgUploadedContent');
    var prevs = YAHOO.util.Dom.getElementsByClassName('prevPage', 'a', 'imgUploadedContent');
    if(Yf_Event_Media.currentPage < Yf_Event_Media.pageCount) {
        //show next links
        for(var i = 0; i < nexts.length; i++){
            nexts[i].style.display = '';
        }
        //hide prev links?
        if(Yf_Event_Media.currentPage == 1) {
            for(var i = 0; i < prevs.length; i++) {
                prevs[i].style.display = 'none';
            }
        }
    }
    if(Yf_Event_Media.currentPage > 1) {
        //show prev links
        for(var i = 0; i < prevs.length; i++){
            prevs[i].style.display = '';
        }
        //hide next links?
        if(Yf_Event_Media.currentPage == Yf_Event_Media.pageCount) {
            for(var i = 0; i < nexts.length; i++) {
                nexts[i].style.display = 'none';
            }
        }
    }
}

Yf_Event_Media.showAll = function()
{
    document.getElementById('showAllImages').style.display = 'none';
    document.getElementById('paginateImages').style.display = '';
    Yf_Event_Media.displayAll = true;
    Yf_Event_Media.itemsPerPage = Yf_Event_Media.data.totalRecords;
    switch(Yf_Event_Media.mode) {
        case 'view':
            Yf_Event_Media.drawViewTable();
            break;
        case 'edit':
            Yf_Event_Media.drawEditTable();
            break;
    }
    YAHOO.util.Dom.getElementsByClassName('nextPage')[0].style.display = 'none';
    YAHOO.util.Dom.getElementsByClassName('prevPage')[0].style.display = 'none';
    YAHOO.util.Dom.getElementsByClassName('nextPage')[1].style.display = 'none';
    YAHOO.util.Dom.getElementsByClassName('prevPage')[1].style.display = 'none';
}
Yf.Event.Media = Yf_Event_Media; //switching to dot notation from underscore.  Parent objects are created in Yf/Event.js