var AJAX_SUCCESS		= 0;
var AJAX_INVALIDOBJECT		= 1;
var AJAX_INVALIDCALLBACK	= 2;
var AJAX_FAILEDOPEN		= 3;

function Ajax () {
	this.version		= '0.01';
	this.isAsync		= false;
	this.agent		= null;
	this.lastException	= '';

	if( typeof XMLHttpRequest != 'undefined' )
		this.agent = new XMLHttpRequest();

	if( this.agent == null ) {

		var axos = new Array(
//			'MSXML2.XMLHTTP.4.0',
			'MSXML2.XMLHTTP.3.0',
			'MSXML2.XMLHTTP',
			'Microsoft.XMLHTTP'
		);

		for( var i = 0; this.agent == null && i < axos.length; i++ ) {
			try {
				this.agent		= new ActiveXObject(axos[i]);

			} catch(e) {
				this.lastException	= e;
				this.agent		= null;
			}
		}
	}

	this.isValid	= callAjaxIsValid;
	this.get	= callAjaxGet;
	this.post	= callAjaxPost;
	this.open	= callAjaxOpen;
	this.request	= callAjaxRequest;
	this.response	= callAjaxResponse;
}

function AjaxResponse() {
	this.status	= 0;
	this.statusText	= '';
	this.headers	= new Array();
	this.body	= '';
	this.text	= '';
	this.xml	= '';
}

function AjaxRequest() {
	this.method	= 'GET';
	this.url	= '';
	this.headers	= new Array();
	this.body	= null;
	this.callback	= null;
}

function callAjaxGet( url, callback, headers ) {
	return this.open( 'GET', url, null, callback, headers );
}

function callAjaxIsValid() {
	return this.agent != null;
}

function callAjaxOpen( method, url, data, callback, headers ) {
	if (this.isValid()) {
		if (!method)	method		= 'GET';
		if (!data)	data		= null;
		if (callback)	this.isAsync	= true;

		if (this.isAsync) {
			if ( typeof callback != 'function' )
				return AJAX_INVALIDCALLBACK;
			this.agent.onreadystatechange = callback;
		}

		try {
			this.agent.open( method, url, this.isAsync );
		} catch(e) {
			this.lastException = e;
			return AJAX_FAILEDOPEN;
		}

		if ( method == 'POST' ) {
			this.agent.setRequestHeader( 'Connection', 'close' );
			this.agent.setRequestHeader( 'Content-type', 'application/x-www-form-urlencoded' );
		}

		if ( headers != null ) {
			for ( var header in headers ) {
				this.agent.setRequestHeader( header, headers[header] );
			}
		}

		this.agent.send(data);
		return AJAX_SUCCESS;
	}
	return AJAX_INVALIDOBJECT;
}

function callAjaxPost( url, data, callback, headers ) {
	return this.open( 'POST', url, data, callback, headers );
}

function callAjaxResponse() {
	if ( this.agent.readyState != 4 )
		return null;

	var res = new AjaxResponse();

	res.status	= this.agent.status;
	res.statusText	= typeof this.agent.statusText == 'undefined'
		? ''
		: this.agent.statusText;
	res.body	= typeof this.agent.responseBody == 'undefined'
		? ''
		: this.agent.responseBody;
	res.text	= typeof this.agent.responseText == 'undefined'
		? ''
		: this.agent.responseText;
	res.xml		= this.agent.responseXML == null
		? ''
		: this.agent.responseXML;

	var string = this.agent.getAllResponseHeaders();
	if (!string) string = '';

	var lines = string.split("\\n");
	for ( var i = 0; i < lines.length; i++ ) {
		var header = lines[i].split(": ");
		if(header.length >= 2) {
			var headername	= header.shift();
			var headervalue	= header.join(": ");

			res.headers[headername] = headervalue;
		}
	}

	return res;
}

function callAjaxRequest(req) {
	return this.Open(
		req.method,
		req.url,
		req.body,
		req.callback,
		req.headers
	);
}

