/**
 * arena/comment.js
 *
 *
 *
 * Dependencies
 * - YUI
 *
 * @author Fermin <fsimeon@gaiaonline.com>
 * @author Royston Olivera(royo_2004) <royston.olivera@xoriant.com>
 **/


YAHOO.namespace('gaia.app.Arena');
YAHOO.gaia.app.Arena.Comment = function() {

    this._settings = null;
    this._ajaxRequest= null;
    this._commentButton = null;
}

YAHOO.gaia.app.Arena.Comment.prototype.init = function(settings){

    this._settings = {

        addcomdiv  : YAHOO.util.Dom.get(settings.addcomdiv),
        addComUrl: settings.addcom,
        threadId: settings.threadid,
        newcomdiv: YAHOO.util.Dom.get(settings.newcomdiv),
        errordiv : YAHOO.util.Dom.get(settings.errordiv),
        nonce : settings.nonce,
        testdiv : YAHOO.util.Dom.get(settings.testdiv),
        deleteurl : settings.deleteurl,
        reporturl : settings.rpurl,
        commentCount : YAHOO.util.Dom.get(settings.commentcount),
        //commentCountb : YAHOO.util.Dom.get(settings.commentcountb),
        profileurl : settings.profileurl,
		profileLink : settings.profileLink,
		friendLink : settings.friendLink, 
		msgLink : settings.msgLink,
		pmLink: settings.pmLink,
		journalLink: settings.journalLink,
		galleryLink : settings.galleryLink,
		trade : settings.trade,
		buyGift: settings.buyGift,
		ignore:settings.ignore,
		reportAbuse : settings.reportAbuse,
		moddog : settings.moddog,
		profileTools : settings.profileTools, 
		watchlistRmLink : settings.watchlistRmLink,
		watchlistAddLink : settings.watchlistAddLink,
        topicCount : YAHOO.util.Dom.get(settings.topicCount),
        nocomment : YAHOO.util.Dom.get(settings.nocomment),
		userid : settings.userid,
		ownerCurrState : settings.ownerCurrState,
		recaptchaDetails : settings.recaptchaDetails,
		recaptchaServer : settings.recaptchaServer,
		showCaptcha : settings.showCaptcha, 
		type : settings.type, 
		subtype : settings.subtype, 
        app : settings.app || 'artist'

    };

    if(this._settings.addcomdiv){
    	this._make_addcomment();
    }
}

YAHOO.gaia.app.Arena.Comment.prototype._fadeIn = function(el,duration){

	var attributes = {

		opacity: { from:0,to: 1 }
	};
	var anim = new YAHOO.util.Anim(el,attributes,duration);
	anim.animate();
}

YAHOO.gaia.app.Arena.Comment.prototype._make_addcomment = function() {
	this._settings.addcomdiv.innerHTML = '';
  	var button1 = document.createElement('input');
	button1.type = 'submit';
	button1.name = 'submitComment';
	button1.value = '';
	button1.id = 'priCommentButton';
	YAHOO.util.Dom.addClass(button1, 'btn-submit');
	this._settings.addcomdiv.appendChild(button1);
  	YAHOO.util.Event.addListener(button1, 'click', this._make_addcommentdiv, this,true);

}

YAHOO.gaia.app.Arena.Comment.prototype._show_comment_form = function(){
	
	var elem = new YAHOO.util.Element(YAHOO.util.Dom.get('priCommentButton'));
	elem.setStyle('display', 'none');
	var elem = new YAHOO.util.Element(YAHOO.util.Dom.get('commentForms'));
	elem.setStyle('display', 'block');
}

