//==========================================================
// This following section is for AJAX activities
//==========================================================
// Create by Zhanshan Dong, May 21,2009
// Modified on July 20, 2009
//   Version 1.09.20 
// Improved on Dec 30, 2009
//   Version 1.09.31
// Improved on Jan 16, 2010
//   Version 1.10.16
// Improved on May 7, 2010
//   Version 1.10.57

//alert("load"); // this can be used to test any errors in the script
var xmlhttp2;
var phpscript;

// general functions related to utf-8 characters
function encode_utf8( s )
{
  return unescape( encodeURIComponent( s ) );
}

function decode_utf8( s )
{
  return decodeURIComponent( unescape( s ) );
}

//-----------------------------------------------------------
// The following functions are for keywords
var eventkeywords_callback = function()
{
	if (xmlhttp2.readyState==4)
	{
		theObject = document.getElementById("showkeywords");
		if (xmlhttp2.responseText != "")
		{
			theObject.style.visibility = "visible";
			document.getElementById("showkeywords").innerHTML=xmlhttp2.responseText;
		}
		else
		{
			theObject.style.visibility = "hidden";
		}
	}
}

function showkeywords(php,myobj)
{
	mykeyword = myobj.value;
	// set position of the tooltip
	theObject = document.getElementById("showkeywords");
	var posx = 0;
	var posy = 0;
	container = document.getElementById("Container");
	bodyarea = document.getElementById("Bodyarea");
	menu = document.getElementById("Menu");
	searchform = window.document.forms["searchform"];
	posx = container.offsetLeft + searchform.offsetLeft;
	posx = searchform.offsetLeft + myobj.offsetLeft;
	posy = - bodyarea.offsetTop + container.offsetTop + menu.offsetTop + myobj.offsetTop + myobj.offsetHeight+2;
	theObject.style.left = posx + "px";
	theObject.style.top = posy + "px";
	// ajax call
	var url=php+"?cmd=showkeywords"+
		"&keyword="+ mykeyword;
	makeGETrequest2(url, eventkeywords_callback);
}

function hidekeywords()
{
	tObject = document.getElementById("showkeywords");
	tObject.style.visibility = "hidden";
}

function fillkeyword(phrase)
{
	searchform = window.document.forms["searchform"];
	searchform.elements["keyword"].value = phrase;
	hidekeywords();
}

function processkeydown()
{
    // we're going to hijack this function, used as 'onkeyup'
    // get the event obj itself (passed or on the window)
    var e = arguments[0]||window.event;
    // get which key was pressed
    var kc = e.which||e.keyCode;
    // then check if an arrow or enter were pressed
	tObject = document.getElementById("showkeywords");
    switch(kc) {
      // up arrow
      case 38: 
        // get the appropriate selection
        break;
      // down arrow
      case 40: 
        // get the appropriate selection
		tObject.focus();
        break;
      // enter key
      case 13: 
      default:
        // function does its normal thing
        this.AutoComplete.onchange();
        autoCompleteItemSelected = false;
        break;
    }
}

//-----------------------------------------------------------
// The following functions are for calendar
var eventactivities_callback = function()
{
	if (xmlhttp2.readyState==4)
	{
		document.getElementById("showactivities").innerHTML=xmlhttp2.responseText;
	}
}

function showactivities(php, year, month, day, e)
{
	// set position of the tooltip
	theObject = document.getElementById("showactivities");
	theObject.style.visibility = "visible";
	var posx = 0;
	var posy = 0;
	container = document.getElementById("Container");
	bodyarea = document.getElementById("Bodyarea");
	posx = e.clientX + document.body.scrollLeft - container.offsetLeft - bodyarea.offsetLeft;
	posy = e.clientY + document.body.scrollTop - container.offsetTop - bodyarea.offsetTop;
	theObject.style.left = posx + "px";
	theObject.style.top = posy + "px";

	// ajax call
	var url=php+"?cmd=showactivities"+
		"&year="+ year +
		"&month="+ month +
		"&day="+ day;
	makeGETrequest2(url, eventactivities_callback);
}

function hideactivities()
{
	tObject = document.getElementById("showactivities");
	tObject.style.visibility = "hidden";
}

//-----------------------------------------------------------
// The following functions are for calendar
var calendar_callback = function()
{
	if (xmlhttp2.readyState==4)
	{
		document.getElementById("calendar").innerHTML=xmlhttp2.responseText;
	}
}

function showCalendar(php, year, month) // works in Chrome, IE 8
{
	var url=php+"?cmd=showcalendar" +
		"&year="+ year +
		"&month="+ month;
	makeGETrequest2(url, calendar_callback);
}

