// console emu
if( console == undefined ) {
    var console = {
        log: function() {},
        dir: function() {}
    }
}
var j$ = jQuery.noConflict();

var NINIMO = {};

NINIMO.addComment = function( mediaId ){

		/** variables for comment api */
		var commentVars = {
			'comment' :   j$("#commentInput").val()
		};

		var url = 'media.php?task=item_view&id=' + mediaId;

		if( window.location.href.match( "media.php" ) && !window.location.href.match( "#" ) ){
			j$.post(
				url,
				commentVars,
				function( resp ){
					window.location.href = window.location.href;
				},
				"text"
			);
		} else {
			NINIMO.panel.load( url, commentVars );
		}
}


NINIMO.deleteComment = function( commentId, mediaId ) {
	NINIMO.confirm(SELanguage.Translate(1025), SELanguage.Translate(31232743), NINIMO.deleteCommentOnConfirmed, commentId, mediaId );
}
NINIMO.deleteCommentOnConfirmed = function( commentId, mediaId ){
	if( ( commentId && commentId > 0 ) && ( mediaId && mediaId > 0 ) ){

		var url = 'media.php?task=delete_comment&id=' + mediaId;

		if( window.location.href.match( "media.php" ) ){
			j$.post(
				url,
				{ 'cid' : commentId },
				function( resp ){
					window.location.href= window.location.href;
				},
				"text"
			);
		} else{
			NINIMO.panel.load( url, { 'cid' : commentId } );
		}

	}
}

NINIMO.panelForm = {};

NINIMO.panelForm.handleSubmit = function() {

	j$( '#panel form' ).submit( function() {
		_this = j$( this );
		j$.post( _this.attr( 'action' ), _this.serialize(), function( data ) {
			if ( data == 'ok' ) {
			  var vissza = window.location.href.split('#');
			  window.location.href = vissza[0];
				return false;
			}
			NINIMO.panel.set( data );
			NINIMO.panelForm.handleSubmit ();
		});
		return false;
	});
}


NINIMO.resizeOverlay = function() {
	j$( "#overlay" ).css( { 'height': j$(document).height() + 'px' } );
	j$( "#sub_overlay" ).css( { 'height': j$(document).height() + 'px' } );
	j$( "#confirm_overlay" ).css( { 'height': j$(document).height() + 'px' } );
}

var overlayTimer;