YAHOO.gaia.app.Arena.Comment.prototype._make_addcommentdiv = function() {
	
	//this._settings.addcomdiv.innerHTML = '';
	YAHOO.util.Event.removeListener(YAHOO.util.Dom.get('priCommentButton'), "click");
	YAHOO.util.Event.addListener(YAHOO.util.Dom.get('priCommentButton'), 'click', this._show_comment_form, this,true);
	var elem = new YAHOO.util.Element(YAHOO.util.Dom.get('priCommentButton'));
	elem.setStyle('display', 'none');
	this._settings.errordiv.innerHTML = '';
	var form = document.createElement('form');

	form.setAttribute('name','commentForm');
	form.setAttribute('id','commentForms');
	form.setAttribute('method','POST');
	form.setAttribute('action','#');
	var textarea = document.createElement('textarea');
	textarea.setAttribute('name','comment');
	textarea.setAttribute('id','comment');
	
	var captchaImage = document.createElement('img');
	captchaImage.setAttribute('id','recaptchaImage');
	captchaImage.setAttribute('class','recaptchaImg');
	//var src = this._settings.recaptchaServer;
	//var src =  this._settings.recaptchaDetails['image_src'];
	captchaImage.src = this._settings.recaptchaServer + this._settings.recaptchaDetails['image_src'];
	
	var response = document.createElement('input');
	response.setAttribute('type', 'text');
	response.setAttribute('name','response');
	response.setAttribute('id','response');
	response.setAttribute('class','challenge_response')
	
	var reload_div = document.createElement('div');
	reload_div.setAttribute('id','reload_div');
	
	var cantTxt = "Can't read the text? ";
	var cantTxtNode = document.createTextNode(cantTxt);
	reload_div.appendChild(cantTxtNode);
	
	var reload = document.createElement('a');
	var reloadTxt = "Click here";
	var reloadTxtNode = document.createTextNode(reloadTxt);
	reload.appendChild(reloadTxtNode);
	reload_div.appendChild(reload);
	
	var inst_div = document.createElement('div');
	inst_div.setAttribute('id','inst_div');
	var instruction = "Enter both words, separated by a space:"
	var instNode = document.createTextNode(instruction);
	inst_div.appendChild(instNode);
	 
	var challenge = document.createElement('input');
	challenge.setAttribute('type','hidden');
	challenge.setAttribute('name','challenge');
	challenge.setAttribute('id','challenge');
	challenge.setAttribute('value',this._settings.recaptchaDetails['recaptcha_challenge_field']);
			
	var button = document.createElement('input');
	button.setAttribute('type','submit');
	button.setAttribute('name','submitComment');
	button.setAttribute('value','');
	YAHOO.util.Dom.addClass(button, 'btn-submit');
	
	var n = document.createElement('input');
	n.setAttribute('type','hidden');
	n.setAttribute('name','n');
	n.setAttribute('value',this._settings.nonce);
	
    var type = document.createElement('input');
	type.setAttribute('type','hidden');
	type.setAttribute('name','type');
	type.setAttribute('value',this._settings.type);
    
    var subtype = document.createElement('input');
	subtype.setAttribute('type','hidden');
	subtype.setAttribute('name','subtype');
	subtype.setAttribute('value',this._settings.subtype);
    
	form.appendChild(textarea);
	form.appendChild(captchaImage);
	form.appendChild(reload_div);
	form.appendChild(inst_div);
	form.appendChild(challenge);
	form.appendChild(response);
	form.appendChild(button);
	form.appendChild(n);
	form.appendChild(type);
	form.appendChild(subtype);
	this._settings.addcomdiv.appendChild(form);
	this._commentButton = button;
	if(!this._settings.showCaptcha)this._hideCaptcha(this);
	YAHOO.util.Event.addListener(reload, 'click', this._reloadCaptcha, this,true);
	YAHOO.util.Event.addListener(button, 'click', this._make_doAjaxAddComment, this,true);
}