//-----------------------------------------------------------
// The following functions are for banner
var banner_callback = function()
{
	if (xmlhttp2.readyState==4)
	{
		document.getElementById("banner").innerHTML=xmlhttp2.responseText;
	}
}

function showAdsSlide(php, advance)
{
	var url=php+"?cmd=showadsslide"+
			"&advance=" + advance;
	makeGETrequest2(url, banner_callback);
}

//-----------------------------------------------------------
// The following functions are for dashboad
var link_callback = function()
{
	if (xmlhttp2.readyState==4)
	{
		mytext = xmlhttp2.responseText;
//alert(mytext);
		if (mytext == "")
		{
			window.location = phpscript;
		}
		else
		{
			document.getElementById("linkcontent").innerHTML=xmlhttp2.responseText;
		}
	}
}

function editAds(php,id)
{
	var url=php+"?cmd=editads"+
			"&id_ads=" + id;
	makeGETrequest2(url, link_callback);
}

function addAds(php)
{
	var url=php+"?cmd=addads";
	makeGETrequest2(url, link_callback);
}

function deleteAds(php,id_ads)
{
	var r = confirm("Are you sure that you want to delete link: "+id_ads);
	if (r == true)
	{
		var poststr = "id_ads=" + escape(id_ads);
		var url=php+"?cmd=deleteads";
		makePOSTRequest2(url, poststr, link_callback);
	}
}

function submitAds(php,id_ads)
{
	var adsform = window.document.forms["adsForm"];
	var code = adsform.elements["code"].value;
	var size = adsform.elements["size"].value;
	var source = adsform.elements["source"].value;
	var expirationdate = adsform.elements["expirationdate"].value;
	var poststr = "code=" + escape(code) +
		    "&size=" + escape(size) +
		    "&source=" + escape(source) +
		    "&expirationdate=" + escape(expirationdate);
	url = php +'?cmd=submitads&id_ads='+id_ads;
	makePOSTRequest2(url, poststr, link_callback);
}

function showDateLinks(php, y, m, d, page)
{
	var url=php+"?cmd=showdateslinks"+
		"&year="+ y +
		"&month="+ m +
		"&day="+ d +
		"&page="+page;
	makeGETrequest2(url, link_callback);
}

function showCatLinks(php, cmd, id_category, page)
{
	var url=php+"?cmd="+cmd +
		"&id_category="+ id_category+
		"&page="+page;
	makeGETrequest2(url, link_callback);
}

function showLinks(php, cmd, page)
{
	var url=php+"?cmd="+cmd +
		"&page="+page;
	makeGETrequest2(url, link_callback);
}

// used in search box
function searchLinks(php,id_category)
{
	var keyword = window.document.forms["searchform"].elements["keyword"].value;
	var url=php+"?cmd=search" +
		"&id_category="+id_category +
		"&keyword="+decode_utf8(keyword);
	makeGETrequest2(url, link_callback);
}

// used in top search words cloud
function searchLinks2(php,id_category,keyword,page)
{
	var url=php+"?cmd=search" +
		"&page="+page+
		"&id_category="+id_category +
		"&keyword="+decode_utf8(keyword);
	makeGETrequest2(url, link_callback);
}

// used in tag cloud 
function showTaggedLinks(php,id_category,id_tags,page)
{
	var url=php+"?cmd=showtaggedlinks" +
		"&page="+page+
		"&id_category="+id_category +
		"&id_tags="+id_tags;
	makeGETrequest2(url, link_callback);
}

// used in modify links
function getMultipleSelection(ob,array)
{ 
    var selected = new Array(); 
    for(var j = 0; j < ob.length; j++) { 
        if(ob[j].selected) { 
            selected.push(ob[j].value); 
        } 
    } 
    if(array != 'true') 
    {
    	return selected.toString(); 
    }
    else 
    {
    	return selected; 
    }
} 

// used in modify links
function modifyLink(php)
{
        var selected = new Array();
	selected = getMultipleSelection(document.getElementById("id_categories"),true);
	var addlinkform = window.document.forms["addlinkform"];
	var id_links = addlinkform.elements["id_links"].value;
	var private = "";
	if (addlinkform.elements["private"].checked)
	{
		private = addlinkform.elements["private"].value;
	}
	var link = addlinkform.elements["link"].value;
	var description = addlinkform.elements["description"].value;
	var name = addlinkform.elements["name"].value;
	var mytags = addlinkform.elements["mytags"].value;
	var poststr = "id_category=" + escape(selected) +
		    "&id_links=" + escape(id_links) +
		    "&private=" + escape(private) +
		    "&link=" + escape(link) +
		    "&description=" + decode_utf8(description) +
		    "&name=" + decode_utf8(name) +
		    "&mytags=" + decode_utf8(mytags);
	url = php +'?cmd=modifylink';
	makePOSTRequest2(url, poststr, link_callback);
}

