dojo.provide("com.Item");
dojo.require("data.GenRequest");
dojo.require("data.Response");
dojo.require("dijit.form.Button");
dojo.require("dijit.Dialog");
dojo.require("dijit.form.TextBox");
dojo.require("dijit.form.DateTextBox");
dojo.require("dijit.form.TimeTextBox");

dojo.declare("com.Item", null, {
    itemId:null,
	itemName:null,
	folderId:null,
	constructor: function(params) {
		dojo.mixin(this, params);
	},

    init: function(){

		
		console.log("initializing...");
        loginDlg = dijit.byId("loginDialog");

		if(loginDlg != undefined || loginDlg!=null)
		{
			console.log("loginDlg: "+ loginDlg);
			loginDlg.attr("draggable", false);

			//dojo.connect(dojo.byId("playlist2"), "onClick", loginDlg, "show");
			dojo.connect(dojo.byId("signin"), "onclick", this, "submitForm");
			dojo.connect(dojo.byId("saveitem"), "onclick", this, "addFavorite");
		    dojo.connect(dojo.byId("createaccount"), "onclick", this, "showCreateAccountDialog");
		    dojo.connect(dojo.byId("create"), "onclick", this, "createAccount");


			/*dojo.connect(dojo.byId("createAccountClose"), "onclick", this, "closeCreateAccountDlg");
			dojo.connect(dojo.byId("loginClose"), "onclick", this, "closeLoginDlg");*/

			/*var accountDlg = dijit.byId("accountDialog");
	        var btn = new dijit.form.Button({ label: "Close" });
            accountDlg.containerNode.appendChild(btn.domNode);

			var playlistDlg = dijit.byId("playlistDialog");
			var btn2 = new dijit.form.Button({ label: "Close" });
			playlistDlg.containerNode.appendChild(btn2.domNode); 
			
		    dojo.connect(btn, "onClick", function(){
				accountDlg.hide();
		    });

			dojo.connect(btn2, "onClick", function(){
				playlistDlg.hide();
		    });*/
			
			
			
		}

        var emailDlg = dijit.byId("emailDialog");

		if(emailDlg != undefined || emailDlg !=null)
		{
		   dojo.connect(dojo.byId("send"), "onclick", this, "sendEmail");
		   //dojo.connect(dojo.byId("closeMailDlg"), "onclick", this, "closeMailDialog");	
		}
    },
	
	closeMailDialog:function()
	{
		 var emailDlg = dijit.byId("emailDialog");
		 dojo.byId("recipient").value="";
		 emailDlg.hide();
	},
	
	closeCreateAccountDlg:function() 
	{
		var accountDlg = dijit.byId("accountDialog");
		accountDlg.hide();
	},

	closeLoginDlg:function()
    {
		 loginDlg = dijit.byId("loginDialog");
		 loginDlg.hide();
	},

    showSendEmailDialog: function(folderId)
    {
    	this.folderId = folderId;
    	emailDlg = dijit.byId("emailDialog");
    	emailDlg.attr("draggable", false);
 	    emailDlg.attr("style", "width:550px; height:200px");
		dojo.byId("folderId").value=folderId;
		dojo.byId("emailPlaylistErrorMsg").style.display="none";
 	    emailDlg.show();
    },
    
    showLoginDialog: function(itemId, itemName){
	   this.itemId = itemId;
       this.itemName = itemName;
       loginDlg = dijit.byId("loginDialog");
	   loginDlg.attr("draggable", false);
	   loginDlg.attr("style", "width:550px; height:275px");
	   dojo.byId("loginMessage").style.display="none";
	   loginDlg.show();
	},

    showPlaylistDialog: function(itemId, itemName){
	   this.itemId = itemId;
	   this.itemName = itemName;
       playlistDlg = dijit.byId("playlistDialog");
	   playlistDlg.attr("draggable", false);
	   playlistDlg.attr("style", "width:550px; height:200px");
	   dojo.byId("itemName").innerHTML=itemName;
	   dojo.byId("itemId").value=itemId;
	   dojo.byId("addFovoriteErrorMsg").style.display="none";
	   playlistDlg.show();
	},

    closeLoginDialog:function() {
       loginDlg = dijit.byId("loginDialog");
	   loginDlg.hide();
	},

    showCreateAccountDialog: function(){
       var accountDlg = dijit.byId("accountDialog");
	   /*var btn = new dijit.form.Button({ label: "Close" });
       accountDlg.containerNode.appendChild(btn.domNode);

		dojo.connect(btn, "onClick", function(){
			console.log("destroying, while visible"); 
			accountDlg.hide();
		});*/

	   //this.itemId = itemId;
       //this.itemName = itemName;
	   this.closeLoginDialog();
	   this.resetAccountForm();
       
	   dojo.byId("c_itemId").value=this.itemId;
	   accountDlg.attr("draggable", false);
	   accountDlg.attr("style", "width:550px; height:250px");
	   //dojo.byId("errorMessage").style.display="block";
	   //dojo.byId("errorMessage").innerHTML=this.itemName;
	   accountDlg.show();
	},
   
    display: function() {
	  var args = {
				  url: this.baseUrl,
				  handleAs: "json"
				 };
	  
	  var handler = data.GenRequest.xhrGet(args);
	  handler.addCallback(dojo.hitch(this, function(response) {
		  var jsonitem = data.Response.getJsonObject(response);
          //dojo.byId("course").innerHTML = response.course;
		  //dojo.byId("department").innerHTML = response.department;
		  var celements = this.getCourseElements("course_1");
		  this.setContent("deparment", response.department, celements);
		  this.setContent("course", response.course, celements);
	  }))
	},

	getItemId: function()
	{
		return this.itemId;
	},
	

	display2: function() {
	  var args = {
				  url: this.baseUrl,
				  handleAs: "json"
				 };
	  
	  var handler = data.GenRequest.xhrGet(args);
	  handler.addCallback(dojo.hitch(this, function(response) {
		  var jsonitem = data.Response.getJsonObject(response);
          var celements = this.getCourseElements("course_1");
		  this.setContent("deparment", response.department, celements);
		  this.setContent("course", response.course, celements);
	  }))
	},
	
	removeFavorite: function(action, id, counter)
	{
		var args = {
					url: this.removeFavoriteUrl+"?action="+action+"&id="+id,
					handleAs: "json"
				   };
	  
	   var handler = data.GenRequest.xhrGet(args);
	    handler.addCallback(dojo.hitch(this, function(response) {
	      console.log("Remove Playlist result: "+response.message)
	      if(response.message == "SUCCESS")
	      {
	    	  if(action == "favorite")
	    	  {
		    	  dojo.byId("favoriteDesc"+id).style.display="none";
		    	  dojo.byId("favoriteDetail"+id).style.display="none";
				  if(response.playlistStatus == "EMPTY")
				  {
					 dojo.byId("folder"+counter).style.display="none";
				  }
	    	  }else if(action == "playlist")
	    	  {
	    		  dojo.byId("folderTool"+counter).style.display="none";
		    	  dojo.byId("folder"+counter).style.display="none";
	    	  }
	      }
	  }))
	},

	getForm: function(index) {
		return dojo.byId(index);
	},

	getCourseElements: function(index) {
		var courselements = this.getForm(index);
		return dojo.query(".courseForm", courselements)[0];
	},

	setContent: function(elementName, value, elements) {
		var classSelector = "."+elementName;	
		var content = dojo.query(classSelector, elements)[0];
		if (content) {
			content.innerHTML = value;
		}
	},
	
	submitForm: function() {
	   var params = {};	
       var args = {
		           content:params,
		           url: this.baseUrl2,
				   form: this.getLoginForm().id,
				   handleAs: "json"
				  }

	  var handler = data.GenRequest.xhrPost(args);
	  handler.addCallback(dojo.hitch(this, function(response) {

           console.log(response);
		   console.log("username: "+response.username);
		   console.log("password: "+response.password);
		   console.log("loginPlaylist: "+ response.playlistLogin);
		   var login = response.playlistLogin;
		   if(login)
		   {
			   dijit.byId("loginDialog").hide();

			   console.log("query :"+dojo.query(".isnotloggedshow"));

			   dojo.query(".isnotloggedshow").removeClass("isnotloggedshow").addClass("isnotloggedhide");
			   dojo.query(".isloggedhide").removeClass("isloggedhide").addClass("isloggedshow");

			   var ref = dojo.byId("favoriteCat");
			   dojo.forEach(response.folders, function(entry, i){
					dojo.create("option", { value: entry.id, innerHTML: entry.folderName}, ref);

				});

			   this.showPlaylistDialog(this.itemId, this.itemName);

		   }else{
			   dojo.byId("loginMessage").style.display="block";
		   }
		
	  }))
	},
	
   createAccount: function() {
		
		var params = {};	
	       var args = {
			           content:params,
			           url: this.createAccountUrl,
					   form: this.getCreateAccountForm().id,
					   handleAs: "json"
					  }

	       var handler = data.GenRequest.xhrPost(args);
	 	   handler.addCallback(dojo.hitch(this, function(response) {

			   if(!response.success)
			   {
				   dojo.byId("createAccountErrorMsg").style.display="block";

				   if(response.message == "USERNAME_INVALID")
				   {
				     dojo.byId("createAccountErrorMsg").innerHTML="Error: Invalid e-mail address";
				   }else  if(response.message == "USERNAME_DUPLICATE"){

					 dojo.byId("createAccountErrorMsg").innerHTML="Error: Email already taken";
				   }else if(response.message == "PASSWORD_NULL"){
					 dojo.byId("createAccountErrorMsg").innerHTML="Error: Invalid password";

				   }else if(response.message == "PASSWORD_NOT_MATCH"){
					 dojo.byId("createAccountErrorMsg").innerHTML="Error: Password do not match";
				   }
			   }else {
					dijit.byId("accountDialog").hide();
					this.resetAccountForm();
					
					 var ref = dojo.byId("favoriteCat");
					   dojo.forEach(response.folders, function(entry, i){
							dojo.create("option", { value: entry.id, innerHTML: entry.folderName}, ref);

						});
					   
					   
					   dojo.query(".isnotloggedshow").removeClass("isnotloggedshow").addClass("isnotloggedhide");
					   dojo.query(".isloggedhide").removeClass("isloggedhide").addClass("isloggedshow");

					   this.showPlaylistDialog(this.itemId, this.itemName);

					
					
					/*this.resetAccountForm();
					var favorites = response.favorites;
					var options ="";
					dojo.forEach(favorites, function(entry, i){
						  console.log("entry: "+entry);
						});

					dojo.query(".isnotloggedshow").removeClass("isnotloggedshow").addClass("isnotloggedhide");
					dojo.query(".isloggedhide").removeClass("isloggedhide").addClass("isloggedshow");*/
			   }
	 		   
	           //console.log("Account successfully create:  "+ response.success + "  message :"+response.message +"  Favorites"+response.favorites );
	 		
	 	  }))
   },
   
   addFavorite: function() {
		var params = {};	
	    var args = {
			         content:params,
			         url: this.favoriteUrl,
					 form: this.getFavoriteForm().id,
					 handleAs: "json"
				   }

	       var handler = data.GenRequest.xhrPost(args);
	 	   handler.addCallback(dojo.hitch(this, function(response) {
           console.log("Adding Notification: "+response.message);
		   if(response.message == "SUCCESS")
		   {
			   playlistDlg = dijit.byId("playlistDialog");
			   playlistDlg.hide();
		   }else {
			   
			   dojo.byId("addFovoriteErrorMsg").style.display="block";
			   dojo.byId("addFovoriteErrorMsg").innerHTML = "Error: Already added. Choose another Playlist"
		   }

	 	  }))
	   
   },
   
   
   sendEmail:function() {
	   var params = {};	
	   var args = {
			         content:params,
			         url: this.sendMailUrl,
					 form: this.getSendMailForm().id,
					 handleAs: "json"
				   }
           
		   
		   var handler = data.GenRequest.xhrPost(args);
		   handler.addCallback(dojo.hitch(this, function(response) {
		   if(response.message == "SUCCESS")
		   {
				emailDlg = dijit.byId("emailDialog");
				emailDlg.hide();
		   }else if(response.message == "INVALID_EMAIL")
		   {
			   dojo.byId("emailPlaylistErrorMsg").style.display="block";
			   dojo.byId("emailPlaylistErrorMsg").innerHTML="Error: Invalid e-mail address";
		   }else {

			   dojo.byId("emailPlaylistErrorMsg").innerHTML="Error: Tehcnical difficulties. Please try later";
		   }

		}))
   },
	   

   resetAccountForm:function(){
	 dojo.byId("createAccountErrorMsg").style.display="none";
	 dojo.byId("c_username").value="";
	 dojo.byId("c_password").value="";
	 dojo.byId("c_password2").value="";
   },

  savePlaylist: function(){
	   console.log("Saving Playlist..."+dojo.byId("itemId").value);
	   var theItem = dojo.byId("itemId").value;
	   var saveUrl = this.baseUrl2 + "?itemId"+theItem;
	   var params = {};	
       var args = {
		           content:params,
		           url: this.baseUrl2,
				   form: this.getPlaylistForm().id,
				   handleAs: "json"
				  }

	  var handler = data.GenRequest.xhrPost(args);
	  handler.addCallback(dojo.hitch(this, function(response) {
          console.log(response);
		
	  }))
  },

  getLoginForm: function() {
		return dojo.byId("loginForm");
  },

  getPlaylistForm: function() {
	return dojo.byId("playlistForm");
  },
  
  getCreateAccountForm:function(){
	  return dojo.byId("createAccountForm");
  },
  
  getFavoriteForm:function() {
	  return dojo.byId("favoriteForm");
  },
  
  getSendMailForm:function() {
	  return dojo.byId("emailPlaylistForm");
  }

});
