// Add to my playlist class
function AddToMyPlaylists() 
{
    
    this.dialog = null;
    this.callbackFn = null;
    this.objParam = null;
    this.myPlaylistMenu = null;
    this.playlistsArray = null;
    
    this.plstNameDefaultStr = StrEnterPlaylistName;
    
    this.evtGetPlaylistsDone = new YAHOO.util.CustomEvent("GetPlaylistsDone");
}
AddToMyPlaylists.prototype.init = function init(isMember) 
{ 
    this.isMember = isMember || "";
    
    if( !this.isMember ) {
        // no need to init anything 
        return;
    }
    
    this.playlistsArray = [];

    this.dialog = document.createElement('div');
    this.dialog.className = "ymusic_popup_container";
    this.dialog.style.visibility = "hidden";
    this.dialog.innerHTML = this.buildContent();
    document.body.appendChild(this.dialog);
    //this.dialog.contentDocument.write(this.buildContent());
    this.getMyPlaylists(this.callbackGetMyPlaylists,this);

    // event handlers
    YAHOO.util.Event.addListener('plstName','keyup',this.changePlaylistName,this,true);
    YAHOO.util.Event.addListener(document.getElementsByName('addFlag')[0],'click',this.selectExistingPlaylist,this,true);
    YAHOO.util.Event.addListener(document.getElementsByName('addFlag')[1],'click',this.selectNewPlaylist,this,true);
    YAHOO.util.Event.addListener('plstName','focus',this.handleInputBoxFocus,this.plstNameDefaultStr,this,true);
    YAHOO.util.Event.addListener('plstName','blur',this.handleInputBoxBlur,this.plstNameDefaultStr,this,true);
    var cancelBtn = document.getElementById('cancelBtn');
    var okBtn = document.getElementById('okBtn');
    YAHOO.util.Event.addListener(cancelBtn,'click',this.handleCancel,this,true);
    YAHOO.util.Event.addListener(okBtn,'click',this.handleOk,this,true);

};

AddToMyPlaylists.prototype.handleInputBoxFocus = function handleInputBoxFocus(evt,matchStr) {
    var target = YAHOO.util.Event.getTarget(evt);
    var elmName = target.id;
    var elm = YAHOO.util.Dom.get(elmName);
    if(elm.value == matchStr) {
        elm.value ="";
        // disable ok
        YAHOO.util.Dom.removeClass('okBtn', 'ymusic-btn1');
        YAHOO.util.Dom.addClass('okBtn', 'ymusic-btn1-disabled');
    }
    this.checkOptionNewPlaylist();
};
    
AddToMyPlaylists.prototype.handleInputBoxBlur = function handleInputBoxBlur(evt,matchStr) {
    var target = YAHOO.util.Event.getTarget(evt);
    var elmName = target.id;
    var elm = YAHOO.util.Dom.get(elmName);
    if(elm.value.length <= 1) {
        elm.value = matchStr;
    }
};

AddToMyPlaylists.prototype.checkOptionNewPlaylist = function checkOptionNewPlaylist()
{
    var addFlags  = document.getElementsByName('addFlag');
    addFlags[1].checked = true;
};

AddToMyPlaylists.prototype.selectExistingPlaylist = function selectExistingPlaylist(ev) 
{
	YAHOO.util.Dom.addClass('okBtn', 'ymusic-btn1');
    YAHOO.util.Dom.removeClass('okBtn', 'ymusic-btn1-disabled');
    YAHOO.util.Dom.get('plstName').value = this.plstNameDefaultStr;
};

AddToMyPlaylists.prototype.selectNewPlaylist = function selectNewPlaylist(ev) 
{
	YAHOO.util.Dom.removeClass('okBtn', 'ymusic-btn1');
    YAHOO.util.Dom.addClass('okBtn', 'ymusic-btn1-disabled');
};
AddToMyPlaylists.prototype.disableOptionExistingPlaylist = function()
{
    document.getElementsByName('addFlag')[0].checked = false;
    document.getElementsByName('addFlag')[0].disabled = true;
	YAHOO.util.Dom.removeClass('okBtn', 'ymusic-btn1');
    YAHOO.util.Dom.addClass('okBtn', 'ymusic-btn1-disabled');
};


AddToMyPlaylists.prototype.changePlaylistName = function changePlaylistName(ev) 
{
    if (YAHOO.util.Dom.get('plstName').value.trim().length < 1)
	{
		YAHOO.util.Dom.removeClass('okBtn', 'ymusic-btn1');
        YAHOO.util.Dom.addClass('okBtn', 'ymusic-btn1-disabled');
    }
	else
	{
		YAHOO.util.Dom.addClass('okBtn', 'ymusic-btn1');
        YAHOO.util.Dom.removeClass('okBtn', 'ymusic-btn1-disabled');
    }
};

