var EMPTY_HTML="Ожидание ввода ссылки...";
var LOAD_HTML="Loading...";

var PARENT_BOX_ID_START = "parent_box_url_";
var HEAD_ID_START = "head_url_";
var PAGE_ID_START = "page_url_";
var FOOT_ID_START = "foot_url_";

var PARENT_BOX_CLASS = "parent_box";
var HEAD_CLASS = "head_url";
var PAGE_CLASS = "page_url";
var FOOT_CLASS = "foot_url";

var PARENT_ID = "saved_urls";
var URL_INPUT_ID = "url";
var COOKIE_NAME = "remembers";
var PRESS_TIMEOUT=500;
var SCRYPT_FILE="index.php";


var REQUEST=new Array();
var KEY_PRESSED_TIMER = null;
var HEIGTHS_TIMER = new Array();
var REMEMBER = new Array();
var HEIGTHS = new Array();


function load() {
	var cookie=get_cookie(COOKIE_NAME);
	if (cookie!="") REMEMBER=cookie.split("\n");
	var j=0;
	for (var i=0; i<REMEMBER.length; i++) {
		if (REMEMBER[i]!="") {
			j=i+1;
			var parent_box=create_all_box(j, REMEMBER[i], LOAD_HTML, "<SPAN ONCLICK=\"get_data('"+escape(REMEMBER[i])+"', "+j+");\">Обновить</SPAN> <SPAN ONCLICK=\"HEIGTHS["+j+"]=180; hide_element('"+PARENT_BOX_ID_START+j+"', "+j+", 180);\">Удалить</SPAN>");
			document.getElementById(PARENT_ID).appendChild(parent_box);
			get_data(REMEMBER[i], j);
		}
	}
}

function keypressed() {
	var url = document.getElementById(URL_INPUT_ID).value;
	if (url.length>=5)
	{
		window.clearTimeout(KEY_PRESSED_TIMER);
		KEY_PRESSED_TIMER=window.setTimeout("get_data('"+url+"', 0)", PRESS_TIMEOUT);
	}
}

function get_data(url, id) {
	createRequest(id);

	parent_box=document.getElementById(id!=0 ? PAGE_ID_START+id : PARENT_BOX_ID_START+'0');
	parent_box.innerHTML=LOAD_HTML;

	var query=SCRYPT_FILE+"?ajax=1&url="+url;

	REQUEST[id].open("GET", query, true);
	REQUEST[id].onreadystatechange = function() {
		if (REQUEST[id].readyState == 4) {
			if (REQUEST[id].status == 200) { 
				var parent_box=document.getElementById(id!=0 ? PAGE_ID_START+id : PARENT_BOX_ID_START+'0');
				var input_url = document.getElementById(URL_INPUT_ID).value;
				if (id!=0 || url==input_url) {
					if (id==0) {
						if (REQUEST[id].responseText!=EMPTY_HTML)
							parent_box.innerHTML=create_all_box(0, url, REQUEST[id].responseText, "<SPAN ONCLICK=\"add();\">Добавить</SPAN>").innerHTML;
						else parent_box.innerHTML=REQUEST[id].responseText;
					}
					else parent_box.innerHTML=REQUEST[id].responseText;
				}
			} else alert("status is " + REQUEST[id].status);
		}
	}

	REQUEST[id].send(null);
}

function add() {
	var i = 1;
	var url = document.getElementById(URL_INPUT_ID).value;
	var worked_page = document.getElementById(PAGE_ID_START+"0").innerHTML;
	var worked_head = document.getElementById(HEAD_ID_START+"0").innerHTML;

	document.getElementById(PARENT_BOX_ID_START+"0").innerHTML=EMPTY_HTML;

	while ( document.getElementById(PAGE_ID_START+i) ) i++;

	var parent_box=create_all_box(i, worked_head, worked_page, "<SPAN ONCLICK=\"get_data('"+escape(worked_head)+"', "+i+");\">Обновить</SPAN> <SPAN ONCLICK=\"HEIGTHS["+i+"]=180; hide_element('"+PARENT_BOX_ID_START+i+"', "+i+", 180);\">Удалить</SPAN>");
	var html=document.createElement("DIV");
	html.appendChild(parent_box);

	for (var j=0; j<html.childNodes[0].childNodes.length; j++) html.childNodes[0].childNodes[j].style.display="none";
	html.childNodes[0].style.height="0px";

	var parent=document.getElementById(PARENT_ID);
	parent.innerHTML=html.innerHTML+parent.innerHTML;
	
	HEIGTHS[i]=0;
	show_element(PARENT_BOX_ID_START+i, i, 180);

	REMEMBER.push(url);
	rec_cookie();
}