YAHOO.gaia.app.Arena.Comment.prototype._hideCaptcha = function(e){
	 var elem = new YAHOO.util.Element(YAHOO.util.Dom.get('recaptchaImage'));
     elem.setStyle('display', 'none');
	 var elem = new YAHOO.util.Element(YAHOO.util.Dom.get('inst_div'));
     elem.setStyle('display', 'none');
	 var elem = new YAHOO.util.Element(YAHOO.util.Dom.get('response'));
     elem.setStyle('display', 'none');
	 var elem = new YAHOO.util.Element(YAHOO.util.Dom.get('reload_div'));
     elem.setStyle('display', 'none');
	 

}
YAHOO.gaia.app.Arena.Comment.prototype._showCaptcha = function(e){
	 var elem = new YAHOO.util.Element(YAHOO.util.Dom.get('recaptchaImage'));
     elem.setStyle('display', 'block');
	 var elem = new YAHOO.util.Element(YAHOO.util.Dom.get('inst_div'));
     elem.setStyle('display', 'block');
	 var elem = new YAHOO.util.Element(YAHOO.util.Dom.get('response'));
     elem.setStyle('display', 'block');
	 var elem = new YAHOO.util.Element(YAHOO.util.Dom.get('reload_div'));
     elem.setStyle('display', 'block');
	 

}
YAHOO.gaia.app.Arena.Comment.prototype._reloadCaptcha = function(e){
	document.getElementById('response').value = "";
	YAHOO.util.Event.preventDefault(e);
	
	var callback = {

        success:function(o) {
	 		this._handleReloadSuccess(o);
        },
    /*    failure:function(o) {
            this._reportCommentError(o);
        },*/
        scope: this

    };


    var url = this._settings.addComUrl;
    url += '&reload=1';
    

  this._ajaxRequest = YAHOO.util.Connect.asyncRequest('GET',url,callback);
}
YAHOO.gaia.app.Arena.Comment.prototype._handleReloadSuccess = function(o){
	var response = eval("(" + o.responseText + ")");
	if(response.response == 1)
	{
		document.getElementById('recaptchaImage').src = this._settings.recaptchaServer + response.image_src;
		document.getElementById('challenge').value = response.recaptcha_challenge_field;
	}
	
}


YAHOO.gaia.app.Arena.Comment.prototype._make_doAjaxAddComment = function(e) {
	//send the request to the vote.action page over here
  	YAHOO.util.Event.preventDefault(e);

	var callback = {

        success:function(o) {
	 		this._handleCommentSuccess(o);
			
        },
    /*    failure:function(o) {
            this._reportCommentError(o);
        },*/
        scope: this

    };


    var formObject = document.getElementById('commentForms');

   YAHOO.util.Connect.setForm(formObject);
    var url = this._settings.addComUrl;
    url += '&app=';
    url += this._settings.app;
    url += '&entry_id=';
    url += this._settings.threadId;

  this._ajaxRequest = YAHOO.util.Connect.asyncRequest('POST',url,callback);
}

/*
YAHOO.gaia.app.Arena.Comment.prototype._reportCommentError = function(o){
}*/

