var Dom = DOM;
/* ******************************************
 *	FileProgress Object
 *	Control object for displaying file info
 * ****************************************** */

function FileProgress(file, progressObj) {

	this.progressBar = this.cancelButton = this.progressStatus = null;

	if (progressObj) {
		if (progressObj.bar) {

            if(typeof(progressObj.bar) == 'string'){

                this.progressBar = _$(progressObj.bar);
            }
            else
                this.progressBar = progressObj.bar;
		}
		if (progressObj.cancel) {
            this.cancelButton = progressObj.cancel;
        }
		if (progressObj.text) {
			this.progressStatus = typeof(progressObj.text) == 'string' ? _$(progressObj.text) : progressObj.text;
		}
	}

}
FileProgress.prototype.setProgress = function (percentage) {
    if (this.progressBar) {
        percentage = parseInt(percentage);
        this.progressBar.style.display = 'block';
		this.progressBar.className = "progress-bar uploading";
		this.progressBar.innerHTML = percentage + ' %';
        var width = percentage == 100 ?
                    this.progressBar.parentNode.clientWidth - 3 :
                    Math.round((percentage / 100) * this.progressBar.parentNode.clientWidth);
        this.progressBar.style.width = width + "px";
	}
};


FileProgress.prototype.reset = function () {
	if (this.progressBar) {
		this.progressBar.className = "progress-bar";
		this.setStatus(CreatoorSN.common.translate('Ready ...'));
		this.progressBar.style.width = '0px';
        this.progressBar.style.display = 'none';
        this.progressBar.innerHTML = '';
	}
};
FileProgress.prototype.setComplete = function () {
    if (this.progressBar) {
        this.progressBar.className = "progress-bar uploading";
		this.progressBar.style.width = "0px";
		this.progressBar.innerHTML = '';
        this.progressBar.style.display = 'none';
	}
};
FileProgress.prototype.setError = function () {
    if (this.progressBar) {
		this.progressBar.className = "progress-bar upload-error";
        this.progressBar.style.width = (this.progressBar.parentNode.clientWidth - 3) + 'px';
		this.progressBar.innerHTML = CreatoorSN.common.translate('Error');
        
	}
};
FileProgress.prototype.setCancelled = function () {
    if (this.progressBar) {
		this.progressBar.className = "progress-bar upload-error";
        this.progressBar.style.width = this.progressBar.parentNode.clientWidth + 'px';
		this.progressBar.innerHTML = CreatoorSN.common.translate('Upload cancelled');
	}
};
FileProgress.prototype.setStatus = function (status) {
    if (this.progressStatus) {
		this.progressStatus.innerHTML = status;
	}
};

FileProgress.prototype.toggleCancel = function (show, swfuploadInstance) {
    if (this.progressCancel) {
		this.progressCancel.style.visibility = show ? 'visible' : 'hidden';
		if (swfuploadInstance) {
	        var fileID = this.fileProgressID;
	        this.progressCancel.onclick = function () {
	            swfuploadInstance.cancelUpload(fileID);
	            return false;
	        };
	    }
	}

};

function enableMenuItem(param) {
    param.menuObject.getItem(0).cfg.setProperty('disabled', false);
}

var currentlySelected = 'showAll';
var currentCategory = null;
YAHOO.example.DDList = function(id, sGroup, config) {

    YAHOO.example.DDList.superclass.constructor.call(this, id, sGroup, config);

};

YAHOO.extend(YAHOO.example.DDList,YAHOO.util.DDProxy, {

	    centerFrame: true,
        resizeFrame: false,
        startDrag: function(x, y) {
            var dragEl = this.getDragEl();
	        var clickEl = this.getEl();
            var image = clickEl.children[0];
            var selectedElements = DOM.getElementsByClassName('selected-media-item', 'li');
            var layout = '';
            var add = true;
            for(var i = 0; i < selectedElements.length; i++){
                 DOM.setStyle(selectedElements[i], "opacity", 0.4);
                 if (clickEl.id == selectedElements[i].id) add =  false;
                 if (i <= 4) {
                    layout += selectedElements[i].children[0].innerHTML;
                 }
            }
            
            if(add)  
                dragEl.innerHTML = image.innerHTML +layout;
            else
                dragEl.innerHTML = layout;
          
            for(var j = 0; j< dragEl.children.length; j++ ){
                DOM.setStyle(dragEl.children[j],'width',Math.round(dragEl.children[j].clientWidth * 0.75) + 'px');
                DOM.setStyle(dragEl.children[j],'height',Math.round(dragEl.children[j].clientHeight * 0.75) + 'px');
                if(j!= 0){
                    DOM.setStyle(dragEl.children[j],'margin-top',String(-dragEl.children[j].height-5)+'px');
                    DOM.setStyle(dragEl.children[j],'margin-left',String(j*3)+'px');
                    
                }
                
                DOM.setStyle(dragEl.children[j],'float','left');
                if (j > 4) break;

            }
            DOM.setStyle(dragEl, "width", DOM.getStyle(dragEl.firstChild, "width"));
            DOM.setStyle(dragEl, "height", DOM.getStyle(dragEl.firstChild, "height"));
            DOM.setStyle(dragEl, "border", '0px');
            
            DOM.setStyle(clickEl, "opacity", 0.4);
            if (CreatoorSN.mediaLibrary.currents.sec == 'collections') {
                var targets = DOM.getElementsByClassName('collection-list-item', 'li');
                for (i = 0; i < targets.length; i++) {
                    if (targets[i].style && targets[i].style.backgroundColor == 'silver') {
                        currentlySelected = targets[i].id;
                        break;
                    }
                }
            } else {
                if (CreatoorSN.categories.highlighted) {
                    currentCategory = CreatoorSN.categories.highlighted.data.category_id;
                }
            }

	    },

	    endDrag: function(e) {
            DOM.setStyle(this.getEl(), "opacity", 1);
            var selectedElements = DOM.getElementsByClassName('selected-media-item', 'li');
            for(var i = 0; i < selectedElements.length; i++) {
                DOM.setStyle(selectedElements[i], "opacity", 1);
            }
            if (CreatoorSN.mediaLibrary.currents.sec == 'library') {
                CreatoorSN.categories.setSelected(CreatoorSN.mediaLibrary.categoryTree.getNodeByProperty('category_id', currentCategory));
            } else {
                DOM.setStyle(_$(currentlySelected), "backgroundColor", "silver");
            }


           
	    },

	    onDragDrop: function(e, id) {
            var oDD;
	        if ("string" == typeof id) {
	            oDD = _$(id);

	        }
            var source = this.getEl();
            var items = source.id.replace('media', '');
            var selectedElements = DOM.getElementsByClassName('selected-media-item', 'li');
            for(var i = 0; i < selectedElements.length; i++) {
                if(source.id != selectedElements[i].id)
                    items += '+'+selectedElements[i].id.replace('media', '');
            }

            if( CreatoorSN.mediaLibrary.currents.sec == 'collections') {
                if (DOM.hasClass(oDD, 'collection-list-item')) {
                    CreatoorSN.mediaLibrary.addToCollection(id.replace('collection', ''),items);
                    DOM.setStyle(oDD, "backgroundColor", 'white');
                    DOM.removeClass(oDD.firstChild, 'open-folder');
                }
            } else {
                if (DOM.hasClass(oDD, 'ygtvcontent')) {
                    var node = CreatoorSN.mediaLibrary.categoryTree.getNodeByElement(oDD);
                    if (parseInt(node.data.category_id) == 1 || node.data.category_id == currentCategory) {
                        return;
                    }
                    CreatoorSN.categories.setSelected(CreatoorSN.mediaLibrary.categoryTree.getNodeByProperty('category_id', currentCategory));
                    CreatoorSN.mediaLibrary.setMediaCategory(node, items);
                }
            }

	    },

	    onDrag: function(e) {
            var targets = [];
            if (CreatoorSN.mediaLibrary.currents.sec == 'library') {
                CreatoorSN.categories.clearSelections(CreatoorSN.mediaLibrary.categoryTree);
            } else {
                targets = DOM.getElementsByClassName('collection-list-item', 'li');
                for ( var i = 0; i < targets.length; i++) {
                     DOM.setStyle(targets[i], "backgroundColor", 'white');
                     DOM.removeClass(targets[i].firstChild, 'open-folder');
                }
            }

        },

	    onDragOver: function(e, id) {
            var oDD;
	        if ("string" == typeof id) {
	            oDD = _$(id);
	        }
            if (CreatoorSN.mediaLibrary.currents.sec == 'collections') {
                if(DOM.hasClass(oDD,'collection-list-item') && id != 'showAll'){

                    DOM.setStyle(oDD, "backgroundColor", 'silver');
                    DOM.addClass(oDD.firstChild, 'open-folder');
                }
            } else {
                if (DOM.hasClass(oDD, 'ygtvcontent')) {
                    var node = CreatoorSN.mediaLibrary.categoryTree.getNodeByElement(oDD);
                    if (parseInt(node.data.category_id) != 1) {
                        CreatoorSN.categories.setSelected(node);
                    }
                }
            }
            
	    }
});