////////////////////////////// WEBDRIVE TREE///////////////////////////////////////

var folder_open = new Image(); folder_open.src='/mounting/videostore/wd/folder.gif';
var folder_close = new Image(); folder_close.src='/mounting/videostore/wd/folder_open.gif';
var processing = 0;

function getlist(folder_path,folder_url) {
	if(processing==1) {return false;}
	var span = document.getElementById('wd-'+folder_path);
	var img  = document.getElementById('img-'+folder_path);
	if(span.innerHTML=='') {
		var ajax = new Ajax();
		if (ajax.isValid) {
			ajax.post(
				'http://'+document.domain+'/?a=wd',
				'f='+folder_url,
				function() {
					var response = ajax.response();
					if (response && response.status == 200) {
						if (response.text=='') response.text='<i>(Пустая папка...)</i>';
						span.innerHTML = response.text;
						img.src=folder_close.src;
		            } else if (response && response.status >= 500) {
						span.innerHTML = '<i>(Произошла ошибка!)</i>';
					} else {
						span.innerHTML = '<i>(Загрузка...)</i>';
					}
				}
			);
			return true;
		} else {
			span.innerHTML = '<i>(AJAX error!)</i>';
			return true;
		}
	} else {
		span.innerHTML='';
		img.src=folder_open.src;
	}
}

function selectfile(file_path) {
	if(processing==1) {return false;}
	var selected_file = document.getElementById('selected_file');
	var file = document.getElementById('wdf-'+file_path);
	var path = document.getElementById('wdf-path');
	var button = document.getElementById('wdb-submit');
	try {
		document.getElementById('wdf-'+path.value).className='video';
	} catch (e) {}
	if(path.value==file_path) {
		path.value='';
		selected_file.innerHTML=path.value;
		button.value=' Укажите файл ';
		button.disabled=true;
	} else {
		file.className='video-selected';
		path.value=file_path;
		selected_file.innerHTML='<strong>Выбранный файл: </strong>'+path.value;
		button.value=' Подтвердить ';
		button.disabled=false;
	}
}

function startupload() {
	if(processing==1) return false;
	document.getElementById('wdb-del_orig').disabled=true;
	document.getElementById('wdb-process-div').style.display='block';
	document.getElementById('wdb-submit-div').style.display='none';
	processing = 1;
}

///////////////////////////////////// WATCH SECTION /////////////////////////////////////


var vote=0;
var rate_off = false;
var force = false
var new_rate = 0;
var new_votes = 0;
sred = new Image(); sred.src='/mounting/videostore/star-red.gif';
sgrey = new Image(); sgrey.src='/mounting/videostore/star-grey.gif';
sredvote = new Image(); sredvote.src='/mounting/videostore/star-red-vote.gif';
sgreyvote = new Image(); sgreyvote.src='/mounting/videostore/star-grey-vote.gif';
maxyc = new String(window.location).indexOf('maxyc');

function show_rate(rate) {

	if(!rate_off || force) {
		for(i=1;i<=rate;i++)
			document.getElementById('rate'+i).src = i==vote ? sredvote.src : sred.src;
		for(i=rate+1;i<=5;i++)
			document.getElementById('rate'+i).src = i==vote ? sgreyvote.src : sgrey.src;
	}
}

function rate(uid,rate) {
	if(!rate_off) {
		vote=rate;
		rate_off=true;
		var ajax = new Ajax();
		if (ajax.isValid) {
			ajax.post(
				'http://'+document.domain+'/?a=watch&id='+uid,
				'rate='+rate,
				function() {
					var response = ajax.response();
					if (response && response.status == 200 && response.text!='') {
						eval(response.text);
						if(!new_rate || !new_votes) return;
						force=true;
						show_rate(new_rate);
						force=false;
						document.getElementById('new_votes').innerHTML=new_votes;
		            }
				}
			);
		}
		document.getElementById('rate_block').className='rate_off';
	}
}