AddToMyPlaylists.prototype.buildContent = function buildContent() 
{
    
    var htmlContent =  '<div class="ymusic_popup_right"></div><div class="ymusic_popup_left"></div><div class="ymusic_popup_ctr"></div>'+
                       '<div class="addToMyPlaylistContent"><h2>'+StrSelectPlaylist+'</h2>'+
                       '<div class="ymusic_popup_input"><input id="radioAddExisting" type="radio" name="addFlag" checked="true"></input><div class="radioChoice"><label for="radioAddExisting" class="options">'+StrAddToExistingPlaylist+
                       '</label>'+
						'<select name="existingPlaylists" id="playlistDropDownElement"><option value="'+StrNoPlaylistsAvailable+'">'+StrNoPlaylistsAvailable+'</select>'+
                       '</div></div>';
    htmlContent += '<div class="ymusic_popup_input"><input id="radioAddNew" type="radio" name="addFlag"></input><div class="radioChoice"><label for="radioAddNew" class="options">'+StrAddToNewPlaylist+'</label>'+
                   '<input id="plstName" type="text" maxlength="50" style="font:normal 11px arial;" value="'+this.plstNameDefaultStr+'"/></div></div>'+
                   '<div class="containerRow"><a id="okBtn" class="ymusic-btn1" href="#"><span>Save</span></a>'+
                   '<a id="cancelBtn" class="ymusic-btn1 default" href="#"><span>Cancel</span></a></div></div>';

    return htmlContent;
    
};

AddToMyPlaylists.prototype.updatePlaylist = function(vidArray,callBackFunc,callBackObj)
{
    var postData ="";

    var isNew = false;
    var title ="";
    if (this.playlistSelectedIndex == -1) {
        // new playlist
        // get the title
        title = document.getElementById('plstName').value;
        postData += 'name='+title;
        isNew = true;
        postData += '&';
    } else {
        if (this.playlistsArray[this.playlistSelectedIndex].id != '0') {
            postData += 'id='+this.playlistsArray[this.playlistSelectedIndex].id;
            postData += '&';
        } 
    }
    postData += 'videoIDS=';
    var vidLen = vidArray.length;
    for (var i =0; i < vidLen; i++) {
        postData += vidArray[i];
        if (i < vidLen-1) {
            postData += ',';
        }
    }
    if ("ratingCrumb" in YAHOO.music) {
        postData += '&_crumb='+ YAHOO.music.ratingCrumb;
    }
    
    // webservice call to update/add a playlist
    var wsURL = '/services/musicvideos/PlaylistManager/updatePlaylistService.php';
    var callBack = {
        success : function(retObj) {
            try {
                var playlistObj = eval("(" + retObj.responseText + ")");
                
                var plId = "";
                if (retObj.argument[0] === true) {
                    plId = playlistObj.Playlist.id.replace('{',"");
                    plId = plId.replace('}',"");
                }
                
                if (typeof(callBackFunc) == "function") {
                    // make the callback
                    if(callBackObj) {
                        // the call back object is specified
                        callBackFunc.call(callBackObj,"OK",retObj.argument[0],plId);
                    } else {
                        callBackFunc("OK",retObj.argument[0],plId);
                    }
                }
            
            } catch (ex) {
                alert("Error saving playlist data");
            }
        },
        failure : function(retObj) {
            console.log("WS failure - updateService.php");
            if (typeof(callBackFunc) == "function") {
                // make the callback
                if(callBackObj) {
                    // the call back object is specified
                    callBackFunc.call(callBackObj,"FAILED");
                } else {
                    callBackFunc("FAILED");
                }
            }
        },
        argument : [isNew]
    };
    YAHOO.util.Connect.asyncRequest('POST',wsURL,callBack,postData);
};

AddToMyPlaylists.prototype.callbackUpdatePlaylist = function(status,isNew,playlistId)
{
	var title;
	var selectElement = document.getElementById('playlistDropDownElement');
	if (status != "OK") {
	   alert("ERROR .. Video could not be added to the selected playlist");
	   return;
	}
   
   if (isNew) {
       //update the pulldownMenu
       title = document.getElementById('plstName').value;
       this.playlistsArray.unshift({title:title,id:playlistId});
       if(this.myPlaylistMenu) {
            selectElement.options.length = 0;
       }
       this.createPlaylistPulldownMenu();
       
   }
};

