CreatoorSN.namespace('opinions');
CreatoorSN.opinions = {
	lastClicked: -1,
	add : function (addOpinionDiv, opinionCountDiv, url, get, removeUrl, removeGet, opinionsUsersDivId, showUrl, showGet, opinion) {
		if (typeof(addOpinionDiv) == 'string') {
			addOpinionDiv = _$(addOpinionDiv);
		} else if (typeof(addOpinionDiv.getElement) == 'function') {
			addOpinionDiv = addOpinionDiv.domElement;
		}
		if (typeof(opinionCountDiv) == 'string') {
            opinionCountDiv = _$(opinionCountDiv);
        } else if (typeof(addOpinionDiv.getElement) == 'function') {
            opinionCountDiv = opinionCountDiv.domElement;
        }
		if (addOpinionDiv.tagName && opinionCountDiv.tagName) {
		    addOpinionDiv.innerHTML = '<img src="/images/ajax-loader.gif" alt="please wait..." />';
			var oCallback = {                
            success : function (o) {
                var response = YAHOO.lang.JSON.parse(o.responseText);
                if (response.success) {
					var removeOpinion = new creaDomObject(
					    {
							tag: 'a',
							href: '#',
							html: '<img src="/images/delete.gif" alt="' + CreatoorSN.common.translate('remove opinion') + '" />'
						}   
					);
					removeOpinion.domElement.onclick = function() {
						CreatoorSN.opinions.remove(addOpinionDiv, opinionCountDiv, url, get, removeUrl, removeGet, opinionsUsersDivId, showUrl, showGet);
						return false;
					};
					var src = '/images/dislike.gif';
					var alt = CreatoorSN.common.translate('dislike');
					if (response.myOpinion > 0) {
						src = '/images/like.gif';
                        alt = CreatoorSN.common.translate('like');
					}					
					var opinionImg = new creaDomObject (
					    {
							tag: 'img',
							src: src,
							alt: alt,
							style: {marginRight: '5px'}
						}
					);
					CreatoorSN.opinions.setLikeDislikeCount(response.opinionCounts, opinionsUsersDivId, opinionCountDiv, showUrl, showGet);
					addOpinionDiv.innerHTML = '';					
					opinionImg.addTo(addOpinionDiv);
					removeOpinion.addTo(addOpinionDiv);                    
                } else {
					if (response.noAuth) {
                        var login = new noAuth(function(noAuthObj){
                            CreatoorSN.opinions.add(addOpinionDiv, opinionCountDiv, url, get, removeUrl, removeGet, opinionsUsersDivId, showUrl, showGet, opinion);
                        }, response.message);
                        return;
                    }
					CreatoorSN.common.showErrorAlert(response.message);
				}
            },
            
            failure : function (o) {
                CreatoorSN.common.showErrorAlert(o.statusText);
            },
            timeout: CreatoorSN.common.iAjaxTimeout
            
        };
        YAHOO.util.Connect.asyncRequest(
            "GET",
            url + '?' + get + "&opinion=" + opinion,
            oCallback
        );	
		}
		
		
	},
	
	remove : function (addOpinionDiv, opinionCountDiv, url, get, removeUrl, removeGet, opinionsUsersDivId, showUrl, showGet) {
		addOpinionDiv.innerHTML = '<image src="/images/ajax-loader.gif" alt="please wait..." />';
		var oCallback = {                
            success : function (o) {
                var response = YAHOO.lang.JSON.parse(o.responseText);
                if (response.success) {
					var like = new creaDomObject(
					    {
					       tag: 'img',
						   src: '/images/like.gif',
						   alt: CreatoorSN.common.translate('like'),
						   className: 'like fake-link'
					    }
					);
					like.domElement.onclick = function() {
						CreatoorSN.opinions.add(addOpinionDiv, opinionCountDiv, url, get, removeUrl, removeGet, opinionsUsersDivId, showUrl, showGet, 1);
					};
					var dislike = new creaDomObject(
                        {
                           tag: 'img',
                           src: '/images/dislike.gif',
                           alt: CreatoorSN.common.translate('dislike'),
                           className: 'dislike fake-link'
                        }
                    );
                    dislike.domElement.onclick = function() {
                        CreatoorSN.opinions.add(addOpinionDiv, opinionCountDiv, url, get, removeUrl, removeGet, opinionsUsersDivId, showUrl, showGet, 0);
                    };
					addOpinionDiv.innerHTML = '';
					like.addTo(addOpinionDiv);
					dislike.addTo(addOpinionDiv);
                    CreatoorSN.opinions.setLikeDislikeCount(response.opinionCounts, opinionsUsersDivId, opinionCountDiv, showUrl, showGet);
                } else {
					if (response.noAuth) {
                        var login = new noAuth(function(noAuthObj){
                            CreatoorSN.opinions.remove(addOpinionDiv, opinionCountDiv, url, get, removeUrl, removeGet, opinionsUsersDivId, showUrl, showGet);
                        }, response.message);
                        return;
                    }
					CreatoorSN.common.showErrorAlert(response.message);
				}
            },
            
            failure : function (o) {
                CreatoorSN.common.showErrorAlert(o.statusText);
            },
            timeout: CreatoorSN.common.iAjaxTimeout
            
        };
        YAHOO.util.Connect.asyncRequest(
            "GET",
            removeUrl + '?' + removeGet,
            oCallback
        );
	},
	
	setLikeDislikeCount : function (opinionsCount, opinionsUsersDivId, opinionCountDiv, showUrl, showGet) {
		var likeImg = new creaDomObject (
            {
               tag: 'img',
               src: '/images/like.gif',
               alt: CreatoorSN.common.translate('like'),
               className: 'like'
            }
        );
		likeCountConfig = {
			html: opinionsCount.likeCount,
			className: 'bold',
			tag: 'span'
		}
        
        if (parseInt(opinionsCount.likeCount)) {			
            likeCountConfig.tag = 'a';
			var likeCount = new creaDomObject(likeCountConfig);
            likeCount.domElement.onclick = function() {
                CreatoorSN.opinions.showUsers(opinionsUsersDivId, opinionCountDiv, showUrl, showGet + "&opinion=1", 1, opinionsCount);
				return false;
            };
        } else {
			var likeCount = new creaDomObject(likeCountConfig);
		}
        var dislikeImg = new creaDomObject (
            {
               tag: 'img',
               src: '/images/dislike.gif',
               alt: CreatoorSN.common.translate('like'),
               className: 'dislike'
            }
        );
		dislikeCountConfig = {
            html: opinionsCount.dislikeCount,
            className: 'bold',
			tag: 'span'
        }
        
        if (parseInt(opinionsCount.dislikeCount)) {
			dislikeCountConfig.tag = 'a';
            var dislikeCount = new creaDomObject(dislikeCountConfig);
            dislikeCount.domElement.onclick = function() {
                CreatoorSN.opinions.showUsers(opinionsUsersDivId, opinionCountDiv, showUrl, showGet + "&opinion=0", 0, opinionsCount);
				return false;
            };
        } else {
			var dislikeCount = new creaDomObject(dislikeCountConfig);
		}
		opinionCountDiv.innerHTML = '';
        likeImg.addTo(opinionCountDiv);
        likeCount.addTo(opinionCountDiv);
        dislikeImg.addTo(opinionCountDiv);
        dislikeCount.addTo(opinionCountDiv);
	},
	
	showUsers : function (opinionUsersDivId, opinionCountDiv, url, get, opinion, opinionsCount) {
		var opinionUsersDiv = _$(opinionUsersDivId);
		if (opinionUsersDiv) {
			CreatoorSN.opinions.hideUsers(opinionUsersDiv);
			if (opinion == CreatoorSN.opinions.lastClicked) {
			    CreatoorSN.opinions.lastClicked = -1;
				return false;	
			}
			
		}
		CreatoorSN.opinions.lastClicked = opinion;
		var opinionCountHTML = opinionCountDiv.innerHTML;
		opinionCountDiv.innerHTML = '<img src="/images/ajax-loader.gif" alt="please wait" />';
        var oCallback = {                
            success : function (o) {
                var response = YAHOO.lang.JSON.parse(o.responseText);
                if (response.success) {
					if (opinionsCount) {
					    CreatoorSN.opinions.setLikeDislikeCount(opinionsCount, opinionUsersDivId, opinionCountDiv, url, get);
					} else {
						opinionCountDiv.innerHTML = opinionCountHTML;
					}
					var config = {
                            tag: 'div',
                            className: 'opinion-users clear-left',
                            id: opinionUsersDivId,
                            html: response.html
                    };
					opinionUsersDiv = new creaDomObject (config);
                    var hideUsersLink = new creaDomObject(
                        {
                            tag: 'span',
                            html: CreatoorSN.common.translate('skrij'),
                            className: 'fake-link'
                        }
                    );
                    hideUsersLink.domElement.onclick = function() {
                        CreatoorSN.opinions.hideUsers(opinionUsersDiv);
                    };
                    var hideUsers = new creaDomObject(
                        {
                            tag: 'div',
                            className: 'hide-opinion-users',
                            elements: [hideUsersLink]
                        }
                    );
					if (opinionCountDiv.parentNode.nextSibling && opinionCountDiv.parentNode.nextSibling.className != 'clear' && opinionCountDiv.parentNode.nextSibling.className != 'comments') {
                        opinionCountDiv.parentNode.parentNode.removeChild(opinionCountDiv.parentNode.nextSibling);
                    }
                    hideUsers.addTo(opinionUsersDiv);
                    addAfter(opinionUsersDiv, opinionCountDiv.parentNode);
                    
                } else {
					if (response.noAuth) {
                        var login = new noAuth(function(noAuthObj){
                            CreatoorSN.opinions.showUsers(opinionUsersDivId, opinionCountDiv, url, get, opinion, opinionsCount);
                        }, response.message);
                        return;
                    }
                    CreatoorSN.common.showErrorAlert(response.message);
                }
            },
            
            failure : function (o) {
                CreatoorSN.common.showErrorAlert(o.statusText);
            },
            timeout: CreatoorSN.common.iAjaxTimeout
            
        };
        YAHOO.util.Connect.asyncRequest(
            "GET",
            url + '?' + get,
            oCallback
        );
	},
	
	hideUsers : function (opinionUsersDiv) {
		if (typeof(opinionUsersDiv) == 'string') {
			opinionUsersDiv = _$(opinionUsersDiv);
			if (opinionUsersDiv) {
				opinionUsersDiv.parentNode.removeChild(opinionUsersDiv);
			}
			return true;
		}
		if (typeof(opinionUsersDiv.getElement) == 'function') {
			opinionUsersDiv.remove();
			return true;
		}
		if (typeof(opinionUsersDiv.tagName) == 'string') {
			opinionUsersDiv.parentNode.removeChild(opinionUsersDiv);
			return true;
		}
	}
};

