function make_request(url, type, post_value) 
{
	if ( type != 'POST' )
		type = 'GET';
		
	var http_request = false;

	if (window.XMLHttpRequest) { // Mozilla, Safari, ...
		http_request = new XMLHttpRequest();
		if (http_request.overrideMimeType) 
		{
			http_request.overrideMimeType('text/xml');
			// See note below about this line
		}
	} else if (window.ActiveXObject) { // IE
		try {
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	}

	if (!http_request) {
		alert('Giving up :( Cannot create an XMLHTTP instance');
		return false;
	}
	http_request.onreadystatechange = function() { handle_request(http_request); };
	if ( type == 'GET' )
	{
		http_request.open('GET', url, true);
		http_request.send(null);
	}
	else if ( type == 'POST' )
	{
		http_request.open('POST', url, true);
		http_request.send(post_value);
	}
}

function handle_request(http_request) {

	if (http_request.readyState == 4) {
		if (http_request.status == 200) {
			var xml = http_request.responseXML;
			//alert(http_request.responseText);
			if ( (xml != undefined) && (xml.getElementsByTagName('action') != undefined) && (xml.getElementsByTagName('action').item(0) != undefined) && (xml.getElementsByTagName('action').item(0).hasChildNodes()) )
			{
				action = xml.getElementsByTagName('action').item(0).firstChild.data;
				switch ( action )
				{
					case 'bookmark_delete':
						handle_bookmark_delete(xml);
						break;
					case 'bookmark_refresh':
						handle_bookmark_refresh(xml);
						break;
					case 'bookmark_save':
						handle_bookmark_save(xml);
						break;
					case 'search_delete':
						handle_search_delete(xml);
						break;
					case 'auth_login':
						handle_auth_login(xml);
						break;
				}
			}
			
		} else {
			alert('There was a problem with the request. Please check your internet connectivity and check try again.');
		}
	}
}

function do_login()
{
	auth_login(document.forms['auth_login']['login'].value, document.forms['auth_login']['password'].value);
}

function auth_login(login, password)
{
	xml = "<root>\n";
	xml = xml + "\t<action>auth_login</action>\n";
	xml = xml + "\t<login>" + login + "</login>\n";
	xml = xml + "\t<password>" + password + "</password>\n";
	xml = xml + "</root>";
	make_request('/xml-gateway.php', 'POST', xml);
}

function bookmark_refresh(title, url)
{
	xml = "<root>\n";
	xml = xml + "\t<action>bookmark_refresh</action>\n";
	xml = xml + "</root>";
	make_request('/xml-gateway.php', 'POST', xml);
}

function bookmark_save(title, url)
{
	xml = "<root>\n";
	xml = xml + "\t<action>bookmark_save</action>\n";
	xml = xml + "\t<title>" + title + "</title>\n";
	xml = xml + "\t<url>" + url + "</url>\n";
	xml = xml + "</root>";
	make_request('/xml-gateway.php', 'POST', xml);
}

function bookmark_delete(record_id)
{
	xml = "<root>\n";
	xml = xml + "\t<action>bookmark_delete</action>\n";
	xml = xml + "\t<record_id>" + record_id + "</record_id>\n";
	xml = xml + "</root>";
	make_request('/xml-gateway.php', 'POST', xml);
}

function search_delete(record_id)
{
	xml = "<root>\n";
	xml = xml + "\t<action>search_delete</action>\n";
	xml = xml + "\t<record_id>" + record_id + "</record_id>\n";
	xml = xml + "</root>";
	make_request('/xml-gateway.php', 'POST', xml);
}

var bookmark_to_add = null;

function handle_bookmark_save(xml)
{
	if ( xml.getElementsByTagName('status').item(0).hasChildNodes() )
	{
		response_status = xml.getElementsByTagName('status').item(0).firstChild.data;
		if ( response_status == 'auth_failed' )
		{
			bookmark_to_add = new Array();
			bookmark_to_add['title'] = xml.getElementsByTagName('bookmark_title').item(0).firstChild.data;
			bookmark_to_add['url'] = xml.getElementsByTagName('bookmark_url').item(0).firstChild.data;
			
			show_login_form();
		}
		else
		{
			document.getElementById('bookmark_nobookmarks').style.display='none';
			document.getElementById('bookmark_not_logged_in').style.display='none';
			document.getElementById('bookmarks_container').innerHTML = xml.getElementsByTagName('bookmark').item(0).firstChild.data + document.getElementById('bookmarks_container').innerHTML;
		}
	}
}

function handle_bookmark_refresh(xml)
{
	if ( xml.getElementsByTagName('bookmark_list') != undefined )
	{
		document.getElementById('bookmarks_container').innerHTML = xml.getElementsByTagName('bookmark_list').item(0).firstChild.data;
	}
}

function handle_bookmark_delete(xml)
{
	if ( xml.getElementsByTagName('status').item(0).hasChildNodes() )
	{
		response_status = xml.getElementsByTagName('status').item(0).firstChild.data;
		record_id = xml.getElementsByTagName('record_id').item(0).firstChild.data;
		if ( response_status == 'ok' )
			document.getElementById('bookmark_' + record_id).style.display='none';
		if ( (xml.getElementsByTagName('bookmarks_count') != undefined) && (xml.getElementsByTagName('bookmarks_count').item(0).firstChild.data == 0) )
			document.getElementById('bookmark_nobookmarks').style.display='block';
	}
}

function handle_search_delete(xml)
{
	if ( xml.getElementsByTagName('status').item(0).hasChildNodes() )
	{
		response_status = xml.getElementsByTagName('status').item(0).firstChild.data;
		record_id = xml.getElementsByTagName('record_id').item(0).firstChild.data;
		if ( response_status == 'ok' )
		{
			document.getElementById('recentsearch_' + record_id).style.display='none';
			if ( (xml.getElementsByTagName('search_count') != undefined) && (xml.getElementsByTagName('search_count').item(0).firstChild.data == 0) )
				document.getElementById('recentsearch_norecords').style.display='block';
		}
	}
}
function handle_auth_login(xml)
{
	if ( xml.getElementsByTagName('status').item(0).hasChildNodes() )
	{
		response_status = xml.getElementsByTagName('status').item(0).firstChild.data;
		if ( response_status == 'auth_ok' )
		{
			if ( bookmark_to_add != null )
			{
				bookmark_save(bookmark_to_add['title'], bookmark_to_add['url']);
				bookmark_to_add = null;
			}
			else
				bookmark_refresh();

			document.getElementById('jsbg').style.display='none';
		}
	}
}

function show_login_form()
{
        if ( document.getElementById('jsbg') == undefined )
        {
                oBG = document.createElement("DIV");
                oBG.style.position = 'absolute';
                oBG.setAttribute("id", "jsbg");
                oBG.innerHTML = '<table width="100%" height="100%" border="0" cellspacing="0" cellpadding="0"><tr><td valign="top" align="center"><form method="POST" name="auth_login"><table  border="0" cellpadding="5" cellspacing="5" bgcolor="#FFFFFF" style="margin-top:50px"><tr><td bgcolor="#ebebeb"><table border="0" cellspacing="5" cellpadding="5" class="auth_login_screen" id="auth_login_screen"><tr><td class="txt_divs">To use the Bookmarks Feature on Riight, please login:</td></tr><tr><td align="center" class="txt_divs"><table border="0" cellspacing="5" cellpadding="3"><tr><td class="txt_divs">Login:</td><td class="txt_divs"><input type="text" name="login" class="txt_divs"></td></tr><tr><td class="txt_divs">Password:</td><td class="txt_divs"><input type="password" name="password" class="txt_divs"></td></tr><tr><td class="txt_divs">&nbsp;</td><td class="txt_divs"><input name="button" type="button" onClick="do_login();" value="Login" class="txt_divs"></td></tr></table></td></tr><tr><td class="txt_divs">or <a href="/myriight/index.php">click here</a> to register. <a href="/myriight/index.php">Why?</a><br><br><a href="#" onClick="document.getElementById(\'jsbg\').style.display = \'none\';">Close</a></td></tr></table></td></tr></table></form></td></tr></table>';
                document.body.appendChild(oBG);
        }
        else
                oBG = document.getElementById('jsbg');

        oBG.style.top   = 0;
        oBG.style.left  = 0;
        oBG.style.width = document.body.scrollWidth;
        oBG.style.height        = document.body.scrollHeight;
        oBG.style.backgroundColor= '#333333';
        oBG.style.filter="opacity: 0.4; -moz-opacity: 0.4; -khtml-opacity: 0.4; filter: alpha(opacity=40)";
        oBG.filters.Alpha(opacity=.40).apply();
        oBG.style.display = 'block';
}