AddToMyPlaylists.prototype.getMyPlaylists = function(callBackFunc,callBackObj)
{
    var startCnt = 1;
    var callBack = {
        success : function(retObj) {
            var i, title, plId;
            var playlistsObj = null;
            var curPlaylists = [];
            try {
               playlistsObj = eval("(" + retObj.responseText + ")");
            } catch(ex) {
                return;
            }
         
            // extract count, total records
            var count = parseInt(playlistsObj.Playlists.count);
            var total = parseInt(playlistsObj.Playlists.total);
            var plArray = playlistsObj.Playlists.Playlist;
  
            if (plArray && ! (plArray instanceof Array)) {
                var tempRef  = plArray;
                plArray = [];
                plArray.push(tempRef);
            }
            
            if (plArray && plArray instanceof Array) {
                for (i=0; i<plArray.length; i++) {
                    if(plArray[i].title) {
                        title = plArray[i].title;
                        plId = plArray[i].id;
                        if(plId.charAt(0) == '{') {
                            plId = plId.substring(1,plId.length-1);
                        }
                        if (callBackObj && callBackObj.playlistsArray) {
                            callBackObj.playlistsArray.push({title:title,id:plId});
                            curPlaylists.push({title:title,id:plId});
                        }
                        
                    }
                }
                
            } 
            startCnt += count;
            if (typeof(callBackFunc) == "function") {
                // make the callback
                if(callBackObj) {
                    // the call back object is specified
                    callBackFunc.call(callBackObj,curPlaylists);
                } else {
                    callBackFunc(curPlaylists);
                }
            }
            curPlaylists = null;
            if (startCnt < total) {
               callWS();
            } else {
                // Done fetching all playlists
                this.evtGetPlaylistsDone.fire();
            }
       
           
        },
        failure : function(retObj) {
            console.log("WS failed");
        },
        scope :this
    };
    
    callWS();
    function callWS() {
      var wsURL = '/services/musicvideos/PlaylistManager/getUserPlaylistsService.php?'+'start='+startCnt;
      YAHOO.util.Connect.asyncRequest('GET',wsURL,callBack);
    }
    
};
AddToMyPlaylists.prototype.getPlaylistInfo = function getPlaylistInfo(plId,callBackFunc,callBackObj) {
     
     var wsURL = '/services/musicvideos/PlaylistManager/retrievePlaylistInfoService.php?playlistID='+plId;
     var callBack = {
         success : function(retObj) {
            var playlistObj, videos= [], i;
            try {
                 playlistObj = eval("(" + retObj.responseText + ")");
                 // create an array of videoInfo objects
                 if (playlistObj) {
                     if ("length" in playlistObj.Playlists.Playlist.Video) {
                         for(i=0; i < playlistObj.Playlists.Playlist.Video.length; i++) {
                             videos.push(playlistObj.Playlists.Playlist.Video[i].id);
                         }
                     } else {
                         // no array, just a single element
                         videos.push(playlistObj.Playlists.Playlist.Video.id);
                     }
                    
                    
                 }
                 if (typeof(callBackFunc) == "function") {
                    // make the callback
                    if(callBackObj) {
                        // the call back object is specified
                        callBackFunc.call(callBackObj,videos);
                    } else {
                        callBackFunc(videos);
                    }
                 }
             
             } catch(ex) {
                 console.log("Exception in success callback getPlaylistInfo "+ex.message);
             }
             
         },
         failure : function(retObj) {
             console.log("WS failure");
         }
     };
     YAHOO.util.Connect.asyncRequest('GET',wsURL,callBack);
};

AddToMyPlaylists.prototype.callbackGetPlaylistInfo = function callbackGetPlaylistInfo(videosArr) {
    //adding current video
    videosArr.push(this.videoId);
    this.updatePlaylist(videosArr,this.callbackUpdatePlaylist,this);
};

AddToMyPlaylists.prototype.callbackGetMyPlaylists = function callbackGetMyPlaylists(plstArray) {
    var i;
	var selectElement = document.getElementById('playlistDropDownElement');
	var newOption;
    if(plstArray.length === 0) {
        // no playlists to display
        this.disableOptionExistingPlaylist();
        return;
    }

    if (this.myPlaylistMenu) {
        for(i=0; i < plstArray.length; i++) {
//            this.myPlaylistMenu.addMenuItem({text:this.truncateTitle(plstArray[i].title),handler:this.playlistSelected,scopeObj:this});
			newOption = document.createElement('option');
			newOption.text = this.playlistsArray[i].title;
			newOption.value = this.playlistsArray[i].title;
			try {
				selectElement.add(newOption, null);
			}
			catch(ex) {
				selectElement.add(newOption);
			}
        }
    } else {
        this.createPlaylistPulldownMenu();
    }
};

