function Video(sid, collections, groups, albums) { //groups
    var oThis = this;
	
	!collections && (collections = new Array());
    
    this.popup_win = null;
	this.lights_panel = null;
	this.main_cont = $('main-conteiner') ? $('main-conteiner') : (document.body.firstChild.nodeType == 1 ? document.body.firstChild : nextNode(document.body.firstChild));
	this.cache = {};
    
    this.smiles = {
        ':)': '<img src="http://m1.kefche.com/icons/c/smile.gif" alt=":)" />',
        ':-)': '<img src="http://m1.kefche.com/icons/c/smile.gif" alt=":-)" />',
        ':(': '<img src="http://m1.kefche.com/icons/c/sadsmile.gif" alt=":(" />',
        ':-(': '<img src="http://m1.kefche.com/icons/c/sadsmile.gif" alt=":-(" />',
        ':D': '<img src="http://m1.kefche.com/icons/c/bigsmile.gif" alt=":D" />',
        ':d': '<img src="http://m1.kefche.com/icons/c/bigsmile.gif" alt=":D" />',
        '8)': '<img src="http://m1.kefche.com/icons/c/cool.gif" alt="8)" />',
        ':O)': '<img src="http://m1.kefche.com/icons/c/surprised.gif" alt=":O)" />',
        ':o)': '<img src="http://m1.kefche.com/icons/c/surprised.gif" alt=":O)" />',
        ';)': '<img src="http://m1.kefche.com/icons/c/wink.gif" alt=";)" />',
        ';-)': '<img src="http://m1.kefche.com/icons/c/wink.gif" alt=";-)" />',
        ';(': '<img src="http://m1.kefche.com/icons/c/crying.gif" alt=";(" />',
        ';-(': '<img src="http://m1.kefche.com/icons/c/crying.gif" alt=";-(" />',
        ':*': '<img src="http://m1.kefche.com/icons/c/kiss.gif" alt=":*" />',
        ':P': '<img src="http://m1.kefche.com/icons/c/tongueout.gif" alt=":P" />',
        ':p': '<img src="http://m1.kefche.com/icons/c/tongueout.gif" alt=":P" />',
        ':-P': '<img src="http://m1.kefche.com/icons/c/tongueout.gif" alt=":-P" />',
        ':-p': '<img src="http://m1.kefche.com/icons/c/tongueout.gif" alt=":-P" />',
        '|-)': '<img src="http://m1.kefche.com/icons/c/sleepy.gif" alt="|-)" />', 
        'x=(': '<img src="http://m1.kefche.com/icons/c/angry.gif" alt="x=(" />',
        'X=(': '<img src="http://m1.kefche.com/icons/c/angry.gif" alt="x=(" />',
        ':-S': '<img src="http://m1.kefche.com/icons/c/worried.gif" alt=":-S" />',
        ':-s': '<img src="http://m1.kefche.com/icons/c/worried.gif" alt=":-S" />',
        '8-|': '<img src="http://m1.kefche.com/icons/c/nerd.gif" alt="8-|" />'
    };
	
	var transl = {
		'VIDEO_CREATE_COLLECTION_TITLE': 'Create Collection',
		'VIDEO_CREATE_COLLECTION_DESC': 'Type collection name',
		'VIDEO_EDIT_TITLE': 'Edit Video',
		'VIDEO_EDIT_DESC': 'Edit video title and description',
		'VIDEO_COLLECTION_EDIT_TITLE': 'Edit Video Collection',
		'VIDEO_COLLECTION_EDIT_DESC': 'Edit collection title and description',
		'VIDEO_CREATE_BTN':'Create',
		'VIDEO_SAVE_BTN':'Save Changes',
		'VIDEO_CLOSE_BTN':'Close',
		'COMMENTS_SAVE_COMMENT':'Comment',
		'COMMENTS_CANCEL_COMMENT':'Cancel',
		'VIDEO_ADD_TO_GROUP_BTN':'Add',
		'VIDEO_ADD_TO_GROUP':'Add video to group',
		'VIDEO_SELECT_GROUP':'select a group',
		'VIDEO_ADD_TO_GROUP_DESC':'Select ',
		'VIDEO_YOU_DONT_HAVE_GROUPS':'To add a video clip create a group first.',
		
		'VIDEO_MOVE_TO_ALBUM_TITLE':'Move video clip to album',
		'VIDEO_MOVE_TO_ALBUM':'select album',
		'VIDEO_MOVE_TO_ALBUM_BTN':'Move',
		'VIDEO_MOVE_TO_ALBUM_DESC':'Select a album in which to add video clip:',
		
		'SERIAL_ADD_TO_GROUP':'Add serail to group',
		'SERIAL_ADD_TO_GROUP_DESC':'Select a group to add serial to:',
		'VIDEO_SELECT_GROUP_ALBUM':'select group album',
		
		'VIDEO_TRACK_SEND_EMAIL': 'Confirmation email sent! Please check your email.',
		
		'VIDEO_SELECT_COLLECTION':'select collection',
		'VIDEO_OR_CREATE_NEW_COLLECTION': 'or create new collection:',
		'VIDEO_ADD_TO_COLLECTION':'Add video to collection',
		'VIDEO_ADD_TO_COLLECTION_BTN':'Add',
		'VIDEO_CREATE_COLLECTION':'create a new collection',
		'VIDEO_ADD_TO_COLLECTION_DESC':'Select a category in which to add video clip:',
		'VIDEO_ADD_TO_COLLECTION_LINK':'Add to collection',
		'VIDEO_COMMENTS_YOU_CAN_VOTE_ONCE_PER_DAY':'Puteţi vota doar o dată pe zi!'
	}
	
	this.clear_str = function (str) {
		return str.replace(/\n/gi, '\n').replace(/\r/gi, '\r');
	}
	
	
	this.AddToPlayList = function (video_id, obj, link, text, text2) {
        var request = {
            url: '/play/ajax_handle.do?action=add_play_list',
            data: {
                video_id: video_id
            },
            onSuccess: function (res) {
				if(obj) {
					var cnt = parseInt(res);
					if (cnt > 0) {
						obj.innerHTML = 'Play list ('+cnt+')';
						show(obj);
					} else {
						hide(obj);
					}
				}
				
                if (link) {
                    link.innerHTML = '<span></span>'+text;
					link.className = link.className.replace('add-to', 'remove');
					link.rel = 'Remove video from playlist';
                    link.onclick = function () {
                        oThis.RemoveFromPlayList(video_id, obj, link, text2, text);
						return false;
                    }
					Tooltips && (new Tooltips()).initElements();
                }
            },
            
            onFailure: function (res) {
                if (res && res != '') alert(res);
            }
        };
        AJAX(request);
    }
	
	
	this.RemoveFromPlayList = function (video_id, obj, link, text, text2) {
        var request = {
            url: '/play/ajax_handle.do?action=remove_play_list',
            data: {
                video_id: video_id
            },
            onSuccess: function (res) {
				if(obj) {
					var cnt = parseInt(res);
					if (cnt > 0) {
						obj.innerHTML = 'Play list ('+cnt+')';
						show(obj);
					} else {
						hide(obj);
					}
				}
				
                if (link) {
                    link.innerHTML = '<span></span>'+text;
					link.className = link.className.replace('remove', 'add-to');
					link.rel = 'Add video to playlist';
                    link.onclick = function () {
                        oThis.AddToPlayList(video_id, obj, link, text2, text);
						return false;
                    }
					Tooltips && (new Tooltips()).initElements();
                }
            },
            
            onFailure: function (res) {
                if (res && res != '') alert(res);
            }
        };
        AJAX(request);
    }
    
    
    this.AddFavorites = function (video_id, obj, link, text, text2) {
        var request = {
            url: '/play/ajax_handle.do?action=add_favorites',
            data: {
                video_id: video_id
            },
            onSuccess: function (res) {
				if(obj) {
					obj.innerHTML = '<span></span>'+res;
					setOpacity(obj.parentNode, 100);
					obj.parentNode.style.display = 'block';
				}
				
                if (link) {
                    link.innerHTML = text;
					link.className = link.className.replace('no-pfav', 'pfav');
                    link.onclick = function () {
                        oThis.RemoveFavorites(video_id, obj, link, text2, text);
						return false;
                    }
                }
               
            },
            
            onFailure: function (res) {
                obj.innerHTML = res;
                setOpacity(obj.parentNode, 100);
                obj.parentNode.style.display = 'block';
            }
        };
        AJAX(request);
    }
    
    this.RemoveFavorites = function (video_id, obj, link, text, text2) {
        var request = {
            url: '/play/ajax_handle.do?action=remove_favorites',
            data: {
                video_id: video_id
            },
            onSuccess: function (res) {
                if (link) {
					if(obj) {
						obj.innerHTML = res;
						setOpacity(obj.parentNode, 100);
						obj.parentNode.style.display = 'block';
					}
					
					link.innerHTML = text;
					link.className = link.className.replace('pfav', 'no-pfav');
					link.onclick = function () {
						oThis.AddFavorites(video_id, obj, link, text2, text);
						return false;
					}
                } else {
                    fadeOut(obj, 90, function () {obj.parentNode.removeChild(obj);});
                }
            },
            
            onFailure: function (res) {
                obj.innerHTML = res;
                setOpacity(obj.parentNode, 100);
                obj.parentNode.style.display = 'block';
            }
        };
        AJAX(request);
    }
	
	
	this.RemoveHistory = function (video_id, obj, link, text, text2) {
        var request = {
            url: '/play/ajax_handle.do?action=remove_history',
            data: {
                video_id: video_id
            },
            onSuccess: function (res) {
                fadeOut(obj, 90, function () {obj.parentNode.removeChild(obj);});
            }
        };
        AJAX(request);
    }
	
	this.AddComment = function (video_id, comment, obj, msg_obj) {
        var request = {
            url: '/play/ajax_handle.do?action=add_comment',
            data: {
                video_id: video_id,
                comment: comment
            },
            onSuccess: function (res) {
                var info = eval('('+res+')');
                    comm = document.createElement('div'),
                    panel = obj.parentNode.parentNode;
                
                comm.innerHTML = info.comment;
                panel.parentNode.insertBefore(comm, nextNode(panel));
                panel.parentNode.removeChild(panel);
                
                msg_obj.parentNode.style.display = 'block';
                msg_obj.innerHTML = info.msg;
                
                Tooltips && (new Tooltips()).initElements();
                
                setOpacity(comm, 10);
                setTimeout(function () { fadeIn(comm, 20); }, 500);
                
                setOpacity(msg_obj.parentNode, 100);
                setTimeout(function () { fadeOut(msg_obj.parentNode, 100); }, 5000);
            },
            
            onFailure: function (res) {
                msg_obj.parentNode.style.display = 'block';
                msg_obj.innerHTML = res;
                
                setOpacity(msg_obj.parentNode, 100);
                
                return false;
            }
        };
        AJAX(request);
    }
	
    
    this.AddAbuse = function (video_id, type_id, obj, abuse_panel) {
        var request = {
            url: '/play/ajax_handle.do?action=add_abuse',
            data: {
                video_id: video_id,
                abuse_id: type_id
            },
            onSuccess: function (res) {
                obj.innerHTML = res;
                setOpacity(obj, 100);
                obj.style.display = 'block';
                abuse_panel.style.display = 'none';
                setTimeout(
                function () {
                    fadeOut(obj, 100);
                }, 5000);
            },
            
            onFailure: function (res) {
                obj.innerHTML = res;
                setOpacity(obj, 100);
                obj.style.display = 'block';
            }
        };
        AJAX(request);
    }
    
    this.AddVote = function (video_id, vote, obj) {
        var request = {
            url: '/play/ajax_handle.do?action=add_vote',
            data: {
                video_id: video_id,
                vote: vote
            },
            onSuccess: function (res) {
                obj.innerHTML = res;
                setOpacity(obj, 100);
                obj.style.display = 'block';
                setTimeout(
                function () {
                    fadeOut(obj, 100);
                }, 5000);
            },
            
            onFailure: function (res) {
                obj.innerHTML = res;
                setOpacity(obj, 100);
                obj.style.display = 'block';
            }
        };
        AJAX(request);
    }
    
    this.AddSpam = function (comment_id, obj) {
        var request = {
            url: '/play/ajax_handle.do?action=add_spam',
            data: {
                comment_id: comment_id
            },
            onSuccess: function (res) {
                $('spam_'+comment_id).innerHTML = res;
            },
            onFailure: function (res) {
                alert(transl['VIDEO_COMMENTS_YOU_CAN_VOTE_ONCE_PER_DAY']);
                return false;
            }
        };
        AJAX(request);
    }
    
    this.RemoveSpam = function (comment_id, obj) {
        var request = {
            url: '/play/ajax_handle.do?action=remove_spam',
            data: {
                comment_id: comment_id
            },
            onSuccess: function (res) {
                $('spam_'+comment_id).innerHTML = res;
            },
            onFailure: function (res) {
                alert(transl['VIDEO_COMMENTS_YOU_CAN_VOTE_ONCE_PER_DAY']);
                return false;
            }
        };
        AJAX(request);
    }
    
    this.DelComment = function (comment_id, obj) {
        var request = {
            url: '/play/ajax_handle.do?action=del_comment',
            data: {
                comment_id: comment_id
            },
            onSuccess: function (res) {
                setOpacity(obj.parentNode.parentNode.parentNode, 100);
                fadeOut(obj.parentNode.parentNode.parentNode, 100, function () {obj.parentNode.parentNode.parentNode.parentNode.removeChild(obj.parentNode.parentNode.parentNode);});
            },
            
            onFailure: function (res) {
                return false;
            }
        };
        AJAX(request);
    }
    
    this.editComment = function (msg_id, link) {
        var msg = link.parentNode.parentNode.getElementsByTagName('p')[0];
        
        if(!link.taEdit) {
            var br = document.createElement('br');
            link.formEdit = document.createElement('div');
            link.taEdit = document.createElement('textarea');
            link.saveBtn = document.createElement('input');
            
            link.saveBtn.type = 'button';
            link.saveBtn.value = transl['COMMENTS_SAVE_COMMENT'];
            link.saveBtn.onclick = function () {
                oThis.save_comment(msg_id, link);
            };
            
            link.taEdit.className = 'comment_ta';
            
            msg.parentNode.appendChild(link.formEdit);
            link.formEdit.appendChild(link.taEdit);
            link.formEdit.appendChild(br);
            link.formEdit.appendChild(link.saveBtn);
            
            show(msg);
            
            var comm = msg.innerHTML;
            comm = comm.replace(/<img[^>]+alt="([^"><]+?)".*?>/gi, '$1');
            link.taEdit.value = br2nl(comm);
        }
        
        toggle(link.formEdit);
        toggle(msg);
    }
        this.save_comment = function (msg_id, link) {
            var request = {
                url: '/play/ajax_handle.do?action=save_comment',
                data: {
                    msg_id: msg_id,
                    comment: link.taEdit.value
                },
                onSuccess: function (res) {
                    var comm = link.taEdit.value,
                        msg = link.parentNode.parentNode.getElementsByTagName('p')[0];
                    
                    hide(link.formEdit);
                    show(msg);
                    
                    for(var smilie in oThis.smiles) {
                        var regex = new RegExp(RegExp.escape(smilie), "g");
                        comm = comm.replace(regex, oThis.smiles[smilie]);
                    }
                    
                    msg.innerHTML = nl2br(comm);
                }
                
            };
            AJAX(request);
        }
	
    this.ShowReply = function (video_id, comment_id, obj) {
        var cont = obj.parentNode.parentNode.parentNode;
            panel = $('comment_reply_'+comment_id);
        
        if (!panel) {
            var panel = document.createElement('div'),
                comm = document.createElement('textarea'),
                btn_ok = document.createElement('input'),
                btn_cancel = document.createElement('input'),
                msg = document.createElement('div');
            
            comm.className = 'comment_ta';
            
            btn_ok.type = 'button';
            btn_ok.value = transl['COMMENTS_SAVE_COMMENT'];
            btn_ok.onclick = function () {
                oThis.AddReply(video_id, comment_id, comm.value, this.parentNode, msg);
            }
            
            btn_cancel.type = 'button';
            btn_cancel.value = transl['COMMENTS_CANCEL_COMMENT'];
            btn_cancel.onclick = function () {
                hide(panel);
            }
            
            panel.id = 'comment_reply_'+comment_id;
            panel.style.display = 'none';
            panel.appendChild(comm);
            
            if($('emote_list')) {
                /* Kopirame i ikonkite */
                var emote = document.createElement('div');
                emote.innerHTML = $('emote_list').innerHTML;
                emote.className = $('emote_list').className;
                
                var elink = nextNode($('emote_list'));
                var link = document.createElement('a');
                
                link.innerHTML = elink.innerHTML;
                link.className = 'emote-link';
                link.href='#';
                link.onclick = function () {toggle(prevNode(this)); return false;};
                
                panel.appendChild(emote);
                panel.appendChild(link);
                
                var list = emote.getElementsByTagName('a');
                for(var i=0; i<list.length; i++) {
                    list[i].onclick = function (){
                        var msgbox = prevNode(this.parentNode),
                            img = this.getElementsByTagName('img')[0];
                        
                        msgbox.value += "" + img.getAttribute('alt') + " ";
                        msgbox.focus();
                        
                        hide(this.parentNode);
                    }
                }
            }
            
            panel.appendChild(btn_ok);
            panel.appendChild(document.createTextNode(' '));
            panel.appendChild(btn_cancel);
            panel.appendChild(msg);
            cont.appendChild(panel);
        }
        
        toggle(panel);
        
        if(panel.style.display != 'none') {
            panel.getElementsByTagName('textarea')[0].focus();
        }
    }
    
    this.AddReply = function (video_id, comment_id, comment, obj, msg) {
        var request = {
            url: '/play/ajax_handle.do?action=add_reply',
            data: {
                video_id: video_id,
                comment_id: comment_id,
                comment: comment
            },
            onSuccess: function (res) {
                var info = eval('('+res+')');
                    comm = document.createElement('div'),
                    bf = obj.parentNode.getElementsByTagName('div')[0];
                
                comm.innerHTML = info.comment;
                bf.appendChild(comm);
                
                hide(obj);
                //if(tooltip && tooltip.initElements) tooltip.initElements();
                
                setOpacity(comm, 10);
                setTimeout(
                    function () {
                        fadeIn(comm, 20);
                    }, 500);
            },
            onFailure: function (res) {
                msg.style.display = 'block';
                msg.innerHTML = res;
                
                setOpacity(msg, 100);
                setTimeout(
                    function () {
                        fadeOut(msg, 100);
                    }, 5000);
                
                return false;
            }
        };
        AJAX(request);
    }
    
    this.ShowReplys = function (obj) {
        var list = obj.parentNode.getElementsByTagName('div');
        
        for(var i=0; i<list.length; i++) {
            if (list[i].className == 'comment-item hide') {
                list[i].style.display = 'block';
                fadeIn(list[i], 10);
            }
        }
    }
	
	this.showCreateCollection = function (link, msg) {
		if (this.popup_win) {
            this.popup_win.hide(); delete this.popup_win;
        }
        
		var title = document.createElement('input') ;
		
        this.popup_win = new PopupWindow(transl['VIDEO_CREATE_COLLECTION_TITLE'], 'dialog-std');
        
        function buttons() {
            return [new Button(transl['VIDEO_CREATE_BTN'], 'input-submit', function () {
                        oThis.create_collection(title, msg);
                    }),
                    new Button(transl['VIDEO_CLOSE_BTN'], 'input-button', function () {oThis.popup_win.hide(); delete oThis.popup_win;} ) ];
        }
        function content() {
            var cont = document.createElement('div');
            
            title.className = 'inp-long';
            title.value = '';
			title.onkeydown = function (e) { if(!e) e = window.event; var key_code = e.keyCode || e.which; if(key_code == 13) {oThis.create_collection(title, msg);}};
			
            cont.appendChild(document.createTextNode(transl['VIDEO_CREATE_COLLECTION_DESC']));
			cont.appendChild(document.createElement('br'));
            cont.appendChild(title);
            
            return cont;
        }
		
		this.popup_win.display(this.main_cont, content, buttons, 'center');
		title.focus();
	}
		this.create_collection = function (title, msg) {
			var request = {
				url: '/play/ajax_handle.do?action=create_collection',
				data: {
					title: title.value
				},
				onSuccess: function (res) {
					if(msg) {
						msg.innerHTML = res;
						show(msg.parentNode);
						setOpacity(msg.parentNode, 100);
					}
					oThis.popup_win.hide(); delete oThis.popup_win;
				},
				onFailure: function (res) {
					if(msg) {
						msg.innerHTML = res;
						show(msg.parentNode);
						setOpacity(msg.parentNode, 100);
					}
				}
			};
			AJAX(request);
		}
	
	this.clear_playlist = function (link, msg) {
		var request = {
			url: '/play/ajax_handle.do?action=clear_playlist',
			onSuccess: function (res) {
				location.reload();
			}
		};
		AJAX(request);
	}
	
	this.ShowEditCollection = function (coll_id, title_v, desc_v, link) {
		if (this.popup_win) {
            this.popup_win.hide(); delete this.popup_win;
        }
        
		var title = document.createElement('input'),
			desc = document.createElement('textarea');
		
        this.popup_win = new PopupWindow(transl['VIDEO_COLLECTION_EDIT_TITLE'], 'dialog-std');
        
        function buttons() {
            return [new Button(transl['VIDEO_SAVE_BTN'], 'input-submit', function () {
                        this.disabled=true;
                        oThis.save_collection(coll_id, title.value, desc.value, link, this);
                    }),
                    new Button(transl['VIDEO_CLOSE_BTN'], 'input-button', function () {oThis.popup_win.hide(); delete oThis.popup_win;} ) ];
        }
        function content() {
            var cont = document.createElement('div');
            
            title.className = 'inp-long';
            title.value = title_v;
			
			title.onkeydown = function (e) {!e && (e = window.event); var key_code=e.keyCode||e.which; if(key_code==13) oThis.save_collection(coll_id, title.value, desc.value, link);}
			
			/*desc.className = 'ta-long';
            desc.value = desc_v;*/
            
            cont.appendChild(document.createTextNode(transl['VIDEO_COLLECTION_EDIT_DESC']));
			cont.appendChild(document.createElement('br'));
            cont.appendChild(title);
			//cont.appendChild(document.createElement('br'));
			//cont.appendChild(desc);
            
            return cont;
        }
		
		this.popup_win.display(this.main_cont, content, buttons, 'center');
		
		title.focus();
	}
		this.save_collection = function (coll_id, title, desc, obj, btn) {
			var request = {
				url: '/play/ajax_handle.do?action=edit_collection',
				data: {
					coll_id: coll_id,
					title: title,
					desc: desc
				},
				onSuccess: function (res) {
					var h4 = obj.parentNode.getElementsByTagName('h4')[0].getElementsByTagName('a')[0];
					h4.innerHTML = title;
					obj.onclick = function () { oThis.ShowEditCollection(coll_id, title, desc, this); return false;};
					oThis.popup_win.hide();
					delete oThis.popup_win;
				},
				onFailure: function (res) {
					if(btn) btn.disabled = false;
					oThis.popup_win.showError(res);
					return false;
				}
			};
			AJAX(request);
		}
	
	this.DeleteCollection = function (coll_id, obj) {
		var request = {
            url: '/play/ajax_handle.do?action=delete_collection',
            data: {
                coll_id: coll_id
            },
            onSuccess: function (res) {
                fadeOut(obj.parentNode.parentNode, 80);
            },
            onFailure: function (res) {
                alert('Not authorized to delete this collection!');
            }
        };
        AJAX(request);
	}
	
	this.DeleteVideo = function (video_id, obj) {
		var request = {
            url: '/play/ajax_handle.do?action=delete_video',
            data: {
                video_id: video_id
            },
            onSuccess: function (res) {
                fadeOut(obj, 80, function() { obj.parentNode.removeChild(obj); } );
            },
            onFailure: function (res) {
                alert('Not authorized to delete this video!');
            }
        };
        AJAX(request);
	}
    
	
	this.checkUncheck = function (obj_name, value) {
		var list = document.getElementsByName(obj_name);
		
		for(var i=0; i<list.length; i++) {
			list[i].checked = value;
		}
	}
	
	this.ShowEditVideo = function (video_key, title_v, desc_v, link, video_tags) {
		!video_tags && (video_tags = []);
		
		if (this.popup_win) {
            this.popup_win.hide(); delete this.popup_win;
        }
        
		var title = document.createElement('input'),
			desc = document.createElement('textarea'),
			tags = document.createElement('input'),
			add_tag = document.createElement('a');
		
        this.popup_win = new PopupWindow(transl['VIDEO_EDIT_TITLE'], 'dialog-std');
        
        function buttons() {
            return [new Button(transl['VIDEO_SAVE_BTN'], 'input-submit', function () {
                        this.disabled=true;
                        oThis.save_video(video_key, title.value, desc.value, link, this);
                    }),
                    new Button(transl['VIDEO_CLOSE_BTN'], 'input-button', function () {
						oThis.popup_win.hide(); delete oThis.popup_win;
						link.onclick = function () { oThis.ShowEditVideo (video_key, title_v, desc_v, link, video_tags); }
					} ) ];
        }
        function content() {
            var cont = document.createElement('div'),
				tags_cont = document.createElement('div'),
				clear = document.createElement('div');
            
            title.className = 'inp-long';
            title.value = title_v;
			
			desc.className = 'ta-long';
            desc.value = desc_v;
			
			
			tags_cont.className = 'tags-panel';
			clear.className = 'clear';
			
			var settings = {
				onkeydown: function (e) { !e && (e = window.event); var key_code = e.keyCode || e.which; key_code == 13 && tags.value != '' && tags.value != 'add tags' && oThis.add_tag(video_key, video_tags, tags.value, tags); },
				onfocus: function () {tags.className = tags.className.replace(' inp-inactive', '');tags.value == 'add tags' && (tags.value = '');},
				onblur: function () {tags.value == '' && (tags.value = 'add tags') && (tags.className += ' inp-inactive');}
			}
			
			if(Search) (new Search(sid, tags, settings, '/play/ajax_handle.do?action=tag_suggest')).init();
			tags.className = 'inp-medium inp-inactive';
			tags.value = 'add tags';
			
			add_tag.className = 'add-to';
			add_tag.appendChild(document.createElement('span'));
			add_tag.onclick = function () { tags.value != '' && tags.value != 'add tags' && oThis.add_tag(video_key, video_tags, tags.value, tags); }
			
            cont.appendChild(document.createTextNode(transl['VIDEO_EDIT_DESC']));
			cont.appendChild(document.createElement('br'));
            cont.appendChild(title);
			cont.appendChild(document.createElement('br'));
			cont.appendChild(desc);
			cont.appendChild(tags);
			cont.appendChild(add_tag);
			cont.appendChild(tags_cont);
			cont.appendChild(clear);
			
			if(video_tags && video_tags.length > 0) {
				for(var i=0; i<video_tags.length; i++) {
					var tag_link = document.createElement('a');
					
					tag_link.tag = video_tags[i].tag;
					tag_link.appendChild(document.createElement('span'));
					tag_link.appendChild(document.createTextNode(video_tags[i].tag+' '));
					tag_link.className = 'remove';
					tag_link.onclick = function () {oThis.remove_tag(video_key, video_tags, this.tag, this);};
					tags_cont.appendChild(tag_link);
				}
			}
            
            return cont;
        }
		
		this.popup_win.display(this.main_cont, content, buttons, 'center');
	}
		this.remove_tag = function (video_key, video_tags, tag, link) {
			var request = {
				url: '/play/ajax_handle.do?action=remove_tag',
				data: {
					video_key: video_key,
					tag: tag
				},
				onSuccess: function (res) {
					for(var i=0; i<video_tags.length; i++) { video_tags[i].tag == tag && (video_tags.splice(i, 1)); }
					
					fadeOut(link, 80, function (){ link.parentNode.removeChild(link); });
				},
				onFailure: function (res) {
					res != '' && oThis.popup_win.showError(res);
				}
			};
			AJAX(request);
		}
		this.add_tag = function (video_key, video_tags, tag, inp) {
			var request = {
				url: '/play/ajax_handle.do?action=add_tag',
				data: {
					video_key: video_key,
					tag: tag
				},
				onSuccess: function (res) {
					video_tags.push({tag: res});
					
					var tag_link = document.createElement('a');
					
					tag_link.appendChild(document.createElement('span'));
					tag_link.appendChild(document.createTextNode(res+' '));
					tag_link.className = 'remove';
					tag_link.onclick = function () {oThis.remove_tag(video_key, video_tags, res, this);};
					
					
					nextNode(inp, 2).appendChild(tag_link);
					fadeIn(tag_link, 20);
					
					inp.value = '';
				},
				onFailure: function (res) {
					res != '' && oThis.popup_win.showError(res);
				}
			};
			AJAX(request);
		}
		this.save_video = function (video_key, title, desc, obj, btn) {
			var request = {
				url: '/play/ajax_handle.do?action=edit_video',
				data: {
					video_key: video_key,
					title: title,
					desc: desc
				},
				onSuccess: function (res) {
					var cont = obj.parentNode,
						p = obj.parentNode.getElementsByTagName('p')[0] || document.createElement('p'),
						h4 = obj.parentNode.getElementsByTagName('h4')[0];
					
					if(!p.parentNode) {
						cont.insertBefore(p, h4.nextSibling);
					}
					
					p.innerHTML = oThis.clear_str(desc);
					h4.innerHTML = '<a href="/watch/'+video_key+'/">'+oThis.clear_str(title)+'</a>';
					
					obj.onclick = function () {
						oThis.ShowEditVideo(video_key, title, desc, this);
						return false;
					}
					
					oThis.popup_win.hide();
					delete oThis.popup_win;
				},
				onFailure: function (res) {
					btn.disabled = false;
					oThis.popup_win.showError(res);
					return false;
				}
			};
			AJAX(request);
		}
    
	
	this.ShowGroupsSerial = function (serial_id, season, link) {
        this.popup_win && this.popup_win.hide() && (delete this.popup_win);
        
        var select = new DropDown(transl['VIDEO_SELECT_GROUP'], 'dropdown-std', null);
		var albums = new DropDown(transl['VIDEO_SELECT_GROUP_ALBUM'], 'dropdown-std', null);
        
        this.popup_win = new PopupWindow(transl['SERIAL_ADD_TO_GROUP'], 'dialog-std');
        
        
        function buttons() {
            return [new Button(transl['VIDEO_CLOSE_BTN'], 'input-button', function () {oThis.popup_win && oThis.popup_win.hide() && (delete oThis.popup_win);} ) ];
        }
        function content() {
            var cont = document.createElement('div'),
                br = document.createElement('br');
            
            cont.appendChild(document.createTextNode(transl['SERIAL_ADD_TO_GROUP_DESC']));
            cont.appendChild(br);
            
            var options = new Array();
			
			if(groups) {
				for(var i=0; i<groups.length; i++) {
					var opt = new DropDownOption(groups[i].name, groups[i].id,
								function (event) {
									select.selectOption(event, this.v, this.t);
									oThis.serial_get_group_albums(this.v, albums, serial_id, season);
								});
					options.push(opt);
				}
				
				select.setOptions(options);
				select.init();
                cont.appendChild(select.get());
                
                albums.init();
                cont.appendChild(albums.get());
                hide(albums.get());
			} else {
				cont.appendChild(document.createTextNode(transl['VIDEO_YOU_DONT_HAVE_GROUPS']));
			}
            
			
            return cont;
        }
		
		this.popup_win.display(this.main_cont, content, buttons, 'center');
    }
		this.populate_albums = function (albums, data, groupid, serial_id, season) {
			var options = new Array();
			
			var opt = new DropDownOption('no album', 0, function (event) {albums.selectOption(event, this.v, this.t);});
			options.push(opt);
			
			for(var i=0; i<data.length; i++) {
				var opt = new DropDownOption(data[i].title, data[i].id,
							function (event) {
								albums.selectOption(event, this.v, this.t);
								oThis.serial_add_to_group(serial_id, season, groupid, this.v);
							});
				options.push(opt);
			}
			
			albums.setOptions(options);
			albums.init();
            show(albums.get());
		}
		
		this.serial_get_group_albums = function (groupid, albums, serial_id, season) {
			!this.cache['groups'] && (this.cache['groups'] = {});
			
			if(this.cache['groups'][groupid]) {
				this.populate_albums(albums, this.cache['groups'][groupid], groupid, serial_id, season);
				return;
			}
			
			var request = {
				url: '/groups/ajax/group_albums.do',
				data: {groupid: groupid },
				onSuccess: function (res) { oThis.cache['groups'][groupid] = eval(res);oThis.populate_albums(albums, oThis.cache['groups'][groupid], groupid, serial_id, season); },
				onFailure: function (res) { oThis.popup_win.showError(res); }
			};
			AJAX(request);
		}
		
		this.serial_add_to_group = function (serial_id, season, group_id, album_id) {
			var request = {
				url: '/groups/ajax/group_add_serial.do',
				data: {
					serial_id: serial_id,
					season: season,
					group_id: group_id,
                    album_id: album_id
				},
				onSuccess: function (res) { oThis.popup_win.showMessage(res); },
				onFailure: function (res) { oThis.popup_win.showError(res); }
			};
			AJAX(request);
		}
	
	
	this.ShowGroups = function (video_id, link) {
        this.popup_win && this.popup_win.hide() && (delete this.popup_win);
        
        var select = new DropDown(transl['VIDEO_SELECT_GROUP'], 'dropdown-std', null);
        
        this.popup_win = new PopupWindow(transl['VIDEO_ADD_TO_GROUP'], 'dialog-std');
        
        
        function buttons() {
            return [new Button(transl['VIDEO_CLOSE_BTN'], 'input-button', function () {oThis.popup_win && oThis.popup_win.hide() && (delete oThis.popup_win);} ) ];
        }
        function content() {
            var cont = document.createElement('div');
            
            cont.appendChild(document.createTextNode(transl['VIDEO_ADD_TO_GROUP_DESC']));
            
            var options = new Array();
			
			if(groups) {
				for(var i=0; i<groups.length; i++) {
					var opt = new DropDownOption(groups[i].name, groups[i].id,
								function (event) {
									select.selectOption(event, this.v, this.t);
									oThis.add_to_group(video_id, this.v);
								});
					options.push(opt);
				}
				
				select.setOptions(options);
				select.init();
				cont.appendChild(select.get());
			} else {
				cont.appendChild(document.createTextNode(transl['VIDEO_YOU_DONT_HAVE_GROUPS']));
			}
            
			
            return cont;
        }
		
		this.popup_win.display(this.main_cont, content, buttons, 'center');
    }
		this.add_to_group = function (video_id, group_id) {
			var request = {
				url: '/groups/ajax/group_add.do',
				data: {
					video_id: video_id,
					group_id: group_id
				},
				onSuccess: function (res) { oThis.popup_win.showMessage(res); },
				onFailure: function (res) { oThis.popup_win.showError(res); }
			};
			AJAX(request);
		}
	
	
	this.showMove = function (video_key, gkey, obj) {
		this.popup_win && this.popup_win.hide() (delete this.popup_win);
        
        var select = new DropDown(transl['VIDEO_MOVE_TO_ALBUM'], 'dropdown-std', null);
        
        this.popup_win = new PopupWindow(transl['VIDEO_MOVE_TO_ALBUM_TITLE'], 'dialog-std');
        
        
        function buttons() {
            return [new Button(transl['VIDEO_MOVE_TO_ALBUM_BTN'], 'input-submit', function () {
                        this.disabled=true;
                        oThis.move_to_album(gkey, video_key, select.getValue(), obj, this);
                    }),
                    new Button(transl['VIDEO_CLOSE_BTN'], 'input-button', function () {oThis.popup_win.hide(); delete oThis.popup_win;} ) ];
        }
		
        function content() {
            var cont = document.createElement('div');
            
            cont.appendChild(document.createTextNode(transl['VIDEO_MOVE_TO_ALBUM_DESC']));
            
            var options = new Array();
			
			if(albums) {
				for(var i=0; i<albums.length; i++) {
					var opt = new DropDownOption(albums[i].title, albums[i].id, function (event) {select.selectOption(event, this.v, this.t);});
					options.push(opt);
				}
				
				select.setOptions(options);
				select.init();
				cont.appendChild(select.get());
			}
            
            return cont;
        }
		
		this.popup_win.display(this.main_cont, content, buttons, 'center');
	}
	
		this.move_to_album = function (gkey, video_key, album_id, obj, btn) {
			var request = {
				url: '/groups/ajax/move_to_album.do',
				data: {
					gkey: gkey,
					video_key: video_key,
					album_id: album_id
				},
				onSuccess: function (res) {
					fadeOut(obj.parentNode.parentNode, 70, function() {obj.parentNode.parentNode.parentNode.removeChild(obj.parentNode.parentNode);});
					oThis.popup_win && oThis.popup_win.hide() (delete oThis.popup_win);
				},
				onFailure: function (res) {
					oThis.popup_win && oThis.popup_win.showError(res);
					btn.disabled=false;
				}
			};
			AJAX(request);
		}
	
	
    this.ShowCollections = function (video_id, link) {
        this.popup_win && this.popup_win.hide() (delete this.popup_win);
        
        var select = new DropDown(transl['VIDEO_SELECT_COLLECTION'], 'dropdown-std', null),
			add_coll = document.createElement('input');
        
        this.popup_win = new PopupWindow(transl['VIDEO_ADD_TO_COLLECTION'], 'dialog-std');
        
        
        function buttons() {
            return [new Button(transl['VIDEO_ADD_TO_COLLECTION_BTN'], 'input-submit', function () {
                        this.disabled=true;
                        oThis.add_to_collection(video_id, select.getValue(), link, this, add_coll.value);
                    }),
                    new Button(transl['VIDEO_CLOSE_BTN'], 'input-button', function () {oThis.popup_win.hide(); delete oThis.popup_win;} ) ];
        }
        function content() {
            var cont = document.createElement('div');
            
            add_coll.className = 'input-std';
            add_coll.value = '';
            add_coll.onkeydown = function (event) {var value = this.value;oThis.get_key(event, function () {oThis.add_to_collection(video_id, 0, link, null, value);});};
            
            cont.appendChild(document.createTextNode(transl['VIDEO_ADD_TO_COLLECTION_DESC']));
            
            var options = new Array();
			
            for(var i=0; i<collections.length; i++) {
                var opt = new DropDownOption(collections[i].title, collections[i].id, function (event) {select.selectOption(event, this.v, this.t);});
                options.push(opt);
            }
            
            select.setOptions(options);
            select.init();
            cont.appendChild(select.get());
			
			//cont.appendChild(document.createElement('br'));
			cont.appendChild(document.createTextNode(transl['VIDEO_OR_CREATE_NEW_COLLECTION']));
			cont.appendChild(document.createElement('br'));
			cont.appendChild(add_coll);
            
            return cont;
        }
		
		this.popup_win.display(this.main_cont, content, buttons, 'center');
    }
    
		this.add_video_collection = function (title, select) {
			var request = {
				url: '/play/ajax_handle.do?action=add_collection',
				data: {
					title: title
				},
				onSuccess: function (res) {
					var cat_id = eval('('+res+')');
					select.addOption(title, cat_id, function (event) {select.selectOption(event, this.v, this.t);});
					select.selectOption (null, cat_id, title);
					
					if (!collections) collections = [];
					
					collections.push({"title": title, "id": cat_id});
				}
			};
			AJAX(request);
		}
    
		this.add_to_collection = function (video_id, coll_id, link, btn, new_coll) {
			var data = {
					video_id: video_id,
					coll_id: coll_id
				};
			
			if(new_coll) data['new_coll'] = new_coll;
			
			var request = {
				url: '/play/ajax_handle.do?action=add_to_collection',
				data: data,
				onSuccess: function (res) {
					oThis.popup_win && oThis.popup_win.hide() && (delete oThis.popup_win);
				},
				onFailure: function (res) {
					oThis.popup_win && oThis.popup_win.showError(res);
					btn && setTimeout(function () {btn.disabled = false;}, 500);
				}
			};
			AJAX(request);
		}
		
		this.remove_from_collection = function (video_id, coll_id, link) {
			var request = {
				url: '/play/ajax_handle.do?action=remove_collections',
				data: {
					video_id: video_id,
					coll_id: coll_id
				},
				onSuccess: function (res) {
					link && fadeOut(link.parentNode, 70, function() {link.parentNode.parentNode.removeChild(link.parentNode);});
				},
				onFailure: function (res) {
					oThis.popup_win && oThis.popup_win.showError(res);
					btn && setTimeout(function () {btn.disabled = false;}, 500);
				}
			};
			AJAX(request);
		}
	
	this.del_from_group = function (video_key, gkey, obj) {
		var request = {
			url: '/groups/ajax/remove_video.do',
			data: {
				video_key: video_key,
				gkey: gkey
			},
			onSuccess: function (res) {
				fadeOut(obj.parentNode.parentNode, 90, function () {obj.parentNode.parentNode.parentNode.removeChild(obj.parentNode.parentNode);});
			},
			onFailure: function (res) {
				eval(res);
			}
		};
		AJAX(request);
	}
	
	this.track_serial = function (serialid, link, txt1, txt2) {
		var request = {
			url: '/ajax/track_serial.do',
			data: { sid: serialid },
			onSuccess: function (res) {
				if(link && txt1) {
					link.innerHTML = txt2;
					link.onclick = function () { oThis.track_serial(serialid, link, txt2, txt1); return false;}
					if (link.className.indexOf('tv-unsubscribe') > -1) link.className = 'tv-subscribe';
					else link.className = 'tv-unsubscribe';
				} else {
					fadeOut(link, 80, function () {link.parentNode.removeChild(link);});
				}
				
				if(res == 'email') {
					oThis.showTrackEmail();
				}
			},
			onFailure: function (res) {
				eval(res);
			}
		};
		AJAX(request);
	}
		this.showTrackEmail = function () {
			this.popup_win && this.popup_win.hide() (delete this.popup_win);
			
			this.popup_win = new PopupWindow('Email verification', 'dialog-std');
			
			function buttons() {
				return [new Button(transl['VIDEO_CLOSE_BTN'], 'input-button', function () {oThis.popup_win.hide(); delete oThis.popup_win;} ) ];
			}
			function content() {
				var cont = document.createElement('div');
				
				cont.appendChild(document.createTextNode(transl['VIDEO_TRACK_SEND_EMAIL']));
				
				return cont;
			}
			
			this.popup_win.display(this.main_cont, content, buttons, 'center');
		}
    
	this.getList = function (video_key, list_type, user_id, page, cont, link) {
		if(oThis.cache[video_key+'_'+list_type+'_'+user_id+'_'+page]) {
			var list = link.parentNode.getElementsByTagName('a');
			
			for(var i=0; i<list.length; i++) list[i].className = list[i].className.replace('-sel','-tag');
			
			link.className = link.className.replace('-tag','-sel');
			cont.className = 'with-scroll';
			
			cont.innerHTML = oThis.cache[video_key+'_'+list_type+'_'+user_id+'_'+page];
			
			if (Thumbs) (new Thumbs({delay: 900})).init();
			
			fadeIn(cont, 40);
			return;
		}
		
		cont.className = 'waiting';
		cont.prevHTML = cont.innerHTML;
		cont.innerHTML = '';
		
		var request = {
			url: '/browse/ajax_handle.do?action=get_list',
			data: {
				video_key: video_key,
				list_type: list_type,
				user_id: user_id
			},
			onSuccess: function (res) {
				var list = link.parentNode.getElementsByTagName('a');
				for(var i=0; i<list.length; i++) list[i].className = list[i].className.replace('-sel','-tag');
				
				link.className = link.className.replace('-tag','-sel');
				cont.className = 'with-scroll';
				cont.innerHTML = res;
				
				oThis.cache[video_key+'_'+list_type+'_'+user_id+'_'+page] = res;
				
				if (Thumbs) (new Thumbs({delay: 900})).init();
				
				fadeIn(cont, 40);
			},
			onFailure: function (res) {
				cont.className = 'with-scroll';
				
				cont.innerHTML = res;
				
				fadeIn(cont, 40);
			}
		};
		AJAX(request);
	}
	
    this.showHideSpam = function (obj, link) {
        var n = obj;
        
        do n = n.nextSibling;
        while (n && n.nodeType != 1);
        
        if (n.style.display == 'none' || n.style.display == '') {
            link.className = 'hide-btn';
            show(n);
            fadeIn(n, 50);
        } else {
            link.className = 'show-btn';
            fadeOut(n, 50, function () {hide(n);});
        }
    }
    
    this.get_key = function(e, okFunc) {
        if (!e) e = window.event;
        
        var asc = !e.keyCode ? (!e.which ? e.charCode : e.which) : e.keyCode;
        
        if (asc != 17) {
            // натиснат е клавиш
            if (asc == 13 || (this.is_control_pressed && asc == 83)) {
                // CTRL + ENTER или CTRL+S
                this.is_control_pressed = false;
                if(okFunc) okFunc();
            }
        } else if (asc == 17) {
            this.is_control_pressed = 1;
        } else {
            this.is_control_pressed = false;
        }
        
        
    }
	
	this.ExtendPlayer = function (cont, css) {
		var player = $('vPlayPlayer').firstChild.nodeType != 1 ? $('vPlayPlayer').firstChild : $('vPlayPlayer').firstChild;
		if(cont.className.indexOf(css) >= 0) {
			cont.className = cont.className.replace(css, '').replace(/\s/ig, '');
		} else {
			cont.className += ' '+css;
		}
		
		player.width = '100%';
		player.height = '100%';
	}
    
	this.LigthsOFF = function () {
        if(!this.lights_panel) {
            var el = document.body.firstChild.nodeType == 1 ? document.body.firstChild : nextNode(document.body.firstChild),
                el_height = (document.all) ? el.clientHeight + 2 : el.scrollHeight,
                el_width = (document.all) ? el.clientWidth + 2 : el.scrollWidth;
            
            this.lights_panel = document.createElement('div');
            this.lights_panel.className = 'lights-off';
            this.lights_panel.style.height = el_height+'px';
            el.appendChild(this.lights_panel);
			
            toggleEffect(this.lights_panel, function () { fadeOut(oThis.lights_panel, 90)},  function () {fadeIn(oThis.lights_panel, 20, null, 80)});
        } else {
            toggleEffect(this.lights_panel, function () { fadeOut(oThis.lights_panel, 90)},  function () {fadeIn(oThis.lights_panel, 20, null, 80)});
        }
    }
	
	this.catch_keys = function () {
		document.onkeydown = function (e) {oThis.check_keys(e);};
	}
	
	this.check_keys = function (e) {
		if (!e) e = window.event;
		
		var targ;
		
		if (e.target) targ = e.target;
		else if (e.srcElement) targ = e.srcElement;
		if (targ.nodeType == 3) // defeat Safari bug
			targ = targ.parentNode;
		
		var code;
		if (e.keyCode) code = e.keyCode;
		else if (e.which) code = e.which;
		
		if((code == 32) && (targ.nodeType != 1 || targ.tagName != 'TEXTAREA' && targ.tagName != 'INPUT')) {
			e.cancelBubble = true;
			e.returnValue = false;
			if (e.stopPropagation) e.stopPropagation();
			if (e.preventDefault) e.preventDefault();
			
			$('vPlayPlayerObject').playPauseVideoPlayer();
			
			return false;
		}
		
		return true;
	}
}




function switchPlayerWindow(){
	if(videoResized == videoSizesW.length)videoResized=0;
	if(videoContainerId){
		$(videoContainerId).style.width = videoSizesW[videoResized]+"px";
		$(videoContainerId).style.height = videoSizesH[videoResized]+"px";
		videoResized+=1;
	}
}

function AutoPlayToggle(obj, text1, text2) {
	var check = (parseInt(obj.getAttribute('rel')) + 1) % 2;
	obj.setAttribute('rel', check);
	
	if(obj.className == 'tv-autoplay') obj.className = 'tv-stopautoplay';
	else obj.className = 'tv-autoplay';
	
	obj.innerHTML = text1;
	obj.onclick = function () {
		return AutoPlayToggle(this, text2, text1);
	}
	
	AJAX({
		url: '/ajax/video_autoplay.do',
		data: {check: check}
	})
	
	return false;
}

function PlayNext() {
	var check = parseInt($('auto_play').getAttribute('rel'));
	
	if(check == 1) location.href = $('auto_play').href;
}