function getCookie(name) {
    var dc = document.cookie;
    var prefix = name + "=";
    var begin = dc.indexOf("; " + prefix);

    if (begin == -1) {
        begin = dc.indexOf(prefix);
        if (begin != 0) return null;
    } else {
        begin += 2;
    }

    var end = document.cookie.indexOf(";", begin);

    if (end == -1) {
        end = dc.length;
    }

    return unescape(dc.substring(begin + prefix.length, end));
}

function postComment(uid,mode) {
	var ajax = new Ajax();
	if (ajax.isValid) {
		var filter='';
		if(mode) filter='&b=comments';
		xcomment=document.getElementById('comment');
		xpostbutton=document.getElementById('postbutton');
		xcomment.disabled=true;
		xpostbutton.disabled=true;
		xpostbutton.value=' Подождите... ';
		ajax.post(
			'http://'+document.domain+'/?a=watch'+filter+'&id='+uid,
			'comment='+encodeURIComponent(xcomment.value),
			function() {
				var response = ajax.response();
				if (response && response.status == 200 && response.text!='') {
					document.getElementById('commentlist').innerHTML=response.text;
					xcomment.value='';
	            }
				xpostbutton.value=' Сохранить ';
				xpostbutton.disabled=false;
				xcomment.disabled=false;
			}
		);
	}
}

var abuse=0;
var noabuse=0;
var notvalid=0;
function showAbuse() {
	abuseForm=document.getElementById('abuse-form');
	abuseButton=document.getElementById('abuse-button');
	if(!abuse) {
		abuseForm.className='abuse-table visible';
		abuseButton.innerHTML='Не жаловаться';
		abuse=1;

	} else {
		abuseForm.className='abuse-table invisible';
		abuseButton.innerHTML='Пожаловаться';
		abuse=0;
	}
}

function postAbuse(uid) {
	var ajax = new Ajax();
	if (ajax.isValid) {
		abuseText=document.getElementById('abuse-text');
		abuseCode=document.getElementById('abuse-code');
		abusePost=document.getElementById('abuse-post');
		abuseText.disabled=true;
		abuseCode.disabled=true;
		abusePost.disabled=true;
		abusePost.value=' Подождите... ';
		ajax.post(
			'http://'+document.domain+'/?a=watch&id='+uid,
			'b=abuse&abuse_text='+abuseText.value+'&abuse_code='+abuseCode.value,
			function() {
				var response = ajax.response();
				if (response && response.status == 200 && response.text!='') {
					if(response.text=='redirect') {
						location='/?a=videos';
						return true;
					}
					eval(response.text);
					document.getElementById('abuse-text-message').style.display = noabuse ? 'inline-block' : 'none';
					document.getElementById('abuse-code-message').style.display = notvalid ? 'inline-block' : 'none';
					abuseText.disabled=false;
					abuseCode.disabled=false;
					abusePost.disabled=false;
					abusePost.value=' Послать ';
	            }
			}
		);
	}
}

function removeVideo(uid) {
	if (confirm('Вы действитeльно хотите удалить это видео?')==true) {
		var ajax = new Ajax();
		if (ajax.isValid) {
			ajax.post(
				'http://'+document.domain+'/?a=watch&id='+uid,
				'b=remove',
				function() {
					var response = ajax.response();
					if (response && response.status == 200 && response.text=='removed') {
						location='?a=videos';
					} else {
						alert('Ошибка при удалении видео! '+response.status);
					}
				}
			);
		}

	}
}

function removeComment(uid,cid) {
	if (confirm('Вы действитeльно хотите удалить этот комментарий?')==true) {
		var ajax = new Ajax();
		if (ajax.isValid) {
			ajax.post('http://'+document.domain+'/?a=watch&id='+uid+'&commentid='+cid,
				'b=commentremove',
				function() {
					var response = ajax.response();
					if (response && response.status == 200 && response.text=='removed') {
						document.getElementById('id_'+cid).outerHTML='';
					} else {
						alert('Ошибка при удалении комментария! '+response.status);
					}
				}
			);
		}

	}
}