AddToMyPlaylists.prototype.createPlaylistPulldownMenu = function createPlaylistPulldownMenu()
{
	var selectElement = document.getElementById('playlistDropDownElement');
	var newOption;

    if(this.playlistsArray.length>0) {
    	selectElement.remove(0);
    }
    for(var i=0; i< this.playlistsArray.length;i++) {
		newOption = document.createElement('option');
		newOption.text = this.playlistsArray[i].title;
		newOption.value = this.playlistsArray[i].title;
		try {
			selectElement.add(newOption, null);
		}
		catch(ex) {
			selectElement.add(newOption);
		}
    }
// this line is messing up playlist population because function is no longer referencable
//    this.callbackUpdatePlaylist = 0;
    this.myPlaylistMenu = true;
};


AddToMyPlaylists.prototype.playlistSelected = function playlistSelected(index)
{
    this.playlistSelectedIndex = index;
};

// call back to handle okay - context modified to 'this'
AddToMyPlaylists.prototype.handleOk = function(e) 
{
	if (e != null)
	{
		YAHOO.util.Event.stopEvent(e);
	}
    var videos = [];
    var vidArray;
    // check if ok is disabled
    if(YAHOO.util.Dom.hasClass('okBtn','disabled')) {
        return;
    }

    this.hideDialog();
    
	//check which radio button is selected
    var addFlags  = document.getElementsByName('addFlag');
    var selectIndex = 0;
    for (var i=0; i < addFlags.length;i++) {
        if(addFlags[i].checked === true) {
            selectIndex = i;
            break;
        }
    }
    
    if (selectIndex === 0) {
        // add to an existing playlist
		// check which playlist is selected
		var selectedPlaylistIndex = 0;
		var selectElement = document.getElementById('playlistDropDownElement');
		selectedPlaylistIndex = selectElement.selectedIndex;
        // get playlist info to append the current video id
        this.playlistSelectedIndex = selectedPlaylistIndex;
        this.getPlaylistInfo(this.playlistsArray[this.playlistSelectedIndex].id,this.callbackGetPlaylistInfo,this);
    } else { 
        // add to new
        this.playlistSelectedIndex = -1; // indicates new playlist creation
        vidArray = [this.videoId]; // new list only containing this video
        this.updatePlaylist(vidArray,this.callbackUpdatePlaylist,this);
    }
 
    

};

AddToMyPlaylists.prototype.handleCancel = function handleCancel(e) 
{
	if (e != null)
	{
		YAHOO.util.Event.stopEvent(e);
	}
    this.hideDialog();
};

AddToMyPlaylists.prototype.hideDialog = function ()
{
    this.dialog.style.visibility = "hidden";
};

AddToMyPlaylists.prototype.showDialog = function() 
{
	// get the location of add to playlist button
    var tElm = YAHOO.util.Dom.getElementsByClassName('btn_addToPlaylist','a','YMusic_MetaDataVideo');
    if (tElm.length > 0)
    {
        tElm = tElm[0];
    }
    else //Check for it's id
    {
        tElm = document.getElementById("btnAddToPlaylist");
    }
    if (!tElm)
    {
        return;
    }
    else
    {
        var xy = YAHOO.util.Dom.getXY(tElm);
        xy[0] += -5;
        xy[1] += 25;
        YAHOO.util.Dom.setXY(this.dialog, xy);

        var signInYes, oldLoc,intl;
        if (this.isMember) {
            if (document.getElementsByName('addFlag')[0].disabled === true) {
                document.getElementsByName('addFlag')[1].checked = true;
                YAHOO.util.Dom.addClass('mpPulldown','disabled');
            } else {
                document.getElementsByName('addFlag')[0].checked = true;
            }
            this.dialog.style.visibility = "visible";
        } else {
            signInYes = window.confirm(StrUserNotSignedIn);
            if (signInYes) {
                oldLoc = window.location.href;
                intl = (YAHOO.Intl == "us") ? "" : "&.intl=" + YAHOO.Intl;
                window.location.href = 'http://login.yahoo.com/config/login?.src=launch' + intl + '&.done='+encodeURIComponent(oldLoc);
            }
        }
    }

};
AddToMyPlaylists.prototype.truncateTitle = function truncateTitle(str,truncateMaxChars) {
    if (!truncateMaxChars) {
        truncateMaxChars = 30;
    }
    if (str.length > truncateMaxChars) {
        return str.substr(0,truncateMaxChars)+"...";
    }
    return str;
    
};

AddToMyPlaylists.prototype.updateCurrentVideoId = function updateCurrentVideoId(vid) {
    this.videoId = vid;
};
// instantiate addToMyPlaylist object
YAHOO.music.video.addToMyPlaylists = new AddToMyPlaylists();