YAHOO.gaia.app.Arena.Comment.prototype._handleCommentSuccess = function(o) {
   var response = eval("(" + o.responseText + ")");
   //this._settings.addcomdiv.innerHTML = o.responseText;
   this._reloadCaptcha(this);
    if(response.response == 1 ) {
		var elem = new YAHOO.util.Element(YAHOO.util.Dom.get('commentForms'));
		elem.setStyle('display', 'none');
		var butn = new YAHOO.util.Element(YAHOO.util.Dom.get('priCommentButton'));
		butn.setStyle('display', 'block');
       // this._settings.addcomdiv.innerHTML ='';
       this._settings.errordiv.innerHTML = '';
		//this._settings.newcomdiv.innerHTML = '';

		var div0 = document.createElement('div');
		div0.id = 'commentsContainer';

		var elem = new YAHOO.util.Element(div0);

		elem.setStyle('opacity', 0);
		var div1 = document.createElement('div');
		div1.id = 'commentsReference';
		div0.appendChild(div1);
		//div1.setStyle('opacity', 0);
		var ul1 = document.createElement('ul');
		ul1.id = 'commentsReferenceList';
		div1.appendChild(ul1);
		var li1 = document.createElement('li');
		li1.id = 'commentsAuthorThumbnail';
		//li1.innerHTML = response.comment;
		YAHOO.util.Dom.addClass(li1, 'commentsContent');
		ul1.appendChild(li1);
		
		var thumbDiv = document.createElement('div');
		thumbDiv.id = 'artistThumbnail';
		li1.appendChild(thumbDiv);
		
		var imgDiv = document.createElement('div');
		YAHOO.util.Dom.addClass(imgDiv,'dropBoxArena');
		imgDiv.id = response.post_id;
		thumbDiv.appendChild(imgDiv);
		
		var thumb = document.createElement('img');
		YAHOO.util.Dom.addClass(thumb,'avatarImage');
		thumb.src = response.avatar_url;
		imgDiv.appendChild(thumb);
		
		var menuLink = document.createElement('a');
		YAHOO.util.Dom.addClass(menuLink,'avatarDropLinkArena');
		imgDiv.appendChild(menuLink);
		
		
		var menuDiv = document.createElement('div');
		YAHOO.util.Dom.addClass(menuDiv,'individual_menuArena');
		var elem = new YAHOO.util.Element(menuDiv);
		elem.setStyle('display','none');
		elem.setStyle('margin-top','51px');
		menuDiv.id = response.post_id + "menu";
		thumbDiv.appendChild(menuDiv);
		
		var menuUl = document.createElement('ul');
		menuDiv.appendChild(menuUl);
		
		var ml1 = document.createElement('li');
		menuUl.appendChild(ml1);
		var mla1 = document.createElement('a');
		mla1.href = this._settings.galleryLink + this._settings.userid;
		ml1.appendChild(mla1);
		var linkText1 = document.createTextNode("View Gallery");
		mla1.appendChild(linkText1);
		
		
		var ml2 = document.createElement('li');
		menuUl.appendChild(ml2);
		var mla2 = document.createElement('div');
		ml2.appendChild(mla2);
		mla2.id = 'watchdiv';
		/*var linkText2 = document.createTextNode("Become a Fan");
		mla2.appendChild(linkText2);*/
				
		var sepli = document.createElement('li');
		YAHOO.util.Dom.addClass(sepli,'menu_seperator');
		menuUl.appendChild(sepli);
		
		var ml3 = document.createElement('li');
		menuUl.appendChild(ml3);
		var mla3 = document.createElement('a');
		mla3.href = this._settings.profileurl;
		ml3.appendChild(mla3);
		var linkText3 = document.createTextNode("Profile");
		mla3.appendChild(linkText3);
		
		var ml4 = document.createElement('li');
		menuUl.appendChild(ml4);
		var mla4 = document.createElement('a');
		mla4.href = this._settings.journalLink;
		ml4.appendChild(mla4);
		var linkText4 = document.createTextNode("Journal");
		mla4.appendChild(linkText4);
		
		var ml5 = document.createElement('li');
		menuUl.appendChild(ml5);
		var mla5 = document.createElement('a');
		mla5.href = this._settings.friendLink;
		ml5.appendChild(mla5);
		var linkText5 = document.createTextNode("Add/Remove as Friend");
		mla5.appendChild(linkText5);
		
		var sepli1 = document.createElement('li');
		YAHOO.util.Dom.addClass(sepli1,'menu_seperator');
		menuUl.appendChild(sepli1);
		
		var ml6 = document.createElement('li');
		menuUl.appendChild(ml6);
		var mla6 = document.createElement('a');
		mla6.href = this._settings.pmLink;
		ml6.appendChild(mla6);
		var linkText6 = document.createTextNode("Send PM");
		mla6.appendChild(linkText6);
		
		var sepli2 = document.createElement('li');
		YAHOO.util.Dom.addClass(sepli2,'menu_seperator');
		menuUl.appendChild(sepli2);
		
		var ml7 = document.createElement('li');
		menuUl.appendChild(ml7);
		var mla7 = document.createElement('a');
		mla7.href = this._settings.trade
		ml7.appendChild(mla7);
		var linkText7 = document.createTextNode("Trade");
		mla7.appendChild(linkText7);
		
		var ml8 = document.createElement('li');
		menuUl.appendChild(ml8);
		var mla8 = document.createElement('a');
		mla8.href = this._settings.buyGift;
		ml8.appendChild(mla8);
		var linkText8 = document.createTextNode("Buy a Gift");
		mla8.appendChild(linkText8);
		
		var sepli4 = document.createElement('li');
		YAHOO.util.Dom.addClass(sepli4,'menu_seperator');
		menuUl.appendChild(sepli4);
		
		var ml9 = document.createElement('li');
		menuUl.appendChild(ml9);
		var mla9 = document.createElement('a');
		mla9.href = this._settings.ignore;
		ml9.appendChild(mla9);
		var linkText9 = document.createTextNode("Ignore");
		mla9.appendChild(linkText9);
		
		var ml10 = document.createElement('li');
		menuUl.appendChild(ml10);
		var mla10 = document.createElement('a');
		mla10.href = this._settings.reportAbuse;
		ml10.appendChild(mla10);
		var linkText10 = document.createTextNode("Report Abuse");
		mla10.appendChild(linkText10);
		
		var sepli5 = document.createElement('li');
		YAHOO.util.Dom.addClass(sepli5,'menu_seperator');
		menuUl.appendChild(sepli5);
		
		
		var ml11 = document.createElement('li');
		menuUl.appendChild(ml11);
		var mla11 = document.createElement('a');
		mla11.href = this._settings.moddog;
		ml11.appendChild(mla11);
		var linkText11 = document.createTextNode("Moddog");
		mla11.appendChild(linkText11);
		
		var ml12 = document.createElement('li');
		menuUl.appendChild(ml12);
		var mla12 = document.createElement('a');
		mla12.href = this._settings.profileTools;
		ml12.appendChild(mla12);
		var linkText12 = document.createTextNode("Profile Tools");
		mla12.appendChild(linkText12);
		


		var div2 = document.createElement('div');
		//div1.setStyle('opacity', 0);
		div2.id = 'commentsContent';
		var ul2 = document.createElement('ul');
		ul2.id = 'commentsContentList';
		div2.appendChild(ul2);
		var li2 = document.createElement('li');
		li2.id = 'commentsUserName';
		ul2.appendChild(li2);
		var a2 =document.createElement('a');
		a2.href = this._settings.profileurl; //link to user profile must come here
		a2.title = 'title' // view user's profile must come here
		li2.appendChild(a2);
		var span2 = document.createElement('span');
		YAHOO.util.Dom.addClass(span2, 'userName');
		span2.innerHTML = response.user_id;
		a2.appendChild(span2);
		var span3 = document.createElement('span');
		YAHOO.util.Dom.addClass(span3, 'date');
		span3.innerHTML = ' - ';
		span3.innerHTML += response.date;
		li2.appendChild(span3);
		
		var li3 = document.createElement('li');
		li3.id = 'commentsDescription';
		YAHOO.util.Dom.addClass(li3, 'commentsContent');
		var temp = response.comment.replace(/([^>])\n/g, '$1<br />\n'); 
		
		li3.innerHTML = temp;
		ul2.appendChild(li3);
		
		var li4 = document.createElement('li');
		li4.id = 'modLinks';
		
		var span6 = document.createElement('span');
		YAHOO.util.Dom.addClass(span6, 'reportSpam');

		var a3 = document.createElement('a');
		a3.href= this._settings.deleteurl;

		a3.href += response.post_id;
		a3.href += '/?n=';
		a3.href += this._settings.nonce;
		var deleteTxt = 'Delete | ';
		var deleteTxtNode = document.createTextNode(deleteTxt);
		a3.appendChild(deleteTxtNode);
		span6.appendChild(a3);
		var a4 = document.createElement('a');
		a4.href = '/gaia/report.php?r=10003&rart='+this._settings.threadId+'&rcom='+response.sequence+'&arenatype='+this._settings.type+'&arenasubtype='+this._settings.subtype; //this._settings.reporturl;
		//a4.href += '&rcom=';
		//a4.href += response.sequence;
		var reportTxt = 'Report As Spam';
		var reportTxtNode = document.createTextNode(reportTxt);
		a4.appendChild(reportTxtNode);
		span6.appendChild(a4);
		li4.appendChild(span6);
		
		
		ul2.appendChild(li4);

		div0.appendChild(div2);
		//this._fadeIn(div2,1);
		//this._settings.newcomdiv.appendChild(div0);

		this._settings.newcomdiv.insertBefore(div0, this._settings.newcomdiv.firstChild);
		this._settings.commentCount.innerHTML = "<span class='title'>Comments </span>("+response.sequence+" Comments)<hr>";
		var element = YAHOO.util.Dom.getElementsByClassName('commentCount1');
		for(i=0; i< element.length; i++)
		{
			element[i].innerHTML = response.sequence;
		}
		if(this._settings.nocomment)
		{
			this._settings.nocomment.innerHTML = '';
		}
		this._fadeIn(div0,3);
		
		document.getElementById('comment').value = '';
		//this._settings.newcomdiv.firstChild = this._settings.div0;
		YAHOO.util.Event.addListener(imgDiv, 'mouseover', function(e) {
			YAHOO.util.Dom.addClass(imgDiv, "trig");
		});
		YAHOO.util.Event.addListener(menuLink, 'mouseover', function(e) {
			YAHOO.util.Dom.addClass(imgDiv, "hover");
			YAHOO.util.Dom.addClass(imgDiv, "down");
			var elem = new YAHOO.util.Element(menuDiv);
			elem.setStyle('display','block');
			
		});
		
		YAHOO.util.Event.addListener(imgDiv, 'mouseout', function(e) {
			if (YAHOO.util.Dom.getStyle(menuDiv, 'display') != 'block')
			YAHOO.util.Dom.removeClass(imgDiv, "trig");
		});
		YAHOO.util.Event.addListener(menuDiv, 'mouseover', function(e) {
			YAHOO.util.Dom.addClass(imgDiv, "hover");
			YAHOO.util.Dom.addClass(imgDiv, "down");
			YAHOO.util.Dom.addClass(imgDiv, "trig");
			var elem = new YAHOO.util.Element(menuDiv);
			elem.setStyle('display','block');
			
		});
		YAHOO.util.Event.addListener(menuDiv, 'mouseout', function(e) {
			if (YAHOO.util.Dom.getStyle(menuDiv, 'display') != 'block'){
				YAHOO.util.Dom.removeClass(imgDiv, "trig");
				YAHOO.util.Dom.removeClass(imgDiv, "hover");
				YAHOO.util.Dom.removeClass(imgDiv, "down");
			}
			var elem = new YAHOO.util.Element(menuDiv);
			elem.setStyle('display','none');
			
			YAHOO.util.Dom.removeClass(imgDiv, "trig");
			YAHOO.util.Dom.removeClass(imgDiv, "hover");
			YAHOO.util.Dom.removeClass(imgDiv, "down");
		});
		initFavorite(
			{
				wlerrordiv: this._settings.errordiv,
				wlsigninerr: 'Please sign in to access this feature.',
				wlajaxerr: 'Please try again after sometime.',
				wldiv: 'watchdiv',
				wlcurstate: this._settings.ownerCurrState,
				wlrm: this._settings.watchlistRmLink,
				wladd: this._settings.watchlistAddLink,
				rmText: 'Remove from Idols',
				addText: 'Become a Fan'
			}
		);
    }
    else{
		if(response.response == 0 ){
			if(response.show_captcha) this._showCaptcha(this); 
        //this._settings.addcomdiv.innerHTML ='';
		 this._settings.errordiv.innerHTML = response.error;
		 //this._make_addcomment();
		 var stripcomment = document.getElementById('comment').value;
		 	 if(stripcomment.length > 500){	
			//document.getElementById('comment').value='';
				document.getElementById('comment').value = stripcomment.substring(0, 500);
			}
		}else{
			//alert("test1");
		document.getElementById('comment').value = '';
		}
		}
		
}

function initComment(settings) {
    voting = new YAHOO.gaia.app.Arena.Comment();
    voting.init(settings);

}