CreatoorSN.namespace('mediaLibrary');
CreatoorSN.mediaLibrary = {
	//upload and media library thumbnail size	
	thumbSize: 100,
	//number of uploaded files
	uploadedCount: 0,
	// maximum filename length (if it is longer you can see the whole name on hover)
	filenameLength: 14,
	//file type extnesion for upload
	fileTypes: {
        current: null,
		all: '*.jpg;*.JPG;*.gif;*.png;*.avi;*.mpeg;*.mpg;*.mp4;*.wmv;*.mov;*.qt;*.flv;',//'*.mp3;*.m4a',
		photos: '*.jpg;*.JPG;*.gif;*.png',
		videos: '*.avi;*.mpeg;*.mpg;*.mp4;*.wmv;*.mov;*.qt;*.flv'/*,
		audio: '*.mp3;*.m4a;',
		documents: '*.doc;*.pdf;*.xsl;'*/
	},
	//which section of library is loaded
	comboLibraryLoaded: {
		photos: false,
		videos: false,
		audio: false
	},
	//currently opened combo window
	currentlyOpenedCombo: null,
	// media categories
	comboCategories: null,
	// media categories in form of a collection
	comboCollections: null,
	// global data for photo tagging
	taggingData: {
		friends: null,
		containers: {},
		buttons: {},
		tagContainers: {},
		photoData: {},
		editMode: {},
		noteId: 1,
		emptyTagText: CreatoorSN.common.translate('add text here')
	},
    selectedElements : [],
    currentSlected: 0,
    currentType : 'photos',
    formWindow : null,
    editContents: {},
    paginator : null,
    collectionListpaginator: null,
    loadMediaList : true,
    categoryTree: null,
    awaitingResponse: false,
    captions: {
      library: {
        title: CreatoorSN.common.translate('Library')
      },
      collections: {
          title: ''

      }
    },
    historyInitialized: false,
    hintSize: 250,
    defaults: {},
    currents: {},
    sessId: null,
    uploadToCollection: true,
	// combo window media library pagination initialization
	pagination: function (containerId, total, rowsPerPage, paginationContainers, url, paginationMethod, postData, callback, page) {
		CreatoorSN.pagination.initialize(url, total, rowsPerPage, paginationContainers, containerId, null, null, page, callback, paginationMethod, postData, false);		
	},
	//clear all combo instance dependant properties
	clearCombo: function () {
		CreatoorSN.comboLibraryLoaded = {
			photos: false,
            videos: false,
            audio: false
		};
		CreatoorSN.mediaLibrary.currentlyOpenedCombo = null;
		CreatoorSN.mediaLibrary.swfu = null;
		CreatoorSN.mediaLibrary.comboCategories = null;
		CreatoorSN.mediaLibrary.comboCollections = null;
	},
	
	
	
	
	/**
	 * attching the media according to callback
	 * @param string mediaType (Photos, Videos, Audio, Documents)
	 * @params string mediaId (id hash of the media file)
	 * @param function callback (callback function for attaching media)
	 * @param object callbackParams (additional callback params) - optional 
	 */
	attachMedia : function (mediaType, mediaId, callback, callbackParams) {
	    if (!callbackParams) {
			callbackParams = {mediaId: mediaId, mediaType: mediaType};
		} else {
			callbackParams.mediaId = mediaId;
			callbackParams.mediaType = mediaType;
		}
		callback(callbackParams);
	},
	
	
	/**
	 * triggered when an upload finishes
	 * @param object response
	 * @param object progress
     * @param object swfu
	 */
	processUpload : function (response, progress, swfu) {
       
		var error = null;
        var postData = '';
        var date = new Date();
        if (response.success) {
            postData = 'fileData=' + YAHOO.lang.JSON.stringify(response.fileData);
        } else {
           
           error = {
                image: '/images/media-library/error.gif',
                message: response.message,
                file: {
                    name: response.fileName
                },
                time: date.getHours() + ':' + date.getMinutes() + ':' + date.getSeconds()
            };  
        }
        if (error) {
            if (swfu) {
                if (swfu.processed) {
                    swfu.processed--;
                }
                CreatoorSN.mediaLibrary.swfu.refreshErrors(swfu, error);
                if (swfu.errorCallback) {
                    swfu.errorCallback(swfu, error, swfu.errorParams);
                }
                return;
            } else {
                addImage(error.image, error.message);
                if (progress) {
                    progress.setError();
                    progress.setStatus(error.file.name + ': ' +error.message);
                    progress.toggleCancel(false);
                }
            }
            return;
        }
        if (progress) {
            progress.setStatus('<img src="/images/ajax-loader.gif" alt="loader"/> ' + CreatoorSN.common.translate('Processing file') + ' ' + response.fileData.fileName + '...');
        }
		//var postData = 'fileData=' + YAHOO.lang.JSON.stringify(fileData);
        if (CreatoorSN.mediaLibrary.currentlyOpenedCombo && CreatoorSN.mediaLibrary.currentlyOpenedCombo.categories) {
           
            var categorySelects = CreatoorSN.mediaLibrary.currentlyOpenedCombo.categories;
            for (var x in categorySelects) {
               
				var tmpCategory = categorySelects[x].domElement.options[categorySelects[x].domElement.selectedIndex].value;
                postData += '&' + x + '=' + categorySelects[x].domElement.options[categorySelects[x].domElement.selectedIndex].value;
				if (CreatoorSN.mediaLibrary.libraryCategories[x][tmpCategory]) {
					delete CreatoorSN.mediaLibrary.libraryCategories[x][tmpCategory];
				}				                
            } 
        } else {
       
            if(CreatoorSN.mediaLibrary.historyInitialized){
                if(CreatoorSN.mediaLibrary.currents.coll && CreatoorSN.mediaLibrary.uploadToCollection) {
                    postData += '&collection='+CreatoorSN.mediaLibrary.currents.coll;
                }
                if (CreatoorSN.mediaLibrary.currents.cat && parseInt(CreatoorSN.mediaLibrary.currents.cat) != 1) {
                    postData += '&' + CreatoorSN.mediaLibrary.currents.type + '=' + CreatoorSN.mediaLibrary.currents.cat;
                }
            }
        }

        
		var oCallback = {                
            success : function (o) {
                error = null;
                if (o.responseText && YAHOO.lang.JSON.isSafe(o.responseText)) {
					var response = YAHOO.lang.JSON.parse(o.responseText);
                 
                    if (response.success) {
                        if (swfu && swfu.successCallback) {
                            swfu.successCallback(response, progress, swfu, swfu.successParams);
                            return;
                        }
                        addImage(response.thumbUrl, response.fileName, response.identifier, response.mediaType, response.thumbDimensions);
						var cbParams = {};
                        for (x in response) {
                            cbParams[x] = response[x];
                            
                        }
                        if(CreatoorSN.mediaLibrary.currentlyOpenedCombo){
                            var section = CreatoorSN.mediaLibrary.currentlyOpenedCombo.section;
                            var name = CreatoorSN.mediaLibrary.currentlyOpenedCombo.name;
                            if (CreatoorSN.mediaLibrary.swfu[section + name].customSettings.callbackParams) {
                                for (x in CreatoorSN.mediaLibrary.swfu[section + name].customSettings.callbackParams) {
                                    cbParams[x] = CreatoorSN.mediaLibrary.swfu[section + name].customSettings.callbackParams[x];
                                }
                            }
                            CreatoorSN.mediaLibrary.swfu[section + name].customSettings.callback(cbParams);
                            if (progress) {
                                progress.setStatus(CreatoorSN.common.translate("Processing successful"));
                                progress.toggleCancel(false);
                            }
                        }
					} else {                        
                        error = {
                            message: response.message,
                            image: '/images/media-library/error.gif',
                            file: {
                                name: response.fileName
                            },
                            time: date.getHours() + ':' + date.getMinutes() + ':' + date.getSeconds()
                        };
					}
				} else {
                       
                   error = {
                       message: CreatoorSN.common.translate('Unknown error'),
                       image: '/images/media-library/error.gif',
                       file: {
                           name: response.fileName
                       },
                       time: date.getHours() + ':' + date.getMinutes() + ':' + date.getSeconds()
                   };
                       
				}
                if (error) {
                    if (swfu) {
                        if (swfu.procesed) {
                            swfu.procesed--;
                        }
                        CreatoorSN.mediaLibrary.swfu.refreshErrors(swfu, error);
                        if (swfu.errorCallback) {
                            swfu.errorCallback(swfu, error, swfu.errorParams);
                        }
                    } else {
                        addImage(error.image, error.message);
                        if (progress) {
                            progress.setError();
                            progress.setStatus(error.file.name + ': ' +error.message);
                            progress.toggleCancel(false);
                        }
                    }
                    
                }
            },
            
            failure : function (o) {
                var date = new Date();
                error = {
                    image: "/images/media-library/error.gif",
                    message: CreatoorSN.common.tranaslate('Connection error'),
                    file: {
                        name: response.fileName
                    },
                    time: date.getHours() + ':' + date.getMinutes() + ':' + date.getSeconds()
                };
                if (swfu) {
                    CreatoorSN.mediaLibrary.swfu.refreshErrors(swfu, error);
                    if (swfu.errorCallback) {
                        swfu.errorCallback(swfu, error, swfu.errorParams);
                    }
                } else {
                    addImage(error.image, error.message);
                    if (progress) {
                        progress.setError();
                        progress.setStatus(error.file.name + ': ' +error.message);
                        progress.toggleCancel(false);
                    }
                }
            }
            
        };
		
        YAHOO.util.Connect.asyncRequest(
	        "POST",
	        "/members/upload/ml-process-upload/",
	        oCallback,
			postData
        );
	},
	/**
	 * show combo media window
	 * @param {Object} config
	 * config = {
     *     {string}   section                 //window section required
	 *     {string}   name                    //window name required
	 *     {string}   attachTo                //name of the media library callback function required
	 *     {function} callback                //upload callback function reuired     
	 *     {Object}   atParams                //additional media library callback parameters optional
	 *     {Object}   cbParams                //additional upload callback parameters optional
	 *     {string}   resource                //resource name optional
	 *     {Object}   position{int top, int left}  //position of the window optional,
	 *     {array}    fileTypes               //allowed file types['photos', 'videos', 'audio', 'documents'] optional default CreatoorSN.mediaLibrary.fileTypes.all
	 * }
	 */
    showCombo : function (config) {
		try {
			if (config && config.section && config.name && config.attachTo && config.callback) {
			    
				//check required config properties
				if (typeof(config.section) != 'string') {
					throw {'message': 'wrong type for config property section. Should be string (' + typeof(config.section) + ' given)'};
				}
				if (typeof(config.name) != 'string') {
                    throw {'message': 'wrong type for config property name. Should be string (' + typeof(config.name) + ' given)'};
                }
				if (typeof(config.attachTo) != 'string') {
                    throw {'message': 'wrong type for config property attachTo. Should be string (' + typeof(config.attachTo) + ' given)'};
                }
				if (typeof(config.callback) != 'function') {
                    throw {'message': 'wrong type for config property callback. Should be function (' + typeof(config.callback) + ' given)'};
                }
               
				if (creaDomWindowManager.getWindow(config.name, config.section)) {
					return;
				}
				var window = creaDomWindowManager.getFromCache(config.name, config.section);
				if (window) {
					if (CreatoorSN.mediaLibrary.currentlyOpenedCombo) {
						CreatoorSN.mediaLibrary.currentlyOpenedCombo.close();
					}
					CreatoorSN.mediaLibrary.currentlyOpenedCombo = window;
                    CreatoorSN.mediaLibrary.currentlyOpenedCombo.attachTo = config.attachTo;
					window.open();
					if (CreatoorSN.common.browser.ie) {
						_$('uploadButtons' + config.name + config.section).style.display = 'block';
					}
					return;
				}
				if (CreatoorSN.mediaLibrary.currentlyOpenedCombo) {
					CreatoorSN.mediaLibrary.currentlyOpenedCombo.close();
					CreatoorSN.mediaLibrary.clearCombo();
				}
				//upload/media library toggle buttons
				var uploadButton = new creaDomInput({
                    type: 'button',
                    name: 'upload' + config.section + config.name,
                    id: 'upload' + config.section + config.name,
                    className: 'upload-medialib-toggle active',
                    value: CreatoorSN.common.translate('upload')
                });
                var mediaLibButton = new creaDomInput({
                    type: 'button',
                    name: 'mediaLib' + config.section + config.name,
                    id: 'mediaLib' + config.section + config.name,
                    className: 'upload-medialib-toggle',
                    value: CreatoorSN.common.translate('media library')
                });
                var toggleDiv = new creaDomObject({
                    tag: 'div',
                    className: 'um-toggle-container',
                    elements: [uploadButton, mediaLibButton]
                });
				
				//upload				
				
				
				
				//list of uploaded files
				var listCaption = new creaDomObject({
					tag: 'a',
					className: 'left',
					href: '#',
					html: CreatoorSN.common.translate('List of uploaded files')
				});
				
				var clearListBtn = new creaDomInput({
					type: 'button',
					className: 'upload-medialib-toggle right',
					name: 'clearList' + config.section + config.name,
					id: 'clearList' + config.section + config.name,
					value: CreatoorSN.common.translate('Clear'),
					style: {
						marginRight: '0px',
						marginBottom: '3px'
					}
				});
				
				var cssClearList = new creaDomObject({
					tag: 'div',
					className: 'clear'
				});
				var thumbaniUlCaption = new creaDomObject({
					tag: 'div',
					className: 'thumbnail-list-caption',
					elements: [listCaption, clearListBtn, cssClearList]
				});
				var thumbnailUl = new creaDomObject({
					tag: 'ul',
					className: 'dd-list-horizontal',
					wrapper: {
	                    tag: 'div',
	                    params: {className: 'combo-upload-thumbnails', style:{height: '0px'}}
	                }
				});
				listCaption.domElement.onclick = function () {
                    CreatoorSN.mediaLibrary.toggleComboList(thumbnailUl.wrapper);
					return false;
                };
				clearListBtn.domElement.onclick = function() {
                    thumbnailUl.domElement.innerHTML = '';
                };
				
				var progressText = new creaDomObject({
					tag: 'div',
					className: 'progress-text left',
					html: CreatoorSN.common.translate('ready...')
				});
				
				var progressCancel = new creaDomInput({
					type: 'button',
					className: 'upload-cancel right',
					style: {visibility: 'hidden'}
				});
				
				var progressClear = new creaDomObject({
					tag: 'div',
					className: 'clear'
				});
				
				var progressBar = new creaDomObject({
					tag: 'div',
					className: 'progress-bar',
					html: CreatoorSN.common.translate('Click on browse button to select file/s to upload...')
				});
				
				var progressBarContainer = new creaDomObject({
					tag: 'div',
					className: 'progress-bar-container',
					elements: [progressBar]
				});
				
				//progress div
				var progressDiv = new creaDomObject({
					tag: 'div',
					className: 'upload-progress',
					id: 'fileProgress' + config.section + config.name,
					elements: [progressText, progressCancel, progressClear, progressBarContainer]
				});
				
				//upload buttons
				var closeButton = new creaDomObject(
		            {
		                tag: 'input',
		                type: 'button',
		                value: CreatoorSN.common.translate('close'),
		                className: 'submitBotton right',
		                style: {
		                    verticalAlign: 'top',
		                    marginTop: '0px'
		                }
		            }
		        );
		        closeButton.domElement.onclick = function() {
		            window.close();
		        };		        
		        var flashButtonPH = new creaDomObject(
		            {
		                tag: 'div',
		                id: 'ubp' + config.section + config.name,
		                style: {
		                    marginTop: '5px'
		                },
						wrapper: {
							tag: 'div',
							params: {className: 'left'}
						}               
		            }
		        );
				var buttonsClear = new creaDomObject({
					tag: 'div',
					className: 'clear'
				});
				var buttonDiv = new creaDomObject(
                    {
                        tag: 'div',
                        id: 'uploadButtons' + config.name + config.section,
                        className: 'upload-buttons',
						elements: [flashButtonPH, closeButton, buttonsClear]
                    }
                );
				
				var uploadContainer = new creaDomObject({
					tag: 'div',
					id: 'upload' + config.section + config.name,
					elements: [thumbaniUlCaption, thumbnailUl, progressDiv, buttonDiv]
				});
				
				//swfu setup
				var allowedTypes = CreatoorSN.mediaLibrary.fileTypes.all;
				var categoriesTypes = ['photos', 'videos'];//, 'audio', 'documents'];
                if (config.fileTypes && is_array(config.fileTypes) && config.fileTypes.length) {
                    allowedTypes = '';
					categoriesTypes = [];
                    for (var i = 0; i < config.fileTypes.length; i++) {
                        if (CreatoorSN.mediaLibrary.fileTypes[config.fileTypes[i]]) {
                            categoriesTypes.push(config.fileTypes[i]);
							if (allowedTypes) {
                                allowedTypes += ';';
                            }
                            allowedTypes += CreatoorSN.mediaLibrary.fileTypes[config.fileTypes[i]];
                        }
                    }
                }
				allowedTypes = allowedTypes ? allowedTypes : CreatoorSN.mediaLibrary.fileTypes.all;
				categoriesTypes = categoriesTypes.length ? categoriesTypes : ['photos', 'videos'];
                var swfuConfig = {
                	fileSettings: {
                        fileSizeLimit: '130 MB',
                        fileTypes: allowedTypes
                    },
                    callback: config.callback,
                    postParams: {'PHPSESSID': _$('sessId').value},
					button:{
                        placeholder: 'ubp' + config.section + config.name
                    },
					customSettings: {
                        thumbnailTarget: thumbnailUl.domElement,
                        callback: config.callback,
                        callbackParams: config.cbParams,
                        progress: {bar: progressBar.domElement, cancel: progressCancel.domElement, text: progressText.domElement},
                        section: config.section,
                        name: config.name 
                    }
                    
                };
				
				//media library
				var typeSelect = new creaDomSelect({
					name: 'libraryTypes' + config.section + config.name,
					id: 'libraryTypes' + config.section + config.name,
					label: {
						tag: 'div',
						params: {
							className: 'library-label',
							html: CreatoorSN.common.translate('Media type')
						}
					},
					wrapper: {
						tag: 'div',
						params: {className: 'left'}
					}
				});
				for (x in categoriesTypes) {
					var type = create('option', {text: CreatoorSN.common.translate(categoriesTypes[x]), value: categoriesTypes[x]});
					typeSelect.addOption(type);
				}
				var libraryCategories = new creaDomSelect({
					name: 'libraryCategories' + config.section + config.name,
					id: 'libraryCategories' + config.section + config.name,
					label: {
						tag: 'div',
						params: {
							className: 'library-label',
							html: CreatoorSN.common.translate('Media categories')
						}
					}
				});
				
                var cContainer = new creaDomObject({
                    tag: 'div',
                    className: 'left',
                    style: {marginLeft: '10px'},
                    elements: [libraryCategories]
                });
				
				var libSelClear = new creaDomObject({
					tag: 'div',
					className: 'clear'
				});
				var librarySelects = new creaDomObject({
					tag: 'div',
					className: 'upload-categories',
					elements: [typeSelect, cContainer, libSelClear]
				});
				
				
				
				var libraryThumbs = new creaDomObject({
					tag: 'div',
					className: 'combo-library-thumbs'
				});
				
				var libClose = new creaDomInput({
					type: 'button',
					value: CreatoorSN.common.translate('close'),
                    className: 'submitBotton none',
					wrapper: {tag: 'div', params: {style: {textAlign: 'right'}}}
				});
				libClose.domElement.onclick = function () {
					window.close();
				};
				libraryCategories.domElement.onchange = function () {
                    CreatoorSN.mediaLibrary.loadComboCategory(libraryThumbs, config.attachTo, config.atParams);
                };
				typeSelect.domElement.onchange = function () {
					config.libraryThumbs = libraryThumbs;
                    CreatoorSN.mediaLibrary.populateLibraryCategories(typeSelect, libraryCategories, config);
                };
				
				var libraryContainer = new creaDomObject({
					tag: 'div',
					className: 'media-library-container',
					id: 'mediaLibrary' + config.section + config.name,
					style: {
						display: 'none'
					},
					elements: [librarySelects, libraryThumbs, libClose]
				});
				
				
				
				//main window
				var winPosition = config.position ? config.position : null;
				window = new creaDomWindow({
					section: config.section,
					name: config.name,
					width: 540,
					cache: true,
					position: winPosition,
					header: {title: CreatoorSN.common.translate('Attach / insert media')},
					content: {
						elements: [toggleDiv, uploadContainer, libraryContainer]
					}
				});
				window.onclose(function(){
					CreatoorSN.mediaLibrary.currentlyOpenedCombo = null;
					if (CreatoorSN.common.browser.ie) {
						buttonDiv.domElement.style.display = 'none';
					}
				});
				window.open();
                if (!CreatoorSN.mediaLibrary.swfu) {
                    CreatoorSN.mediaLibrary.swfu = {};
                }
				CreatoorSN.mediaLibrary.swfu[config.section + config.name] = setSwfu(swfuConfig);
				CreatoorSN.mediaLibrary.currentlyOpenedCombo = window;
				CreatoorSN.mediaLibrary.currentlyOpenedCombo.attachTo = config.attachTo;
				CreatoorSN.mediaLibrary.libraryCategories = {};
				for (x in categoriesTypes) {
					CreatoorSN.mediaLibrary.libraryCategories[categoriesTypes[x]] = {};
				}
				uploadButton.domElement.onclick = function () {
					uploadContainer.domElement.style.display = 'block';
					this.className = 'upload-medialib-toggle active';
					libraryContainer.domElement.style.display = 'none';
					mediaLibButton.domElement.className = 'upload-medialib-toggle';
					
				};
				mediaLibButton.domElement.onclick = function () {
					uploadContainer.domElement.style.display = 'none';
                    uploadButton.domElement.className = 'upload-medialib-toggle';
                    libraryContainer.domElement.style.display = 'block';
                    this.className = 'upload-medialib-toggle active';
                    config.libraryThumbs = libraryThumbs;
					CreatoorSN.mediaLibrary.populateLibraryCategories(typeSelect, libraryCategories, config);
					
				};
				return window;
			} else {
				throw {'message': 'required properties (section, name, attachto, callback) missing in config object or no config object passed'};
			}
		} catch (e) {
			//TODO handle exceptions
		}
	},
	/**
	 * loads media files of a particular category
	 * @param object target (creaDomObject of the element where the thumbs should be rendered into)
	 * @param string attachTo (name of callback functions)
	 * @param object atParams (additional parameters for callback) - optional
	 */ 
	loadComboCategory : function (target, attachTo, atParams) {
		if (CreatoorSN.mediaLibrary.currentlyOpenedCombo) {
			var section = CreatoorSN.mediaLibrary.currentlyOpenedCombo.section;
			var name = CreatoorSN.mediaLibrary.currentlyOpenedCombo.name;
			var ts = _$('libraryTypes' + section + name);
            var currentType = ts.options[ts.selectedIndex].value;
			var cs = _$('libraryCategories' + section + name);
			var currentCategory = cs.options[cs.selectedIndex].value;
			if (CreatoorSN.mediaLibrary.libraryCategories[section + name] &&
                CreatoorSN.mediaLibrary.libraryCategories[section + name][currentType] &&
                CreatoorSN.mediaLibrary.libraryCategories[section + name][currentType][currentCategory]) {
				var curr = CreatoorSN.mediaLibrary.libraryCategories[section + name][currentType][currentCategory];
				target.domElement.innerHTML = curr.html;
				var callback = function (state, response) {
					curr.page = state.page;
					curr.html = CreatoorSN.mediaLibrary.libraryCategories[section + name][currentType][currentCategory].html;
				};
				CreatoorSN.mediaLibrary.pagination(curr.targetId, curr.total, curr.rowsPerPage, curr.paginationContainers, curr.paginationUrl, curr.paginationMethod, curr.postData, callback, curr.page); 
			} else {
				target.domElement.innerHTML = '<img src="/images/ajax-loader.gif" alt="nalagam..." style="margin-top: 100px; margin-left: 230px;" />';
	            var postData = "mediaType=" + currentType + "&category=" + currentCategory + "&attachTo=" + attachTo;
				var paginationMethod = null;
	            if (atParams) {
	                postData += '&atParams=' + YAHOO.lang.JSON.stringify(atParams);
	                paginationMethod = 'POST';
	            }
				var oCallback = {
	                success: function(o)
					{
						if (YAHOO.lang.JSON.isSafe(o.responseText)) {
							var response = YAHOO.lang.JSON.parse(o.responseText);
							target.domElement.innerHTML = '';
							if (response.success) {
								var paginationTop = new creaDomObject({
									tag: 'div',
									id: currentType + 'comboPaginationTop' + section + name,
									className: 'pagination'
								});
								var categoryContent = new creaDomObject({
									tag: 'div',
									html: response.html,
									id: currentType + 'categoryContent' + section + name
								});
								var paginationBottom = new creaDomObject({
									tag: 'div',
									id: currentType + 'comboPaginationBottom' + section + name,
									className: 'pagination'
								});
								
								paginationTop.addTo(target);
								categoryContent.addTo(target);
								paginationBottom.addTo(target);
								if (paginationMethod) {
									var paginationUrl = "/members/ajax/load-media-category/";
								} else {
									var paginationUrl = "/members/ajax/load-media-category/?" + postData;
									postData = null;
								}
                                if (!CreatoorSN.mediaLibrary.libraryCategories[section + name]) {
                                    CreatoorSN.mediaLibrary.libraryCategories[section + name] = {};
                                    CreatoorSN.mediaLibrary.libraryCategories[section + name][currentType] = {};
                                } else if (!CreatoorSN.mediaLibrary.libraryCategories[section + name][currentType]) {
                                    CreatoorSN.mediaLibrary.libraryCategories[section + name][currentType] = {};
                                    CreatoorSN.mediaLibrary.libraryCategories[section + name][currentType][currentCategory] = {};
                                }
								var callback = function (state, response) {
									CreatoorSN.mediaLibrary.libraryCategories[section + name][currentType][currentCategory].page = state.page;
									CreatoorSN.mediaLibrary.libraryCategories[section + name][currentType][currentCategory].html = target.domElement.innerHTML;
								};
								var page = 1;
								CreatoorSN.mediaLibrary.pagination(currentType + 'categoryContent' + section + name, response.total, response.rowsPerPage, [currentType + 'comboPaginationTop' + section + name, currentType + 'comboPaginationBottom' + section + name], paginationUrl, paginationMethod, postData, callback, page);
								CreatoorSN.mediaLibrary.libraryCategories[section + name][currentType][currentCategory] = {
								    html: target.domElement.innerHTML,
									targetId: currentType + 'categoryContent' + section + name,
									paginationContainers: [currentType + 'comboPaginationTop' + section + name, currentType + 'comboPaginationBottom' + section + name],
									page: 1,
									total: response.total,
									rowsPerPage: response.rowsPerPage,
									paginationMethod: paginationMethod,									
									paginationUrl: paginationUrl,
									postData: postData
								};
								
							} else {
								if (response.noAuth) {
								
									CreatoorSN.mediaLibrary.currentlyOpenedCombo.close();
									var login = new noAuth(function(noAuthObj)
									{
										CreatoorSN.mediaLibrary.showCompact(null, null, CreatoorSN.mediaLibrary.config[params.section][params.name]);
									}, response.message);
									
									creaDomWindowManager.removeFromCache(name, section);
									return;
								}
								target.domElement.innerHTML = response.message;
							}
						} else {
					       target.domElement.innerHTML = CreatoorSN.common.translate('Oops an error occured while executing a script. Please try again later') + '.';
						}
					},
	                
	                failure: function(o)
	                {
	                    target.domElement.innerHTML = o.statusText;
	                },
	                timeout: CreatoorSN.common.iAjaxTimeout
	            
	            };
	           
	            YAHOO.util.Connect.asyncRequest("POST", "/members/ajax/load-media-category", oCallback, postData);
			}
		}
	},
	/**
	 * animate list of uploaded file
	 * @param object listEl (HTML object that contains the list)
	 */
	toggleComboList: function (listEl) {
	
		var from = listEl.clientHeight;
	
		var to = 0;
		if (from == 20) {
			to = 220;
		}
	
		var showList = new YAHOO.util.Anim(listEl, {
            height: {
                from: from,
                to: to 
            } 
        }, 1, YAHOO.util.Easing.easeOut);
        showList.duration = 0.3;
		showList.animate();
	},
	/**
	 * loads user categories if not already loaded
	 * @param object categoriesPlaceHolder (HTML object of placeholder for categories select box)
	 */
	getUserCategories: function(categoriesTypes, callback) {
		
		CreatoorSN.mediaLibrary.currentlyOpenedCombo.disable();
		var oCallback = {
			success: function (o) {
				if (CreatoorSN.mediaLibrary.currentlyOpenedCombo) {
					CreatoorSN.mediaLibrary.currentlyOpenedCombo.enable();
				}
				if (YAHOO.lang.JSON.isSafe(o.responseText)) {
					var response = YAHOO.lang.JSON.parse(o.responseText);
					if (response.success) {
						CreatoorSN.mediaLibrary.comboCategories = response.categories;
						CreatoorSN.mediaLibrary.comboCollections = response.collections;
						if (callback && typeof(callback) == 'function') {
                            callback();
                        }
					} else if (response.noAuth) {
						var login = new noAuth(function (noAuthObj){
                            CreatoorSN.mediaLibrary.getUserCategories(categoriesTypes);
                         }, response.message);
					} else {
						CreatoorSN.mediaLibrary.currentlyOpenedCombo.cache = false;
                        CreatoorSN.mediaLibrary.currentlyOpenedCombo.close();
                        CreatoorSN.common.showErrorAlert(response.message);
					}
				} else {
					if (CreatoorSN.mediaLibrary.currentlyOpenedCombo) {
						CreatoorSN.mediaLibrary.currentlyOpenedCombo.cache = false;
						CreatoorSN.mediaLibrary.currentlyOpenedCombo.close();
						CreatoorSN.common.showErrorAlert(CreatoorSN.common.translate('Oops an error occured while executing a script. Please try again later') + '.');
					}
                    
				}
			},
			
			failure: function (o) {
				if (CreatoorSN.mediaLibrary.currentlyOpenedCombo) {
                    CreatoorSN.mediaLibrary.currentlyOpenedCombo.cache = false;
                    CreatoorSN.mediaLibrary.currentlyOpenedCombo.close();
                    CreatoorSN.common.showErrorAlert(o.statusText);
                }
			},
			
			timeout: CreatoorSN.common.iAjaxTimeout
			
		};
		var request = YAHOO.util.Connect.asyncRequest(
            "GET",
            "/members/ajax/get-user-media-categories/?types=" + encodeURIComponent(YAHOO.lang.JSON.stringify(categoriesTypes)),
            oCallback
        );
		CreatoorSN.mediaLibrary.currentlyOpenedCombo.addOnclose(function(){
			if (request && typeof(request.abort) == 'function') {
			 request.abort();
		   }
		});
	},
    /**
     * renders previously loaded categories
     * @param object categoriesPH (HTML object in which categories select box/es should be loaded)
     */    
    renderUploadCategories: function (categoriesPH) {
        if (CreatoorSN.mediaLibrary.comboCollections && CreatoorSN.mediaLibrary.currentlyOpenedCombo) {
			var cConfig = {};
			var categorySelects = {};
			CreatoorSN.mediaLibrary.currentlyOpenedCombo.categories = {};
			for (x in CreatoorSN.mediaLibrary.comboCollections) {
				var categoryCaption = new creaDomObject({
					tag: 'div',
					className: 'upload-category-caption',
					html: CreatoorSN.common.translate(x)
				});
				categorySelects[x] = new creaDomSelect({
					name: x + CreatoorSN.mediaLibrary.currentlyOpenedCombo.section + CreatoorSN.mediaLibrary.currentlyOpenedCombo.name,
					id: x + CreatoorSN.mediaLibrary.currentlyOpenedCombo.section + CreatoorSN.mediaLibrary.currentlyOpenedCombo.name
				});
				var option = create('option', {text: CreatoorSN.common.translate('uncategorized'), value: 0});
				categorySelects[x].addOption(option);
				var offsetString = '-';
				for (var i = 0; i < CreatoorSN.mediaLibrary.comboCollections[x].length; i++) {
					var category = CreatoorSN.mediaLibrary.comboCollections[x][i];
					var option = create('option', {text: str_repeat('--', (category.depth - 1)) + category.categoryName, value: category.category_id});
					categorySelects[x].addOption(option);
				}
                //var option = create('option', {text: CreatoorSN.contributions.contributionTypes[i], value: CreatoorSN.contributions.contributionTypes[i], selected: selected});				
				var addCategoryBtn = new creaDomInput({
					type: 'button',
					className: 'upload-medialib-toggle',
					name: 'add' + x + 'Category' + CreatoorSN.mediaLibrary.currentlyOpenedCombo.section + CreatoorSN.mediaLibrary.currentlyOpenedCombo.name,
					id: 'add' + x + 'Category' + CreatoorSN.mediaLibrary.currentlyOpenedCombo.section + CreatoorSN.mediaLibrary.currentlyOpenedCombo.name,
					value: CreatoorSN.common.translate('Add / edit categories'),
					wrapper: {
						tag: 'div',
						params: {className: 'add-upload-category'}
					},
					style: {
						width: '140px'
					}
				});
				var categories = CreatoorSN.mediaLibrary.comboCategories[x];
				cConfig[x] = {
					name: x + 'Categories',
                    section: CreatoorSN.mediaLibrary.currentlyOpenedCombo.section,
					resource: x,
					categories: categories,
					callback:  {
						fn: CreatoorSN.mediaLibrary.refreshCategories,
						params: {select: categorySelects[x], type: x}
					}
				};
				
			
				setOnClick({func: CreatoorSN.categories.editCategories, params: cConfig[x], obj: addCategoryBtn.domElement});
								
				var container = new creaDomObject({
					tag: 'div',
					className: 'upload-category left',
					elements: [categoryCaption, categorySelects[x], addCategoryBtn]
				});
				container.addTo(categoriesPH);
				CreatoorSN.mediaLibrary.currentlyOpenedCombo.categories[x] = categorySelects[x];
				setOnChange({obj: categorySelects[x].domElement, params: {select: categorySelects[x].domElement, type: x}, func: CreatoorSN.mediaLibrary.setCurrentCategory});
			}
			var clear = new creaDomObject({
				tag: 'div',
				className: 'clear'
			});
			clear.addTo(categoriesPH);
		}
    },
	/**
	 * sets the current category
	 * @param object params {type, select}
	 */
	setCurrentCategory: function (params) {
		for (var i = 0; i < CreatoorSN.mediaLibrary.comboCollections[params.type].length; i++) {
            if (params.select.options[params.select.selectedIndex].value == CreatoorSN.mediaLibrary.comboCollections[params.type][i].category_id) {
                CreatoorSN.mediaLibrary.comboCollections[params.type][i].selected = true;
            } else {
                CreatoorSN.mediaLibrary.comboCollections[params.type][i].selected = false;
            }
        } 
	},
	/**
	 * refresh categories - called after categories manipulation
	 * @param object categories {collection: [], categories: []}
	 * @param object param {type, select}
	 */
	refreshCategories : function (categories, params, allOption) {
		var categorySelect = params.select;
		categorySelect.clearOptions();
		if (allOption) {
			var _allOption = create('option', {text: CreatoorSN.common.translate('all'), value: 'all'});
			categorySelect.addOption(_allOption);
		}
		var option = create('option', {text: CreatoorSN.common.translate('uncategorized'), value: 0});
		categorySelect.addOption(option);
		var offsetString = '-';
		for (var i = 0; i < categories.collection.length; i++) {
			var option = create('option', {text: str_repeat('--', (categories.collection[i].depth - 1)) + categories.collection[i].categoryName, value: categories.collection[i].category_id});
            if (categories.collection[i].selected) {
				option.selected = true;
			}
			categorySelect.addOption(option);
		}
		CreatoorSN.mediaLibrary.comboCollections[params.type] = categories.collection;
		
	},
	/**
	 * populates library categories from categoris that were previosly loaded
	 * @param object typeSelect select box object for selecting type of media
	 * @params object categoriesSelect select box object for selectiong media type categories 
	 */
	populateLibraryCategories : function (typeSelect, categoriesSelect, config) {
		var currentType = typeSelect.domElement.options[typeSelect.domElement.selectedIndex].value;
        if (!CreatoorSN.mediaLibrary.comboCollections) {
            CreatoorSN.mediaLibrary.getUserCategories(currentType, function(){CreatoorSN.mediaLibrary.populateLibraryCategories(typeSelect, categoriesSelect, config)});
            return;
        }
        if (!categoriesSelect.domElement.options.length) {
		
            var allOption = create('option', {text: CreatoorSN.common.translate('all'), value: 'all'});
            var uncategorizedOption = create('option', {text: '--' + CreatoorSN.common.translate('uncategorized'), value: 0});
            categoriesSelect.addOption(allOption);
            categoriesSelect.addOption(uncategorizedOption);
            var categories = CreatoorSN.mediaLibrary.comboCollections;
            for (var i = 0; i < categories.length; i++) {
                var option = create('option', {text: str_repeat('--', parseInt(categories[i].depth)) + categories[i].categoryName, value: categories[i].category_id});
                if (categories[i].selected) {
                    option.selected = true;
                }
                categoriesSelect.addOption(option);
            }
        }
        CreatoorSN.mediaLibrary.loadComboCategory(config.libraryThumbs, config.attachTo, config.atParams);
	},
	
	initTagging : function (config, photoData) {
        if (CreatoorSN.mediaLibrary.currentType == 'photos') {
            if (config && typeof (config) == 'object') {
                for (var x in config) {
                    CreatoorSN.mediaLibrary.taggingData[x] = config[x];
                }
            }
            CreatoorSN.mediaLibrary.taggingData.photoData[photoData.identifier] = photoData;
            CreatoorSN.mediaLibrary.setTaggingContainer(photoData.identifier);
            if (photoData.allowTag) {
                CreatoorSN.mediaLibrary.setTagButton(photoData);
            }
            if (photoData.annotations) {
                CreatoorSN.mediaLibrary.setTagsContainer(photoData);
                CreatoorSN.mediaLibrary.showTags(photoData);
            }
            
            CreatoorSN.mediaLibrary.taggingData.editMode[photoData.identifier] = false;
        }
	},
	
	setTaggingContainer : function (photoId) {
        CreatoorSN.mediaLibrary.taggingData.containers[photoId] = new PhotoNoteContainer(_$('photoContainer' + photoId));
	},
	
	setTagsContainer : function (photoData) {
        if (!_$('tagsContainer' + photoData.identifier)) {
            var tc = new creaDomObject({
                tag: 'div',
                id: 'tagsContainer' + photoData.identifier,
                className: 'photo-tags-container',
                style: {
                    width: photoData.width + 'px'
                }
            });
            CreatoorSN.mediaLibrary.taggingData.tagContainers[photoData.identifier] = tc;
            addAfter(tc, CreatoorSN.mediaLibrary.taggingData.containers[photoData.identifier].element);
        }
	},
	
	setTagButton: function (photoData) {
        
		removeElement('addTag' + photoData.identifier);
        var btn = new creaDomInput({
            type: 'button',
            value: CreatoorSN.common.translate('Add tag'),
            wrapper: {
               tag: 'div',
               params: {
                   className: 'photo-tags-btn-container',
                   id: 'addTag' + photoData.identifier,
                   style: {
                       width: photoData.width + 'px'
                   }
               }
            }
        });


        CreatoorSN.mediaLibrary.taggingData.buttons[photoData.identifier] = btn;
        CreatoorSN.mediaLibrary.setTagsContainer(photoData);
        addAfter(btn, 'tagsContainer' + photoData.identifier);
        btn.domElement.onclick = function () {CreatoorSN.mediaLibrary.newTag(photoData.identifier);};
		
        
	},
	
	setTaggingAC : function (tag) {
		if (CreatoorSN.mediaLibrary.taggingData.friends && CreatoorSN.mediaLibrary.taggingData.friends.length) {
			var ds = new YAHOO.util.LocalDataSource(CreatoorSN.mediaLibrary.taggingData.friends);
			ds.responseSchema = {fields : ['screenName', 'token', 'urlIdentifier']};
			var ac = new YAHOO.widget.AutoComplete(tag.gui.TextBox, tag.gui.TextBoxACC, ds);
			ac.useShadow = true;
			ac.aminHoriz = false;
			ac.animVert = false;
			ac.allowBrowserAutocomplete = false;
			ac.itemSelectEvent.subscribe(function(oSelf, elItem) {
				tag.tagged_id = elItem[2][1];
				tag.taggedUrl = elItem[2][2];
			});
			ac.unmatchedItemSelectEvent.subscribe(function (oSelf, sSelection){
				if (tag.tagged_id) {					
					tag.tagged_id = tag.taggedUrl = null;
				}
			});
			return {
				oDS: ds,
				oAc: ac
			};
		}
	},
	
	newTag : function (photoId) {
		
		if (!CreatoorSN.mediaLibrary.taggingData.editMode[photoId]) {
            CreatoorSN.mediaLibrary.setTaggingContainer(photoId);
			var newNote = new PhotoNote(CreatoorSN.mediaLibrary.taggingData.emptyTagText, -1, new PhotoNoteRect(10, 10, 50, 50), {editable: true, photoId: photoId});
			newNote.onsave = function (note) {CreatoorSN.mediaLibrary.saveTag(note);};
			newNote.ondelete = function (note) {CreatoorSN.mediaLibrary.removeTag(note);};
			newNote.oncancel = function (note) {
                CreatoorSN.mediaLibrary.taggingData.editMode[note.photoId] = false;                
            };
			CreatoorSN.mediaLibrary.taggingData.containers[photoId].AddNote(newNote);
			newNote.Select();
			CreatoorSN.mediaLibrary.setTaggingAC(newNote);
			CreatoorSN.mediaLibrary.taggingData.editMode[photoId] = true;
		}
	},
	
	saveTag : function (tag) {
		
		var btnObj = CreatoorSN.mediaLibrary.taggingData.buttons[tag.photoId];
		var _newTagText = trim(tag.gui.TextBox.value);
		if (!_newTagText || _newTagText == CreatoorSN.mediaLibrary.taggingData.emptyTagText) {
			return;
		}
		if (tag.text == tag.gui.TextBox.value) {
			if (tag.oldRect &&
				tag.oldRect.height == tag.rect.height &&
				tag.oldRect.width == tag.rect.width &&
				tag.oldRect.top == tag.rect.top &&
				tag.oldRect.left == tag.rect.left) {
				tag.Save();
				CreatoorSN.mediaLibrary.taggingData.editMode[photoId] = false;
				return;
			}
		}
		var overlay = disableElement(tag.container.element);
		btnObj.disabled = true;
		var photoData = CreatoorSN.mediaLibrary.taggingData.photoData[tag.photoId];
        
		var size = photoData.width > photoData.height ? photoData.width : photoData.height;
		var tagData = {
				tagText: tag.gui.TextBox.value,
				topPos: tag.rect.top / size,
				leftPos: tag.rect.left / size,
				width: tag.rect.width / size,
				height: tag.rect.height / size,
				tagged_id: tag.tagged_id ? tag.tagged_id : 0
		};
		
		
		var postData = 'photoId=' + tag.photoId + '&tagData=' + YAHOO.lang.JSON.stringify(tagData);
		if (tag.tagId) {
			postData += '&tagId=' + tag.tagId;
		}
        tagData.taggedUrl = tag.taggedUrl ? '/users/' + tag.taggedUrl : null;
		var oCallback = {
			success: function (o) {
				btnObj.disabled = false;
				removeElement(overlay);
				
				if (YAHOO.lang.JSON.isSafe(o.responseText)) {
					var response = YAHOO.lang.JSON.parse(o.responseText);
					if (response.success) {
						if (tag.tagId) {
							tag.Save();
							var _listTag = _$('tagSpan' + tag.tagId).firstChild;
							_listTag.innerHTML = tag.text;
							if (tag.taggedUrl) {
								_listTag.href = '/users/' + tag.taggedUrl;
								_listTag.onclick = function(){return true;};
							} else {
								_listTag.href = '#';
								_listTag.onclick = function(){return false;};
							}							
							CreatoorSN.mediaLibrary.taggingData.editMode[tag.photoId] = false;
                            var tgs = CreatoorSN.mediaLibrary.taggingData.photoData[tag.photoId].annotations;
                            for (var i = 0; i < tgs.length; i++) {
                                if (tgs[i].photo_tag_id == tag.tagId) {
                                    tgs[i].tagText = tagData.tagText,
                                    tgs[i].topPos = tagData.topPos;
                                    tgs[i].leftPos = tagData.leftPos;
                                    tgs[i].width = tagData.width;
                                    tgs[i].height = tagData.height;
                                    tgs[i].tagged_id = tagData.tagged_id;
                                    tgs[i].taggedUrl = tagData.taggedUrl;
                                    break;
                                }
                            }
						}else {
                            tag.id = CreatoorSN.mediaLibrary.taggingData.noteId;
							CreatoorSN.mediaLibrary.taggingData.noteId++;
							tag.tagId = response.photo_tag_id;
                            
							tag.Save();
							var newTag = {
									tagId: response.photo_tag_id,
									allowEdit: 1,
                                    allowRemove: 1,
									taggedUrl: tag.taggedUrl ? '/users/' + tag.taggedUrl : null,
									text: tag.text
							};
                            tagData.photo_tag_id = response.photo_tag_id;
                            tagData.allowRemove = 1;
                            tagData.allowEdit = 1;
                            CreatoorSN.mediaLibrary.taggingData.photoData[tag.photoId].annotations.push(tagData);
							CreatoorSN.mediaLibrary.showTag(tag.photoId, newTag, tag);
							CreatoorSN.mediaLibrary.taggingData.editMode[tag.photoId] = false;
						}
                        
						
					} else {
						if (response.noAuth) {
							var login = new noAuth(function (noAuthObj){
	                            CreatoorSN.mediaLibrary.saveTag(tag);
	                         }, response.message, function(){location.replace('/media-library');});
						} else {
							CreatoorSN.common.showErrorAlert(response.message);
							tag.Cancel();
							CreatoorSN.mediaLibrary.taggingData.editMode[tag.photoId] = false;
						}
					}
				} else {
					CreatoorSN.common.showErrorAlert(CreatoorSN.common.translate('Oops an error occured while executing a script. Please try again later') + '.');
					CreatoorSN.mediaLibrary.taggingData.editMode[tag.photoId] = false;
					tag.Cancel();
				}
			},
			failure: function (o) {
				btnObj.disabled = false;
				removeElement(overlay);
				CreatoorSN.common.showErrorAlert(o.statusText);
				tag.Cancel();
				CreatoorSN.mediaLibrary.taggingData.editMode[photoId] = false;
			},
			timeout: CreatoorSN.common.iAjaxTimeout
				
		};
		YAHOO.util.Connect.asyncRequest("POST", "/members/media-library/annotate-photo", oCallback, postData);
		
	},
	
	removeTag : function (tag) {
		if (tag.tagId) {
			var _tag = _$('tagSpan' + tag.tagId);
			var tc = CreatoorSN.mediaLibrary.taggingData.tagContainers[tag.photoId].domElement;
			var btnObj = CreatoorSN.mediaLibrary.taggingData.buttons[tag.photoId];
			var overlay = disableElement(tag.container.element);
			if (btnObj) {
				btnObj.disabled = true;
			}
			var oCallback = {
				success: function (o) {
					removeElement(overlay);
					if (btnObj) {
						btnObj.disabled = false;
					}
					if (YAHOO.lang.JSON.isSafe(o.responseText)) {
						var response = YAHOO.lang.JSON.parse(o.responseText);
						if (response.success) {
							if (_tag.previousSibling && _tag.previousSibling.className == 'photo-tags-separator') {
								removeElement(_tag.previousSibling);
							}
							removeElement(_tag);
							if (tc.firstChild && tc.firstChild.className == 'photo-tags-separator') {
								removeElement(tc.firstChild);
							}
							CreatoorSN.mediaLibrary.taggingData.editMode[tag.photoId] = false;
							tag.container.DeleteNote(tag);
                            var tgs = CreatoorSN.mediaLibrary.taggingData.photoData[tag.photoId].annotations;
                            for (var i = 0; i < tgs.length; i++) {
                                if (tgs[i].photo_tag_id == tag.tagId) {
                                    tgs.remove(tgs[i]);
                                    break;
                                }
                            }
							
						} else {
                            if (response.noAuth) {
                                var login = new noAuth(function(noAuthObj)
                                {
                                    CreatoorSN.mediaLibrary.removeTag(tag);
                                }, response.message, function(){location.replace('/media-library');});
                            } else {
                                CreatoorSN.common.showErrorAlert(response.message);
                            }
						}
					} else {
						CreatoorSN.common.showErrorAlert(CreatoorSN.common.translate('Oops an error occured while executing a script. Please try again later') + '.');
					}
				},
				
				failure: function (o) {
					removeElement(overlay);
					if (btnObj) {
						btnObj.disabled = false;
					}
					CreatoorSN.common.showErrorAlert(o.statusText);
				},
				
				timeout: CreatoorSN.common.iAjaxTimeout
			};
			var postData = 'photoId=' + tag.photoId + '&tagId=' +tag.tagId;
			YAHOO.util.Connect.asyncRequest("POST", "/members/media-library/remove-annotation", oCallback, postData);
		} else {
			tag.Cancel();
			CreatoorSN.mediaLibrary.taggingData.editMode[tag.photoId] = false;
		}
	},
	
	showTag : function (photoId, tag, _note) {
		CreatoorSN.mediaLibrary.setTagsContainer(CreatoorSN.mediaLibrary.taggingData.photoData[photoId]);
        var tc = _$('tagsContainer' + photoId);
		var spanConfig = {
				tag: 'span',
				id: 'tagSpan' + tag.tagId
		};
		var _span = new creaDomObject(spanConfig);
		var _tag = new creaDomObject({
			tag: 'a',
			href: tag.taggedUrl ? tag.taggedUrl : '#',
			html: tag.text,
			className: 'bold'
		});
		_tag.domElement.onclick = function () {
			if (!tag.taggedUrl) {
				return false;
			}
            return true;
		};
		_tag.addTo(_span);
		
		//left,top,width,height
		if (!_note) {
			var noteId = CreatoorSN.mediaLibrary.taggingData.noteId;
			CreatoorSN.mediaLibrary.taggingData.noteId++;
			_note = new PhotoNote(tag.text, noteId, new PhotoNoteRect(tag.left, tag.top, tag.width, tag.height), {editable: parseInt(tag.allowEdit), photoId: photoId, tagId: tag.tagId});
			_note.onsave = function (note) {CreatoorSN.mediaLibrary.saveTag(note);};
			_note.ondelete = function (note) {CreatoorSN.mediaLibrary.removeTag(note);};
			_note.oncancel = function (note) {CreatoorSN.mediaLibrary.taggingData.editMode[note.photoId] = false;};
			CreatoorSN.mediaLibrary.taggingData.containers[photoId].AddNote(_note);
			CreatoorSN.mediaLibrary.setTaggingAC(_note);
		}
		if (parseInt(tag.allowEdit)) {
			var _edit = new creaDomObject({
				tag: 'a',
				href: '#',
				html: CreatoorSN.common.translate('edit'),
				style: {marginLeft: '3px'}
			});
			_edit.domElement.onclick = function () {
				_note.Select();
				CreatoorSN.mediaLibrary.taggingData.editMode[photoId] = true;
                return false;
			};
			_edit.addTo(_span);
		}
		if (parseInt(tag.allowRemove) || parseInt(tag.allowEdit)) {
			var removeConfig = {
					tag: 'a',
					href: '#',
					html: CreatoorSN.common.translate('remove'),
					style: {marginLeft: '3px'}
			};
			if (_edit) {
				removeConfig.style.paddingLeft = '3px';
				removeConfig.style.borderLeft = '1px solid #000';
				
			}
			var _remove = new creaDomObject(removeConfig);
			_remove.domElement.onclick = function () {CreatoorSN.mediaLibrary.removeTag(_note);return false;};
			_remove.addTo(_span);
		}
		_tag.domElement.onmouseover = function () {_note.showBorders();_note.ShowNoteText();};
		_tag.domElement.onmouseout = function () {_note.HideNoteText();_note.clearBorders();};
		if (tc.childNodes.length) {
			var _separator = new creaDomObject({
				tag: 'span',
				html: ',',
				className: 'photo-tags-separator'
			});
			_separator.addTo(tc);
		}
		_span.addTo(tc);
        
	},
	
	showTags : function (photoData) {
        CreatoorSN.mediaLibrary.setTagsContainer(photoData);
        var tc = _$('tagsContainer' + photoData.identifier);
        while (tc.childNodes.length) {
            tc.removeChild(tc.childNodes[0]);
        }
        
		var size = photoData.width > photoData.height ? photoData.width : photoData.height;
		for (i = 0; i < photoData.annotations.length; i++) {
			var tag = {
				text: photoData.annotations[i].tagText,
				tagId: photoData.annotations[i].photo_tag_id,
				taggedUrl: photoData.annotations[i].taggedUrl,
				allowRemove: photoData.annotations[i].allowRemove,
				allowEdit: photoData.annotations[i].allowEdit,
				id: 1,
				top: Math.round(photoData.annotations[i].topPos * size),
				left: Math.round(photoData.annotations[i].leftPos * size),
				width: Math.round(photoData.annotations[i].width * size),
				height: Math.round(photoData.annotations[i].height * size)
				 
			};
            CreatoorSN.mediaLibrary.showTag(photoData.identifier, tag);
		}
	},

    resetTaggingData : function(identifier) {
        if (identifier) {
            if (CreatoorSN.mediaLibrary.taggingData.buttons[identifier]) delete CreatoorSN.mediaLibrary.taggingData.buttons[identifier];
            if (CreatoorSN.mediaLibrary.taggingData.containers[identifier]) delete CreatoorSN.mediaLibrary.taggingData.containers[identifier];
            if (CreatoorSN.mediaLibrary.taggingData.tagContainers[identifier]) delete CreatoorSN.mediaLibrary.taggingData.tagContainers[identifier];
            return;
        }
        var friends = CreatoorSN.mediaLibrary.taggingData.friends ? CreatoorSN.mediaLibrary.taggingData.friends : null;
        CreatoorSN.mediaLibrary.taggingData = {
            containers: {},
            buttons: {},
            tagContainers: {},
            photoData: {},
            editMode: {},
            noteId: 1,
            emptyTagText: CreatoorSN.common.translate('add text here'),
            friends: friends
        };
    },
    
    getEditMediaContent : function(identifier){
        
      
        var type = CreatoorSN.mediaLibrary.currents.type;
        var next=  -1;
        var prev = -1;
        var current = null;
        var navigation = null;
        var _identifier = identifier;
        if(!identifier){
            CreatoorSN.mediaLibrary.selectedElements = CreatoorSN.mediaLibrary.getSelectedElements();       
            if (!CreatoorSN.mediaLibrary.selectedElements.length) {
                return;
            }
            var selected = parseInt(CreatoorSN.mediaLibrary.currentSlected);
            identifier = CreatoorSN.mediaLibrary.selectedElements[selected];
            while (!identifier && selected >= 0) {
                selected--;
                identifier = CreatoorSN.mediaLibrary.selectedElements[selected];
            }
            if(CreatoorSN.mediaLibrary.selectedElements.length > 1) {
                if(CreatoorSN.mediaLibrary.currentSlected == 0){
                    next = 1;
                    prev = -1;
                } else {
                    if(Number(CreatoorSN.mediaLibrary.currentSlected) == CreatoorSN.mediaLibrary.selectedElements.length -1){
                        next = -1;
                        prev = Number(CreatoorSN.mediaLibrary.currentSlected) -1;
                    }else {
                        next = Number(CreatoorSN.mediaLibrary.currentSlected) +1
                        prev = Number(CreatoorSN.mediaLibrary.currentSlected) -1;
                    }
                }
                current = String(Number(CreatoorSN.mediaLibrary.currentSlected) +1) + ' / ' + CreatoorSN.mediaLibrary.selectedElements.length;
                var prevClass = prev < 0 ? 'button prev' : 'button prev inactive';
                var prevBtn = new creaDomObject({
                    tag: 'span',
                    className: prevClass
                });
                if (prev >= 0) {
                    prevBtn.domElement.onclick = function(){CreatoorSN.mediaLibrary.setCurrentItem(prev);};
                } else {
                    prevBtn.domElement.onclick = function(){CreatoorSN.mediaLibrary.setCurrentItem(CreatoorSN.mediaLibrary.selectedElements.length - 1);};
                }
                var curr = new creaDomObject({
                    tag: 'span',
                    className: 'label current',
                    html: current
                });
                var nextClass = next < 0 ? 'button next' : 'button next inactive';
                var nextBtn = new creaDomObject({
                    tag: 'span',
                    className: nextClass
                });
                if (next >= 0) {
                    nextBtn.domElement.onclick = function(){CreatoorSN.mediaLibrary.setCurrentItem(next);};
                } else {
                   nextBtn.domElement.onclick = function(){CreatoorSN.mediaLibrary.setCurrentItem(0);};
                }
                var clear = new creaDomObject({
                    tag: 'div',
                    className: 'clear'
                });
                navigation = new creaDomObject({
                    tag: 'div',
                    className: 'edit-media-navigation',
                    id: 'editMediaNavigation',
                    elements: [prevBtn, curr, nextBtn, clear]
                });
            }
            

        }        
        
        if(!_$('media-edit-content')) {
            
            if (CreatoorSN.mediaLibrary.formWindow && CreatoorSN.mediaLibrary.formWindow.opened) {
                CreatoorSN.mediaLibrary.formWindow.close();
            }
            var scrPos = getScrollPosition();
            CreatoorSN.mediaLibrary.formWindow = new creaDomWindow({
                                    width: 700,
                                    cache : false,
                                    header: {title: CreatoorSN.common.translate('Edit') + ' ' + CreatoorSN.common.translate(type)},
                                    position: {
                                        top: parseInt(scrPos.y + 100),
                                        left: 'none'
                                    }
                                });
            CreatoorSN.mediaLibrary.formWindow.open();
            CreatoorSN.mediaLibrary.formWindow.onclose(
                function() {CreatoorSN.mediaLibrary.currentSlected = 0;CreatoorSN.mediaLibrary.formWindow = null;CreatoorSN.mediaLibrary.selectedElements = [];}
            );
            if (CreatoorSN.mediaLibrary.editContents['media' + identifier]) {
               
               CreatoorSN.mediaLibrary.formWindow.setContent(CreatoorSN.mediaLibrary.editContents['media' + identifier]);
               removeElement('editMediaNavigation');
               if (navigation) {
                   addBefore(navigation.domElement, _$('media-edit-content'));
               }
               CreatoorSN.mediaLibrary.initTagging(null, CreatoorSN.mediaLibrary.taggingData.photoData[identifier]);
               return;
           }
       }
       if (CreatoorSN.mediaLibrary.editContents['media' + identifier]) {
          
          CreatoorSN.mediaLibrary.formWindow.setContent(CreatoorSN.mediaLibrary.editContents['media' + identifier]);
          removeElement('editMediaNavigation');
          if (navigation) {
              addBefore(navigation.domElement, _$('media-edit-content'));
          }
          CreatoorSN.mediaLibrary.initTagging(null, CreatoorSN.mediaLibrary.taggingData.photoData[identifier]);
          return;
       }
       CreatoorSN.mediaLibrary.formWindow.disable();
       var callback = {
            success: function (o) {
                if (YAHOO.lang.JSON.isSafe(o.responseText)) {
						var r = YAHOO.lang.JSON.parse(o.responseText);
						if (r.success) {
                           
                           CreatoorSN.mediaLibrary.formWindow.enable()
                           CreatoorSN.mediaLibrary.formWindow.setContent(r.html);
                           //CreatoorSN.mediaLibrary.resetTaggingData();
                           var tagConfig = r.friends ? {friends: r.friends} : null;
                           CreatoorSN.mediaLibrary.initTagging(tagConfig, r.item);                           
                           CreatoorSN.mediaLibrary.editContents['media' + identifier] = CreatoorSN.mediaLibrary.formWindow.getContent(true);
                           if (navigation) {
                               addBefore(navigation.domElement, _$('media-edit-content'));
                           }
                           
                        } else {
                            CreatoorSN.mediaLibrary.formWindow.close();
                            if (r.noAuth) {
                                var login = new noAuth(function(noAuthObj)
                                {
                                    CreatoorSN.mediaLibrary.getEditMediaContent(type, _identifier);
                                }, r.message, function(){location.replace('/media-library');});
                            } else {
                                 CreatoorSN.common.showErrorAlert(r.message);
                            }
                        }
                } else {
                    CreatoorSN.mediaLibrary.formWindow.close();
                    CreatoorSN.common.showErrorAlert(CreatoorSN.common.translate('Oops an error occured while executing a script. Please try again later') + '.');
                }
            },
            failure: function (o) {
                CreatoorSN.mediaLibrary.formWindow.close();
                CreatoorSN.common.showErrorAlert(CreatoorSN.common.translate('Oops an error occured while executing a script. Please try again later') + '.');
            }
        };
        var get = "type="+CreatoorSN.mediaLibrary.currents.type+
                  "&identifier="+identifier;
        if (!CreatoorSN.mediaLibrary.taggingData.friends) {
            get += "&getFriends=1";
        }
        YAHOO.util.Connect.asyncRequest("GET", "/members/media-library/get-edit-media-content?" + get, callback);
    },
    setCurrentItem: function(current){
        CreatoorSN.mediaLibrary.currentSlected = current;
        CreatoorSN.mediaLibrary.getEditMediaContent();
    },
    setAsProfilePicture : function(identifier){
        var overlay = disableElement('libraryListContainer');
        var callback = {
            success: function (o) {
                removeElement(overlay);
                if (YAHOO.lang.JSON.isSafe(o.responseText)) {
                    var r = YAHOO.lang.JSON.parse(o.responseText);
                    if (r.success) {
                        CreatoorSN.common.showErrorAlert(r.message);
                    } else {
                        if (r.noAuth) {
                            var login = new noAuth(function(noAuthObj)
                            {
                                CreatoorSN.mediaLibrary.setAsProfilePicture(identifier);
                            }, r.message, function(){location.replace('/media-library');});
                        } else {
                            CreatoorSN.common.showErrorAlert(r.message);
                        }
                    }
                } else {
                    CreatoorSN.common.showErrorAlert(CreatoorSN.common.translate('Oops an error occured while executing a script. Please try again later') + '.');
                }
            },
            failure: function (o) {
                removeElement(overlay);
                CreatoorSN.common.showErrorAlert(CreatoorSN.common.translate('Oops an error occured while executing a script. Please try again later') + '.');
            }
        };
        YAHOO.util.Connect.asyncRequest("GET", "/members/media-library/set-as-profile-picture?identifier="+identifier, callback);
    },

    showFormErrors: function(formElement, param) {
        if (typeof(formElement) == 'object' && formElement.tagName) {
            var value = trim(formElement.value);
            if (!value) {
                var id = CreatoorSN.common.toolTip(formElement, null, 'media-form-error', param);
                if (id) {
                    setTimeout("removeElement('" + id + "')", 2000);
                }
            }
        }
        
    },
    saveFormData : function(el, callback){
        var url = null;
        var form = el.form;
        if (form) {
            url = form.getAttribute('action');
        } else {
            return;
        }
        url = url ? url : location.href;
        var requiredElements = DOM.getElementsByClassName('required', null, form);
        if (requiredElements.length) {
            var param = {pos: 0};
            DOM.batch(requiredElements, CreatoorSN.mediaLibrary.showFormErrors, param);
            if (param.pos) {
                return;
            }
        }
        if (CreatoorSN.mediaLibrary.formWindow && CreatoorSN.mediaLibrary.formWindow.opened) {
            CreatoorSN.mediaLibrary.formWindow.disable();
        }
        var reqCallback = {
            success: function (o) {
                if (CreatoorSN.mediaLibrary.formWindow && CreatoorSN.mediaLibrary.formWindow.opened) {
                    CreatoorSN.mediaLibrary.formWindow.enable();
                }
                if (YAHOO.lang.JSON.isSafe(o.responseText)) {
						var r = YAHOO.lang.JSON.parse(o.responseText);
                        if(r.success){
                            for (var i = 0; i < form.elements.length; i++) {
                                    if (form.elements[i].tagName) {

                                        if (form.elements[i].tagName == 'TEXTAREA') {
                                            form.elements[i].innerHTML = form.elements[i].value;
                                            continue;
                                        }
                                        if (form.elements[i].tagName == 'SELECT') {
                                            var selected = form.elements[i].selectedIndex;
                                            for (var j = 0; j < form.elements[i].options.length; j++) {
                                                form.elements[i].options[j].removeAttribute('selected');
                                            }
                                            form.elements[i].options[selected].setAttribute('selected', 'selected');
                                            continue;
                                        }
                                        if (typeof(form.elements[i].value) != 'undefined') {
                                            form.elements[i].setAttribute('value', form.elements[i].value);
                                        }
                                    }

                            }
                            if (typeof(callback) == 'function') {
                                callback(r, form);
                            }
                            
                            
                            //CreatoorSN.mediaLibrary.formWindow.close();
                        } else {
                            if (r.noAuth) {
                                var login = new noAuth(function(noAuthObj)
                                {
                                    CreatoorSN.mediaLibrary.saveFormData(el, target);
                                }, r.message, function(){location.replace('/media-library');});
                            } else {
                                CreatoorSN.common.showErrorAlert(r.message);
                            }
                        }
                } else {
                    CreatoorSN.common.showErrorAlert(CreatoorSN.common.translate('Oops an error occured while executing a script. Please try again later') + '.');
                }
            },
            failure: function (o) {
                 CreatoorSN.common.showErrorAlert(CreatoorSN.common.translate('Oops an error occured while executing a script. Please try again later') + '.');
            }
        };
        
        YAHOO.util.Connect.setForm(form);
      
        YAHOO.util.Connect.asyncRequest('POST', url, reqCallback);

     
    },

    addMedia: function (processed, progress, swfu, params) {
        var postData = 'type=' + CreatoorSN.mediaLibrary.currents.type
                     + '&fileName=' + processed.fileName
                     + '&userDirectory=' + processed.userDirectory
                     + '&identifier=' + processed.identifier;
        var collection = CreatoorSN.mediaLibrary.currents.coll;
        if (collection) {
            postData += '&collection=' + collection
        }
        var error = null;
        if (swfu.processed) {
            swfu.processed--;
        }
        var callback = {
            success: function(o) {
               var date = new Date();
               if (o.responseText && YAHOO.lang.JSON.isSafe(o.responseText)) {
                   var r = YAHOO.lang.JSON.parse(o.responseText);
                   if (r.success) {
                       var target = _$('thumbnail-library-list');
                       if (target) {
                           
                           target.innerHTML = r.html + target.innerHTML;
                           var rpp = CreatoorSN.mediaLibrary.paginator.getRowsPerPage();
                           while (target.childNodes.length > rpp) {
                               removeElement(target.lastChild);
                           }
                           if (CreatoorSN.mediaLibrary.getShowHints()) {
                                var thumbs = DOM.getElementsByClassName('thumbnail-background', 'div', 'media' + processed.identifier);
                                if (thumbs.length) {
                                    CreatoorSN.mediaLibrary.showHints(thumbs[0]);
                                }
                            }
                           var total = CreatoorSN.mediaLibrary.paginator.getTotalRecords();
                           CreatoorSN.mediaLibrary.paginator.setTotalRecords(parseInt(total + 1), true);
                           if (progress) {
                               var status = processed.fileName + ': ' + CreatoorSN.common.translate('processing completed');
                               if (typeof(swfu.processed) != 'undefined' && !swfu.processed) {
                                   status = CreatoorSN.common.translate('Processing of all files completed');
                                   CreatoorSN.mediaLibrary.swfu.removeOverlays(swfu);
                                   CreatoorSN.mediaLibrary.initDragAndDrop();
                                   swfu.progressObj.setStatus(status);
                                   setTimeout("CreatoorSN.mediaLibrary.swfu.clearStatus('" + swfu.customSettings.progress.text + "')", 2000);
                               } else {
                                   progress.setStatus(status);
                               }
                           }
                           if (collection) {
                               var folders = DOM.getElementsByClassName('empty-folder', 'div', 'collection' + collection);
                               DOM.replaceClass(folders, 'empty-folder', 'not-empty-folder');
                               if (DOM.hasClass('media' + processed.identifier, 'collection-thumbnail')) {
                                   if (CreatoorSN.mediaLibrary.editContents['collection' + collection]) {
                                       delete CreatoorSN.mediaLibrary.editContents['collection' + collection];
                                   }
                               }
                               if (CreatoorSN.mediaLibrary.collections.collectionsOrders[collection]) {
                                   delete CreatoorSN.mediaLibrary.collections.collectionsOrders[collection];
                               }
                           }
                       }
                   } else {
                       error = {
                           image: '/images/media-library/error.gif',
                           message: r.message,
                           file: {
                              name: processed.fileName
                           },
                           time: date.getHours() + ':' + date.getMinutes() + ':' + date.getSeconds()
                       };
                   }
               } else {
                   error = {
                       image: '/images/media-library/error.gif',
                       message: CreatoorSN.common.translate('Unknown error'),
                       file: {
                          name: processed.fileName
                       },
                       time: date.getHours() + ':' + date.getMinutes() + ':' + date.getSeconds()
                   };
               }
               if (error !== null) {
                   error.file = {name: processed.fileName};
                   CreatoorSN.mediaLibrary.swfu.refreshErrors(swfu, error);
                   CreatoorSN.mediaLibrary.uploadError(swfu, error);
               }
            },
            failure: function(o) {
                var date = new Date();
                error = {
                   image: '/images/media-library/error.gif',
                   message: CreatoorSN.common.translate('Unknown error'),
                   file: {
                      name: processed.fileName
                   },
                   time: date.getHours() + ':' + date.getMinutes() + ':' + date.getSeconds()
               };
               CreatoorSN.mediaLibrary.uploadError(swfu, error);
            }
        };
        var url = params && params.url ? params.url : '/members/media-library/add-media';
        YAHOO.util.Connect.asyncRequest('POST', url, callback, postData);
    },

    uploadError: function (swfu, error, params) {
        if (swfu.progressObj) {
            swfu.progressObj.setError();
            swfu.progressObj.setStatus(error.file.name + ': ' + error.message);
        }
        if (typeof(swfu.processed) != 'undefined' && !swfu.processed) {
            setTimeout("CreatoorSN.mediaLibrary.swfu.clearStatus('" + swfu.customSettings.progress.text + "')", 2000);
        }
    },

    updateMedia: function (response, form)
    {
        CreatoorSN.mediaLibrary.editContents['media' + response.identifier] = CreatoorSN.mediaLibrary.formWindow.getContent(true);
        if (!CreatoorSN.mediaLibrary.selectedElements.length) {
            CreatoorSN.mediaLibrary.formWindow.close();
        }
    },
    updateCollection: function (response, form)
    {
        var identifierEl = _$('identifier');
        if (identifierEl) {
            identifierEl.value = response.data.identifier;
            identifierEl.setAttribute('value', response.data.identifier);
        }
        if (response.newCollection) {
            var collectionsList = _$('mediaCollections');
            if (collectionsList) {
                collectionsList.innerHTML = response.html;
                CreatoorSN.mediaLibrary.initDragAndDrop();
            }
            CreatoorSN.mediaLibrary.collectionListpaginator.setPage(response.cPage, true);
            CreatoorSN.mediaLibrary.collectionListpaginator.setTotalRecords(response.cTotal, true);
        } else {
            var titleElement = _$('mediaCollectionTools' + response.data.identifier);
            var menuElement = DOM.getElementsByClassName('collection-list-item-title', 'span', 'collection' + response.data.identifier);
            if (titleElement || menuElement.length) {
                var title = getFormElement(form, 'title', true);
                if (titleElement) {
                    titleElement.firstChild.innerHTML = response.data.title;
                }
                if (menuElement.length) {
                    menuElement[0].innerHTML = response.data.title;
                }
            }
        }
        CreatoorSN.mediaLibrary.editContents['collection' + response.data.identifier] = CreatoorSN.mediaLibrary.formWindow.getContent(true);
        CreatoorSN.mediaLibrary.formWindow.close();
        var collection = CreatoorSN.mediaLibrary.currents.coll;
        if (collection != response.data.identifier) {
            if (response.newItems) {
                DOM.replaceClass(_$('collection' + response.data.identifier).firstChild, 'empty-folder', 'not-empty-folder');
                delete CreatoorSN.mediaLibrary.editContents['collection' + response.data.identifier];
            }
            var nav = {
                sec: 'collections',
                coll: response.data.identifier,
                p: 1,
                cat: ''
            };
            if (parseInt(response.cPage)) {
                nav.cp = response.cPage;
            }
            CreatoorSN.mediaLibrary.awaitingResponse = false;
            HISTORY.navigate('coll', response.data.identifier);
        } else {
            var thumbnail = getFormElement(form, 'thumbnailId', true);
            if (thumbnail) {
                if (!DOM.hasClass('media' + thumbnail, 'collection-thumbnail')) {
                    DOM.removeClass(_$('thumbnail-library-list').childNodes, 'collection-thumbnail');
                    DOM.addClass('media' + thumbnail, 'collection-thumbnail');
                }
            }
        }

    },

    removeCollection: function(remove, forGood) {
        var collection = CreatoorSN.mediaLibrary.currents.coll;
        var cPage = CreatoorSN.mediaLibrary.currents.cp;
        //forGood = forGood ? 1 : 0;
        forGood = 1;
        if (collection) {
            remove = remove ? remove : _$('mediaDwp').checked;
            if (remove || !forGood) {
                var overlay = disableElement('libraryListContainer');
                var callback = {
                    success: function(o) {
                        removeElement(overlay);
                        var errMsg = null;
                        if (o.responseText && JSON.isSafe(o.responseText)) {
                            var  r = JSON.parse(o.responseText);
                            if (r.success) {
                                if (forGood) {
                                    var list = _$('mediaCollections');
                                    if (list) {
                                        list.innerHTML = r.html;
                                    }
                                    CreatoorSN.mediaLibrary.collectionListpaginator.setTotalRecords(r.total, true);
                                    CreatoorSN.mediaLibrary.collectionListpaginator.setPage(r.cPage, true);
                                    CreatoorSN.mediaLibrary.awaitingResponse = true;
                                    var check = HISTORY.multiNavigate({
                                        cp: String(r.cPage),
                                        coll: CreatoorSN.mediaLibrary.defaults.coll
                                    });
                                    CreatoorSN.mediaLibrary.awaitingResponse = false;
                                    CreatoorSN.mediaLibrary.currents.coll = CreatoorSN.mediaLibrary.defaults.coll;
                                    CreatoorSN.mediaLibrary.getMediaList();
                                } else  {
                                    //TODO: handle soft removal
                                }
                            } else if (r.noAuth) {
                                var login = new noAuth(function(noAuthObj) {
                                    CreatoorSN.mediaLibrary.removeCollection(remove, forGood);
                                }, r.message, function(){location.replace('/media-library');});
                            } else {
                                errMsg = r.message;
                            }

                        } else {
                            errMsg = CreatoorSN.common.translate('Oops an error occured while executing a script. Please try again later') + '.';
                        }
                        if (errMsg) {
                            CreatoorSN.common.showErrorAlert(errMsg);
                        }
                    },
                    failure: function(o) {
                        removeElement(overlay);
                        CreatoorSN.common.showErrorAlert(CreatoorSN.common.translate('Oops an error occured while executing a script. Please try again later') + '.');
                    }
                };
                var getParams = 'collection=' + collection + '&type=' + CreatoorSN.mediaLibrary.currents.type + '&forGood=' + forGood + '&cp=' + cPage;
                YAHOO.util.Connect.asyncRequest("GET", "/members/media-library/remove-collection/?"+getParams, callback);

            } else {
                var confirm = new creaDomConfirm({
                    message :CreatoorSN.common.translate('Are you sure you want do remove current collection?'),
                    title : CreatoorSN.common.translate('Warning')
                });
                confirm.setCallback(function(){
                    confirm.close();
                    CreatoorSN.mediaLibrary.removeCollection(true);
                });
                confirm.open();
            }
        }
    },

    removeMedia : function(identifier, remove){
        
         if (CreatoorSN.mediaLibrary.formWindow && CreatoorSN.mediaLibrary.formWindow.opened) {
             return;
         }
         var _identifier = identifier;
         if(!identifier){
           var elements = CreatoorSN.mediaLibrary.getSelectedElements();
           
           identifier = '';

           for(var i=0; i< elements.length; i++){
               identifier += elements[i]+'+';
           }
                    
           identifier = identifier.substring(0,identifier.length-1);
            
        }
        if (!identifier) {
            return;
        }
        remove = remove ? remove : _$('mediaDwp').checked;
        if (!remove) {
            var confirm = new creaDomConfirm({
                message :CreatoorSN.common.translate('Are you sure you want do remove selected media?'),
                title : CreatoorSN.common.translate('Warning')
            });
            confirm.setCallback(function(){
                confirm.close();
                CreatoorSN.mediaLibrary.removeMedia(_identifier, true);
            });
            confirm.open();
            return;
        }

        var page = CreatoorSN.mediaLibrary.currents.p;
        var category = CreatoorSN.mediaLibrary.currents.cat;
        var postData = "type="+CreatoorSN.mediaLibrary.currents.type+
                       "&identifier="+identifier+
                       "&page="+page+
                       "&category="+category;
        if (CreatoorSN.mediaLibrary.currents.coll) {
            postData += '&collection='+CreatoorSN.mediaLibrary.currents.coll;
        }

        var overlay = disableElement(_$('libraryListContainer'));
        var callback = {
            success: function (o) {
                removeElement(overlay);
                if (YAHOO.lang.JSON.isSafe(o.responseText)) {
						var r = YAHOO.lang.JSON.parse(o.responseText);
						if (r.success) {
                              if (typeof(r.html) != 'undefined') {
                                  _$('thumbnail-library-list').innerHTML = r.html;
                                  CreatoorSN.mediaLibrary.paginator.setTotalRecords(r.total,true);
                                  CreatoorSN.mediaLibrary.paginator.setPage(r.page, true);
                                  CreatoorSN.mediaLibrary.initDragAndDrop();
                                  if (CreatoorSN.mediaLibrary.currents.coll) {
                                      if (!parseInt(r.total)) {
                                        DOM.replaceClass(_$('collection' + CreatoorSN.mediaLibrary.currents.coll).firstChild, 'not-empty-folder', 'empty-folder');
                                      }
                                      if (CreatoorSN.mediaLibrary.editContents['collection' + CreatoorSN.mediaLibrary.currents.coll]) {
                                          delete CreatoorSN.mediaLibrary.editContents['collection' + CreatoorSN.mediaLibrary.currents.coll];
                                      }
                                      if (CreatoorSN.mediaLibrary.collections.collectionsOrders[CreatoorSN.mediaLibrary.currents.coll]) {
                                          delete CreatoorSN.mediaLibrary.collections.collectionsOrders[CreatoorSN.mediaLibrary.currents.coll];
                                      }
                                  }
                              }
                              if(r.collectionCounts && typeof(r.collectionCounts) == 'object'){
                                  var collections =  DOM.getElementsByClassName('collection-list-item', 'li');
                                  for(var i in r.collectionCounts){
                                      if (!r.collectionCounts[i].thumbnail_id) {
                                          if (CreatoorSN.mediaLibrary.editContents['collection' + r.collectionCounts[i].identifier]) {
                                              delete CreatoorSN.mediaLibrary.editContents['collection' + r.collectionCounts[i].identifier];
                                          }
                                      }
                                      if(r.collectionCounts[i].mediaCount == 0){
                                          for(var j = 0; j < collections.length; j++){
                                              if(collections[j].id == 'collection' + r.collectionCounts[i].identifier){
                                                  DOM.replaceClass(collections[j].firstChild, 'not-empty-folder', 'empty-folder');
                                              }
                                          }
                                      }
                                  }
                              }
                              if (page != r.page) {
                                  CreatoorSN.mediaLibrary.awaitingResponse = true;
                                  HISTORY.navigate('p', String(r.page));
                              }
                           
                        } else {
                            if (r.noAuth) {
                                var login = new noAuth(function(noAuthObj)
                                {
                                    CreatoorSN.mediaLibrary.removeMedia(type, _identifier );
                                }, r.message, function(){location.replace('/media-library');});
                            } else {
                                CreatoorSN.common.showErrorAlert(r.message);
                            }
                        }
                } else {
                    CreatoorSN.common.showErrorAlert(CreatoorSN.common.translate('Oops an error occured while executing a script. Please try again later') + '.');
                }
            },
            failure: function (o) {
                removeElement(overlay);
                CreatoorSN.common.showErrorAlert(CreatoorSN.common.translate('Oops an error occured while executing a script. Please try again later') + '.');
            }
        };
        
        
        YAHOO.util.Connect.asyncRequest("POST", "/members/media-library/remove-media", callback, postData);
    },
    getSelectedElements : function(){        
        var elements = DOM.getElementsByClassName('selected-media-item', 'li');
        var selected = [];
        for(var i = 0; i < elements.length; i++){
                selected.push(elements[i].id.replace('media', ''));
        }
        return selected;
       
    },
    getSection : function (section){
        if(CreatoorSN.mediaLibrary.loadMediaList)
            CreatoorSN.mediaLibrary.getMediaList();
        else
           CreatoorSN.mediaLibrary.loadMediaList = true;
    },

    setShowHints: function(sh) {
        sh = sh ? sh : _$('showHints');
        if (sh.id != 'showHints') {
            _$('showHints').checked = sh.checked;
        }
        var thumbs = DOM.getElementsByClassName('thumbnail-background', 'div');
        if (sh.checked) {
            DOM.batch(thumbs, CreatoorSN.mediaLibrary.showHints);
        } else {
            DOM.batch(thumbs, CreatoorSN.mediaLibrary.noHints);
        }
    },

    getShowHints: function() {
        var sh = _$('showHints');
        if (sh && sh.tagName.toLowerCase() == 'input' && sh.type.toLowerCase() == 'checkbox') {
            return sh.checked;
        }
        return false;
    },

    showHints: function(thumb) {
        thumb.firstChild.onmouseover = function(ev) {
            CreatoorSN.common.showLargerImage(ev, this, CreatoorSN.mediaLibrary.hintSize);
        };
    },

    noHints: function(thumb) {
        thumb.firstChild.onmouseover = thumb.firstChild.onmouseout = function(){return;};
    },

    getMediaList: function(){
       
       //console.log('gml currents');
       //console.log(CreatoorSN.mediaLibrary.currents);
       if (CreatoorSN.mediaLibrary.awaitingResponse) {
           return;
       }
       CreatoorSN.mediaLibrary.awaitingResponse = true;
       var section = CreatoorSN.mediaLibrary.currents.sec;
       var category = CreatoorSN.mediaLibrary.currents.cat;
       var collection = CreatoorSN.mediaLibrary.currents.coll;
       var page = CreatoorSN.mediaLibrary.currents.p;
       
       var getParams= "?type="+CreatoorSN.mediaLibrary.currents.type;
       getParams += "&page="+page;       
       if (section == 'collections') {
           if(collection) {
               getParams += '&collection='+collection;
           } else {
               collection = 'showAll';
           }
       }
       if (category) {
           getParams += '&category=' + category;
       }
       var overlay = disableElement('libraryListContainer');
       var callback = {
            success: function (o) {
                removeElement(overlay);
                CreatoorSN.mediaLibrary.awaitingResponse = false;
                if (YAHOO.lang.JSON.isSafe(o.responseText)) {
						var r = YAHOO.lang.JSON.parse(o.responseText);
                        if(r.success){
                            
                            CreatoorSN.mediaLibrary.setDynamicTools(r.data);
                            _$('thumbnail-library-list').innerHTML = r.html;
                            if (CreatoorSN.mediaLibrary.getShowHints()) {
                                CreatoorSN.mediaLibrary.setShowHints();
                            }
                            if (category) {
                                EVENT.onContentReady("mediaCategoriesPh", function () {
                                    CreatoorSN.categories.setSelected(CreatoorSN.mediaLibrary.categoryTree.getNodeByProperty('category_id', category));
                                });
                            }
                             if(CreatoorSN.mediaLibrary.paginator != null){
                                
                                    CreatoorSN.mediaLibrary.paginator.setTotalRecords(r.total,true);
                                    
                                    if(collection){
                                        var opened = DOM.getElementsByClassName('open-folder', 'div');
                                        if(opened){
                                            DOM.removeClass(opened, 'open-folder');
                                            DOM.removeClass(opened, 'empty-folder');
                                        }
                                        var elements = DOM.getElementsByClassName('collection-list-item', 'li');

                                        for(var i = 0; i < elements.length; i++) {
                                            if(elements[i].id.replace('collection', '') == collection){
                                                if (collection != 'showAll') {
                                                    DOM.addClass(elements[i].firstChild, 'open-folder');
                                                }
                                                DOM.setStyle(elements[i], "backgroundColor", 'silver');
                                            }else{
                                                 DOM.setStyle(elements[i], "backgroundColor", 'white');
                                            }
                                        }
                                        CreatoorSN.mediaLibrary.uploadToCollection = true;
                                    } else {
                                       CreatoorSN.mediaLibrary.uploadToCollection = false;
                                    }
                                    CreatoorSN.mediaLibrary.paginator.setPage(r.page, true);
                                    if (page != r.page) {
                                        CreatoorSN.mediaLibrary.awaitingResponse = true;
                                        HISTORY.navigate('p', String(r.page));
                                    }
                             }
                             CreatoorSN.mediaLibrary.initDragAndDrop();
                        } else if (r.noAuth) {
                            var login = new noAuth(function(noAuthObj)
                                {
                                    CreatoorSN.mediaLibrary.getMediaList();
                                }, r.message, function(){location.replace('/media-library');});
                        } else {
                            CreatoorSN.common.showErrorAlert(r.message);
                        }
                } else {
                    CreatoorSN.common.showErrorAlert(CreatoorSN.common.translate('Oops an error occured while executing a script. Please try again later') + '.');
                }
                
            },
            failure: function (o) {
                CreatoorSN.mediaLibrary.awaitingResponse = false;
                removeElement(overlay);
                CreatoorSN.common.showErrorAlert(CreatoorSN.common.translate('Oops an error occured while executing a script. Please try again later') + '.');                
            }
        };
        YAHOO.util.Connect.asyncRequest("GET", "/members/media-library/get-media-list"+getParams, callback);
    },

    navigateHistory: function (key, value, silent) {
        if (silent) {
            CreatoorSN.mediaLibrary.silentHistory = true;
        }
        HISTORY.navigate(key, String(value));
    },
    handlePagination : function (state){
        HISTORY.navigate('p', String(state.page));
        
    },

    handleCollectionListPagination: function(state) {        
        HISTORY.navigate('cp', String(state.page));        
    },

    markAsSelected:function(el){
        if (!CreatoorSN.mediaLibrary.formWindow || !CreatoorSN.mediaLibrary.formWindow.opened) {
            if (DOM.hasClass(el,'selected-media-item' )){
                  DOM.removeClass(el,'selected-media-item');
                 DOM.addClass(el,'media-item');
            }
            else{
                 DOM.addClass(el,'selected-media-item');
                DOM.removeClass(el,'media-item');
            }
        }
    },

    initCollectionThumbnailUpload: function(identifier, sessionId) {
        var fileSizeLimit = CreatoorSN.mediaLibrary.defaults[CreatoorSN.mediaLibrary.currents.type].fileSizeLimit;
        var fileTypes = CreatoorSN.mediaLibrary.defaults[CreatoorSN.mediaLibrary.currents.type].fileTypes;
        var thumbDiv = identifier ? _$('formCollectionThumbnail' + identifier) : _$('formCollectionThumbnail');
        if (thumbDiv) {
            var uploadTools = DOM.getElementsByClassName('upload-collection-thumbnail', 'ul', thumbDiv);
            if (uploadTools) {
                
                var button = new creaDomObject({
                    tag: 'div',
                    id: 'uploadThumbnail',
                    wrapper: {
                        tag: 'li'
                    }
                });
                var progressBar = new creaDomObject({
                    tag: 'div',
                    id: 'thumbnailProgressBar',
                    className: 'progress-bar',
                    wrapper: {
                        tag: 'li',
                        params: {
                            className: 'progress-bar-container'
                        }
                    }
                });
                var progressText = new creaDomObject({
                    tag: 'li',
                    id: 'thumbnailProgressText',
                    className: 'media-progress-text',
                    html: CreatoorSN.common.translate('Ready ...')
                });

                var errors = new creaDomObject({
                    tag: 'li',
                    id: 'collectionThumbnailUploadErrors'
                });
                var uthl = new creaDomObject({
                    tag: 'ul',
                    className: 'upload-collection-thumbnail-list',
                    elements: [button, progressBar, progressText, errors]
                });
                var uth = new creaDomObject({
                    tag: 'div',
                    id: 'uploadThumbnailWrapper',
                    className: 'upload-collection-thumbnail-wrapper clear1',
                    style: {
                      display: ''
                    },
                    elements: [uthl]
                });
                addAfter(uth, thumbDiv.parentNode);
            }
            var uploadConfig = {
                post_params: {
                    PHPSESSID: sessionId
                },
                file_types: fileTypes,
                file_upload_limit: '0',
                file_size_limit: fileSizeLimit,
                button_placeholder_id: 'uploadThumbnail',
                custom_settings: {
                    callback: {
                        success: {
                            fn: CreatoorSN.mediaLibrary.uploadCollectionThumbnail,
                            params: identifier
                        },
                        error: {
                            fn: CreatoorSN.mediaLibrary.uploadError
                        }
                    },
                    disable: [CreatoorSN.mediaLibrary.formWindow],
                    errors: 'collectionThumbnailUploadErrors',
                    progress: {
                        bar: 'thumbnailProgressBar',
                        text: 'thumbnailProgressText'
                    }
                },
                debug: true

            };
            CreatoorSN.mediaLibrary.swfu.initialize(uploadConfig);
            CreatoorSN.mediaLibrary.formWindow.addOnclose(function(){
                if (CreatoorSN.common.browser.ie) {
                    uthl.domElement.style.display = 'none';
                }
            });

        }


        
    },

    uploadCollectionThumbnailError: function(swfu, error, params)
    {
        CreatoorSN.mediaLibrary.swfu.removeOverlays(swfu);
        if (swfu.progressObj) {
            swfu.progressObj.setStatus(error.message);
        }
        
    },

    uploadCollectionThumbnail: function(processed, progress, swfu, identifier) {
        var postData = 'type=' + CreatoorSN.mediaLibrary.currents.type
                     + '&mediaId=' + processed.identifier
                     + '&userDirectory=' + processed.userDirectory
                     + '&fileName=' + processed.fileName
                     + '&collection=' + identifier;
        var error = null;
        if (swfu.processed) {
            swfu.processed--;
        }
        var callback = {
            success: function(o) {
                if (o.responseText && YAHOO.lang.JSON.isSafe(o.responseText)) {
                     var r = YAHOO.lang.JSON.parse(o.responseText);
                     if (r.success) {
                        CreatoorSN.mediaLibrary.swfu.removeOverlays(swfu);
                        var collection = identifier ? identifier : '';
                        var formId = identifier ? 'edit-collections' + identifier : 'edit-collections';
                        var form = _$(formId);
                        if (form) {
                            CreatoorSN.mediaLibrary.changeCollectionFormThumbnail(form, processed.identifier, identifier, r.thumb);

                        }
                        if (swfu.progressObj) {
                            swfu.progressObj.setStatus(CreatoorSN.common.translate('Ready ...'));
                        }
                        var status = processed.fileName + ': ' + CreatoorSN.common.translate('processing completed');
                        if (typeof(swfu.processed) != 'undefined' && !swfu.processed) {
                           status = CreatoorSN.common.translate('Processing of all files completed');
                           CreatoorSN.mediaLibrary.swfu.removeOverlays(swfu);
                           
                           if (collection) {
                               if (CreatoorSN.mediaLibrary.collections.collectionsOrders[collection]) {
                                   delete CreatoorSN.mediaLibrary.collections.collectionsOrders[collection];
                               }
                               if (identifier && collection == identifier) {
                                   CreatoorSN.mediaLibrary.getMediaList();
                               }
                           } else {
                              CreatoorSN.mediaLibrary.getMediaList();
                           }
                           if (swfu.progressObj) {
                                swfu.progressObj.setStatus(status);                                
                                setTimeout("CreatoorSN.mediaLibrary.swfu.clearStatus('" + swfu.customSettings.progress.text + "')", 2000);
                           }
                           
                        } else {
                            if (swfu.progressObj) {
                                swfu.progressObj.setStatus(status);
                            }
                        }
                        
                     } else if (r.noAuth) {
                        var login = new noAuth(function(noAuthObj){
                            CreatoorSN.mediaLibrary.uploadCollectionThumbnail(processed, progress, swfu, identifier);
                        }, r.message, function(){location.replace('/media-library');});
                     } else {
                         error = {
                             message: r.message
                         };
                     }
                } else {
                    error = {
                        message: CreatoorSN.common.translate('Oops an error occured while executing a script. Please try again later') + '.'
                    };
                }
                if (error) {
                    CreatoorSN.mediaLibrary.uploadCollectionThumbnailError(swfu, error);
                }
            },
            failure: function(o) {
                error = {
                    message: CreatoorSN.common.translate('Oops an error occured while executing a script. Please try again later') + '.'
                };
                CreatoorSN.mediaLibrary.uploadCollectionThumbnailError(swfu, error);
            }
        };
        YAHOO.util.Connect.asyncRequest("POST", "/members/media-library/upload-collection-thumbnail",callback,postData);
    },

    changeCollectionFormThumbnail: function(form, identifier, collection, thumb) {

        var fIdentifier = DOM.getElementBy(function(el){return el.name == 'thumbnailId'}, 'input', form);
        fIdentifier.value = identifier;
        DOM.setAttribute(fIdentifier, 'value', identifier);
        if (form.id == 'edit-collections') {
            var itemsEl = _$('collectionItems');
            itemsEl.value += itemsEl.value ? '+' + identifier : identifier;
            DOM.setAttribute(itemsEl, 'value', itemsEl.value);
        }
        if (thumb) {
            var wDiv = collection ? _$('formCollectionThumbnail' + collection) : _$('formCollectionThumbnail');
            if (wDiv) {
                var photo = DOM.getElementBy(function(el){return el.type.toLowerCase() == 'image';}, 'input', wDiv);
                if (photo) {
                    var size = Math.max(parseInt(thumb.dimensions.height), parseInt(thumb.dimensions.width));
                    var padding = Math.round((size - parseInt(thumb.dimensions.height)) / 2 + 5) + 'px '
                                + Math.round((size - parseInt(thumb.dimensions.width)) / 2 + 5) + 'px';
                    DOM.setStyle(wDiv, 'padding', padding);
                    DOM.setAttribute(photo, 'src', thumb.src);
                }
            }
        }
    },

    setNewCollectionItems: function() {
        if (_$('edit-collections')) {
            var itemsEl = _$('collectionItems');
            if (itemsEl) {
                var selectedElements = CreatoorSN.mediaLibrary.getSelectedElements();
                itemsEl.value = selectedElements.join("+");
            }
        }
    },

    clearNewCollectionItems: function() {
        var itemsEl = _$('collectionItems');
        if (itemsEl) {
            itemsEl.value = '';
            DOM.setAttribute(itemsEl, 'value', '');
        }
    },
    
    editCollection:function(edit){
        if (_$('collection-edit-content')) return;
        if (CreatoorSN.mediaLibrary.formWindow && CreatoorSN.mediaLibrary.formWindow.opened) {
            CreatoorSN.mediaLibrary.formWindow.close();
        }
        var postData = 'type='+CreatoorSN.mediaLibrary.currents.type;
        if (edit) {
           var collection = CreatoorSN.mediaLibrary.currents.coll;
           if (collection) {
               postData += '&collection=' + collection;
               CreatoorSN.mediaLibrary.uploadToCollection = true;
           } else {
               return;
           }
       } else {
           CreatoorSN.mediaLibrary.uploadToCollection = false;
       }
        var scrPos = getScrollPosition();
        CreatoorSN.mediaLibrary.formWindow = new creaDomWindow({
                        width: 700,
                        cash : false,
                        header: {title: CreatoorSN.common.translate('Edit collection')},
                        position: {
                            top: parseInt(scrPos.y + 100),
                            left: 'none'
                        }
                    });
       CreatoorSN.mediaLibrary.formWindow.onclose(
                function() {CreatoorSN.mediaLibrary.formWindow = null;}
            );
       CreatoorSN.mediaLibrary.formWindow.open();
       if (collection) {
           if (CreatoorSN.mediaLibrary.editContents['collection' + collection]) {
               CreatoorSN.mediaLibrary.formWindow.setContent(CreatoorSN.mediaLibrary.editContents['collection' + collection]);
               CreatoorSN.mediaLibrary.clearNewCollectionItems();
               if (CreatoorSN.common.browser.ie) {
                   removeElement('uploadThumbnailWrapper');
                   CreatoorSN.mediaLibrary.initCollectionThumbnailUpload(collection, CreatoorSN.mediaLibrary.sessId);
               }
               return;
           }           
       } else if (CreatoorSN.mediaLibrary.editContents['collection']) {
           CreatoorSN.mediaLibrary.formWindow.setContent(CreatoorSN.mediaLibrary.editContents['collection']);
           CreatoorSN.mediaLibrary.setNewCollectionItems();
           if (CreatoorSN.common.browser.ie) {
               removeElement('uploadThumbnailWrapper');
               CreatoorSN.mediaLibrary.initCollectionThumbnailUpload(collection, CreatoorSN.mediaLibrary.sessId);
           }
           return;
       }
       CreatoorSN.mediaLibrary.formWindow.disable();
       
       var callback = {
            success: function (o) {
                CreatoorSN.mediaLibrary.formWindow.enable();
                if (YAHOO.lang.JSON.isSafe(o.responseText)) {
						var r = YAHOO.lang.JSON.parse(o.responseText);
                        if(r.success) {
                            CreatoorSN.mediaLibrary.sessId = r.sessId;
                           CreatoorSN.mediaLibrary.formWindow.setContent(r.html);
                           CreatoorSN.mediaLibrary.initCollectionThumbnailUpload(collection, r.sessId);
                           if (collection) {
                              CreatoorSN.mediaLibrary.editContents['collection' + collection] = CreatoorSN.mediaLibrary.formWindow.getContent(true);
                           } else {
                               CreatoorSN.mediaLibrary.setNewCollectionItems();
                               CreatoorSN.mediaLibrary.editContents['collection'] = CreatoorSN.mediaLibrary.formWindow.getContent(true);
                           }

                        } else {
                            CreatoorSN.mediaLibrary.formWindow.close();
                            if (r.noAuth) {
                                var login = new noAuth(function(noAuthObj)
                                {
                                    CreatoorSN.mediaLibrary.addCollection(type);
                                }, r.message, function(){location.replace('/media-library');});
                            } else {
                                CreatoorSN.common.showErrorAlert(r.message);
                            }
                           
                        }
                } else {
                    CreatoorSN.mediaLibrary.formWindow.close();
                    CreatoorSN.common.showErrorAlert(CreatoorSN.common.translate('Oops an error occured while executing a script. Please try again later') + '.');
                }
               
            },
            failure: function (o) {
                CreatoorSN.mediaLibrary.formWindow.close();
                CreatoorSN.common.showErrorAlert(CreatoorSN.common.translate('Oops an error occured while executing a script. Please try again later') + '.');
                
            }
        };
        YAHOO.util.Connect.asyncRequest("POST", "/members/media-library/collection-form",callback,postData);
    }, 
    addToCollection : function(target, source){


        var postData = 'type='+CreatoorSN.mediaLibrary.currents.type+'&collectionId='+target+'&items='+source;
        var overlay = disableElement('libraryListContainer');
        var callback = {
            success: function (o) {
                removeElement(overlay);
                if (YAHOO.lang.JSON.isSafe(o.responseText)) {
                    var r = YAHOO.lang.JSON.parse(o.responseText);
                    if(r.success){
                        var el = _$('collection' + target).firstChild;
                        DOM.replaceClass(el, 'empty-folder', 'not-empty-folder');
                        if (CreatoorSN.mediaLibrary.editContents['collection' + target]) {
                            delete CreatoorSN.mediaLibrary.editContents['collection' + target];
                        }

                    } else {
                        if (r.noAuth) {
                            var login = new noAuth(function(noAuthObj)
                            {
                                CreatoorSN.mediaLibrary.addToCollection(type, target, source);
                            }, r.message, function(){location.replace('/media-library');});
                        } else {
                            CreatoorSN.common.showErrorAlert(r.message);
                        }
                    }
                } else {
                    CreatoorSN.common.showErrorAlert(CreatoorSN.common.translate('Oops an error occured while executing a script. Please try again later') + '.');
                }

            },
            failure: function (o) {
                removeElement(overlay);
                CreatoorSN.common.showErrorAlert(CreatoorSN.common.translate('Oops an error occured while executing a script. Please try again later') + '.');

            }
        };
        YAHOO.util.Connect.asyncRequest("POST", "/members/media-library/add-to-collection",callback,postData);
    },

    

    setMediaCategory: function (node, items) {
        var page = CreatoorSN.mediaLibrary.currents.p;
        var postData = 'type=' + CreatoorSN.mediaLibrary.currents.type
                     + '&category=' + node.data.category_id
                     + '&items=' + items
                     + '&page=' + page
                     + '&currentCategory=' + CreatoorSN.categories.highlighted.data.category_id;
        var overlay = disableElement('libraryListContainer');
        var callback = {
            success: function (o) {
                removeElement(overlay);
                if (YAHOO.lang.JSON.isSafe(o.responseText)) {
                    var r = YAHOO.lang.JSON.parse(o.responseText);
                    if (r.success) {
                        if (typeof(r.html) != 'undefined') {
                            _$('thumbnail-library-list').innerHTML = r.html;
                            CreatoorSN.mediaLibrary.paginator.setTotalRecords(r.total,true);
                            CreatoorSN.mediaLibrary.paginator.setPage(r.page, true);
                            CreatoorSN.mediaLibrary.initDragAndDrop();
                            if (CreatoorSN.mediaLibrary.getShowHints()) {
                                CreatoorSN.mediaLibrary.setShowHints();
                            }

                        }
                    } else if (r.noAuth) {
                        var login = new noAuth(function(noAuthObj)
                        {
                            CreatoorSN.mediaLibrary.addToCollection(type, target, source);
                        }, r.message, function(){location.replace('/media-library');});
                    } else {
                        CreatoorSN.common.showErrorAlert(r.message);
                    }
                } else {
                    CreatoorSN.common.showErrorAlert(CreatoorSN.common.translate('Oops an error occured while executing a script. Please try again later') + '.');
                }
            },
            failure: function (o) {
                removeElement(overlay);
                CreatoorSN.common.showErrorAlert(CreatoorSN.common.translate('Oops an error occured while executing a script. Please try again later') + '.');
            }
        };
        YAHOO.util.Connect.asyncRequest("POST", "/members/media-library/set-media-category",callback,postData);
    },

    initDragAndDrop: function(){
            if (CreatoorSN.mediaLibrary.currents.sec == 'collections') {
                var targets = DOM.getElementsByClassName('collection-list-item', 'li');
                for ( var i = 0; i < targets.length; i++) {
                    new YAHOO.util.DDTarget(targets[i]);
                }
            } else {
                EVENT.onContentReady('mediaCategoriesPh', function (){
                    var catTargets = DOM.getElementsByClassName('ygtvcontent', 'td', 'mediaCategoriesPh');
                    for (i = 0; i < catTargets.length; i++) {
                        new YAHOO.util.DDTarget(catTargets[i]);
                    }
                });
            }
            var elements = DOM.getElementsByClassName('media-tools-wrap', 'div');
	        for (var j in elements) {	           
	            new YAHOO.example.DDList(elements[j].parentNode);	           
	        }
    },
    getCollectionItems: function(el){      
        var collection = CreatoorSN.mediaLibrary.defaults.coll;
        CreatoorSN.mediaLibrary.awaitingResponse = false;
        if(el && el.getAttribute('alt')){
            collection = el.id.replace('collection', '');
        }
        HISTORY.navigate('coll', String(collection)); 
    },

    addCategoryCallback: function(categories, node)
    {
        var categoryId = node.data.category_id;
        CreatoorSN.mediaLibrary.getLibraryItems(categoryId, node);
    },

    setCategory: function (categories, node)
    {
        var _node = CreatoorSN.categories.highlighted;
        var categoryId = node.data.category_id;
        CreatoorSN.mediaLibrary.getLibraryItems(categoryId, _node);
    },

    getLibraryItems: function (categoryId, node)
    {        
        CreatoorSN.categories.setSelected(node);
        CreatoorSN.mediaLibrary.awaitingResponse = false;
        HISTORY.navigate('cat', String(node.data.category_id));
        
    },
    getCollections : function(state){
        if (CreatoorSN.mediaLibrary.currents.coll == state) {
            return;
        }
        CreatoorSN.mediaLibrary.currents.coll = state;
        if (CreatoorSN.mediaLibrary.awaitingResponse) {
            CreatoorSN.mediaLibrary.awaitingResponse = false;
            return;
        }
        CreatoorSN.mediaLibrary.getMediaList();
    },

    getCollectionsList: function(state) {
        if (CreatoorSN.mediaLibrary.currents.cp == state) {
            return;
        }
        CreatoorSN.mediaLibrary.currents.cp = state;
        if (CreatoorSN.mediaLibrary.awaitingResponse) {
           return;
        }
        //CreatoorSN.mediaLibrary.awaitingResponse = true;
        var list = _$('mediaCollections');
        if (list) {
            var overlay = disableElement(list.parentNode.parentNode);
        }
        var callback = {
            success: function(o) {
                var error = null;
                if (overlay) {
                    removeElement(overlay);
                }
                CreatoorSN.mediaLibrary.awaitingResponse = false;
                if (o.responseText && JSON.isSafe(o.responseText)) {
                    var r = JSON.parse(o.responseText);
                    if (r.success) {
                        if (list) {
                            list.innerHTML = r.html;
                        }
                        CreatoorSN.mediaLibrary.collectionListpaginator.setPage(r.page, true);
                        CreatoorSN.mediaLibrary.collectionListpaginator.setTotalRecords(r.total, true);
                        var collection = CreatoorSN.mediaLibrary.currents.coll;
                        var elements = DOM.getElementsByClassName('collection-list-item', 'li');
                        DOM.setStyle(elements, "backgroundColor", 'white');
                        if (collection) {
                            var menuElement = _$('collection' + collection);
                            if (menuElement) {
                                DOM.addClass(menuElement.firstChild, 'open-folder');
                                DOM.setStyle(menuElement, "backgroundColor", 'silver');
                            }                            
                        } else {
                            DOM.setStyle('showAll', "backgroundColor", 'silver');
                        }
                        if (String(r.page) != CreatoorSN.mediaLibrary.currents.cp) {
                            CreatoorSN.mediaLibrary.awaitingResponse = true;
                            HISTORY.navigate('cp', String(r.page));
                            CreatoorSN.mediaLibrary.awaitingResponse = false;
                        }
                        CreatoorSN.mediaLibrary.initDragAndDrop();
                    } else if (r.noAuth) {
                        var login = new noAuth(function(noAuthObj) {
                            CreatoorSN.mediaLibrary.getCollectionslist();
                        }, r.message, function(){location.replace('/media-library');});
                    } else {
                        error = r.message;
                    }
                } else {
                    error = CreatoorSN.common.translate('Oops an error occured while executing a script. Please try again later') + '.';
                }
                if (error) {
                   CreatoorSN.common.showErrorAlert(error);
                }
            },
            failure: function(o) {
                if (overlay) {
                    removeElement(overlay);
                }
                CreatoorSN.mediaLibrary.awaitingResponse = false;
                CreatoorSN.common.showErrorAlert(CreatoorSN.common.translate('Oops an error occured while executing a script. Please try again later') + '.');
            }
        };
        var page = state ? state : 1;
        var get = 'type=' + CreatoorSN.mediaLibrary.currents.type + '&page=' + page;
        YAHOO.util.Connect.asyncRequest("GET", "/members/media-library/get-collections-list/?" + get, callback);
    },

    getPage: function(state) {

        if (CreatoorSN.mediaLibrary.currents.p == state) {
            return;
        }
        
        CreatoorSN.mediaLibrary.currents.p = state;
        if (CreatoorSN.mediaLibrary.awaitingResponse) {
            return;
        }
        CreatoorSN.mediaLibrary.getMediaList();
    },

    getLibrary: function(state) {
        
        if (CreatoorSN.mediaLibrary.currents.cat == state) {
            return;
        }
        CreatoorSN.mediaLibrary.currents.cat = state;
        if (CreatoorSN.mediaLibrary.awaitingResponse) {
            return;
        }
        CreatoorSN.mediaLibrary.getMediaList();
    },

    getCategorization: function(state) {
        
        if (state != CreatoorSN.mediaLibrary.currents.section) {
            CreatoorSN.mediaLibrary.toggleCategorization(_$(state + 'Selector'), 'media' + state + 'List', state);
        } else {
            return;
        }
        CreatoorSN.mediaLibrary.currents.sec = state;
        if (CreatoorSN.mediaLibrary.awaitingResponse) {
            return;
        }
        CreatoorSN.mediaLibrary.getMediaList();
    },

    toggleCategorization : function (el, currentId, section, silent) {
        var selectors = el.parentNode.childNodes;
        if (selectors.length) {
            DOM.removeClass(selectors, 'active');
        }
        DOM.addClass(el, 'active');
        var sibling = el.parentNode.nextSibling;
        while (sibling) {
            DOM.setStyle(sibling, 'display', 'none');
            sibling = sibling.nextSibling;
        }
        DOM.setStyle(currentId, 'display', '');
        if (!silent) {
            if (section == 'collections') {
                HISTORY.navigate('sec', String(section));
            } else {
                HISTORY.multiNavigate({
                    sec: String(section),
                    coll: ''
                });
            }
            
        }
        
    },

    selectMedia: function (mode) {
        if (!CreatoorSN.mediaLibrary.formWindow || !CreatoorSN.mediaLibrary.formWindow.opened) {
            var elements = [];
            switch (mode) {
                case 'all':
                    elements = DOM.getElementsByClassName('media-item', 'li', 'thumbnail-library-list');
                    DOM.replaceClass(elements, 'media-item', 'selected-media-item');

                break;
                case 'none':
                    elements = DOM.getElementsByClassName('selected-media-item', 'li', 'thumbnail-library-list');
                    DOM.replaceClass(elements, 'selected-media-item', 'media-item');
                break;
                case 'invert':
                    elements = DOM.getElementsByClassName('media-item', 'li', 'thumbnail-library-list');
                    var selected = DOM.getElementsByClassName('selected-media-item', 'li', 'thumbnail-library-list');
                    DOM.replaceClass(elements, 'media-item', 'selected-media-item');
                    DOM.replaceClass(selected, 'selected-media-item', 'media-item');
                break;
            }
        }
        

    },

    setDynamicTools: function (data) {
        var section = CreatoorSN.mediaLibrary.currents.sec;
        var collection = CreatoorSN.mediaLibrary.currents.coll;
        
        if (section == 'collections') {
            if (!collection) {                
                CreatoorSN.mediaLibrary.setCategorySelectBox();
            } else {
                CreatoorSN.mediaLibrary.setCollectionTools(collection, data);
            }
        } else {
            CreatoorSN.mediaLibrary.clearDynamicTools();
            
        }
    },

    clearDynamicTools: function ()
    {
        var target = _$('mediaDynamicTools');while(target.childNodes.length) {
            removeElement(target.childNodes[0]);
        }
    },

    setCategorySelectBox: function ()
    {

        EVENT.onContentReady('mediaCategoriesPh', function(){
            var category = CreatoorSN.mediaLibrary.currents.cat;
            var select = _$('libraryCategories');
            if (!select) {
                CreatoorSN.mediaLibrary.clearDynamicTools();
                var root = CreatoorSN.mediaLibrary.categoryTree.getRoot();
                var categories = CreatoorSN.categories.toCollection(root, null, category);
                categories.shift();
                var selectBox = new creaDomSelect({
                    name: 'libraryCategories',
                    id: 'libraryCategories',
                    label: {
                        tag: 'span',
                        params: {
                            className: 'library-label',
                            html: CreatoorSN.common.translate('Show folder')
                        }
                    },
                    wrapper: {
                        tag: 'li'
                    }
                });
                for (var i = 0; i < categories.length; i++) {
                    var option = create('option', {text: str_repeat('--', (categories[i].depth - 1)) + categories[i].categoryName, value: categories[i].category_id});
                    if (categories[i].selected) {
                        option.selected = true;
                    }
                    selectBox.addOption(option);
                }
                selectBox.domElement.onchange = function() {
                    HISTORY.navigate('cat', String(selectBox.domElement.options[selectBox.domElement.selectedIndex].value));
               };

                var target = _$('mediaDynamicTools');
                if (target) {
                    selectBox.addTo(target);
                }
            } else {
                for (var i = 0; i < select.options.length; i++) {
                    if (select.options[i].value == category) {
                        select.options[i].selected = true;
                    }
                }
            }
            
        });

    },

    setCollectionTools: function (collection, data)
    {
        var target = _$('mediaCollectionTools' + collection);
        if (!target) {
            CreatoorSN.mediaLibrary.clearDynamicTools();
            var title = data.title;
            var titleEl = new creaDomObject({
                tag: 'a',
                html: title,
                href: '/media/' + data.type + '-collections/user/' + data.userUrl + '/cid/' + data.urlIdentifier,
                wrapper: {
                    tag: 'li',
                    params: {
                        id: 'mediaCollectionTools' + collection,
                        className: 'media-dynamic-tools-title'
                    }
                }
                
            });
            var edit = new creaDomObject({
                tag: 'span',
                className: 'edit-media media-tool',
                params: {
                    title: CreatoorSN.common.translate('Edit collection')
                },
                wrapper: {
                    tag: 'li'
                }
            });
            edit.domElement.onclick = function() {
                CreatoorSN.mediaLibrary.editCollection(true);
                return false;
            };
            var setThumbnail = new creaDomObject({
                tag: 'span',
                className: 'set-as-avatar media-tool',
                params: {
                    title: CreatoorSN.common.translate('Set selected as thumbnail')
                },
                wrapper: {
                    tag: 'li'
                }
            });
            setThumbnail.domElement.onclick = function() {
                CreatoorSN.mediaLibrary.setCollectionThumbnail();
            }
            var setOrder = new creaDomObject({
                tag: 'span',
                className: 'set-order media-tool',
                params: {
                    title: CreatoorSN.common.translate('Reorder collection items')
                },
                wrapper: {
                    tag: 'li'
                }
            });
            setOrder.domElement.onclick = function() {
                CreatoorSN.mediaLibrary.collections.reorder();
            }
            var remove = new creaDomObject({
                tag: 'span',
                className: 'remove-media media-tool',
                params: {
                    title: CreatoorSN.common.translate('Remove Collection')
                },
                wrapper: {
                    tag: 'li'
                }
            });
            remove.domElement.onclick = function() {
                CreatoorSN.mediaLibrary.removeCollection();
            }
            var container = _$('mediaDynamicTools');
            titleEl.addTo(container);
            edit.addTo(container);
            setThumbnail.addTo(container)
            setOrder.addTo(container)
            remove.addTo(container)
        }
    },

    setCollectionThumbnail: function(identifier)
    {
        
        if (!identifier) {
            var elements = CreatoorSN.mediaLibrary.getSelectedElements();
            if (elements.length) {
                identifier = elements[0];
            }
        }
        
        var collection = CreatoorSN.mediaLibrary.currents.coll;
        if (identifier && collection) {
            if (DOM.hasClass(_$('media' + identifier),'collection-thumbnail')) {
                return;
            }
            var postData = 'type=' + CreatoorSN.mediaLibrary.currents.type + '&collection=' + collection + '&media=' + identifier;
            var form = _$('edit-collections' + collection);
            if (form) {
                CreatoorSN.mediaLibrary.formWindow.disable();
                postData += '&gft=1';
            }

            var overlay = disableElement(_$('libraryListContainer'));
            
            var callback = {
                success: function(o) {
                    removeElement(overlay);
                    if (form) {
                        CreatoorSN.mediaLibrary.formWindow.enable();
                    }
                    if (YAHOO.lang.JSON.isSafe(o.responseText)) {
                        var r = YAHOO.lang.JSON.parse(o.responseText);
                        if (r.success) {
                            var thumbnails = DOM.getElementsByClassName('collection-thumbnail', 'li', _$('thumbnail-library-list'));
                            if (thumbnails.length) {
                                DOM.removeClass(thumbnails, 'collection-thumbnail');
                            }
                            DOM.addClass('media' + identifier, 'collection-thumbnail');

                            if (form) {
                                CreatoorSN.mediaLibrary.changeCollectionFormThumbnail(form, identifier, collection, r.thumb);
                                
                            } else {
                                if (CreatoorSN.mediaLibrary.editContents['collection' + collection]) {
                                    delete(CreatoorSN.mediaLibrary.editContents['collection' + collection]);
                                }
                            }
                        } else if(r.noAuth) {
                            var login = new noAuth(function(noAuthObj) {
                                CreatoorSN.mediaLibrary.setCollectionThumbnail(identifier);
                            }, r.message, function(){location.replace('/media-library');});
                        } else {
                            CreatoorSN.common.showErrorAlert(r.message);
                        }
                    } else {
                        CreatoorSN.common.showErrorAlert(CreatoorSN.common.translate('Oops an error occured while executing a script. Please try again later') + '.');
                    }
                },
                failure: function(o) {
                    removeElement(overlay);
                    if (form) {
                        CreatoorSN.mediaLibrary.formWindow.enable();
                    }
                    CreatoorSN.common.showErrorAlert(CreatoorSN.common.translate('Oops an error occured while executing a script. Please try again later') + '.');
                }
            }
            YAHOO.util.Connect.asyncRequest("POST", "/members/media-library/set-collection-thumbnail",callback,postData);
        }
    }
	
		
	
};
CreatoorSN.namespace('mediaLibrary.combo');
CreatoorSN.mediaLibrary.combo = {

    defaults: {
        allowedExtensions: '*.jpg;*.jpeg;*.JPG;*.gif;*.png;*.avi;*.mpeg;*.mpg;*.mp4;*.wmv;*.mov;*.qt;*.flv',
        maxUploadSize: '5M'
    },
    combos: {},

    show: function(id, config) {
        var window = creaDomWindowManager.getFromCache(id);
        if (window) {
            window.open();
            CreatoorSN.mediaLibrary.combo.showUploadButton(id);
            return;
        }
        config = typeof(config) == 'object' && config ? config : {};
        var winconfig = {
            header: {title: CreatoorSN.common.translate('Insert / attach media')},
            width: 500,
            name: id,
            cache: true
        };
        if (config.position) {
            winconfig.position = config.position;
        }
        window = new creaDomWindow(winconfig);
        window.onclose(CreatoorSN.mediaLibrary.combo.hideUploadButton, id);
        window.open()
        window.disable();
        var callback = {
            success: function(o) {
                
                var msg = '';
                if (o.responseText && JSON.isSafe(o.responseText)) {
                    var r = JSON.parse(o.responseText);
                    if (r.success) {
                        window.setContent(r.form);
                        for (var x in r.data) {
                            config[x] = r.data[x];
                        }
                        CreatoorSN.mediaLibrary.combo.initialize(id, config);
                        window.enable();
                    } else if (r.noAuth) {
                        CreatoorSN.mediaLibrary.combo.handleShowError(window);
                        var login = new noAuth(function (noAuthObj){
                            CreatoorSN.mediaLibrary.combo.show(id, config);
                         }, r.message);
                    } else {
                        msg = r.message;
                    }
                } else {
                    msg = CreatoorSN.common.translate('Oops an error occured while executing a script. Please try again later.');
                }
                if (msg) {
                    CreatoorSN.mediaLibrary.combo.handleShowError(window, msg);
                }
            },
            failure: function(o) {
                var msg = CreatoorSN.common.translate('Communication failure.');
                CreatoorSN.mediaLibrary.combo.handleShowError(window, msg);
            }
        };
        var get = 'id=' + id;
        if (config.type) {
            get += '&type=' + config.type;
        }
        YAHOO.util.Connect.asyncRequest(
            'GET',
            '/members/media-library/get-combo/?' + get,
            callback
        );
    },

    hideUploadButton: function(id) {
        if (CreatoorSN.common.browser.ie) {
            var ul = DOM.getElementBy(function(el){return DOM.hasClass(el, 'combo-upload-list')}, 'ul', 'combo-upload-section-' + id);
            DOM.setStyle(ul.firstChild, 'display', 'none');
        }
    },

    showUploadButton: function(id) {
        if (CreatoorSN.common.browser.ie) {
            var ul = DOM.getElementBy(function(el){return DOM.hasClass(el, 'combo-upload-list')}, 'ul', 'combo-upload-section-' + id);
            DOM.setStyle(ul.firstChild, 'display', '');
            
        }
    },

    handleShowError: function(window, msg) {
        window.close();
        creaDomWindowManager.removeFromCache(window.name);
        if (msg) {
            CreatoorSN.common.showErrorAlert(msg);
        }
    },

    initialize: function (id, config) {
        if (config) {
            config = CreatoorSN.mediaLibrary.combo.setConfig(config);
            config.currents = {
                page: 1,
                query: '',
                type: CreatoorSN.mediaLibrary.combo.getCurrentType(id),
                folder: CreatoorSN.mediaLibrary.combo.getCurrentFolder(id),
                section: 'combo-upload'
            };
            config.latest = {
                page: 1,
                query: '',
                type: CreatoorSN.mediaLibrary.combo.getCurrentType(id),
                folder: CreatoorSN.mediaLibrary.combo.getCurrentFolder(id),
                section: 'combo-upload'
            };
            CreatoorSN.mediaLibrary.combo.combos[id] = {config: config};
        }
        if (CreatoorSN.mediaLibrary.combo.getConfig(id)) {
            CreatoorSN.mediaLibrary.combo.initComboControls(id);
            CreatoorSN.mediaLibrary.combo.initComboUpload(id);
            CreatoorSN.mediaLibrary.combo.initComboLibrary(id);
            return true;
        }
        return false;
    },

    setConfig: function(config, defaults) {
        if (!config) {
            config = {};
        }
        if (!defaults) {
            defaults = CreatoorSN.mediaLibrary.combo.defaults;
        }
        for (var x in defaults) {
            if (typeof(config[x]) == 'undefined') {
                if (defaults[x] !== null && typeof(defaults[x]) == 'object') {
                    config[x] = {};
                    CreatoorSN.mediaLibrary.combo.setConfig(config[x], defaults[x]);
                } else {
                    config[x] = defaults[x];
                }
            }

        }
        return config;
    },
    getCurrentType: function (id) {
        var typeEl = DOM.getElementBy(function(el){return DOM.hasClass(el, 'media-combo-type') && DOM.hasClass(el, 'active');}, 'li', 'media-combo-type-selectors-' + id);
        return typeEl.id.replace('-' + id, '');
    },

    getCurrentFolder: function(id) {
        var folderSelect = _$('media-combo-folder-selector-' + id);
        return folderSelect.options[folderSelect.selectedIndex].value;
    },

    initComboControls: function(id) {
        var controlsWrapper = _$('media-combo-controls-' + id);
        if (controlsWrapper) {            
            DOM.getElementsBy(function(){return true;}, 'a', controlsWrapper, CreatoorSN.mediaLibrary.combo.setComboControls, id);            
        }
    },

    setComboControls: function(a, id) {
        var config = CreatoorSN.mediaLibrary.combo.getConfig(id);
        if (DOM.hasClass(a, 'combo-upload')) {

            a.onclick = function() {
                if (!DOM.hasClass(a, 'active-left')) {
                    CreatoorSN.mediaLibrary.combo.showUpload(a, id);
                    config.currents.section = 'combo-upload';
                }
                return false;
            }
        }
        if (DOM.hasClass(a, 'combo-library')) {
            a.onclick = function() {
                if (!DOM.hasClass(a, 'active-right')) {
                    CreatoorSN.mediaLibrary.combo.showLibrary(a, id);
                    config.currents.section = 'combo-library';
                }
                return false;
            }
        }
    },

    showUpload: function(a, id) {
        DOM.addClass(a, 'active-left');
        DOM.removeClass(a.parentNode.nextSibling.firstChild, 'active-right');
        DOM.setStyle('combo-library-section-' + id, 'display', 'none');
        DOM.setStyle('combo-upload-section-' + id, 'display', '');
    },

    showLibrary: function(a, id) {
        DOM.addClass(a, 'active-right');
        DOM.removeClass(a.parentNode.previousSibling.firstChild, 'active-left');
        DOM.setStyle('combo-library-section-' + id, 'display', '');
        DOM.setStyle('combo-upload-section-' + id, 'display', 'none');
    },

    initComboUpload: function(id)
    {
        var config = CreatoorSN.mediaLibrary.combo.getConfig(id);
        if (config) {
            var uploadConfig = {
                button_placeholder_id: 'combo-upload-btn-' + id,
                file_size_limit: config.maxUploadSize + 'MB',
                file_types: config.allowedExtensions,
                post_params: {
                   PHPSESSID: config.sessId
                },
                custom_settings: {
                    progress: {
                        bar: 'combo-upload-progress-bar-' + id,
                        text: 'combo-upload-progress-text-' + id
                    },
                    errors: 'combo-upload-error-list-' + id,
                    callback: {
                        success: {
                            fn: config.callback,
                            params: id
                        },
                        error: CreatoorSN.mediaLibrary.uploadError
                    }
                }
            };
            config.swfu = CreatoorSN.mediaLibrary.swfu.initialize(uploadConfig);
        }
    },

    initComboLibrary: function (id) {
        CreatoorSN.mediaLibrary.combo.initTypeSelectors(id);
        CreatoorSN.mediaLibrary.combo.initFolderSelector(id);
        CreatoorSN.mediaLibrary.combo.initSearch(id);
        CreatoorSN.mediaLibrary.combo.initPagination(id);
        CreatoorSN.mediaLibrary.combo.initList(id);
    },

    initTypeSelectors: function (id) {
        var selectors = DOM.getElementsByClassName('media-combo-type', 'li', 'media-combo-type-selectors-' + id);
        DOM.batch(selectors, CreatoorSN.mediaLibrary.combo.initTypeSelector, {selectors: selectors, id: id});
    },

    initTypeSelector: function(el, params) {
        el.onclick = function() {
            if (!DOM.hasClass('active')) {
                var config = CreatoorSN.mediaLibrary.combo.getConfig(params.id);
                config.latest.type = config.currents.type;
                config.currents.type = this.id.replace('-' + params.id, '');
                config.currents.page = 1;
                DOM.removeClass(params.selectors, 'active');
                DOM.addClass(el, 'active');
                CreatoorSN.mediaLibrary.combo.getComboList(params.id);
            }
        }
    },

    initFolderSelector: function(id) {
        var fs = _$('media-combo-folder-selector-' + id);
        if (fs) {
            var config = CreatoorSN.mediaLibrary.combo.getConfig(id);
            fs.onchange = function() {
                config.latest.folder = config.currents.folder;
                config.currents.folder = this.options[this.selectedIndex].value;
                config.currents.page = 1;
                CreatoorSN.mediaLibrary.combo.getComboList(id);
            }
        }
    },

    initSearch: function(id) {
        var btn = _$('media-combo-search-btn-' + id);
        var cln = _$('media-combo-search-cln-' + id);
        var field = _$('media-combo-search-field-' + id);
        if (btn && field) {            
            btn.onclick = function() {
                var query = trim(field.value);
                var config = CreatoorSN.mediaLibrary.combo.getConfig(id);
                if (query && query != config.currents.query && query.length >= 3) {
                    config.latest.query = config.currents.query;
                    config.currents.query = query;
                    config.currents.page = 1;
                    CreatoorSN.mediaLibrary.combo.getComboList(id);
                }
            }
            if (cln) {
                cln.onclick = function () {
                    var config = CreatoorSN.mediaLibrary.combo.getConfig(id);
                    field.value = '';
                    DOM.setAttribute(field, 'value', '');
                    if (config.currents.query) {
                        config.latest.query = config.currents.query;
                        config.currents.query = '';
                        config.currents.page = 1;
                        CreatoorSN.mediaLibrary.combo.getComboList(id);
                    }
                }
            }
        }
        
    },

    initPagination: function(id) {
        var config = CreatoorSN.mediaLibrary.combo.getConfig(id);
        if (config.total || config.total === 0) {
            if (typeof(config.total) == 'object') {
                CreatoorSN.mediaLibrary.combo.setTotals(id);
                config.paginator = new YAHOO.widget.Paginator({
                    rowsPerPage: config.rpp,
                    pageLinks: 5,
                    totalRecords: config.total[config.currents.type],
                    pageReportTemplate    : "({currentPage} / {totalPages})",
                    template: "{FirstPageLink}{PreviousPageLink}{PageLinks}{CurrentPageReport}{NextPageLink}{LastPageLink}",
                    pageLinkClass: 'media-combo-page',
                    currentPageClass: 'media-combo-current-page',
                    previousPageLinkLabel : '&lt;',
                    previousPageLinkClass: 'media-combo-previous-page',
                    nextPageLinkLabel : '&gt;',
                    nextPageLinkClass: 'media-combo-next-page',
                    firstPageLinkLabel : '&lt;&lt;',
                    firstPageLinkClass: 'media-combo-first-page',
                    lastPageLinkLabel : '&gt;&gt;',
                    lastPageLinkClass: 'media-combo-last-page',
                    pageReportClass: 'media-combo-page-report',
                    containers : ['media-combo-pagination-' + id]
                });
                
                config.paginator.subscribe('changeRequest', CreatoorSN.mediaLibrary.combo.setPage, id);
                config.paginator.render();
                config.paginator.setState({page: config.currents.page});
            }
        }
    },

    setPage: function(state, id) {
        var config = CreatoorSN.mediaLibrary.combo.getConfig(id);
        if (state.page != config.currents.page) {
            config.latest.page = config.currents.page;
            config.currents.page = state.page;
            CreatoorSN.mediaLibrary.combo.getComboList(id);
        }
    },

    setTotals: function(id, totals) {
        var config = CreatoorSN.mediaLibrary.combo.getConfig(id);
        if (totals) {
            if (typeof(totals) == 'object') {
                for (x in totals) {
                    config.total[x] = parseInt(totals[x]);
                }
            } else {
                config.total[config.currents.type] = parseInt(totals);
            }
        }
        var total = 0;
        for (x in config.total) {
            if (x == 'all') continue;
            total += config.total[x];
        }
        config.total['all'] = total;
    },

    initList: function(id) {
        DOM.getElementsBy(function(el){return !DOM.hasClass(el, 'media-play-icon');},
                          'img',
                          'media-combo-media-list-' + id,
                          CreatoorSN.mediaLibrary.combo.initThumb,
                          id
                        );

    },

    initThumb: function(thumb, id) {
        thumb.onmouseover = function(event) {
            CreatoorSN.common.showLargerImage(event, this);
        }
        var config = CreatoorSN.mediaLibrary.combo.getConfig(id);
        thumb.onclick = function() {
            var mti = thumb.id.split('-');
            var data = {
                identifier: mti[1],
                mediaType: mti[0],
                thumbHtml: thumb.parentNode.parentNode.innerHTML,
                thumbnail: thumb.src.replace(/.*members_data.*\//gi, ''),
                fileName: thumb.title
            };
            config.callback(data, null, null, id);
        }
        DOM.setStyle(thumb, 'cursor', 'pointer');
    },

    getComboList: function (id) {
        var config = CreatoorSN.mediaLibrary.combo.getConfig(id);
        if (config) {
            var get = 'id=' + id;
            for (x in config.currents) {
                if (x == 'section') {
                    continue;
                }
                get += '&' + x + '=' + config.currents[x];
            }
            //TODO: handle caching
            if (config.window) {
                config.window.disable();
            } else {
                var cEl = _$('combo-sections-' + id);
                if (cEl) {
                    var overlay = disableElement(cEl.parentNode);
                }
            }
            var callback = {
                success: function (o) {
                    if (config.window) {
                        config.window.enable();
                    } else if(overlay) {
                        removeElement(overlay);
                    }
                    if (o.responseText && JSON.isSafe(o.responseText)) {
                        var r = JSON.parse(o.responseText);
                        if (r.success) {
                            CreatoorSN.mediaLibrary.combo.handleSuccess(id, r);
                        } else {
                            CreatoorSN.mediaLibrary.combo.handleError(id, r.message);                            
                        }
                    } else {
                        CreatoorSN.mediaLibrary.combo.handleError(id, CreatoorSN.common.translate('Oops an error occured while executing a script. Please try again later.'));
                    }
                },
                failure: function (o) {
                    if (config.window) {
                        config.window.enable();
                    } else if(overlay) {
                        removeElement(overlay);
                    }
                    CreatoorSN.mediaLibrary.combo.handleError(id, CreatoorSN.common.translate('Comminication failure.'));
                }
            };
            YAHOO.util.Connect.asyncRequest(
                "GET",
                "/members/media-library/get-combo-list/?" + get,
                callback
            );
            
        }
        
    },

    handleSuccess: function(id, response) {
        var config = CreatoorSN.mediaLibrary.combo.getConfig(id);
        if (config) {
            _$('media-combo-media-list-' + id).innerHTML = response.html;
            config.currents.page = parseInt(response.page);
            config.paginator.setPage(config.currents.page, true);
            CreatoorSN.mediaLibrary.combo.setTotals(id, response.total);
            config.paginator.setTotalRecords(config.total[config.currents.type], true);
            config.latest.type = config.currents.type;
            config.latest.page = config.currents.page;
            config.latest.folder = config.currents.folder;
            config.latest.query = config.currents.query;
            CreatoorSN.mediaLibrary.combo.initList(id);
        }
    },

    handleError: function(id, message) {
        var config = CreatoorSN.mediaLibrary.combo.getConfig(id);
        config.currents.type = config.latest.type;
        config.currents.page = config.latest.page;
        config.currents.folder = config.latest.folder;
        config.currents.query = config.latest.query;
        var ts = DOM.getElementsByClassName('media-combo-type', 'li', 'media-combo-type-selectors-' + id);
        DOM.removeClass(ts, 'active');
        DOM.addClass(config.currents.type + '-' + id, 'active');
        var sf = _$('media-combo-search-field-' + id);
        if (sf) {
            sf.value = config.currents.query;
            DOM.setAttribute(sf, 'value', config.currents.query);
        }
        var fs = _$('media-combo-folder-selector-' + id);
        if (fs) {
            DOM.batch(fs.options, function(el){
                if (el.value == config.currents.folder) {
                    el.selected = true;
                    DOM.setAttribute(el, 'selected', 'selected');
                } else {
                    el.selected = false;
                    el.removeAttribute('selected');
                }
            });
        }
        CreatoorSN.mediaLibrary.combo.showError(id, message);
    },

    showError: function (id, message) {
        var error = _$('media-combo-errors-' + id);        
        if (error) {
            error.innerHTML = message;
            DOM.removeClass(error, 'hidden');
            setTimeout('CreatoorSN.mediaLibrary.combo.clearError("' + id + '")', 3000);
        }
    },

    clearError: function(id) {
        var error = _$('media-combo-errors-' + id);
        if (error) {
            error.innerHTML = '&nbsp;';
            DOM.addClass(error, 'hidden');
        }
    },

    getCombo: function(id) {
        if (CreatoorSN.mediaLibrary.combo.combos[id]) {
            return CreatoorSN.mediaLibrary.combo.combos[id];
        }
        return null;
    },

    getConfig: function(id) {
        if (CreatoorSN.mediaLibrary.combo.combos[id]) {
            return CreatoorSN.mediaLibrary.combo.combos[id].config;
        }
        return null;
    }

}

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
CreatoorSN.namespace('mediaLibrary.handlers');
CreatoorSN.mediaLibrary.handlers = {

    
    fileQueueError: function(file, errorCode, message) {
        try {
            
            var imageName = "/images/media-library/error.gif";
            var errorName = "";
            switch (errorCode) {
            case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:
                    imageName = "/images/media-library/zerobyte.gif";
                    errorName = CreatoorSN.common.translate("File is empty");
                    break;
                case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:
                    imageName = '/images/media-library/toobig.gif';
                    errorName = CreatoorSN.common.translate('File is too big');
                    break;
                case SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED:
                    errorName = CreatoorSN.common.translate('You are trying to upload too many files.');
                break;
                case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:
                default:
                    imageName = "/images/media-library/error.gif";
                    errorName = CreatoorSN.common.translate("Wrong file type");
                    break;
            }
            this.processed = this.processed ? this.processed - 1 : 0;
            var date = new Date();
            var error = {
                image: imageName,
                message: errorName,
                file: file,
                time: date.getHours() + ':' + date.getMinutes() + ':' + date.getSeconds()
            };
            CreatoorSN.mediaLibrary.swfu.refreshErrors(this, error);
            if (this.errorCallback) {
                var that = this;
                this.errorCallback(that, error, that.errorParams);
            }

        } catch (ex) {
            this.debug(ex);
        }
    },

    fileDialogComplete: function(numFilesSelected, numFilesQueued) {
        try {
            
            if (numFilesQueued > 0) {
                
                if (this.progressObj) {
                    this.progressObj.setStatus('<img src="/images/ajax-loader.gif" alt="loader"/> ' + CreatoorSN.common.translate('Initializing upload...'));
                    this.progressObj.completed = false;
                }
                CreatoorSN.mediaLibrary.swfu.addOverlays(this);
                this.processed = numFilesQueued;
                this.startUpload();
            }
        } catch (ex) {
            this.debug(ex);

        }
    },

    uploadStart: function(file) {
        if (this.progressObj) {
            this.progressObj.setStatus('<img src="/images/ajax-loader.gif" alt="loader"/> ' + CreatoorSN.common.translate('Uploading ' + file.name));
            this.progressObj.completed = false;
        }
    },

    uploadProgress: function(file, bytesLoaded) {
        try {
            if (this.progressObj) {
                var percent = Math.ceil((bytesLoaded / file.size) * 100);
                this.progressObj.setProgress(percent);
                if (percent === 100) {
                    this.progressObj.toggleCancel(false, this);
                } else {
                    this.progressObj.toggleCancel(true, this);
                }
            }
        } catch (ex) {
            this.debug(ex);
        }
    },

    uploadSuccess: function(file, serverData) {
        try {
            if (this.progressObj) {
                this.progressObj.reset();
            }
            var fileData = {
                success: false,
                message: CreatoorSN.common.translate('Unknown error')
            };
            if (serverData && YAHOO.lang.JSON.isSafe(serverData)) {
                var r = YAHOO.lang.JSON.parse(serverData);
                if (r.success) {
                    fileData = r;                    
                } else {
                    fileData = {
                        success: false,
                        message: r.message
                    };
                }
            }
            CreatoorSN.mediaLibrary.processUpload(fileData, this.progressObj, this);
        } catch (ex) {

            this.debug(ex);

        }
    },

    uploadComplete: function(file) {
        try {
            /*  I want the next upload to continue automatically so I'll call startUpload here */
            if (this.getStats().files_queued > 0) {
                this.startUpload();
            } else {
                if (this.progressObj) {
                    this.progressObj.setComplete();
                    this.progressObj.completed = true;
                    this.progressObj.toggleCancel(false);
                }
                
            }

        } catch (ex) {
            this.debug(ex);
        }
    },

    uploadError: function(file, errorCode, message) {
        try {
            var errorImage = '/images/media-library/error.gif';
            var that, error;
            switch(errorCode) {
                case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED:
                    error = {
                        image: errorImage,
                        message: CreatoorSN.common.translate('Upload has been canceled.')
                    };
                    
                break;
                case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:
                    error = {
                        image: errorImage,
                        message: CreatoorSN.common.translate('Upload has been stopped.')
                    };
                    
                break;
                case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED:
                    error = {
                        image: errorImage,
                        message: CreatoorSN.common.translate('Upload limit exceeded.')
                    };

                break;
                default:
                    error = {
                      image: errorImage,
                      message: CreatoorSN.common.translate('An error occured during upload')
                    };
                break;

            }
            if (this.processed) {
                this.processed--;
            }
            var date = new Date();
            error.file = file;
            error.time = date.getHours() + ':' + date.getMinutes() + ':' + date.getSeconds();
            CreatoorSN.mediaLibrary.swfu.refreshErrors(this, error);
            that = this;
            if (this.errorCallback) {
                this.errorCallback(that, error, that.errorParams);
                return;
            }
            if (this.progressObj) {
               this.progressObj.setError();
               this.progressObj.setStatus(file.name + ' ' + error.message);
               this.progressObj.toggleCancel(false);
            }
            
            
        } catch (ex) {
            this.debug(ex);
        }
    }


};

CreatoorSN.namespace('mediaLibrary.swfu');
CreatoorSN.mediaLibrary.swfu = {
    defaults: {
        upload_url: 'http://' + location.hostname + '/members/upload/ml-upload',
        post_params: {
            PHPSESSID: _$('sessId') ? _$('sessId').value : null
        },
        // File Upload Settings
        file_size_limit : "100 MB",	// 2MB
        file_types : "'*.jpg;*.JPG;*.gif;*.png;*.avi;*.mpeg;*.mpg;*.mp4;*.mp3;*.m4a;*.wmv;*.mov;*.qt;*.flv'",
        file_types_description : CreatoorSN.common.translate('Media files'),
        file_upload_limit : "0",

        // Event Handler Settings - these functions as defined in Handlers.js
        //  The handlers are not part of SWFUpload but are part of my website and control how
        //  my website reacts to the SWFUpload events.
        file_queue_error_handler : CreatoorSN.mediaLibrary.handlers.fileQueueError,
        file_dialog_complete_handler : CreatoorSN.mediaLibrary.handlers.fileDialogComplete,
        upload_progress_handler : CreatoorSN.mediaLibrary.handlers.uploadProgress,
        upload_error_handler : CreatoorSN.mediaLibrary.handlers.uploadError,
        upload_success_handler : CreatoorSN.mediaLibrary.handlers.uploadSuccess,
        upload_complete_handler : CreatoorSN.mediaLibrary.handlers.uploadComplete,
        upload_start_handler: CreatoorSN.mediaLibrary.handlers.uploadStart,

        // Button Settings
        button_image_url : "/images/media-library/upload-button.gif",
        button_placeholder_id : "uploadPh",
        button_width: 147,
        button_height: 30,
        button_text : '<span class="media-button">' + CreatoorSN.common.translate('Upload') + '</span>',
        button_text_style : '.media-button{color: #ffffff;font-weight: bold;text-align: center; font-family:arial,verdana,trebuchet;}',
        button_text_top_padding: 7,
        button_text_left_padding: 0,
        button_window_mode: SWFUpload.WINDOW_MODE.TRANSPARENT,
        button_cursor: SWFUpload.CURSOR.HAND,

        // Flash Settings
        flash_url : '/swfupload/swfupload.swf',

        custom_settings : null,

        // Debug Settings
        debug: false
        
    },

    setConfig: function(config, defaults) {
        if (!config) {
            config = {};
        }
        if (!defaults) {
            defaults = CreatoorSN.mediaLibrary.swfu.defaults;
        }
        for (var x in defaults) {
            if (typeof(config[x]) == 'undefined') {
                if (defaults[x] !== null && typeof(defaults[x]) == 'object') {
                    config[x] = {};
                    CreatoorSN.mediaLibrary.swfu.setConfig(config[x], defaults[x]);
                } else {
                    config[x] = defaults[x];
                }
            }
            
        }
        return config;
    },

    initialize: function (config) {
        config = CreatoorSN.mediaLibrary.swfu.setConfig(config);
        return CreatoorSN.mediaLibrary.swfu.setCustomObjects(new SWFUpload(config));
    },

    setCustomObjects: function(swfu) {
        if (swfu.customSettings) {
            if (swfu.customSettings.progress && typeof(swfu.customSettings.progress) == 'object') {
                swfu.progressObj = new FileProgress(null, swfu.customSettings.progress);
            }
            swfu.errors = [];
            if (swfu.customSettings.errors) {
                if (typeof(swfu.customSettings.errors) == 'string') {
                    swfu.customSettings.errors = _$(swfu.customSettings.errors);
                }
                if (typeof(swfu.customSettings.errors) == 'object' && swfu.customSettings.errors.tagName) {
                    swfu.errorsEl = swfu.customSettings.errors;
                    var span = new creaDomObject({
                        tag: 'span',
                        html: CreatoorSN.common.translate('Errors') + ': 0'
                    });
                    span.addTo(swfu.errorsEl);
                    DOM.addClass(swfu.errorsEl, 'upload-error-list');
                }
            }
            if (swfu.customSettings.callback) {
                if (swfu.customSettings.callback.success && swfu.customSettings.callback.success.fn) {
                    if (typeof(swfu.customSettings.callback.success.fn) == 'string') {
                        swfu.customSettings.callback.success.fn = eval(swfu.customSettings.callback.success.fn);
                    }
                    if (typeof(swfu.customSettings.callback.success.fn) == 'function') {
                        swfu.successCallback = swfu.customSettings.callback.success.fn;
                        swfu.successParams = swfu.customSettings.callback.success.params;
                    }
                }
                if (swfu.customSettings.callback.error && swfu.customSettings.callback.error.fn) {
                    if (typeof(swfu.customSettings.callback.error.fn) == 'string') {
                        swfu.customSettings.callback.error.fn = eval(swfu.customSettings.callback.error.fn);
                    }
                    if (typeof(swfu.customSettings.callback.error.fn) == 'function') {
                        swfu.errorCallback = swfu.customSettings.callback.error.fn;
                        swfu.errorParams = swfu.customSettings.callback.error.params;
                    }
                }
            }
        }
        
        return swfu;
    },

    clearErrors: function(swfu) {
      swfu.errors = [];
      CreatoorSN.mediaLibrary.swfu.refreshErrors(swfu);
    },

    refreshErrors: function(swfu, error) {
        
        if (error) {
            swfu.errors.push(error);
        }
        if (swfu.errorsEl) {
            swfu.errorsEl.firstChild.innerHTML = CreatoorSN.common.translate('Errors') + ': ' + swfu.errors.length;
            if (swfu.errors.length) {
                DOM.addClass(swfu.errorsEl, 'upload-errors');
                swfu.errorsEl.firstChild.onmouseover = function() {
                    swfu.errorsEl.firstChild.onmouseover = function(){return false;}
                    CreatoorSN.mediaLibrary.swfu.showErrors(swfu);                    
                }
                if (swfu.errorsEl.childNodes.length == 1) {
                    var clear = new creaDomObject({
                        tag: 'a',
                        href: '#',
                        html: '( ' + CreatoorSN.common.translate('clear') + ' )',
                        className: 'clear-upload-errors'
                    });
                    clear.domElement.onclick = function() {
                        CreatoorSN.mediaLibrary.swfu.clearErrors(swfu);
                        return false;
                    }
                    clear.addTo(swfu.errorsEl);
                }
                
            } else {
                DOM.removeClass(swfu.errorsEl, 'upload-errors');
                swfu.errorsEl.firstChild.onmouseover = swfu.errorsEl.firstChild.onmouseout = function(){return false;};
                while(swfu.errorsEl.childNodes.length > 1) {
                    removeElement(swfu.errorsEl.lastChild);
                }
            }
        }
    },

    showErrors: function(swfu) {
        
        if (swfu.errors.length) {
            if (swfu.errorsEl) {
                
                var content = '';
                for (var i = 0; i < swfu.errors.length; i++) {
                    content += '<p>' + swfu.errors[i].time + ' ' + swfu.errors[i].file.name + ': ' + swfu.errors[i].message + '</p>';
                }
                var id = CreatoorSN.common.toolTip(swfu.errorsEl.firstChild, content);
                if (id) {
                    swfu.errorsEl.firstChild.onmouseout  = function(){
                        removeElement(id);
                        swfu.errorsEl.firstChild.onmouseover = function(){
                            swfu.errorsEl.firstChild.onmouseover = function(){return false;}
                            CreatoorSN.mediaLibrary.swfu.showErrors(swfu);
                            
                        };
                    }
                    
                }
                
            }
        }
    },
    
    removeOverlays: function(swfu) {
        if (swfu.overlays && swfu.overlays.length) {
            for (var i = 0; i < swfu.overlays.length; i++) {
                if (typeof(swfu.overlays[i].enable) == 'function') {
                    swfu.overlays[i].enable();
                } else {
                    removeElement(swfu.overlays[i]);
                }
            }
            delete swfu.overlays;
        }
    },

    addOverlays: function (swfu) {
        if (swfu.customSettings.disable && swfu.customSettings.disable.length) {
            var overlays = [];
            for (var i = 0; i < swfu.customSettings.disable.length; i++) {
                if (typeof(swfu.customSettings.disable[i]) == 'object' && typeof(swfu.customSettings.disable[i].disable) == 'function') {
                    swfu.customSettings.disable[i].disable();
                    overlays.push(swfu.customSettings.disable[i]);
                } else {
                    overlays.push(disableElement(swfu.customSettings.disable[i]));
                }
                
            }
            swfu.overlays = overlays;
        }
    },

    clearStatus: function (statusId, clearValue) {
        var status = null;
        if (statusId) {
            status = typeof(statusId) == 'object' && statusId.tagName ? statusId : _$(statusId);
            if (status) {
                clearValue = typeof(clearValue) == 'string' ? clearValue : CreatoorSN.common.translate('Ready ...');
                status.innerHTML = clearValue;
                if (status.previousSibling) {
                    var pb = status.previousSibling.firstChild;
                    if (pb) {
                        pb.innerHTML = '';
                        pb.className = 'progress-bar';
                        pb.style.width = '0px';
                        pb.style.display = 'none';
                    }
                }
            }
        }
    }
};

CreatoorSN.namespace('mediaLibrary.collections');

CreatoorSN.mediaLibrary.collections = {

    collectionsOrders: {},

    reorder: function() {
        var collection = CreatoorSN.mediaLibrary.currents.coll;
        if (collection && _$('thumbnail-library-list').childNodes.length) {
            var overlay = disablePage();
            var width = overlay.clientWidth;
            var container = new creaDomObject({
                tag: 'div',
                className: 'media-collections-order-container',
                style: {
                    width: parseInt(width - 20) + 'px',
                    zIndex: zIndex
                }
            });
            zIndex ++;
            container.addTo(document.body);
            scrollTo(0, 0);
            var save = new creaDomInput({
                type: 'button',
                value: CreatoorSN.common.translate('Save'),
                wrapper: {
                    tag: 'li'
                }
            });
            
            var close = new creaDomInput({
                type: 'button',
                value: CreatoorSN.common.translate('Close'),
                wrapper: {
                    tag: 'li'
                }
            });
            close.domElement.onclick = function() {
                removeElement(overlay);
                container.remove();
            }

            var showHints = new creaDomInput({
                type: 'checkbox',
                checked: CreatoorSN.mediaLibrary.getShowHints(),
                label: {
                    tag: 'span',
                    position: 'right',
                    params: {
                        html: CreatoorSN.common.translate('Show hints'),
                        style: {
                            marginLeft: '5px'
                        }
                    }
                },
                wrapper: {
                    tag: 'li'
                }
            });
            showHints.domElement.onclick = function(){
                CreatoorSN.mediaLibrary.setShowHints(this)
            };
            var buttonsUl = new creaDomObject({
                tag: 'ul',
                className: 'media-collections-order-tools',
                elements: [showHints, save, close]
            });
            buttonsUl.addTo(container);
            var toolsWidth = buttonsUl.domElement.clientWidth;
            DOM.setStyle(buttonsUl.domElement, 'left', parseInt(width - toolsWidth - 10) + 'px');
            var thumbnailList = new creaDomObject({
                tag: 'ul',
                className: 'media-collections-order-list',
                id: 'mediaCollectionOrderList'
            });
            thumbnailList.addTo(container);
            save.domElement.onclick = function() {
                CreatoorSN.mediaLibrary.collections.saveOrder(collection, thumbnailList.domElement, container.domElement, overlay);
            };
            if (CreatoorSN.mediaLibrary.collections.collectionsOrders[collection] && CreatoorSN.mediaLibrary.collections.collectionsOrders[collection].html) {
                thumbnailList.domElement.innerHTML = CreatoorSN.mediaLibrary.collections.collectionsOrders[collection].html;
                CreatoorSN.dragdrop.list.init('mediaCollectionOrderList');
                if (CreatoorSN.mediaLibrary.getShowHints()) {
                    CreatoorSN.mediaLibrary.setShowHints();
                }
                return;
            }
            CreatoorSN.mediaLibrary.collections.getOrderList(collection, thumbnailList.domElement, container.domElement, overlay);
            
        }
    },

    getOrderList: function(collection, list, container, overlay) {
        var progressNote = CreatoorSN.common.showProgressNote(CreatoorSN.common.translate('Loading collection list ...'));
        var callback = {
                success: function (o) {
                    progressNote.close();
                    var errorMsg = null;
                    if (o.responseText && YAHOO.lang.JSON.isSafe(o.responseText)) {
                        var r = YAHOO.lang.JSON.parse(o.responseText);
                        if (r.success) {
                            list.innerHTML = r.html;
                            CreatoorSN.mediaLibrary.collections.collectionsOrders[collection] = {
                                html: r.html,
                                order: CreatoorSN.mediaLibrary.collections.getOrder(list)
                            };
                            CreatoorSN.dragdrop.list.init(list.id);
                            if (CreatoorSN.mediaLibrary.getShowHints()) {
                                CreatoorSN.mediaLibrary.setShowHints();
                            }
                        } else if (r.noAuth) {
                            var login = new noAuth(function (noAuthObj){
	                            CreatoorSN.mediaLibrary.collections.getOrderList(collection, container, overlay);
	                         }, r.message, function(){location.replace('/media-library');});
                        } else {
                            errorMsg = r.message;
                        }
                    } else {
                        errorMsg = CreatoorSN.common.translate('Oops an error occured while executing a script. Please try again later') + '.';
                    }
                    if (errorMsg) {
                        removeElement(overlay);
                        removeElement(container);
                        zIndex--;
                        CreatoorSN.common.showErrorAlert(errorMsg);
                    }
                },
                failure: function (o) {
                    progressNote.close();
                    removeElement(overlay);
                    removeElement(container);
                    zIndex--;
                    CreatoorSN.common.showErrorAlert(CreatoorSN.common.translate('Oops an error occured while executing a script. Please try again later') + '.');
                }
            };
            var request = YAHOO.util.Connect.asyncRequest(
            "GET",
            "/members/media-library/get-collection-order-list/?type=" + CreatoorSN.mediaLibrary.currents.type + "&collection=" + collection,
            callback
        );
    },
    saveOrder: function(collection, list, container, overlay) {
        var order = CreatoorSN.mediaLibrary.collections.getOrder(list);
        if (CreatoorSN.mediaLibrary.collections.collectionsOrders[collection] &&
            CreatoorSN.mediaLibrary.collections.collectionsOrders[collection].order &&
            CreatoorSN.mediaLibrary.collections.collectionsOrders[collection].order != order)
        {
            var postData = 'type=' + CreatoorSN.mediaLibrary.currents.type + '&collection=' + collection + '&order=' + order;
            var savingNote = CreatoorSN.common.showProgressNote(CreatoorSN.common.translate('Saving data ...'));
            var callback = {
                success: function (o) {
                    savingNote.close();
                    var errorMsg = null;
                    if (o.responseText && YAHOO.lang.JSON.isSafe(o.responseText)) {
                        var r = YAHOO.lang.JSON.parse(o.responseText);
                        if (r.success) {
                            CreatoorSN.mediaLibrary.collections.collectionsOrders[collection].order = order
                            CreatoorSN.mediaLibrary.collections.collectionsOrders[collection].html = list.innerHTML;
                            removeElement(overlay);
                            removeElement(container);
                            zIndex--;
                            CreatoorSN.mediaLibrary.getMediaList();
                        } else if (r.noAuth) {
                            var login = new noAuth(function (noAuthObj){
	                            CreatoorSN.mediaLibrary.collections.saveOrder(collection, list);
	                         }, r.message, function(){location.replace('/media-library');});
                        } else {
                            errorMsg = r.message;
                        }

                    } else {
                        errorMsg = CreatoorSN.common.translate('Oops an error occured while executing a script. Please try again later') + '.';
                    }
                    if (errorMsg) {
                        CreatoorSN.common.showErrorAlert(errorMsg);
                    }
                },
                failure: function (o) {
                    savingNote.close();
                    CreatoorSN.common.showErrorAlert(CreatoorSN.common.translate('Oops an error occured while executing a script. Please try again later') + '.');
                }
            };
            YAHOO.util.Connect.asyncRequest("POST", "/members/media-library/reorder-collection/", callback, postData);
        }
        
        
    },

    getOrder: function(list) {
        list = list ? list : _$('mediaCollectionOrderList');
        var order = '';
        for (var i = 0; i < list.childNodes.length; i++) {
            order += order ? '+' : '';
            order += list.childNodes[i].id.replace('orderMedia', '');
        }
        return order;
        
    }


}

CreatoorSN.namespace('mediaLibrary.media');

CreatoorSN.mediaLibrary.media = {
    paginator: null,
    requestSent: false,
    currentType: null,
    collections: '',
    currentUser: null,
    historyDefaults: {},


    initialize: function(profileId) {
        CreatoorSN.mediaLibrary.media.currentUser = profileId;
        var current = null;
        if (profileId) {
            current = location.pathname.replace(/\/users\/([1-9]*[a-zA-Z]*){1}\/media\//gi, '').split('-');
        } else {
            var pathArray = location.pathname.replace(/\/media\//gi, '').trim('/').split('/');
            current = pathArray[0].split('-');
            if (pathArray.length > 1 && pathArray[1] == 'user') {
                if (pathArray[2]) {
                    CreatoorSN.mediaLibrary.media.currentUser = pathArray[2];
                }
            }
        }
        CreatoorSN.mediaLibrary.media.currentType = current[0];
        CreatoorSN.mediaLibrary.media.collections = (current.length > 1 && current[1] == 'collections') ? 1 : '';
        
    },

    handlePagination: function(state) {
        HISTORY.navigate('p', String(state.page));
    },

    setOrder: function(order) {
        HISTORY.navigate('o', String(order));
    },

    setSearchQuery: function () {

    },

    getContent: function() {
        if (CreatoorSN.mediaLibrary.media.requestSent) {
            return;
        }
        var order = HISTORY.getBookmarkedState('o');
        order = order ? String(order) : CreatoorSN.mediaLibrary.media.historyDefaults.o;
        var page = HISTORY.getBookmarkedState('p');
        var query = HISTORY.getBookmarkedState('q');
        query = query ? String(query) : CreatoorSN.mediaLibrary.media.historyDefaults.q;
        page = page ? page : 1;
        var get = 'page=' + page
                + '&type=' + CreatoorSN.mediaLibrary.media.currentType
                + '&user=' + CreatoorSN.mediaLibrary.media.currentUser
                + '&collections=' + CreatoorSN.mediaLibrary.media.collections
                + '&total=' + CreatoorSN.mediaLibrary.media.paginator.getTotalRecords()
                + '&rpp=' + CreatoorSN.mediaLibrary.media.paginator.getRowsPerPage();
        if (order !== HISTORY.getCurrentState('o')) {
            get += '&order=' + order;
        }
        if (query !== HISTORY.getCurrentState('q')) {
            get += '&query=' + query;
        }
        var overlay = disableElement('mediaList');
        CreatoorSN.mediaLibrary.media.requestSent = true;
        var error = null;
        var callback = {
            success: function (o) {
                removeElement(overlay);
                CreatoorSN.mediaLibrary.media.requestSent = false;
                if (o.responseText && JSON.isSafe(o.responseText)) {
                    var r = JSON.parse(o.responseText);
                    if (r.success) {
                        _$('mediaList').innerHTML = r.html;
                        CreatoorSN.mediaLibrary.media.paginator.setPage(r.page, true);
                        CreatoorSN.mediaLibrary.media.paginator.setTotalRecords(r.total, true);
                    } else {
                        error = r.message;
                    }
                } else {
                    error = CreatoorSN.common.translate('Oops an error occured while executing a script. Please try again later') + '.';
                }
                if (error) {
                    CreatoorSN.common.showErrorAlert(error);
                }
            },
            failure: function(o) {
                removeElement(overlay);
                CreatoorSN.mediaLibrary.media.requestSent = false;
                CreatoorSN.common.showErrorAlert(CreatoorSN.common.translate('Oops an error occured while executing a script. Please try again later') + '.');
            }
        };
        YAHOO.util.Connect.asyncRequest("GET", "/default/media/get-list/?" + get ,callback);

    }
}