// delete a link 
function deleteLink(php, id_links, id_category)
{
	var r = confirm("Are you sure that you want to delete link: "+id_links);
	if (r == true)
	{
		var url=php+"?cmd=deletelink" +
			"&id_links="+id_links +
			"&id_category="+id_category;
		makeGETrequest2(url, link_callback);
	}
}


// manage messages
function manageMessage(php)
{
	var url=php+"?cmd=managemessages";
	makeGETrequest2(url, link_callback);
}

// show contact form 
function showContact(php)
{
	var url=php+"?cmd=showContactForm";
	makeGETrequest2(url, link_callback);
}

// submit a message and send to webmaster
function submitMessage(php)
{
	var bm_contact_form = window.document.forms["bm_contact_form"];
	var sender = bm_contact_form.elements["sender"].value;
	var subject = bm_contact_form.elements["subject"].value;
	var email = bm_contact_form.elements["email"].value;
	var mbody = bm_contact_form.elements["mbody"].value;

	var poststr = "sender=" + decode_utf8(sender) +
		    "&subject=" + decode_utf8(subject) +
		    "&email=" + decode_utf8(email) +
		    "&mbody=" + decode_utf8(mbody);
	url = php +'?cmd=submitMessage';
	makePOSTRequest2(url, poststr, link_callback);
}

// show registration form
function showRegForm(php)
{
	var url=php+"?cmd=showregform";
	makeGETrequest2(url, link_callback);
}

// show login form
function showLoginForm(php)
{
	var url=php+"?cmd=showloginform";
	makeGETrequest2(url, link_callback);
}

// manage users
function manageUser(php)
{
	var url=php+"?cmd=manageusers";
	makeGETrequest2(url, link_callback);
}

// process log in form
function login(php)
{
	phpscript = php;
	var username = window.document.forms["login"].elements["username"].value;
	var password = window.document.forms["login"].elements["password"].value;
	var captcha_code = window.document.forms["login"].elements["captcha_code"].value;
	var poststr = "username="+ decode_utf8(username) +
		"&password="+ password +
		"&captcha_code="+ captcha_code;
	var url = url=php+"?cmd=login"; 
	makePOSTRequest2(url, poststr, link_callback);
}

// process registration form
function register(php)
{
	phpscript = php;
	var username = window.document.forms["register"].elements["username"].value;
	var password = window.document.forms["register"].elements["password"].value;
	var password2 = window.document.forms["register"].elements["password2"].value;
	var email = window.document.forms["register"].elements["email"].value;
	var website = window.document.forms["register"].elements["website"].value;
	var usernote = window.document.forms["register"].elements["usernote"].value;
	var captcha_code = window.document.forms["register"].elements["captcha_code"].value;
	var poststr="username="+ decode_utf8(username) +
		"&password="+ decode_utf8(password) +
		"&password2="+ decode_utf8(password2) +
		"&email="+ decode_utf8(email) +
		"&website="+ decode_utf8(website) +
		"&usernote="+ decode_utf8(usernote) +
		"&captcha_code="+ captcha_code;
	url = php +'?cmd=register';
	makePOSTRequest2(url, poststr, link_callback);
}

// show my account summary
function showMyAccount(php)
{
	var url=php+"?cmd=showmyaccount";
	makeGETrequest2(url, link_callback);
}

// show setting form
function showSettingForm(php)
{
	var url=php+"?cmd=showsettingform";
	makeGETrequest2(url, link_callback);
}

// process new setting 
function setSetting(php)
{
	phpscript = php;
	var settingform = window.document.forms["settingform"];
	var sortby = settingform.elements["sortby"].value;
	var orderin = settingform.elements["orderin"].value;
	var recordperpage = settingform.elements["recordperpage"].value;
	var bbmskin = settingform.elements["bbmskin"].value;
	var yours = "";
	if (settingform.elements["yours"].checked)
	{
		yours = settingform.elements["yours"].value;
	}
	var friends = "";
	if (settingform.elements["friends"].checked)
	{
		friends = settingform.elements["friends"].value;
	}
	var publics = "";
	if (settingform.elements["publics"].checked)
	{
		publics = settingform.elements["publics"].value;
	}
	var poststr="sortby="+ sortby +
		"&orderin="+ orderin +
		"&yours="+ yours +
		"&friends="+ friends +
		"&publics="+ publics +
		"&recordperpage="+ escape(recordperpage) +
		"&bbmskin="+ escape(encodeURI(bbmskin));
	url = php +'?cmd=setsetting';
	makePOSTRequest2(url, poststr, link_callback);
}