function removeAbuse(aid) {
	if (confirm('Вы действитeльно хотите удалить эту жалобу?')==true) {
		var ajax = new Ajax();
		if (ajax.isValid) {
			ajax.post(
				'http://'+document.domain+'/?a=abuse&abuseid='+aid,
				'b=abuseremove',
				function() {
					var response = ajax.response();
					if (response && response.status == 200 && response.text=='removed') {
						location='?a=abuse';
					} else {
						alert('Ошибка при удалении жалобы!'+response.status);
					}
				}
			);
		}

	}
}

function addBookmark(uid) {
//	if (confirm('Вы действитeльно хотите добавить это видео в избранное?')==true) {
		var ajax = new Ajax();
		if (ajax.isValid) {
			ajax.post(
				'http://'+document.domain+'/?a=watch&id='+uid,
				'b=addbookmark',
				function() {
					var response = ajax.response();
					if (response && response.status == 200 && response.text=='added') {
						alert('Видео добавлено в избранное!');
//						document.getElementById('addbookmark').innerHTML='<b>В избранном</b>';
//						location='?a=bookmarks';
					} else if(response.text=='impossible') {
						alert('Это видео уже добавлено в избранное!');
					} else{
						alert(response.status+' Ошибка при добавлении видео в избранное!');
					}
				}
			);
		}

//	}
}
/////////// COMMENTS /////////////
function applyAllNewComment(uid) {
	var ajax = new Ajax();
	if (ajax.isValid) {
		ajax.post(
			'http://'+document.domain+'/?a=newcomments&userid='+uid,
			'b=applyall',
			function() {
				var response = ajax.response();
				if (response && response.status == 200 && response.text=='applied') {
					location='?a=newcomments';
				} else {
					alert('Ошибка при прочтении комментариев!'+response.status+' '+response.text);
				}
			}
		);
	}
}

function applyNewComment(cid) {
	var ajax = new Ajax();
	if (ajax.isValid) {
		ajax.post(
			'http://'+document.domain+'/?a=newcomments&commentid='+cid,
			'b=apply',
			function() {
				var response = ajax.response();
				if (response && response.status == 200 && response.text=='applied') {
					location='?a=newcomments';
				} else {
					alert('Ошибка при прочтении комментария!'+response.status);
				}
			}
		);
	}
}

function removeUComment(cid,a) {
	var ajax = new Ajax();
	if (ajax.isValid) {
		if(a==0){c='newcomments';}else{c='allcomments';}
		ajax.post('http://'+document.domain+'/?a='+c+'&commentid='+cid,
				'b=remove',
			function() {
				var response = ajax.response();
				if (response && response.status == 200 && response.text=='removed') {
					document.getElementById('id_'+cid).outerHTML='';
				} else {
					alert('Ошибка при удалении комментария! '+response.status);
				}
			}
		);
	}
}

function rate_comment(commentid, rate) {
	var ajax = new Ajax();
	if (ajax.isValid) {
		
		if(rate!=1 && rate!=-1 || commentid<1) return;
//		alert('rate:'+rate+'; commentid:'+commentid);
		ajax.post('http://'+document.domain+'/?a=ratecomment&commentid='+commentid+'&rate='+rate,
				'',
			function() {
				var response = ajax.response();
				if (response && response.status == 200 && response.text=='ok') {
					if(document.getElementById('rc_'+commentid+'_up').className=='img_up_d' || document.getElementById('rc_'+commentid+'_down').className=='img_down_d') return;
					document.getElementById('rc_'+commentid).innerHTML=parseInt(document.getElementById('rc_'+commentid).innerHTML)+rate;
					
					document.getElementById('rc_'+commentid+'_up').className='img_up_'+(rate==1?'h':'d');
					document.getElementById('rc_'+commentid+'_down').className='img_down_'+(rate==-1?'h':'d');
				} else {
					alert('Ошибка при голосовании за комментарий! #'+response.status+"\n"+"\n"+response.text);
				}
			}
		);
	}
}
////////////////////////////////