NINIMO.tagging = {
    enabled: false,
    start: function(){
        j$('.pnl-widget-media-view .showroom').addClass('tagging');
        j$('.pnl-widget-media-view .wiw' ).show().find('message').html('Bokj az arcokra, hogy tageld oket');
        NINIMO.tagging.enabled = true;
    },

    cancel: function(){
        j$(".pnl-widget-tagger input:text").val("");
        j$('.pnl-widget-media-view .showroom .tagger').hide();
    },

    remove: function( tagEl ){
        var $tag = j$(tagEl).closest('span');
        var tagId = parseInt( $tag.attr('id').split('-')[1] );
        var userId = parseInt( $tag.attr('id').split('-')[2] );
        j$.post('media.php?task=removeTag', { 'tagId': tagId });
        $tag.remove();
        j$('#tag-' + userId + '-' + tagId ).remove();
//        console.log( j$('#tag-' + userId + '-' + tagId ), )
    },

    end: function( itemId ){
        j$('.pnl-widget-media-view .showroom').removeClass('tagging');
        j$('.pnl-widget-media-view .wiw' ).hide();
        NINIMO.tagging.enabled = false;
        var $tags = j$('.pnl-widget-media-view .showroom .tag');
        var tags = [];
        $tags.each(function(){
            var $this = j$(this);
            var info = [ $this.attr('id').split('-')[2], parseInt($this.css('left')), parseInt($this.css('top')) ];
            var userId = parseInt( $this.attr('id').split('-')[1] );
            info.push( userId || $this.find('span').html() );
            tags.push( info.join(',') );
        });

        j$.post('media.php?task=storeTags', {'tags[]': tags, 'itemId': itemId }, function( result ){
            NINIMO.panel.reload();
            /*
            if( result.ids ) {
                for( var idx in result.ids ) {
                    j$($tags[idx]).attr( 'id', 'tag-' + result.ids[idx][0] + '-' + result.ids[idx][1] );
                }
            }*/
        }, 'json');
    },

    add: function( ev ){
//        if( ev.originalTarget !== this ) { console.log( ev, this ); return; }
        if( j$( ev.originalTarget ).closest('.tagger, .tag').length > 0 ) return;

        var coords = this.getCoordinates();
        var pos = [ev.pageX - coords.left - 75, ev.pageY - coords.top - 75];
        if( pos[0] < 0 ) pos[0] = 0;
        if( pos[1] < 0 ) pos[1] = 0;

        j$('.pnl-widget-media-view .showroom .tag').each(function(){
            var _id = j$(this).attr('id').split('-')[1];
            j$(".pnl-widget-tagger .container input[value=" + _id + "]").closest('label').remove();
        });


        j$('.pnl-widget-media-view .showroom .tagger').css({ left: pos[0] + 'px', top: pos[1] + 'px' }).show().draggable({ containment: 'parent'});
//        j$('.pnl-widget-tagger').show();
    },

    done: function() {
    },

    store: function(){
        var $checked = j$(".pnl-widget-tagger .container input:visible:checked");
        $tagger = j$('.pnl-widget-media-view .showroom .tagger');
        var pos = [parseInt($tagger.css('left')), parseInt($tagger.css('top'))];
        if( $checked.length > 0 ) {
            var name = $checked.next('.name').html();
            var userId = $checked.val();
        } else {
            var name = j$(".pnl-widget-tagger input:text").val();
            var userId = 0;
        }

        j$('.pnl-widget-media-view .showroom').append('<span id="tag-' + userId + '-0" class="tag" style="left: ' + pos[0] + 'px; top: ' + pos[1] + 'px;"><span>' + name + '</span></span>');
        j$(".pnl-widget-tagger .container label").show();
        j$(".pnl-widget-tagger input:text").val("");
        j$('.pnl-widget-media-view .showroom .tagger').hide();
    },

    filter: function( val ){
        if( typeof val == "object" ) val = null;
	if( NINIMO.timer ) clearTimeout( NINIMO.timer );
	NINIMO.timer = setTimeout( function(){
		var $labels = j$(".pnl-widget-tagger .container label");
		if( val != undefined && val.length > 0 ) {
                // escape val and convert
                val = val.replace(/([#;&,\.\+\*~':"!\^\$\[\]\(\)=>\|\/])/, "\\$1");
                val = val.replace(/Ö|Ó|ö|ó|ő|Ő/g, "o");
                val = val.replace(/Ü|ü|Ú|ú/g, "u");
                val = val.replace(/Á|á/g, "a");
                val = val.replace(/É|é/g, "e");
                val = val.replace(/Í|í/g, "i");
                val = val.toLowerCase();

                $labels.hide().find("span.searchData:contains(" + val + ")").parents('label').show();
            } else{
                $labels.show();
            }
            if( j$(".pnl-widget-tagger .container label:visible:first input").click().length == 0 ){
                j$(".pnl-widget-tagger .container .message").html("Nincs talalat").show();
            } else {
                j$(".pnl-widget-tagger .container .message").hide();
            }
	}, 250 );
    }
};

NINIMO.editImage = function( img, itemId, reloadUrl ) {
    var url = 'media.php?task=editImage&id=' + itemId;
    var editorWindow = window.open( url, '_blank');
    var editorTimer = setInterval( function(){
        if( editorWindow.closed ) {
//            j$('#item-' + itemId + ' .image > a img')[0].src += "&" + Math.round( Math.random(200) * 100 );
            if( !reloadUrl ) NINIMO.panel.reload();
            else NINIMO.panel.load( reloadUrl );
            clearInterval( editorTimer );
        }
    }, 1000 );
}

NINIMO.updateImage = function( itemId ) {
    j$('#item-' + itemId + ' .image > a img')[0].src += "&" + Math.round( Math.random(200) * 100 );
}

// media funcions
NINIMO.rotateImage = function( imageId, direction ) {
    var angle = direction == 'R' ? -90 : 90;
    $item = j$('#item-' + imageId + ' .image > a img');
    var bg = $item.attr('src');
//    console.log( bg );
//    return false;
    var originalAngle = parseInt( bg.match(/.*?-([0-9]{1,3})/)[1] );
    angle += originalAngle;
    if( angle < 0 ) angle += 360;
    angle = angle % 360;
    $item.attr('src', bg.replace(/(.*?)-[0-9]{1,3}/, '$1-' + angle));
    j$.post('media.php?task=rotate', {'id': imageId, 'angle': angle } );
}

NINIMO.deleteImage = function( imageId, noreload, confirmed ) {
    if( !confirmed ) {
        NINIMO.confirm(SELanguage.Translate(31235923), SELanguage.Translate(31239033), NINIMO.deleteImage, imageId, noreload );
        return false;
    }

    j$.post('media.php?task=deleteItem', {'id': imageId }, function(){
        // if( !noreload ) NINIMO.panel.reload();
        // else NINIMO.panel.load( noreload );
        j$( '.pnl-widget-media-browse #item-' + imageId ).hide(200, function () {
          j$( '.pnl-widget-media-browse #item-' + imageId ).remove();
        });
    } );
}

NINIMO.selectAlbumOwner = function( albumId ) {
    NINIMO.changeAlbumOwner.albumId = albumId;
    NINIMO.subpanel.load( 'media.php?task=selectChild', {'albumId': albumId } );
}

NINIMO.changeAlbumOwner = function(){
    var $selected= j$('#sub_panel_content .selected');
    if( $selected.length ) {
        var childId = parseInt( $selected.attr('id').split('-')[1] );
        j$.post('media.php?task=changeChild', { 'album_id': NINIMO.changeAlbumOwner.albumId, 'child_id': childId }, function(){
            NINIMO.subpanel.hide();
            NINIMO.panel.reload();
        });
    }
}
NINIMO.changeAlbumOwner.albumId = 0;

NINIMO.selectAlbum = function( itemId ) {
    NINIMO.changeAlbum.itemId = itemId;
    NINIMO.subpanel.load( 'media.php?task=selectSet', {'item_id': itemId, 'in_smoothbox': 1 } );
}

NINIMO.changeAlbum = function(){
    var $selected= j$('#sub_panel_content .selected');
    var method = j$('.pnl-widget-set-selection .selector input:checked').val() == 'copy' ? 'copy' : 'move';

    if( $selected.length ) {
        var albumId = parseInt( $selected.attr('id').split('-')[1] );
        j$.post('media.php?task=changeSet', { 'item_id': NINIMO.changeAlbum.itemId, 'album_id': albumId, 'method': method }, function(){
            NINIMO.subpanel.hide();
            NINIMO.panel.reload();
        });
    }
}

NINIMO.changeAlbum.itemId = 0;

NINIMO.selectCover = function( albumId ) {
    NINIMO.changeCover.albumId = albumId;
    NINIMO.subpanel.load( 'media.php?task=selectCover', {'albumId': albumId } );
}

NINIMO.changeCover = function(){
    var $selected = j$('#sub_panel_content .selected');
    if( $selected.length ) {
        var imageId = parseInt( $selected.attr('id').split('-')[1] );
        j$.post('media.php?task=changeCover', {'albumId': NINIMO.changeCover.albumId, 'imageId': imageId });
//        var newBg = $selected.css('background').replace(/_100x100/, '_195x180');
        var newBg = $selected.find('img').attr('src').replace(/_100x100/, '_195x180');
        j$('#album-' + NINIMO.changeCover.albumId + " .image > a:first img" ).attr('src', newBg );
        NINIMO.subpanel.hide();
    } else {
        j$('#sub_panel_content .message').html('Nem valasztott kepet!');
        return false;
    }
}
NINIMO.changeCover.albumId = 0;

NINIMO.editAlbumTexts = function( albumId ) {
    if( NINIMO.editAlbumTexts.current > 0 ) NINIMO.editAlbumTexts.cancel( NINIMO.editAlbumTexts.current );
    NINIMO.editAlbumTexts.current = albumId;
    var $item = j$('#album-' + albumId );
    var $desc = $item.find('textarea');
    var $title = $item.find('input');

    $desc[0].originalValue = $desc.val()
    $title[0].originalValue = $title.val();

    $item.find('.info').hide().end().find('.editform').show();
    $title.focus();

    $title.keypress(function(key){if (key.keyCode == 13) {
      NINIMO.editAlbumTexts.save( albumId );
    }});

    $title.keyup(function(key){if (key.keyCode == 27){
      NINIMO.editAlbumTexts.cancel( albumId );
    }});
}

NINIMO.editAlbumTexts.current = 0;

NINIMO.editAlbumTexts.cancel = function( albumId ) {
    NINIMO.editAlbumTexts.current = 0;
    var $item = j$('#album-' + albumId );
    var $desc = $item.find('textarea');
    var $title = $item.find('input');
    $desc.val( $desc[0].originalValue );
    $title.val( $title[0].originalValue );
    $item.find('.info').show().end().find('.editform').hide();
}

NINIMO.editAlbumTexts.save = function( albumId ) {
    NINIMO.editAlbumTexts.current = 0;
    var $item = j$('#album-' + albumId );
    var $desc = $item.find('textarea');
    var $title = $item.find('input');
    $item.find('a.title').html( $title.val() );
    var _val = $desc.val();
    // trim enters
    _val = _val.replace(/^[\r\n]+|[\r\n]+$/, '');
    // max 3 rows
    _val = _val.split(/\r\n|\r|\n/g);
    var _lines = _val.length;
    _val = _val.slice(0,3);
    var _newlines = _val.length;
    _val = _val.join("\r\n");

    // max 80 chars
    _val = _val.replace(/^[\r\n]+|[\r\n]+$/, '');
    if( ( _val.length ) > 40 ) _val = _val.substring( 0, 80 ) + "...";
    else if( _lines < _newlines ) _val += "...";
    $item.find('p.description').html( _val.replace(/(\r\n|\r|\n)/g, '<br/>') );
    $item.find('.info').show().end().find('.editform').hide();

    j$.post('media.php?task=changeText', {'albumId': albumId, 'title': $title.val(), 'description': _val } );
}


NINIMO.editMediaTitle = function( itemId ) {
    if( NINIMO.editMediaTitle.current > 0 ) NINIMO.editMediaTitle.cancel( NINIMO.editMediaTitle.current );
    NINIMO.editMediaTitle.current = itemId;
    var $item = j$('#item-' + itemId );
    var $title = $item.find('input');

    $title[0].originalValue = $title.val();

    $item.find('.info').hide().end().find('.editform').show();
    $title.focus();

    $title.keypress(function(key){if (key.keyCode == 13) {
      NINIMO.editMediaTitle.save( itemId );
    }});

    $title.keyup(function(key){if (key.keyCode == 27){
      NINIMO.editMediaTitle.cancel( itemId );
    }});
}

NINIMO.editMediaTitle.current = 0;

NINIMO.editMediaTitle.cancel = function( itemId ) {
    NINIMO.editMediaTitle.current = 0;
    var $item = j$('#item-' + itemId );
    var $title = $item.find('input');
    $title.val( $title[0].originalValue );
    $item.find('.info').show().end().find('.editform').hide();
}

NINIMO.editMediaTitle.save = function( itemId ) {
    NINIMO.editMediaTitle.current = 0;
    var $item = j$('#item-' + itemId );
    var $title = $item.find('input');
    $title[0].originalValue = $title.val();

    $item.find('a.title').html( $title.val() );
    $item.find('.info').show().end().find('.editform').hide();

    j$.post('media.php?task=changeMediaTitle', {'itemId': itemId, 'title': $title.val()} );
}



// use by event handler!
NINIMO.avatarImageId = 0;
NINIMO.uploadHandler = function( item ) {

	var $this	= j$(this);
	var data	= {
		previewImage:	j$("#" + $this.attr("rel")),
		targetUrl:		$this.attr("href"),
		"name":			$this.attr("id") || $this.attr("rel")
	}

	// create ajaxupload instance
	NINIMO.avatarUploader = new AjaxUpload( "#" + data["name"], {
		action:		data.targetUrl,
		data:			{ id: j$("#id").val() || 0 },
		"name":		data["name"],
		autoSubmit:	true,
		responseType:	"json",
		onComplete:	function(file, response) {
			if( response.success ) {
				NINIMO.avatarUploader.setData( {imageId: response.imageId } );
				data["previewImage"].attr("src", response.imageUrl + "?r=" + Math.round( Math.random() * 1000 ) );
			}
		}
	});

	return false;
}

NINIMO.avatarOnUploadSuccess = function() {
	// refresh avatar images
	j$('.avatar').each(function() {
		this.src = this.src + "?r=" +  (new Date()).getTime();
	});
	// close panel
	NINIMO.panel.hide();
}

NINIMO.submitLink = function() {
	var form = j$(this).parents("form");
	if( form ) form.submit();
}

NINIMO.childrenRelatives = {};
NINIMO.timer = false;

NINIMO.saveChildren = function() {
    $form = j$(this).closest('form');//j$('form[name=new_children]');
    var errors = [];
    var last = false;
    j$('#createChildErrors').html();
    $form.find('input.required, select.required').each( function() {
        if( this.value.length < 1 || ( this.tagName.toLowerCase() == "select" && this.value < 1 ) ) {
            var $label = j$( this ).closest('.ui-textinput').addClass('error').prev('label').addClass('error');
            if( $label.length < 1 ) $label = j$(this).siblings('label').addClass('error');
            if( last !== $label.html() ) {
                errors.push( ('<li>' + $label.html() + ' ' + SELanguage.Translate(31239028)) );
            }
            last = $label.html();
        } else {
            var $label = j$( this ).closest('.ui-textinput').removeClass('error').prev('label').removeClass('error');
            if( $label.length < 1 ) $label = j$(this).siblings('label').removeClass('error');
        }
    } );

    if( errors.length > 0 ) {
        j$("#createChildErrors").html( '<ul>' + errors.join("") + '</ul>' );
        return false;
    }
    else $form.submit();
}

NINIMO.deleteChildren = function( children_id, confirmed ) {
    if( !confirmed ) {
        NINIMO.confirm( SELanguage.Translate(31231300), SELanguage.Translate(31235264), NINIMO.deleteChildren, children_id )
    } else {
        j$.post( "children_editprofile.php?task=delete", {'id': children_id}, function() {
            location.href = 'user_children.php';
        } );
    }
}

NINIMO.removeChildrenRelative = function( children_id, user_id, el, confirmed ) {
    if( !confirmed ) {
        NINIMO.confirm( SELanguage.Translate(31236500), SELanguage.Translate(31238318), NINIMO.removeChildrenRelative, children_id, user_id, el );
    } else {
        //j$(el).closest('li').remove();
        j$(el).closest('li').prependTo('#search_results');
        j$.post( "children_editprofile.php?task=remove_relative", {'id': children_id, 'relative_id': user_id}, function() {
        } );
    }
}

NINIMO.friendsPager = {
    page: 1,
    pages: 0,
    limit: 10,
    items: 0,
    update: function() {
        var $items = j$('#friendList li:visible');
        var $pager = j$('.bk_user-friends-list .pager');
        var self = NINIMO.friendsPager;
        self.items = $items.length;

        self.pages = Math.ceil( self.items / self.limit );
        if( self.pages < 2 ) {
            $pager.find('.prev, .next').addClass('disabled');
        } else {
            if( self.page == 1 ) {
                $pager.find('.prev').addClass('disabled');
            } else if( self.page > 1 ) {
                $pager.find('.prev').removeClass('disabled');
            }
            if( self.page < self.pages ) {
                $pager.find('.next').removeClass('disabled');
            } else {
                $pager.find('.next').addClass('disabled');
            }
        }
        j$("#friendList ul").css( { height: ( self.pages > 1 ) ? ( self.pages * ( 65.5 * self.limit ) ) + 'px' : 'auto' } );
        if( self.page > self.pages ) self.page = self.pages;
        if( self.page <= 0 ) self.page = 1;
        j$('.bk_user-friends-list .pager .center').html(SELanguage.Translate(31239070) + ': ' + self.page);
        j$("#friendList").scrollTo( { top: ( ( self.page - 1 ) * ( 65.5 * self.limit ) ), left: 0 }, 200 );
    },

    nextPage: function() {
        var self = NINIMO.friendsPager;
        if( self.pages <= self.page ) return;
        self.page += 1;
        self.update();
        j$('.bk_user-friends-list .pager .center').html(SELanguage.Translate(31239070) + ': ' + self.page);
    },

    prevPage: function() {
        var self = NINIMO.friendsPager;
        if( self.page < 1 ) return;
        self.page -= 1;
        self.update();
        j$('.bk_user-friends-list .pager .center').html(SELanguage.Translate(31239070) + ': ' + self.page);
    }

}

NINIMO.changeFriendType = function( friend_id, type ) {
    if( !type ) {
        NINIMO.panel.load('user_friends.php?task=chooseFriendType&for=change', { friend_id: friend_id });
        return false;
    }
	j$.post("user_friends.php?task=acceptFriend", { "user_id": friend_id, 'type': type }, function() {
		if (window.location.href.indexOf('/profile.php') != -1) {
			NINIMO.panel.hide();
			window.location.href = window.location.href.replace(/#.*/, '');
		} else {
			NINIMO.panel.hide();
		}
    });
}

NINIMO.setOwnChildren = function( children_fname, children_id, user_id, confirmed ) {
  // ha az elso parameter object, es nincs tobb param atadva, akkor live click eventrol jovunk
  if( typeof user_id != 'number' ) {
        children_id = null;
        var val = this.checked;
        var user_id	= j$(this).attr("id").split("-")[1];
    } else {
        if( !confirmed ) {
            NINIMO.confirm(SELanguage.Translate(31232334), SELanguage.TranslateFormatted(31239027, [children_fname]), NINIMO.setOwnChildren, children_fname, children_id, user_id );
            return;
        }
        var val = 0;
    }
	var children_id = children_id || j$("#children_id").val();

	j$.post("children_editprofile.php?task=set_own_children&id=" + children_id, {"user_id": user_id, "value": ( val ? 1 : 0 ) }, function(){
	   if( confirmed ) location.href = location.href;
	});
}

NINIMO.setCanEdit = function() {
	var children_id = j$("#children_id").val();
	var user_id	= j$(this).attr("id").split("-")[1];
	j$.post("children_editprofile.php?task=set_can_edit&id=" + children_id, {"user_id": user_id, "value": this.checked ? 1 : 0});
}

NINIMO.setRelative = function() {
	var children_id = j$("#children_id").val();
	var user_id	= j$(this).attr("id").split("-")[1];
	j$.post("children_editprofile.php?task=set_relative&id=" + children_id, {"user_id": user_id});
	j$(this).prependTo("#pending_relatives");
	return false;
}

NINIMO.acceptChild = function( user_id ) {
	var container	= j$(this).parents("li");
	if( !container.length ) container = j$(this).parents(".actions");
    NINIMO.acceptFriend( parseInt( container.attr("id").split("-")[1] ), 'default' );
}

NINIMO.acceptFriend = function( user_id, friend_type ) {
	if( typeof user_id == 'object' ) {
	   user_id = null;
	   friend_type = null;
	}
    if( !user_id || !friend_type ) {
	var container	= j$(this).parents("li");
	if( !container.length ) container = j$(this).parents(".actions");

	    var user_id	= parseInt( container.attr("id").split("-")[1] );
        NINIMO.panel.load('user_friends.php?task=chooseFriendType&for=accept', { friend_id: user_id });
        return;
    }
	j$.post("user_friends.php?task=acceptFriend", { "user_id": user_id, 'type': friend_type }, function() {
		if( j$(".bk_user-friends-list").length > 0 ) {
		    var container = j$('#userBox-' + user_id );
			if( container.siblings().length < 1 ) j$("#emptyListMessage").show();
			// decrease tab counter
			var $tab = j$('.ui-tabs li.active a');
			var count = parseInt( $tab.html().match(/\(([0-9]+)\)/)[1] ) - 1;
			$tab.html( $tab.html().replace(/\(([0-9]+)\)/, '(' + count + ')') );
			//console.log( container, container.find('.actions').hasClass('owner') );
			if( !container.find('.actions').hasClass('owner') ){
			// increase target tab counter
			$tab = friend_type == 'friend' ? j$( j$('.ui-tabs li')[1] ) : j$( j$('.ui-tabs li')[0] );
			var count = parseInt( $tab.html().match(/\(([0-9]+)\)/)[1] ) + 1;
			$tab.html( $tab.html().replace(/\(([0-9]+)\)/, '(' + count + ')') );
            }
			container.remove();
			NINIMO.panel.hide();
		} else if( j$(".bk_user-children-view").length > 0 ) {
			j$(".bk_user-children-view .actions").hide();
		} else if( j$(".bk_user-friends-view").length > 0 ) {
            j$(".bk_user-friends-view .actions").removeClass('marked').addClass('friend');
		}
		NINIMO.friendsPager.update();
	});
}


NINIMO.addChildren = function() {
	var container = j$(this).parents(".actions");
//console.log( container );
	var user_id	= parseInt( container.attr("id").split("-")[1] );
	j$.post("user_friends.php?task=addChildren", { "user_id": user_id }, function() {
		container.hide();
	});
}

NINIMO.addFriend = function( user_id, friend_type ) {
	if( typeof user_id == 'object' ) {
	   user_id = null;
	   friend_type = null;
	}
    if( !user_id || !friend_type ) {
	var container = j$(this).parents(".actions");
	    var user_id	= parseInt( container.attr("id").split("-")[1] );
        //NINIMO.panel.load('user_friends.php?task=chooseFriendType', { friend_id: user_id });
        NINIMO.panel.handleLink.call( { "rel": "panel", "href": "user_friends.php?task=chooseFriendType&friend_id=" + user_id } );
        return;
    }
	j$.post("user_friends.php?task=addFriend", { "user_id": user_id, 'type': friend_type }, function() {
        j$('.actions.foreign').removeClass('foreign').addClass('marked');
		if (window.location.href.indexOf('/profile.php') != -1 || window.location.href.indexOf('/user_wall.php') != -1) {
			window.location.href = window.location.href.replace(/#.*/,'');
		} else {
	        NINIMO.panel.handleLink.call( { "rel": "panel", "href": "#back" } );
		}
	});
}

NINIMO.removeFriend = function( ev, sel, el, confirmed ) {

//    return;
    if( !confirmed ) {
        NINIMO.confirm(SELanguage.Translate(31236500), SELanguage.Translate(31238318), NINIMO.removeFriend, ev, sel, this );
        return;
    }

	var container	= j$(el||this).parents("li");
	if( !container.length ) container = j$(el||this).parents(".actions");

	var user_id	= parseInt( container.attr("id").split("-")[1] );
	j$.post("user_friends.php?task=removeFriend", { "user_id": user_id }, function() {
		if (window.location.href.indexOf('/profile.php') != -1 || window.location.href.indexOf('/user_wall.php') != -1) {
			window.location.href = window.location.href.replace(/#.*/,'');
		}

		if( container.parents(".bk_user-friends-list").length > 0 ) {
			if( container.siblings().length < 1 ) j$("#emptyListMessage").show();
			// decrease tab counter
			var $tab = j$('.ui-tabs li.active a');
			var count = parseInt( $tab.html().match(/\(([0-9]+)\)/)[1] ) - 1;
			$tab.html( $tab.html().replace(/\(([0-9]+)\)/, '(' + count + ')') );
			container.remove();

		} else if( container.parents(".bk_user-children-view").length > 0 ) {
			container.removeClass('friend').addClass('foreign')
		} else if( container.parents(".bk_user-friends-view").length > 0 ) {
			container.removeClass('friend').addClass('foreign')
		}
		NINIMO.friendsPager.update();
	});

}


NINIMO.disagreeFriend = function() {
	var container	= j$(this).parents("li");
	if( !container.length ) container = j$(this).parents(".actions");

	var user_id	= parseInt( container.attr("id").split("-")[1] );
	j$.post("user_friends.php?task=disagreeFriend", { "user_id": user_id }, function() {
		if (window.location.href.indexOf('/profile.php') != -1 || window.location.href.indexOf('/user_wall.php') != -1) {
			window.location.href = window.location.href.replace(/#.*/,'');
		}

		if( container.parents(".bk_user-friends-list").length > 0 ) {
			if( container.siblings().length < 1 ) j$("#emptyListMessage").show();
			// decrease tab counter
			var $tab = j$('.ui-tabs li.active a');
			var count = parseInt( $tab.html().match(/\(([0-9]+)\)/)[1] ) - 1;
			$tab.html( $tab.html().replace(/\(([0-9]+)\)/, '(' + count + ')') );
			container.remove();

		} else if( container.parents(".bk_user-children-view").length > 0 ) {
			container.hide();
		} else if( container.parents(".bk_user-friends-view").length > 0 ) {
			container.removeClass('marked').addClass('foreign');
		}
		NINIMO.friendsPager.update();
	});
}


// PANEL FUNCTIONS
NINIMO.panel = {};
NINIMO.panel.current = false;
NINIMO.panel.params = {};
NINIMO.panel.url = "";

j$().hashchange(function(){
	// NINIMO.baseUrl
	var lh = location.hash.replace('#', '');

	if (lh.indexOf('pn|') == 0) lh = lh.replace('pn|', ''); else return;

	if (NINIMO.panel.current) {
		var cu = (NINIMO.panel.current && NINIMO.panel.history && NINIMO.panel.history.length > 0 ? NINIMO.panel.history[NINIMO.panel.history.length - 1].replace(NINIMO.baseUrl, '') : false);
		if (cu === false && NINIMO.panel.current.url) cu = NINIMO.panel.current.url.replace(NINIMO.baseUrl, '');
		var pu = (NINIMO.panel.current && NINIMO.panel.history && NINIMO.panel.history.length > 1 ? NINIMO.panel.history[NINIMO.panel.history.length - 2].replace(NINIMO.baseUrl, '') : false);
	}

	if (lh == cu) {
		// console.log('do nothing');
	}
	else if (lh == pu && lh != '') {
		// console.log('back');
		// valoszinuleg back gombot nyomott
		NINIMO.panel.history = NINIMO.panel.history.slice( 0, NINIMO.panel.history.length - 3 );
		NINIMO.panel.open(NINIMO.baseUrl + lh)
		NINIMO.subpanel.hide();
	}
	else if (lh == '') {
		// console.log('empty hash');
		// nincs hash, panel bezar
		NINIMO.subpanel.hide();
		NINIMO.subpanel.history = [];
		NINIMO.subpanel.current = false;

		NINIMO.panel.hide();
		NINIMO.panel.history = [];
		NINIMO.panel.current = false;
	}
	else if (lh != pu && lh != cu) {
		// console.log('ez panel nyitas kene legyen, valszeg fwd');
		NINIMO.panel.load(NINIMO.baseUrl + lh);
	}
	else {
		// console.log('else');
	}
});

NINIMO.panel.putUrlInHash = function (url) {
	window.location.hash = 'pn|' + url.replace(NINIMO.baseUrl, '');
}

NINIMO.panel.scrollToPanelIfNeeded = function( selector ) {

  if ( !selector ) return;

  var ws = j$( window ).scrollTop();
  var pt = j$( selector ).offset().top;

  if ( ws > pt ) {
    j$.scrollTo( selector, 700 );
  }
}

NINIMO.panel.load = function( url, params, obj, cb ) {
//	if( url == undefined ){
//		// http://devlocal.ninimo.com/children_editprofile.php?task=site&id=5
//		var regexp = /http:\/\/.*?.php\?.*?task=site.*?&id=(\d*)/;
//		var id = regexp.exec(window.location.href);
//		if (id[1]) var url = 'media.php?user_id='+id[1];
//		else var url = "media.php";
//	}

	NINIMO.panel.params = params || {};
	j$.extend( NINIMO.panel.params, { in_smoothbox:'1' } );
	if( !url ) return false;

	NINIMO.panel.url = url;

	j$.post(
		url,
		NINIMO.panel.params,
			function( resp ){
			j$( "#panel_content div.r" ).html( "" );
			j$( "#panel_content div.r" ).html( resp );

			j$( "#panel" ).show	(
				1,
				function(){

          NINIMO.panel.scrollToPanelIfNeeded( '#panel_content' );

					/** callback from DOM element --// rel=panel({cb:"login.focus"}) //--  */
					if( NINIMO.panel.params.cb ){
						NINIMO.panel.params.cb.call();
					}
					/** google analytics */
					if( env == "production" ) NINIMO.panel.gA();
				}
			);
		},
		"text"
	);
	NINIMO.panel.current = {
	   'url':      url,
	   'params':   params,
	   'cb':       cb
	};
	NINIMO.panel.putUrlInHash(url);
}
NINIMO.panel.gA = function(){
	var _gaq = _gaq || [];
	_gaq.push(
		  [ '_setAccount', 'UA-13043928-1' ]
	);
	_gaq.push( [ '_trackPageview', NINIMO.panel.url ] );
}
//LOGIN FUNCTION
NINIMO.login = {};
NINIMO.login.focus = function(){
	if( j$( "#email" ).val() == "" ){
		j$( "#email" ).focus();
	}
}

// SUBPANEL FUNCTIONS
NINIMO.subpanel = {};
NINIMO.subpanel.current = false;
NINIMO.subpanel.load = function( url, params, cb ) {
	var params = params || {};
	if( !url ) return false;

	j$("#sub_panel_content div.r").html("");
	j$("#sub_panel_content div.r").load( url, params, function( resp ){

    NINIMO.panel.scrollToPanelIfNeeded( '#sub_panel_content' );

		if( cb ) cb.call();
		j$("#sub_panel").show(
			1,
			function(){

			}
		).find('#sub_panel_content').css({'top': document.getScrollTop() + 100 + 'px' });
	} )
	NINIMO.subpanel.current = {
	   'url':      url,
	   'params':   params,
	   'cb':       cb
	};
	// NINIMO.panel.putUrlInHash(url);
}


NINIMO.panel.reload = function(){

    if( NINIMO.panel.history[ 0 ] == undefined ){
		window.location.href = window.location.href;
	} else {
		var p = NINIMO.panel;
		if( p.current )
			p.load( p.current.url, p.current.params, p.current.cb );
	}
}

NINIMO.panel.set = function( content ) {
	j$("#panel_content div.r").html( content );
}

NINIMO.subpanel.set = function( content ) {
	j$("#sub_panel_content div.r").html( content );
}

NINIMO.panel.hide =  function() {
    // j$.scrollTo('.bk_common-site_header', 700);
    NINIMO.panel.history = [];
    NINIMO.panel.current = false;
    j$("#panel").hide();
    window.location.hash = '';
}

NINIMO.subpanel.hide =  function() {
    // j$.scrollTo('.bk_common-site_header', 700);
	j$("#sub_panel").hide();
}

// HANDLE LINK REL SYNTAX:
// <a href="children_media.php?user_id=12" rel="panel({media_id:44, other:'values'})">valami</a>
NINIMO.panel.history = [];
NINIMO.panel.handleLink = function() {
//    return false;
	var rel	= j$(this).attr("rel");
	var data	= {};
	if( !rel || rel.substring(0,5) != "panel" ) return true;

	// check additional params
	if( rel.length > 5 ) {
		try{
			eval( "data = " + rel.substring( 6, rel.length - 1 ) );
		} catch( e ) {
			console ? console.log( e ) : NULL;
		}
	}

	var _href = this.href;
//	if( _href.substring( _href.length - 7 ) == "#back-1" ) _href = NINIMO.panel.history[ NINIMO.panel.history.length - 1 ];
	if( _href.substring( _href.length - 5 ) == "#back" ) {
	    _href = NINIMO.panel.history[ NINIMO.panel.history.length - 2 ];
	    NINIMO.panel.history = NINIMO.panel.history.slice( 0, NINIMO.panel.history.length - 2 );
    }
    NINIMO.panel.history.push( _href );

	if( !_href ) NINIMO.panel.hide();

	NINIMO.panel.load( _href, data, this );
	return false;
}

NINIMO.albums = {};

NINIMO.albums.create = function() {
    try{
    var form = j$(this).parents("form");
    var childrenId = parseInt( form.attr("id").split("-")[1] || 0 );
    var fieldValues = {};
    form.find("input, textarea").each( function(){
        fieldValues[this.name] = this.value;
    } );
    j$.post( "media.php?task=create_set&user_id=" + childrenId, fieldValues, function( response ) {

        if( response.success ) {
          NINIMO.panel.handleLink.call( { "rel": "panel","href": "#back"} );

          albumListItem = NINIMO.util.basicHTMLTemplate( NINIMO.templates.albumListItem, {
            id: response.id,
            title: response.title
          });

          j$( '.pnl-widget-album-browse #albumUser-' + response.userId ).prepend( albumListItem ).find( '#album-' + response.id ).hide( 0 ).show( 200 );
          if ( j$( '.pnl-widget-album-browse #albumUser-' + response.userId ).parents( '.scrollable-wrap' ).css( 'display' ) == 'none' ) {
            j$( '.pnl-widget-album-browse #albumUser-' + response.userId ).parents( '.scrollable-wrap' ).show().siblings( 'p' ).hide();
          }

          // Scroll to the left, otherwise the newly created album won't be visible
          j$(".pnl-widget-album-browse .scrollable").data("scrollable").seekTo( 0 );

        }else{ form.find(".errorMsg").html( response.message ).show() }
    }, 'json' );
    } catch( e ) {
//        console.log( e );
    }
    return false;
}

NINIMO.confirm = function( title, question, callback ) {

	j$("#confirm_panel_content div.h h2").html( title );
    j$("#confirm_panel_content div.b p").html( question );
    j$("#confirm_panel").show().find('#confirm_panel_content').css({'top': document.getScrollTop() + 100 + 'px' });

    // randa - de mekkora:) - hack, ez van...
    var argsName = [];
    var args = arguments;
    for( i = 3; i < arguments.length; i++ ) argsName.push( "args[" + i + "]");
    NINIMO.confirmCallback = function(){
        var res = eval( "callback( " + argsName.join(',') + ( argsName.length > 0 ? ', ' : '' ) + "true )" );
        if( res !== false ) j$("#confirm_panel").hide();
    };
}

/*
NINIMO.handleConfirmLink = function() {
    var rel = $(this).attr('rel');
    if( /^confirm/.test( rel ) ) {
        [, title, question, callbackFn] = rel.match( /^confirm\((.*?)\|(.*?)\|(.*?)\)/ );
        NINIMO.confirm( title, question, 'NINIMO.' + callbackFn );
        return false;
    }
}
*/

function microtime(get_as_float) {
    var now = new Date().getTime() / 1000;
    var s = parseInt(now, 10);

    return (get_as_float) ? now : (Math.round((now - s) * 1000) / 1000) + ' ' + s;
}
    var ajaxUploadInstances = [];

// UPLOADER HELPER CLASS
NINIMO.uploader = function( container, HTMLSample, flashUploader ) {
    // private vars
    var current;
    var self            = this; // for other scope, ex. event called functions
    var queue           = [];
    var uploadStarted   = 0;
    var uploadTotalSize = 0;
    var currentUploaded = 0;
    var totalUploaded   = 0;
    var skippedFiles    = [];
    var timer           = 0;
    var ajaxUploadConf  = {};

	/** upload error - flash */
    var onFileFailure   = {};

    var uploadButtons   = [];

    // public vars - for config
    this.usedStorage    = 0;
    this.limit          = 15*1024;
    this.mode           = 'js';
    this.albumId        = 0;

    this.init = function() {

        self.container      = j$( container  || "#uploadQueue");
        self.HTMLSample     = j$( HTMLSample || "#uploadQueueSample");
        self.flashUploader  = flashUploader  || 'flashUploader';

        if( self.mode == 'js' ) {
            ajaxUploadConf = {
                action:     'media.php?task=upload&mode=js',
                name:       'Filedata',
                autoSubmit: false,
                onComplete: self.onAjaxUploaded,
                onChange:   self.onFileSelected,
                data:       {'albumId': self.albumId }
            };
            self.addUploadButton(0);
            j$('#compression').hide();
        }

        queue = [];

        self.container.find( '.row .col3 a.cancel' ).live('click', this.removeFile );
        j$('#startUpload').click( Uploader.startUpload );
    }

    // constructor
    function construct() {
    }

    // AJAX UPLOAD FUNCTIONS
    this.addUploadButton = function( id ){
        var $button = j$('#addFileButton').clone();
        $button.attr('id', 'addFileButton-' + id );
        $button.insertAfter('#addFileButton');
        uploadButtons.push( $button );
        ajaxUploadInstances[id] = new AjaxUpload( 'addFileButton-' + id, ajaxUploadConf );
    }

    this.onAjaxUploaded = function( file, response ){
        var queueId = getIdByFileName( file );
        var success, size;
        [ success, size ] = response.split('|');
        if( success == 'SUCCESS' ) {
            self.updateFileSize( queueId, size );
            self.onFileComplete( file );
        } else {
            self.addSkippedFile( { 'name': file } );
            self.removeFile( queueId );
            self.ajaxUploadNext();
        }

        delete ajaxUploadInstances[queueId];
        self.ajaxUploadNext();
    }

    this.updateFileSize = function( queueId, size ){

        if( size ) {
            var _size = Math.round( size / 10.24 ) / 100;
            if( _size > 1024 ) {
                _size = Math.round( _size / 10.24 ) / 100;
                _size += " MB";
            } else {
                _size += " KB"
            }
        } else var _size = '';

        j$('#queue-' + queueId).find( '.col2' ).html( _size );
        queue[queueId]['size'] = size;
        self.updateUploadInfo();
    }

    this.onFileSelected = function( file, ext ) {
        self.onAddFile( {'name': file, 'size': 0 } );
        j$('#addFileButton').siblings().hide();
        self.addUploadButton( queue.length );
    }

    this.ajaxUploadNext = function(){
        for( var idx in ajaxUploadInstances ) {
            if( ajaxUploadInstances[idx] !== undefined && ajaxUploadInstances[idx]._input ) {
                if( ajaxUploadInstances[idx].submit() !== false ) {
                    self.onFileOpen( queue[idx]['name'] );
                    return;
                }
            }
        }
        // if no more instance
        if( skippedFiles.length == 0 ){
            setTimeout( function(){
                self.onQueueComplete();
            }, 2000 );
        }
    }

    this.setPermission = function( permObject ) {
        for( var idx in ajaxUploadInstances ){
            if( ajaxUploadInstances[idx] != undefined ){
                if( ajaxUploadInstances[idx] instanceof  AjaxUpload ){
                    permObject.albumId = self.albumId;
                    ajaxUploadInstances[idx].setData(permObject);
                }
            }
        }
    }

    this.addSkippedFile = function( fileObj ){
        skippedFiles.push( fileObj['name'] );
        if( timer ) clearTimeout( timer );
        timer = setTimeout( function() {
            NINIMO.confirm( SELanguage.Translate(31237269), SELanguage.Translate(31236587) + '<br/>' + SELanguage.Translate(31237788) +  ':<ul class="skippedFiles"><li>' + skippedFiles.join('</li><li>') + '</li></ul>', function(){
                    j$("#confirm_panel_content .cancel").show();
                    skippedFiles = [];
                    if( self.mode == 'js' ){
                        NINIMO.panel.handleLink.call( { "rel": "panel","href": "#back"} );
                    }
            });
            j$("#confirm_panel_content .cancel").hide();
            skippedFiles = [];
        });
    }


    // private functions
    var getIdByFileName = function( fileName ) {
        var index = 0;
        for( idx in queue ) {
            if( queue[idx]['name'] == fileName ) return idx;
            index++
        }
    }

    // public functions for flash uploader
    this.onAddFile = function( fileObj ) {
        if( fileObj['size'] && self.limit > 0 ) {
            if( fileObj['size'] + self.usedStorage + self.getQueueSize( true )  > self.limit ) {
                self.addSkippedFile( fileObj );
                if( self.mode == 'flash' ) document.getElementById('flashUploader').removeFile( fileObj['name'] );
                return false;
            }
        }
        queue.push( fileObj );

        var newQueueId      = queue.length - 1;
        var newQueueItem    = this.HTMLSample.clone();

        if( fileObj['size'] ) {
            var _size = Math.round( fileObj['size'] / 10.24 ) / 100;
            if( _size > 1024 ) {
                _size = Math.round( _size / 10.24 ) / 100;
                _size += " MB";
            } else {
                _size += " KB"
            }
        } else var _size = '';

		var thisfileName = "";
		if( fileObj['name'].length > 15 ){
			thisfileName = fileObj['name'].substring( 0, 40 ) + "...";
		} else {
			thisfileName = fileObj['name'];
		}

        newQueueItem
            .attr( 'id', 'queue-' + newQueueId )
            .find( '.col1' ).html( fileObj['name'] ).end()
            .find( '.col2' ).html(  _size );

        this.HTMLSample.before( newQueueItem );
        this.updateUploadInfo();
    }

    this.onQueueStart = function() {
        uploadStarted = microtime( true );
        uploadTotalSize = this.getQueueSize( true );

        var $perms = j$("#permission");
        var permType = $perms.find('input[name=permType]:checked').val();
        var access = [];

        if( permType == 0 ) {
            if( self.mode == 'flash' ){
                document.getElementById('flashUploader').setPermission( 0 );
            } else {
                self.setPermission( { 'userLevel': 0 } );
            }
        } else {
          $perms.find('input[name=access]:checked').each( function(){
             access.push( this.value );
          });
          if( self.mode == 'flash' ){
              document.getElementById('flashUploader').setPermission( 1, access );
          } else {
              self.setPermission( {'userLevel': 1, 'friendType': access.join(',') });
          }
        }

        if( self.mode == 'flash' ){
            j$('#uploadRemainTime').closest('p').show();
        }
    };

    this.onFileOpen = function( fileName ) {
        current = this.container.find( '#queue-' + getIdByFileName( fileName ) ).addClass('active')
        current.siblings().removeClass('active');
    };

    this.onFileProgress = function( fileName, percent ) {
        currentUploaded = queue[ getIdByFileName( fileName ) ]['size'] * percent;
        percent *= 100;
        current.find('.under').css( { 'width': percent + '%' } );
        j$('#uploadRemainTime').html( this.getRemainTime() );
    };

    this.onFileComplete = function( fileName ) {
        var queueId = getIdByFileName( fileName );

        if( self.limit ){
            //var $sL = j$('#storageLeft');
            var $sP = j$('#storagePercent');
            //$sL.html( Math.round( ( ( 1 * $sL.html() ) - ( ( queue[queueId]['size'] / 1024 / 10.24 ) / 100 ) ) * 100 ) / 100 );

            var newPercent = Math.round( ( ( queue[queueId]['size'] * 10 ) / ( 15 * 1024 ) ) ) / 100;
            var oldPercent = $sP.css('width');
            var storagePercent = Math.min(100, Math.round ( ( Uploader.usedStorage + totalUploaded ) * 100 / Uploader.limit ) );
            // console.log( "storagePercent: " + storagePercent );
            $sP.css({'width': storagePercent + '%'});
        }

        this.container.find( '#queue-' + queueId ).removeClass('active').addClass('finished');
		this.container.scrollTo('#queue-'+queueId, 'fast');

        totalUploaded += queue[queueId]['size'];

        delete queue[queueId];
        this.updateUploadInfo();
        j$('#uploadRemainTime').html( this.getRemainTime() );
    };

	this.onFileFailure = function( fileName, error ){
		if( !Uploader.error ){
			Uploader.error = [];
		}
		Uploader.error[ "file" ] = fileName;
		Uploader.error[ "message" ] = error;
		if( !Uploader.filesArr ){
			Uploader.filesArr = [];
		}
		Uploader.filesArr.push( Uploader.error );
		j$( "#uploadQueue  .col1" ).each( function(){
			if( Uploader.error[ "file" ] == j$( this ).html() ){
				j$( this ).html( Uploader.error[ "message" ] );
			}
		} );
	};

    this.onFileError = function( fileName, error ){};

    this.onError = function( fileName, error ){};

    this.onQueueComplete = function() {
      if( !Uploader.filesArr ){
         j$('#uploadRemainTime').closest('p').hide();
         j$('.uploader-inner').hide();
         j$('.upload-complete').show();
         j$.scrollTo('#panel_content', 'fast');
        } else {
         j$('#uploadRemainTime').closest('p').hide();
         j$('.uploader-inner').hide();
         var thisStr = "";
         for( var i = 0; i < Uploader.filesArr.length; i++ ){
             thisStr += Uploader.filesArr[ i ][ "file" ] + ": " + Uploader.filesArr[ i ][ "message" ] + "<br /><br />";
                };

                    Uploader.filesArr = [];

         j$( ".upload-error .b" ).html( thisStr );
         j$('.upload-error').show();
         j$.scrollTo('#panel_content', 'fast');
        }
    }

    // public functions
    this.removeFile = function( queueId ) {
        var $row;
        if( queueId instanceof j$.Event ) {
            $row = j$( this ).closest('.row');
            queueId = $row.attr('id').split('-')[1];
        } else {
            $row = self.container.find( '#queue-' + queueId );
        }
        if( self.mode == 'flash' ){
            document.getElementById('flashUploader').removeFile( queue[queueId]['name'] );
        } else {
            ajaxUploadInstances[ queueId ].destroy();
            j$('#addFileButton-' + queueId).remove();
        }
        delete queue[queueId];
        $row.remove();
        self.updateUploadInfo();
    };

    this.updateUploadInfo = function() {
        // sum file sizes
        j$("#uploadQueueSize").html( this.getQueueSize() );
        // count queue items
        j$("#uploadQueueCount").html( this.getQueueCount() );
        if ( self.limit ) {
            var uploadPercent = Math.min(Math.round( (  Uploader.usedStorage + totalUploaded + this.getQueueSize( true ) ) * 100 / Uploader.limit ), 100);
/*
            console.log( 'Uploader.usedStorage: ' + Uploader.usedStorage );
            console.log( 'totaluploaded ' + totalUploaded );
            console.log( 'this.getQueueSize() ' + this.getQueueSize( true ) );
            console.log( 'Uploader.limit ' + Uploader.limit );
            console.log( 'uploadPercent ' + uploadPercent );
            console.log( '------------------------------------------------' );
*/
            j$('#uploadStoragePercent').css({'width': uploadPercent + '%'});
        }

        if( this.getQueueCount() > 0 ) j$('.pnl-upload .queue').show();
            else j$('.pnl-upload .queue').hide();
    }

    this.getRemainTime = function() {
        var elapsedTime = microtime( true ) - uploadStarted;

        if( elapsedTime < 1 ) return SELanguage.Translate(31233665);

        var bytePerSec = ( totalUploaded + currentUploaded ) / elapsedTime;
        var remainUploadSize = uploadTotalSize - ( totalUploaded + currentUploaded );
        var secLeft = remainUploadSize / bytePerSec;

        var timeLeft = [];

        // if more than 1 hour
        if( secLeft >= 3600 ) {
            timeLeft.push( Math.round( secLeft / 3600 ) + " " + SELanguage.Translate(31230591) );
            secLeft = secLeft % 3600;
        }
        // if more than 1 minute
        if( secLeft >= 60 ) {
            timeLeft.push( Math.round( secLeft / 60 ) + " " + SELanguage.Translate(31234303) );
            secLeft = secLeft % 60;
        }

        // if more than 1 sec
        if( secLeft >= 1 ) {
            timeLeft.push( Math.round( secLeft ) + " " + SELanguage.Translate(31232046) );
        }
        if( timeLeft.length < 1 ) return SELanguage.Translate(31230593);

        return timeLeft.join(' ');
    }

    this.getQueueSize = function( bytes ) {
        var size = 0;
        for( var idx in queue ) {
            size = size + ( queue[idx]['size'] ? queue[idx]['size'] : 0 ) * 1;
        }
        return bytes ? size : ( Math.round( size / 1024 / 10.24 ) / 100 );
    }

    this.getQueueCount = function() {
        var count = 0;
        for( var idx in queue ) {
            if( typeof queue[idx]['size'] != 'undefined' ) count++;
        }
        return count;
    }

    this.startUpload = function() {
        if( self.mode == 'flash' ){
            document.getElementById('flashUploader').startUpload();
        } else {
            try{
                self.onQueueStart();
                self.ajaxUploadNext();
            } catch(e){console.log(e)}
        }
        return false;
    };

    this.uploadComplete = function() {
      var match = window.location.href.match(/album_id=(\d+)/);
      var link = 'media.php?task=album_view&id=' + match[1];
      if (window.location.href.indexOf('/media.php') != -1) {
        window.location.href = link;
      } else {
        NINIMO.panel.handleLink.call( { "rel": "panel","href": link } );
      }
    }

    // call constructor
    construct();
}

var Uploader;

// atmeneti fuggvenyek a flash-nek
function onAddFile( fileObject ){
    Uploader.onAddFile( fileObject );
}
function onQueueStart(){
    Uploader.onQueueStart();
}
function onFileOpen( fileName ){
	Uploader.onFileOpen( fileName );
}
function onFileProgress( fileName, percent ){
	Uploader.onFileProgress( fileName, percent );
}
function onFileComplete( fileName ){
    Uploader.onFileComplete( fileName );
}
function onFileError( fileName, errorMessage ){
    Uploader.onFileError( fileName, errorMessage );
}
function onError( fileName, errorMessage ){~
    Uploader.onError( fileName, errorMessage );
}
function onQueueComplete(){
    Uploader.onQueueComplete();
}
function startUpload(){
	Uploader.startUpload();
}
function onFileFailure(  fileName, errorMessage  ){
	Uploader.onFileFailure();
}

//get session id for flash apps

NINIMO.getSession = function() {
	 return j$.cookie(sname);
}

// album functions
NINIMO.deleteAlbum = function( albumId, confirmed ){
    if( !confirmed ) {
        NINIMO.confirm(SELanguage.Translate(31233092), SELanguage.Translate(31231883), NINIMO.deleteAlbum, albumId );
        return false;
    }
    j$.post('media.php?task=deleteAlbum', {'albumId': albumId }, function(){
      j$( '#album-' + albumId ).hide(200, function () {

        if ( j$( '#album-' + albumId ).parent().children().size() == 1 ) {
          j$( '#album-' + albumId ).parents( '.scrollable-wrap' ).hide().siblings( 'p' ).show();
        }

        j$( '#album-' + albumId ).remove();
      });
    });
};

NINIMO.albums.editItemPerms = function( itemId, originalPerms ) {
    NINIMO.confirm(SELanguage.Translate(31238380), j$('.pnl-widget-media-browse .permissions').html(), function(){
        var $perms = j$('#confirm_panel_content .col1');
        var permType = $perms.find('input[name=permType]:checked').val();
        var access = [];
        var permsDesc = '';
        if( parseInt( permType ) == 0 ) {
          access.push('all');
          permsDesc = SELanguage.Translate(31232912);
        } else {
          $perms.find('input[name=access]:checked').each( function(){
             permsDesc += ( permsDesc.length ) ? " " + SELanguage.Translate(31236502) + " " : "";
             permsDesc += ( this.value == 'friend' ) ? SELanguage.Translate(31237046) : SELanguage.Translate(31231559);
             access.push( this.value );
          });
          permsDesc = permsDesc ? SELanguage.Translate(31238703) + " " + permsDesc : '';
        }
        if( access.length == 0 ) permsDesc = SELanguage.Translate(31236950);
        j$('#item-' + itemId + " a.permsDesc").html( permsDesc );
        j$.post('media.php?task=setPerms', {'id': itemId, 'perms': access.join(',') });
		j$('#item-'+itemId+' a.permsDesc').unbind().click(function(){ NINIMO.albums.editItemPerms(itemId, access.join(',')) });
    });
    var access = originalPerms.split(',');
    var $perms = j$('#confirm_panel_content .col1');
    $perms.find('input').each( function(){
        // privat
        if( this.name == 'permType' && parseInt( this.value ) == 1 ) this.checked = ( access.indexOf('all') == -1 );
        // publikus
        if( this.name == 'permType' && parseInt( this.value ) == 0 ) this.checked = ( access.indexOf('all') > -1 );
        // barat, rokon
        if( this.name == 'access' ) this.checked = ( access.indexOf( this.value ) > -1 );
    });
}


NINIMO.albums.editAlbumPerms = function( albumId ) {
    NINIMO.confirm(SELanguage.Translate(31238380), j$('.pnl-widget-album-browse .permissions').html(), function(){
        var $perms = j$('#confirm_panel_content .col1');
        var permType = $perms.find('input[name=permType]:checked').val();
        var access = [];
        var permsDesc = '';
        if( parseInt( permType ) == 0 ) {
          access.push('all');
        } else {
          $perms.find('input[name=access]:checked').each( function(){
             access.push( this.value );
          });
        }
        j$.post('media.php?task=setAlbumPerms', {'id': albumId, 'perms': access.join(',') });
    });
    //var access = ['all'];
    var $perms = j$('#confirm_panel_content .col1');
    $perms.find('input').each( function(){
        // privat
        if( this.name == 'permType' && parseInt( this.value ) == 1 ) this.checked = ( access.indexOf('all') == -1 );
        // publikus
        if( this.name == 'permType' && parseInt( this.value ) == 0 ) this.checked = ( access.indexOf('all') > -1 );
        // barat, rokon
        if( this.name == 'access' ) this.checked = ( access.indexOf( this.value ) > -1 );
    });
}



NINIMO.friendSearch = function() {
    var val = this.value;
    if( val.length < 2 ) {
        j$("#friendList li").show();
        NINIMO.friendsPager.update();
        return false;
    }

	if( NINIMO.timer ) clearTimeout( NINIMO.timer );
	NINIMO.timer = setTimeout( function(){
        val = val.replace(/([#;&,\.\+\*~':\"!\^\$\[\]\(\)=>\|\/])/, "\\$1");
        val = val.replace(/Ö|Ó|ö|ó|ő|Ő/g, "o");
        val = val.replace(/Ü|ü|Ú|ú/g, "u");
        val = val.replace(/Á|á/g, "a");
        val = val.replace(/É|é/g, "e");
        val = val.replace(/Í|í/g, "i");
        val = val.toLowerCase();

        j$("#friendList li").not( j$("#friendList li").find("span.searchData:contains(" + val + ")").parents('li').show() ).hide();
        NINIMO.friendsPager.update();
    });
}


NINIMO.childrenRelatives.search = function( val ) {
    if( typeof val == "object" ) val = null;
	if( !j$("#search_results").length && val === null ) return true;

	if( NINIMO.timer ) clearTimeout( NINIMO.timer );
	NINIMO.timer = setTimeout( function(){
		var $lis = j$("#search_results li");

        if ( val === null ) val = j$("#relative_search").val();
		if( val != undefined && val.length > 0 ) {
		  // escape val and convert
		  val = val.replace(/([#;&,\.\+\*~':"!\^\$\[\]\(\)=>\|\/])/, "\\$1");
		  val = val.replace(/Ö|Ó|ö|ó|ő|Ő/g, "o");
		  val = val.replace(/Ü|ü|Ú|ú/g, "u");
		  val = val.replace(/Á|á/g, "a");
		  val = val.replace(/É|é/g, "e");
		  val = val.replace(/Í|í/g, "i");
		  val = val.toLowerCase();

		  $lis.hide().find("span.searchData:contains(" + val + ")").parents('li').show();
        } else{
            $lis.show();
        }
	}, 250 );

}

// Methods to give access to widgets from flash

NINIMO.Widgets = {};

NINIMO.Widgets.showAlbums = function( child_id ) {
			NINIMO.panel.handleLink.call( { "rel": "panel","href": "media.php?user_id=" + child_id } );
		}

j$(function () {

  Uploader = new NINIMO.uploader;

  //  NINIMO.childrenRelatives.search( "" );

  overlayTimer = setInterval( NINIMO.resizeOverlay, 1000 );
  NINIMO.resizeOverlay();

  j$( '.validateSubmit' ).click( NINIMO.saveChildren );

  j$( '#save-new_set' ).live("click", NINIMO.albums.create );

  j$( 'a:rel' ).live( "click", NINIMO.panel.handleLink );

  j$( '#panel .close' ).live( "click", NINIMO.panel.hide );
  j$( '#panel' ).click( function( ev ) {
//	if( j$( ev.originalTarget ).find(".pt_panel").length > 0 ) NINIMO.panel.hide();
  });

  j$( '.actions .acceptFriend' ).live( "click", NINIMO.acceptFriend );
  j$( '.actions .acceptChild' ).live( "click", NINIMO.acceptChild );
  j$( '.actions .addChildren' ).live( "click", NINIMO.addChildren );
  j$( '.actions .addFriend' ).live( "click", NINIMO.addFriend );
  j$( '.actions .disagreeFriend' ).live( "click", NINIMO.disagreeFriend );
  j$( '.actions .removeFriend' ).live( "click", NINIMO.removeFriend );

  j$('#relative_search').keyup( NINIMO.childrenRelatives.search );
  j$('.bk_user-friends-list .search input:text').keyup( NINIMO.friendSearch );

  j$('#uploadCompleteButton').live('click', Uploader.uploadComplete )

  NINIMO.friendsPager.update();

  j$('.bk_user-friends-list .ui-pager .prev').click( NINIMO.friendsPager.prevPage );
  j$('.bk_user-friends-list .ui-pager .next').click( NINIMO.friendsPager.nextPage );

  j$(".bk_user-children-relatives .pending .own_children").live( 'click', NINIMO.setOwnChildren );
  j$(".bk_user-children-relatives .pending .can_edit").live( 'click',  NINIMO.setCanEdit );

  j$(".bk_user-children-relatives .search .results li, #searchResults li h4 a").live( "click", NINIMO.setRelative );

  j$(".upload").each( NINIMO.uploadHandler );

  j$("a.submit").click( NINIMO.submitLink );

  j$('.searchinput .cross').live('click', function() {
    j$(this).closest('.searchinput').find('.search input').val('');
    j$("#search_results li").show();
    return false;
  });

  j$('.albumActions .delete').live('click', function(){
    var albumId = j$(this).closest('.unit').attr('id').split('-')[1];
    NINIMO.deleteAlbum( albumId );
  });

  j$('.pnl-widget-album-select-index ul a').live('click', function(){
    j$(this).closest('ul').find('a.selected').removeClass('selected');
    j$(this).addClass('selected');
  });

  j$('.pnl-widget-child-selection .child').live('click', function(){
    j$(this).addClass('selected').siblings().removeClass('selected');
  });

  j$('.pnl-widget-set-selection .container li').live('click', function(){
    j$(this).closest('.container').find('li').removeClass('selected').end().end().addClass('selected');
  });

  j$('#albums li').live('click', function(){
    j$(this).addClass('selected').siblings('li').removeClass('selected');
  });

  j$('.pnl-widget-media-view .showroom.tagging').live('click', NINIMO.tagging.add );

  init_inner_labels();
  init_collapsable_boxes();

  j$( '.bk_common-site_header .search input').keyup(function () {
    var _this = j$( this );

    _this

    .focus(function () {
      _this.parents( '.search' ).addClass( 'expanded' ).find( '.suggestions' ).fadeIn( 'fast' );
    })

    .blur(function () {
      _this.parents( '.search' ).removeClass( 'expanded' ).find( '.suggestions' ).fadeOut( 'fast' );
    })

    if ( _this.val() != '' )
      _this.parents( '.search' ).addClass( 'expanded' ).find( '.suggestions' ).fadeIn( 'fast' );
    else
      _this.parents( '.search' ).removeClass( 'expanded' ).find( '.suggestions' ).fadeOut( 'fast' );

  });

  j$.tools.tabs.addEffect("myfade", function(i, done) {
    var conf = this.getConf(),
    speed = conf.fadeOutSpeed,
    panes = this.getPanes();
    panes.stop(true,true);

    if (speed) {
        panes.fadeOut(speed);
    } else {
        panes.hide();
    }
    panes.eq(i).fadeIn(conf.fadeInSpeed, done);
  });

  j$( '#tourmenu' ).tabs( '#tourcontent > div.slide', { current: 'active', effect: 'myfade' }).history();
  j$( '#tabs' ).tabs( '#panes > div', { effect: 'myfade', event: 'mouseover' } );
  var $equalColumns = j$("#tabs > div").equalizeCols();

  j$( '#tabs' ).mouseleave(function() {
	setTimeout(function() {
		j$( '#tabs' ).tabs().click(0);
	}, 1000);
  });

  j$( '#tabs div' ).hover(function() {
	j$(this).addClass('active-tab');
  }, function() {
	j$(this).removeClass('active-tab');
  });

  j$( '.bk_user-messages .list li .cross' ).click(function () {
    var str = j$( this ).attr( "href" ) + "&isAjax=1";
	j$( this ).css( "width", "30px" );
	j$( this ).css( "height", "30px" );
	j$( this ).css( "marginLeft", "0px" );
    j$( this ).css( "background", "url( ninimo_images/spinner.gif )" );
    NINIMO.thisCacheObj = this;
    j$.post(
		str,
		"",
		function( resp ){
			if( 1 == parseInt( resp ) ){
				j$( NINIMO.thisCacheObj ).parents( 'li' ).slideUp( 'fast' );
				var thisArr = j$( ".messages em" ).html().split( "(" );
				thisArr = thisArr[ 1 ].split( ")" );
				j$( ".messages em" ).html( "(" + parseInt( thisArr[ 0 ] - 1 ) + ")" );
				j$( "#messageState b" ).html( parseInt( thisArr[ 0 ] - 1 ) );
			} else {
				j$( NINIMO.thisCacheObj ).css( "background", "url( ninimo_images/icon.cross-small.png )" );
				j$( NINIMO.thisCacheObj ).css( "width", "15px" );
				j$( NINIMO.thisCacheObj ).css( "height", "15px" );
				j$( NINIMO.thisCacheObj ).css( "marginLeft", "7.5px" );
			}
		},
		"text"
	);
	return false;
  });

  j$( '.ui-switchbutton' ).click(function () {
    j$( this ).toggleClass( 'on' );
    return false;
  })

  j$( '.ui-systemnotification a' ).click(function () {
    j$( this ).parents('.ui-systemnotification').slideUp( 'fast' );
    return false;
  })

});

function init_inner_labels() {

  j$('.js-inner_label label').each(function() {

    // console.log( j$(this).parent().find('input[type=text]').val().replace(/^\s+|\s+$/g,"") == "" );
    if ( NINIMO.util.trim( j$(this).parent().find( 'input[type=text]' ).val() ) != "" ) {

      j$( this ).hide();
    }

    j$( '.js-inner_label label' ).live( 'click', function() {

      j$( this ).hide().parent().find( 'input[type=text]' ).focus()

      .blur(function() {

        if ( NINIMO.util.trim( j$(this).val() ) == '' ) {

          j$( this ).val( '' );
          j$( this ).parents().find( ' > label' ).show();
        }
      });
    });
  });
}


/*
function init_inner_labels() {
  j$( '.js-inner_label' ).each(function () {

    _this = j$( this );
    _input = _this.find( 'input' );
    _label = _this.find( 'label' );

    j$('.js-inner_label label').live( 'click', function () {

       j$( this ).hide()

        .parents( '.js-inner_label' ).find( 'input' )
        .focus()
        .blur(function () {

          if ( j$( this ).val() == '' )
            j$( this ).parents( '.js-inner_label').find( '> label').show();

        })

    });

    if ( _input.val() != '' )
      _label.hide();

  });


}
*/


function init_collapsable_boxes() {

    j$( '.js-collapsable-controller' ).live( "click", function () {

      var _p = j$( this ).parents( '.js-collapsable' );
      var _c = j$( this ).siblings( '.js-collapsable-content' );

      if ( _p.hasClass( 'collapsed' ) ) {

        _c.slideDown( 'fast', function () {
          _p.removeClass( 'collapsed' );
	      j$.scrollTo( _p, 800 );
        });

      } else {

        _c.slideUp( 'fast', function () {
          _p.addClass( 'collapsed' );
        });

      }
  })
}


NINIMO.util = new Object();


/**
 * Removes whitespace from the beginning and
 * the end of the given string.
 *
 * @param {String} str The string to be "trimmed"
 *
 * @returns The trimmed string
 * @type String
 */
NINIMO.util.trim = function( str ) {

  return str.replace(/^\s+|\s+$/g, '');
}


/**
 * Helper for checking if <input placeholder="aString" />
 * is supported by the browser
 *
 * @returns The status of placeholder support
 * @type Boolean
 */
NINIMO.util.supportsInputPlaceholder = function() {

  var e = document.createElement( 'input' );
  return 'placeholder' in e;
}

/**
 * Fallback for browsers with no placeholder support
 *
 * @param {String} selector (Optional) If given, the script
 * works only on the specified elements. Otherwise parses all
 * input[placeholder] elements in the document
 */
NINIMO.util.fallbackInputPlacholders = function ( selector ) {

  if ( ! NINIMO.util.supportsInputPlaceholder() ) {

    j$( selector || 'input[placeholder]' ).each(function() {

      var ip = j$( this );

      if( ip.val() == '' ) {

        ip.val( ip.attr( 'placeholder' ) )

          .focus(function() {

            if ( ip.val() == ip.attr( 'placeholder' ) )

              ip.val( '' );
          })

          .blur(function() {

            if ( ip.val() == '' )

              ip.val( ip.attr( 'placeholder' ) );
          });
      }
    });
  }
}


NINIMO.util.basicHTMLTemplate = function ( tpl, obj ) {

  if ( !tpl || !obj )
    return;

  for ( key in obj ) {

    var keyStr = '{$' + key + '}';

    while ( tpl.indexOf( keyStr ) > -1 ) {
      tpl = tpl.replace( keyStr, obj[ key ] );
    }
  }

  return tpl;
}



NINIMO.util.preloadImages = function ( arr ) {

  for (var i = arr.length - 1; i >= 0; i--){

    var url = arr[ i ];

    arr[ i ] = new Image();
    arr[ i ].src = url;
  }
}

// Temporary input[placeholder] initialization
j$(function() {

  NINIMO.util.fallbackInputPlacholders();

  NINIMO.util.preloadImages([
    '/ninimo_images/bg.common.site_header.actions.opened-l.png',
    '/ninimo_images/bg.common.site_header.actions.opened-r.png'
    ]);

});