//-----------------------------------------------------------
var linkform_callback = function()
{
	if (xmlhttp2.readyState==4)
	{
		document.getElementById("linkform").innerHTML=xmlhttp2.responseText;
	}
}

// for edit a link
function editLink(php,id_links)
{
	var url=php+"?cmd=editlink" +
	        "&id_links="+id_links;
	makeGETrequest2(url, linkform_callback);
}

//-----------------------------------------------------------
// the following functions for bookmark details
var bbmdetail_id = '';
var bbmdetail_callback = function()
{
	if (xmlhttp2.readyState==4)
	{
		document.getElementById(bbmdetail_id).innerHTML=xmlhttp2.responseText;
		tObject = document.getElementById(bbmdetail_id);
		tObject.style.visibility = "visible";
	}
}

// show bookmark detail
function showDetails(php,id_links)
{
	bbmdetail_id = 'bbm'+id_links;
	var url=php+"?cmd=showdetails" +
	        "&id_links="+id_links;
	makeGETrequest2(url, bbmdetail_callback);
}

function hideDetails(id_links)
{
	bbmdetail_id = 'bbm'+id_links;
	tObject = document.getElementById(bbmdetail_id);
	tObject.innerHTML = "";
	tObject.style.visibility = "hidden";
}

//-----------------------------------------------------------
// the following functions for BBM editor
var bbmeditor_callback = function()
{
	if (xmlhttp2.readyState==4)
	{
		document.getElementById('bbmeditor').innerHTML=xmlhttp2.responseText;
		tObject = document.getElementById('bbmeditor');
		tObject.style.visibility = "visible";
	}
}
// show BBM editor
function editText(php,id_links)
{
	var url=php+"?cmd=edittext" +
	        "&id_links="+id_links;
	makeGETrequest2(url, bbmeditor_callback);
//	window.location = url;
}

// close BBM editor
function closeBBMEditor()
{
	tObject = document.getElementById('bbmeditor');
	tObject.innerHTML = "";
	tObject.style.visibility = "hidden";
}

//-----------------------------------------------------------
var catform_callback= function()
{
	if (xmlhttp2.readyState==4)
	{
		document.getElementById("catform").innerHTML=xmlhttp2.responseText;
	}
}

function editCat(php, parent_id, id_category)
{
	var url=php + "?cmd=editcat" +
	        "&id_category="+id_category+
	        "&parent_id="+parent_id;
	makeGETrequest2(url, catform_callback);
}

// this is common javascript function, not an AJAX function
function deleteCat(php,id_category)
{
	var r = confirm("Are you sure that you want to delete category: "+id_category);
	if (r == true)
	{
		var url=php+"?cmd=deletecat" +
			"&id_category="+id_category;
		window.location=url;
	}
}

//-------------------------------------------------------------
// common functions are for AJAX

// To make GET request
function makeGETrequest2(url, callback)
{
	xmlhttp2=GetXmlHttpObject();
	if (xmlhttp2==null)
	{
		alert ("Your browser does not support AJAX!");
		return;
	}
	xmlhttp2.onreadystatechange=callback;
	xmlhttp2.open("GET",encodeURI(url),true);
	xmlhttp2.send(null);
}

// To make POST request
function makePOSTRequest2(url, parameters, callback) {
	xmlhttp2=GetXmlHttpObject();
	if (xmlhttp2==null)
	{
		alert("Your browser does not support AJAX!");
		return;
	}
	xmlhttp2.onreadystatechange=callback;
	xmlhttp2.open('POST', encodeURI(url), true);
        if(xmlhttp2.overrideMimeType)
        {               
		xmlhttp2.overrideMimeType('text/xml');
        }
	xmlhttp2.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	xmlhttp2.setRequestHeader("Content-length", parameters.length);
	xmlhttp2.setRequestHeader("Connection", "close");

	xmlhttp2.send(parameters);
}

// create xmlHTTPobject
function GetXmlHttpObject()
{
//alert("I am at the beginning");
	if (window.XMLHttpRequest)
	{
		// code for IE7+, Firefox, Chrome, Opera, Safari
		return new XMLHttpRequest();
	}
	if (window.ActiveXObject)
	{
		// code for IE6, IE5
		return new ActiveXObject("Microsoft.XMLHTTP");
	}
	return null;
}


