// deckkrConst ////////////////////////////////////////////////////////////////////////
/*@cc_on 
var doc = document;
eval('var document = doc');
@*/

var domainName = 'http://www.deckkr.jp';
if (location.host == 'nico.deckkr.jp') {
    domainName = 'http://nico.deckkr.jp';
}
var deckkrConst = {
    'classes'  : {'cardDroppable': 'deck-cards'},
    'urls'     : {'GET_DECKS'        : domainName + '/API/getDecks.php',
                  'GET_DECK'         : domainName + '/API/getDeck.php',
                  'GET_DECK_BY_TAG'  : domainName + '/API/getDeckByTag.php',
                  'GET_DECK_BY_SEARCH':domainName + '/API/getDeckBySearch.php',
                  'GET_ARCHIVE'      : domainName + '/API/getArchive.php',
                  'SET_DECK_ORDER'   : domainName + '/API/setDeckOrder.php',
                  'SET_DECK_ALIAS'   : domainName + '/API/setDeckAlias.php',
                  'GET_CARD_LARGE'   : domainName + '/API/getCard.php',
                  'SET_DECK_INFO'    : domainName + '/API/updateDeckInfo.php',
                  'SET_CARD_INFO'    : domainName + '/API/updateCardInfo.php',
                  'SET_CARD_REMOVE'  : domainName + '/API/removeCard.php',
                  'SET_DECK_REMOVE'  : domainName + '/API/removeDeck.php',
                  'SET_ALIAS_REMOVE' : domainName + '/API/removeAlias.php',
                  'SET_SEND_ITEMS'   : domainName + '/API/sendItems.php',
                  'GET_USER_PROFILE' : domainName + '/API/getUser.php',
                  'SET_USER_PROFILE' : domainName + '/API/setUser.php',
                  'GET_USER_SENT'    : domainName + '/API/getEmailTo.php',
                  'GET_URL_INFO'     : domainName + '/API/getURLInfo.php',
                  'GET_MAIL_SEND'    : domainName + '/API/getSentBox.php',
                  'GET_MAIL_RECEIVE' : domainName + '/API/getInBox.php',
                  'SET_CARD_ADD'     : domainName + '/API/addItem.php',
                  'SET_SIGN_IN'      : domainName + '/API/setSignin.php',
                  'SET_SIGN_UP'      : domainName + '/API/setSignup.php',
                  'PAGE_MYPAGE'      : domainName + '/my.php',
                  'PAGE_SIGNOUT'     : domainName + '/signout.php',
                  'PAGE_SCREEN'      : domainName + '/screen.php',
                  'SEND_REMAINDER'   : domainName + '/sendRemainder.php',
                  'CREATE_DONE'      : domainName + '/createUserDone.php',
                  'CREATE_STANDERD'  : domainName + '/createUserStanderd.php'},
    'types'    : {'PAGE': {'HOME': 0,
                           'MY'  : 1,
                           'USER': 2},
                  'DECK': {'ARCHIVE' : 0,
                           'MY'      : 1,
                           'ALIAS'   : 2,
                           'SEARCH'  : 3,
                           'SEND'    : 4,
                           'RECEIVE' : 5},
                  'CARD': {'URL'    : 0,
                           'USER'   : 1,
                           'MAIL'   : 2}
    },
    'position' : {'deck': {'top' : 100, 
                           'left': 100}
    },
	'images'   : {'deckicon': {'DEFAULT'  : domainName + '/images/common/deck_icon.png',
                               'PRIVATE'  : domainName + '/images/common/deck_icon_private.png',
                               'OTHERS'   : domainName + '/images/common/deck_icon_others.png',
                               'OTHERSPRIVATE'   : domainName + '/images/common/deck_icon_others_private.png',
                               'ALIAS'    : domainName + '/images/common/deck_icon_alias.png'},
				  'titleicon': {'ARCHIVE' : domainName + '/images/common/deck_icon_archive_24.png',
								'MY'      : domainName + '/images/common/deck_icon_24.png',
				 				'ALIAS'   : domainName + '/images/common/deck_icon_24.png',
				 				'OTHERS'  : domainName + '/images/common/deck_icon_24.png'},
				  'cardimage': {'MAIL'    : {'S' :domainName + '/images/common/ico_mail.png',
				  							 'L' :domainName + '/images/common/ico_mail.png'}},
				  'userInfo': {'NOIMAGE'  : domainName + '/images/common/userInfo_noimage.png'}
    },
    'urlType'  : {'none'     : 0,
                  'amazon'   : 1,
                  'flickr'   : 2,
                  'youtube'  : 3,
                  'blogs'    : 4,
                  'nicovideo': 5},
    'value' : {'sentUserAreaMax' : 5}
};