function show_element(id, ident, max) {
	window.clearTimeout(HEIGTHS_TIMER[ident]);
	
	var box=document.getElementById(id);
	if (HEIGTHS[ident]<max) {
		HEIGTHS[ident]+=10;
		box.style.height=HEIGTHS[ident]+"px";
		HEIGTHS_TIMER[ident]=window.setTimeout("show_element('"+id+"', "+ident+", "+max+")", 1);
	}
	else  for (var i=0; i<box.childNodes.length; i++) box.childNodes[i].style.display="block";
}

function hide_element(id, ident, max) {
	window.clearTimeout(HEIGTHS_TIMER[ident]);
	var box=document.getElementById(id);
	
	if (HEIGTHS[ident]>=max) for (var i=0; i<box.childNodes.length; i++) box.childNodes[i].style.display="none";
	
	if (HEIGTHS[ident]>0) {
		HEIGTHS[ident]-=10;
		box.style.height=HEIGTHS[ident]+"px";
		HEIGTHS_TIMER[ident]=window.setTimeout("hide_element('"+id+"', "+ident+", "+max+")", 1);
	}
	else del(ident);
}

function del(id) {
	if (id!=0) {
		REQUEST[id]=null;
		var box=document.getElementById(PARENT_BOX_ID_START+id);
		var search_url = document.getElementById(HEAD_ID_START+id).innerHTML;
		document.getElementById(PARENT_ID).removeChild(box);

		for (var i=0; i<REMEMBER.length; i++) if (search_url==REMEMBER[i]) REMEMBER.splice(i, 1);
		rec_cookie();
	}
}

function create_all_box(id, head, page, foot) {
	var parent_box = create_box(PARENT_BOX_ID_START+id, PARENT_BOX_CLASS, "");

	var head = create_box(HEAD_ID_START+id, HEAD_CLASS, head);
	parent_box.appendChild(head);

	var page = create_box(PAGE_ID_START+id, PAGE_CLASS, page);
	parent_box.appendChild(page);

	var foot = create_box(FOOT_ID_START+id, FOOT_CLASS, foot);
	parent_box.appendChild(foot);

	return parent_box;
}

function create_box(id, classname, content) {
	var element = document.createElement("DIV");
	element.id=id;
	element.className=classname;
	element.innerHTML=content;
	return element;
}

function rec_cookie() {
	var text="";
	for (var i=REMEMBER.length-1; i>=0; i--) if (REMEMBER[i]!="") text+=REMEMBER[i]+"\n";
	set_cookie(COOKIE_NAME, text);
}

function createRequest(id) {
	try {
		REQUEST[id] = new XMLHttpRequest();
	}
	catch (trymicrosoft) {
		try {
			REQUEST[id] = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (othermicrosoft) {
			try {
				REQUEST[id] = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (failed) {
				REQUEST[id] = false;
			}
		}
	}
	if (!REQUEST[id]) alert("Error initializing XMLHttpRequest!");
}

function set_cookie(name, value) {
	var d=new Date();
	d.setTime(d.getTime()+(86400000*365));
	var args = set_cookie.arguments;
	var expires = '; expires=' + d.toGMTString();
	var path = args[3] ? '; path=' + args[3] : '';
	var domain = args[4] ? '; domain=' + args[4] : '';
	var secure = args[5] ? '; secure' : '';
	document.cookie = name + '=' + escape(value) + expires + path + domain + secure;
}

function get_cookie(name) {
	name += '=';
	with(document)
	{
		var beg = cookie.indexOf(name);
		if(beg == -1) return false;
		else beg += name.length;
		var end = cookie.indexOf(';', beg);
		if(end == -1) end = cookie.length;
		return unescape(cookie.substring(beg, end));
	}
}