///////////////////////////////////////////////////////////////////////////////////////


function deckkr() {
    /**  deckkr members. **/
    this.decks  = $H();
    this.icons  = $H();
	this.lcards = $H();
	this.users  = $H();
	this.sents  = $H();
    this.login_user = 0;
    if (page && page.login_user) this.login_user = page.login_user;
}

/** deckkr static member **/

/**  deckkr methods. **/

// check email format
deckkr.prototype.checkEmail = function(val) {
    var fmt=/[!#-9A-~]+@([a-z0-9]\.)+[a-zA-Z]$/i;
//    fmt =/[!#-9A-~]+@([!#-9A-~]\.)+[a-z]{2,3}$/i;
fmt = /.+@[^@]+\..+/i;
fmt =/^[A-Za-z0-9]+[\w-]+@[\w\.-]+\.\w{2,}$/i;
fmt =/^[A-Za-z0-9]+[!#-9A-~]+@[\w\.-]+\.\w{2,}$/i;
    var regObj = new RegExp(fmt);
    if (!val.match(regObj)) {
        return false;
    }
    return true;
}
deckkr.prototype.checkURL = function(val) {
    var fmt=/^http[s]?:\/\//i;
    var regObj = new RegExp(fmt);
    if (!val.match(regObj)) {
        return false;
    }
    return true;
}



// get length of all Floats
deckkr.prototype.getFloatsNum = function(){
    return  this.decksLength() + this.lcardsLength();
}

// get length of decks
deckkr.prototype.decksLength = function(){
    var len = 0;
    this.decks.each( function(eachdeck) {
        len++;
        return null;
    });
    return len;
}

// get length of lcards
deckkr.prototype.lcardsLength = function(){
    var len = 0;
    this.lcards.each( function(eachcard) {
        len++;
        return null;
    });
    return len;
}

// add decks to 'decks' with JSON array
deckkr.prototype.addIcons = function(id_user, type_deck, id_decks, deck_user,name_user, prof_user, title){   
	var key = this.getIconsKey(id_user, type_deck, id_decks);
	if (this.icons[key] == null) {
		this.icons[key] = new deckkrDeckicons(id_user,
                                              type_deck,
                                              id_decks,
                                              deck_user,
                                              name_user,
                                              prof_user,
                                              title);
	}
}

// add decks to 'decks' with JSON array
deckkr.prototype.addDecks = function(id_user, type_deck, id_decks, id_deck, deck_arr){
	
	for (var i=0; i < deck_arr.length; i++) {
		if (deck_arr[i].id_deck == null) continue;
		if (!deck_arr[i].id_user && type_deck != deckkrConst.types.DECK.SEARCH) continue;
		if (!deck_arr[i].title) continue;
	
        var id  = this.getDeckKey(id_user, type_deck, id_decks, deck_arr[i].id_deck);
        var ret = this.decks.find(function(eachdeck){
            return (eachdeck['key'] == id);
        });

		if (ret == null) {
            this.decks[id] =
                new deckkrDeck(deck_arr[i].id_deck,
                               deck_arr[i].id_user,
                               deck_arr[i].deck_user,
                               deck_arr[i].type_deck,
                               deck_arr[i].id_decks,
                               deck_arr[i].name_user,
                               deck_arr[i].prof_user,
                               deck_arr[i].title,
                               deck_arr[i].title_s,
                               deck_arr[i].private,
                               deck_arr[i].offset,
                               deck_arr[i].limit,
                               deck_arr[i].amount);
        }
    }
}




// delete deck from 'decks'
deckkr.prototype.deleteAllDecks = function(){
    this.decks.each( function(eachdeck) {
        this.deleteDeck(eachdeck.id_user, eachdeck.type_deck, eachdeck.id_decks, eachdeck.id_deck);
    });
    return len;
}

// delete deck from 'decks'
deckkr.prototype.deleteDeck = function(id_user, type_deck, id_decks, id_deck){
    var _d = this.D(id_user, type_deck, id_decks, id_deck);
    if(_d){
        if (_d.draggable != null) {
            _d.draggable.destroy(); 
        }
        if (_d.hasDroppable && Droppables) {
            Droppables.remove(_d.area());
        }
        _d.deleteCardsFromDeck(id_deck);
        var id = this.getDeckKey(id_user, type_deck, id_decks, id_deck);
        delete this.decks[id];
    }
}

// get a deck by 'id_deck' (reference)
deckkr.prototype.D = function(id_user, type_deck, id_decks, id_deck) {
    if (!id_user && !this.login_user) return null;
    if (!id_user) id_user = this.login_user;

    return this.decks[this.getDeckKey(id_user, type_deck, id_decks, id_deck)];
}

// get decks Hash key from id_deck
deckkr.prototype.getDeckKey = function(id_user, type_deck, id_decks, id_deck){
    if (!id_user) id_user = this.login_user;
    return 'ID' + id_user + '-' + type_deck + '-' + id_decks + '-' + id_deck; 
}

// key of id_user and id_decks
deckkr.prototype.getIconsKey = function(id_user, type_deck, id_decks){
    return id_user + '-' + type_deck + '-' + id_decks;
}

// get icons object from id_user, id_decks
deckkr.prototype.IS = function(id_user, type_deck, id_decks){
    var key = this.getIconsKey(id_user, type_deck, id_decks);
    if (this.icons[key]) {
        return this.icons[key];
    }

    return null;
}

// get icon object from id_deck
deckkr.prototype.I = function(id_deck){
    this.icons.each( function(_e){
        var val = _e['value'].I(id_deck);
        if (val) return val;
    });
    return null;
}

/// -------------------------------------------------------
///  define deckicons objects and relations
/// -------------------------------------------------------

// deck icons defition.
function deckkrDeckicons(id_user, type_deck, id_decks, deck_user, name_user, prof_user, title){
    /* members: no default values. */
    this.id_user   = id_user;     // id_user
    this.id_decks  = id_decks;    // id_decks (table)
    this.deck_user = deck_user;   // type 0:self, 1:friend, 2:neighor, 3:others
    this.type_deck = type_deck;   // type 0:archive, 1:my, 2:alias
    this.name_user = name_user;   // owner name (nickname of id_user)
    this.prof_user = prof_user;   // owner profile image (L/S)
    this.title     = title;       // deck title (full)

    this.login_user = 0;
    if (page && page.login_user) this.login_user = page.login_user;
}

/* members: have default value. */
deckkrDeckicons.prototype.icons        = $H();      // Array of icon objects.
deckkrDeckicons.prototype.isSortable   = false;     // has sortable now?
deckkrDeckicons.prototype.deck_order   = null;      // deck order by Sortable.
deckkrDeckicons.prototype.hasDraggable = null;     // is Draggable?

/**  deckicon methods. **/
// div id of area-deckicon
deckkrDeckicons.prototype.area = function() {
    return 'area-deckicons-' + this.getKey();
}
// div id of area-deckicon-title
deckkrDeckicons.prototype.areatitle = function() {
    return 'area-deckicons-title-' + this.getKey(); 
}
// div id of area-deckicon-possave
deckkrDeckicons.prototype.areapossave = function() {
    return 'area-deckicons-possave-' + this.getKey(); 
}
// div id of area-deckicon-inner
deckkrDeckicons.prototype.areainner = function() {
    return 'area-deckicons-inner-' + this.getKey(); 
}
// key of div id defitino with id_user and id_decks
deckkrDeckicons.prototype.getKey = function(id_user, type_deck, id_decks){
    if(!id_user)           id_user   = this.id_user;
    if(type_deck == null) type_deck = this.type_deck;
    if(id_decks == null)  id_decks  = this.id_decks;

    if(!id_user || id_decks < 0) return null;
    if(type_deck != deckkrConst.types.DECK.ARCHIVE && 
        type_deck != deckkrConst.types.DECK.MY &&
        type_deck != deckkrConst.types.DECK.ALIAS) return null;

    return id_user + '-' + type_deck + '-' + id_decks;
}

// add cards(JSON array) to deck
deckkrDeckicons.prototype.addDeckicons = function(deck_arr){
    this.icons.each( function(_e) {
        if (_e['value'].draggable != null) {
            _e['value'].draggable.destroy(); 
        }
    });

	delete this.icons;
	
    this.icons = $H();

    var order = 0;
    for(var i=0; i < deck_arr.length; i++){
        if (!deck_arr[i].id_deck
			||!deck_arr[i].id_user
			||!deck_arr[i].title
			||!deck_arr[i].title_s){
            continue;
        }
        this.icons[order] = new deckkrDeckicon(deck_arr[i].id_user,
                                               deck_arr[i].type_deck,
                                               deck_arr[i].id_decks,
                                               deck_arr[i].id_deck,
                                               deck_arr[i].title,
                                               deck_arr[i].title_s,
                                               deck_arr[i].flag_private,
                                               order,
                                               this.getKey());
        order++;
    }
}

// set deckicons sortable
deckkrDeckicons.prototype.setSortable = function(){
    if (this.login_user != this.id_user) return false;
    var self = this;
    var opt = {
        dropOnEmpty: true,
        tag: 'div',
        // overlap:'horizontal',
        constraint: false,
        onUpdate: function(){
            self.deck_order = Sortable.serialize(self.areainner());
            if ($(self.areapossave()) &&
                page &&
                self.id_user == self.login_user) {
                 $(self.areapossave()).innerHTML = '<span onClick="page.saveDeckPosition(' + self.id_user + ', ' +  self.type_deck + ', ' +  self.id_decks + ')">Save Position</span>';
            }
        }
    }
    Sortable.create(this.areainner(), opt);
    this.isSortable = true;
}

// set deckicon draggable
deckkrDeckicons.prototype.unsetDeckiconsDraggable = function(){
    var num = 0;
    this.icons.each( function(_e) {
        if (_e['value'].draggable != null) {
            num++;
            _e['value'].draggable.destroy(); 
        }
    });
}

// set deckicon draggable
deckkrDeckicons.prototype.setDeckiconsDraggable = function(){
    this.icons.each( function(_e) {
        if (_e['value'].draggable != null) _e['value'].draggable.destroy(); 

        var opt = {
            revert: true,
            starteffect: function(){},
            endeffect: function(){}
        };
        _e['value'].draggable = new Draggable(_e['value'].idDeckicon(), opt);
    });
}


// get icon object from id_deck
deckkrDeckicons.prototype.I = function(id_deck){
    var ret = this.icons.find( function(eachdeck) {
        return (eachdeck['id_deck'] == id_deck);
    });
    if (ret == null) return ret;

    return null;
}

// get icon object from id_deck
deckkrDeckicons.prototype.getIconFromArea = function(area)
{
    var ret = this.icons.find( function(eachdeck) {
        return (eachdeck['area'] == area);
    });
    if (ret == null) return ret;

    return null;
}


/// -------------------------------------------------------
///  define deckicons objects and relations
/// -------------------------------------------------------

// deck icons defition.
function deckkrDeckicon(id_user, type_deck, id_decks, id_deck,
                        title, title_s, private, order, parent_key)
{
    /* members: no default values. */
    this.id_user    = id_user;     // id_user
    this.type_deck  = type_deck;   //
    this.id_decks   = id_decks;		// id_decks (table)
    this.id_deck    = id_deck;     // id_deck
    this.title      = title;       // deck title (full)
    this.title_s    = title_s;     // deck title (short)
    this.private    = private;     
    this.order      = order;       // list order
    this.parent_key = parent_key;       // parent_key

    this.areaID     = this.idDeckicon();
}
/* members as Const vars. */
deckkrDeckicon.prototype.DECKICONURL      = deckkrConst.images.deckicon.DEFAULT;
deckkrDeckicon.prototype.DECKICONALIASURL = deckkrConst.images.deckicon.ALIAS;

/* members: have default value. */
deckkrDeckicon.prototype.show          = false;   // is shown now?
deckkrDeckicon.prototype.hasDroppable  = false;   // has droppable now?
deckkrDeckicon.prototype.draggable     = null;    // draggable object

/**  deckicon methods. **/
// div if of deckicon area
deckkrDeckicon.prototype.idDeckicon = function() {
    return 'area-deckicon-' + this.id_user + '-' + this.type_deck + '-' + this.id_decks + '-' + this.id_deck; 
}

// div if of deckicon title area
deckkrDeckicon.prototype.areatitle = function() {
    return 'area-deckicon-title-' + this.parent_key + '-' + this.id_deck;
}

// div id of deckicon image area
deckkrDeckicon.prototype.areaimage = function() {
    return 'area-deckicon-image-' + this.parent_key + '-' + this.id_deck; 
}

// div id of deckicon image area
deckkrDeckicon.prototype.areainner = function() {
    return 'area-deckicon-inner-' + this.parent_key + '-' + this.id_deck; 
}

/// -------------------------------------------------------
///  define deck objects and relations
/// -------------------------------------------------------

// deck defition.
function deckkrDeck(id_deck, id_user, deck_user, type_deck, id_decks,
                    name_user, prof_user, title, title_s, private, offset, limit,
                    amount){
    /* members: no default values. */
    this.id_deck   = id_deck;     // id_deck
    this.id_user   = id_user;     // id_user
    this.deck_user = deck_user;   // type 0:self, 1:friend, 2:neighor, 3:others
    this.type_deck = type_deck;   // type 0:archive, 1:my, 2:alias
    this.id_decks  = id_decks;    // table id
    this.name_user = name_user;   // nickname of id_user
    this.prof_user = prof_user;   // owner profile image (L/S)
    this.title     = title;       // deck title (full)
    this.title_s   = title_s;     // deck title (short)
    this.private   = private;
    this.offset    = offset;      // cards offset
    this.limit     = limit;       // cards limit
    this.amount    = amount;      // cards amount

    this.login_user = 0;
    if (page && page.login_user) this.login_user = page.login_user;

    this.areaID    = this.area();
}

/* members: have default value. */
deckkrDeck.prototype.load          = false;   // is loaded now?
deckkrDeck.prototype.show          = false;   // is shown now?
deckkrDeck.prototype.zindex        = 0;       // zindex of this deck.
deckkrDeck.prototype.draggable     = null;    // store draggable object or null
deckkrDeck.prototype.hasDroppable  = false;   // has droppable now?
deckkrDeck.prototype.cards         = $A();    // Array of card objects.
deckkrDeck.prototype.hasOpenInfo   = false;   // is show infomation area



/**  deckkr methods. **/
// div id of area-deck
deckkrDeck.prototype.area = function() {
    if (this.login_user && this.id_user == this.login_user && 
        this.type_deck == deckkrConst.types.DECK.ARCHIVE) {
        return 'archiveDeck';
    }
    return 'area-deck-' + this.id_user + '-' + this.type_deck + '-' + this.id_decks + '-' + this.id_deck; 
}

// div if of deck title area
deckkrDeck.prototype.areatitle = function() {
 return 'area-deck-title-' + this.id_user + '-' + this.type_deck + '-' + this.id_decks + '-' + this.id_deck; 
}

deckkrDeck.prototype.areatitleInner = function() {
 return 'area-deck-titleInner-' + this.id_user + '-' + this.type_deck + '-' + this.id_decks + '-' + this.id_deck; 
}


deckkrDeck.prototype.areacardsContainer = function() {
 return 'area-cards-container' + this.id_user + '-' + this.type_deck + '-' + this.id_decks + '-' + this.id_deck; 
}
// div id of deck cards area
deckkrDeck.prototype.areacards = function() {
 return 'area-cards-' + this.id_user + '-' + this.type_deck + '-' + this.id_decks + '-' + this.id_deck; 
}

// div id of deck cards area
deckkrDeck.prototype.areaNavi = function() {
 return 'areaNavi-' + this.id_user + '-' + this.type_deck + '-' + this.id_decks + '-' + this.id_deck; 
}
deckkrDeck.prototype.areaNaviAlias = function() {
 return 'areaNaviAlias-' + this.id_user + '-' + this.type_deck + '-' + this.id_decks + '-' + this.id_deck; 
}
deckkrDeck.prototype.areaNaviAliasOff = function() {
 return 'areaNaviAliasOff-' + this.id_user + '-' + this.type_deck + '-' + this.id_decks + '-' + this.id_deck; 
}

deckkrDeck.prototype.areaNaviNext = function() {
 return 'areaNaviNext-' + this.id_user + '-' + this.type_deck + '-' + this.id_decks + '-' + this.id_deck; 
}
deckkrDeck.prototype.areaNaviBack = function() {
 return 'areaNaviBack-' + this.id_user + '-' + this.type_deck + '-' + this.id_decks + '-' + this.id_deck; 
}
deckkrDeck.prototype.areaNaviNextOff = function() {
 return 'areaNaviNextOff-' + this.id_user + '-' + this.type_deck + '-' + this.id_decks + '-' + this.id_deck; 
}
deckkrDeck.prototype.areaNaviBackOff = function() {
 return 'areaNaviBackOff-' + this.id_user + '-' + this.type_deck + '-' + this.id_decks + '-' + this.id_deck; 
}

// div id of deck cards area
deckkrDeck.prototype.areaInfo = function() {
 return 'areaInfo-' + this.id_user + '-' + this.type_deck + '-' + this.id_decks + '-' + this.id_deck; 
}
// div id of deck cards area
deckkrDeck.prototype.areaInfoTitle = function() {
 return 'areaInfoTitle-' + this.id_user + '-' + this.type_deck + '-' + this.id_decks + '-' + this.id_deck; 
}
deckkrDeck.prototype.areaInfoTitleForm = function() {
 return 'areaInfoTitleForm-' + this.id_user + '-' + this.type_deck + '-' + this.id_decks + '-' + this.id_deck; 
}
// div id of deck cards area
deckkrDeck.prototype.areaInfoEdit = function() {
 return 'areaInfoEdit-' + this.id_user + '-' + this.type_deck + '-' + this.id_decks + '-' + this.id_deck; 
}
deckkrDeck.prototype.areaInfoSave = function() {
 return 'areaInfoSave-' + this.id_user + '-' + this.type_deck + '-' + this.id_decks + '-' + this.id_deck; 
}

deckkrDeck.prototype.areaPrivate = function() {
 return 'areaPrivate-' + this.id_user + '-' + this.type_deck + '-' + this.id_decks + '-' + this.id_deck; 
}
deckkrDeck.prototype.areaInfoPrivate = function() {
 return 'areaInfoPrivate-' + this.id_user + '-' + this.type_deck + '-' + this.id_decks + '-' + this.id_deck; 
}
deckkrDeck.prototype.areaInfoPrivateForm = function() {
 return 'areaInfoPrivateForm-' + this.id_user + '-' + this.type_deck + '-' + this.id_decks + '-' + this.id_deck; 
}



// div id of deck config base
deckkrDeck.prototype.areaconfig = function() {
 return 'area-deck-config-' + this.id_user + '-' + this.type_deck + '-' + this.id_decks + '-' + this.id_deck; 
}


deckkrDeck.prototype.areaarrows = function () {
    return 'deck-arrows' + this.id_user + '-' + this.type_deck + '-' + this.id_decks + '-' + this.id_deck; 
}
deckkrDeck.prototype.areaarrowsright = function () {
    return 'deck-arrows-right' + this.id_user + '-' + this.type_deck + '-' + this.id_decks + '-' + this.id_deck; 
}
deckkrDeck.prototype.areaarrowsleft = function () {
    return 'deck-arrows-left' + this.id_user + '-' + this.type_deck + '-' + this.id_decks + '-' + this.id_deck; 
}
deckkrDeck.prototype.areaarrowsdraw = function () {
    return 'deck-arrows-draw' + this.id_user + '-' + this.type_deck + '-' + this.id_decks + '-' + this.id_deck; 
}
deckkrDeck.prototype.areaarrowscenter = function () {
    return 'deck-arrows-center' + this.id_user + '-' + this.type_deck + '-' + this.id_decks + '-' + this.id_deck; 
}
deckkrDeck.prototype.areaarrowsback = function () {
    return 'deck-arrows-back' + this.id_user + '-' + this.type_deck + '-' + this.id_decks + '-' + this.id_deck; 
}
deckkrDeck.prototype.areaarrowsnum = function () {
    return 'deck-arrows-num' + this.id_user + '-' + this.type_deck + '-' + this.id_decks + '-' + this.id_deck; 
}
deckkrDeck.prototype.areaarrowsclose = function () {
    return 'deck-arrows-close' + this.id_user + '-' + this.type_deck + '-' + this.id_decks + '-' + this.id_deck; 
}
deckkrDeck.prototype.areaarrowsdeckmenu = function () {
    return 'deck-arrows-deckmenu' + this.id_user + '-' + this.type_deck + '-' + this.id_decks + '-' + this.id_deck; 
}
// form name definitions.
deckkrDeck.prototype.formDeckTitle = function () {
    return 'form-deck-title' + this.id_user + '-' + this.type_deck + '-' + this.id_decks + '-' + this.id_deck; 
}



// get a card by 'id_card' (reference)
deckkrDeck.prototype.C = function(id_card) 
{ 
    this.cards.each( function(_e) {
        if (_e['value'].id_card == id_card) {
            return _e['value'];
        }
    });
    return null;
}

// add cards(JSON array) to deck
deckkrDeck.prototype.addCardsInDeck = function(card_arr)
{
	var card_user = null;
	
	//------------------------------------------------------------
/*
    this.cards.each( function(_e) {
        if (_e['value'].draggable != null) {
            _e.draggable.destroy(); 
        }
    });
*/	
    delete this.cards;
    this.cards = $A();

    if (card_arr == null) return;
    var num = 0;
    for (var i=0; i < card_arr.length; i++) {
/*        if (!card_arr[i].id_card || !card_arr[i].title || 
            !card_arr[i].title_s) {
            continue;
        }
		*/
        if (!card_arr[i].id_user) {
            if (this.type_deck != deckkrConst.types.DECK.SEARCH) {
                continue;
            }
            else {
                card_arr[i].id_user = 0;
            }
        }

		//COMMENT:card_id for Archive
		if (this.type_deck == deckkrConst.types.DECK.ARCHIVE){
			card_user = this.login_user;
		}else if (this.type_deck == deckkrConst.types.DECK.SEARCH){
			card_user = "0";
		}else{
			card_user = card_arr[i].card_user;
		}

        this.cards[num] = new deckkrCard(card_arr[i].id_card,
										card_arr[i].id_user,
										card_user,
										card_arr[i].url,
										card_arr[i].title,
										card_arr[i].title_s,
										card_arr[i].title_m,
										card_arr[i].image,
										this.type_deck,
										this.id_decks,
										this.id_deck,
										card_arr[i].id_send,
										card_arr[i].subject,
										card_arr[i].message,
										card_arr[i].date_regist,
										card_arr[i].date_update,
										card_arr[i].users,
										card_arr[i].items
                                        );
        num++;
    }
    delete card_arr;
}

// delete all cards from deck
deckkrDeck.prototype.deleteCardsFromDeck = function()
{
    if (this.cards.length) {
        for (var i=0; i < this.cards.length; i++) {
            if (this.cards[i].draggable != null) {
                this.cards[i].draggable.destroy(); 
            }
        }
    }
    delete this.cards;
    this.cards = $A();
}

// set deck draggable
deckkrDeck.prototype.setDeckDraggable = function()
{
    var opt = {
        revert: false,
        starteffect: function(){},
        endeffect: function(){}
    };
    this.draggable = new Draggable(this.area(), opt);
}

// set cards draggable
deckkrDeck.prototype.setCardsDraggable = function()
{
    for (var i=0; i < this.cards.length; i++) {
        if (!$(this.cards[i].area())) continue;

        var opt = {
            revert: true,
            starteffect: function(){},
            endeffect: function(){}
        };

		if(this.type_deck == deckkrConst.types.DECK.ARCHIVE){
			var opt = {
				revert: true,
				starteffect: function(){},
				endeffect: function(){
					page.revertArchiveZindex();
					}
			};

		}

/*
        if (this.id_deck == 0) { // archive
            opt = {
                revert: true,
                starteffect: function(){},
                endeffect: function(){},
                onStart: function() {
                    $('archive').style.zIndex = 1000;
                },
                onEnd: function() {
                    $('archive').style.zIndex = 0; 
                }
            };
        }
*/
        this.cards[i].draggable = new Draggable(this.cards[i].area(), opt);
    }
}


/// -------------------------------------------------------
///  define card objects
/// -------------------------------------------------------
// create card from json object
function deckkrCard(id_card, id_user, card_user, url, title, title_s, title_m, image, type_deck, id_decks, id_deck, id_send ,subject ,message ,date_regist ,date_update ,users ,items)
{
    /* members: no default value. */
    this.id_card     = id_card;   // id_card
    this.id_user     = id_user;   // id_user
    this.card_user   = card_user;   // original card user for alias
    this.url         = url;       // url of item
    this.title       = title;     // deck title (full)
    this.title_s     = title_m;   // deck title (medium)
    this.title_s     = title_s;   // deck title (shord)
    this.image       = image;     // url of the image
    this.type_deck	  = type_deck;   // type 0:archive, 1:my, 2:alias
    this.id_decks    = id_decks; // id_decks (table)
    this.id_deck     = id_deck;   // id_deck in.
	this.id_send     = id_send;
	this.subject     = subject;
	this.message     = message;
	this.date_regist = date_regist;
	this.date_update = date_update;
	this.users       = users;
	this.items       = items;
}

/* members: have default value. */
deckkrCard.prototype.draggable   = null;    // store draggable object or null

/**  methods. **/
// div id of cardarea
deckkrCard.prototype.area = function() { 
    return 'area-card-' + this.getKey();
}
// div id of cardinnerarea
deckkrCard.prototype.areainner = function() { 
    return 'area-card-inner-' + this.getKey();
}
// div id of card title area
deckkrCard.prototype.areatitle = function() {
    return 'area-card-title-' + this.getKey();
}
// div id of card image id
deckkrCard.prototype.areaimage = function() {
    return 'area-card-img-' + this.getKey();
}

deckkrCard.prototype.getKey = function(id_user, type_deck , id_decks ,id_deck , id_card){
	if(this.type_deck == deckkrConst.types.DECK.RECEIVE || this.type_deck == deckkrConst.types.DECK.SEND){
		
		return this.id_user + '-' + this.type_deck + '-' + this.id_decks + '-' + this.id_deck + '-' + this.id_send;
	}else{
		return this.id_user + '-' + this.type_deck + '-' + this.id_decks + '-' + this.id_deck + '-' + this.id_card + '-' + this.card_user;		
	}

}

// set card draggable
deckkrCard.prototype.setCardDraggable = function()
{
    var opt = {
        revert: true,
        starteffect: function(){},
        endeffect: function(){}
    };
    this.draggable = new Draggable(this.area(), opt);
}

/// -------------------------------------------------------

