/*********************************
Ajax script for Jot snippet 1.1.4
Created by AHHP ~ Boplo.ir
*********************************/

// Submit a comment
//		type : [ submit | edit ]
//		formName : name of Jot form, if empty, default is the form which ajax button is placed.
function ajax_comment(type, formName)
{
	// default mode: comment form is form which ajax_submit button is in.
	if(typeof formName == "undefined")
	{
		var ajaxSubmit = document.getElementById("ajax_jot");
		var parent = ajaxSubmit;
		for( var i = 0 ; i < document.body.childNodes.length ; i++ )
		{
			if( parent.parentNode != "undefined" )
			{
				if( parent.parentNode.tagName == "FORM" )	// FORM was found
				{
					var formName = parent.parentNode.getAttribute("name");
					break;
				}
				else	// check next parent in next loop
					parent = parent.parentNode;
			}
		}
	}
	
	var formObject = document.getElementsByName(formName).item(0);
	var query = "&ajaxJot=1";	// ajaxJot is needed for Ajax Jot to add some data
	for( var i = 0 ; i < formObject.length ; i++ )
	{
		var fldType = formObject[i].getAttribute("type");
		if( fldType != null )
			if(fldType.toLowerCase() == "checkbox" || fldType.toLowerCase() == "radio")
				if(formObject[i].checked == false)
					continue;	// get checkbox and radio input IF only they have been checked
		
		query += "&" + formObject[i].getAttribute("name") + "=" + formObject[i].value;
	}
	
	if(typeof ajax_jot_load_container == "undefined" || ajax_jot_load_container == "")
		ajax_jot_load_container = formObject.parentNode.getAttribute("id");
	
	var xmlHttp = ajaxRequest();
	// There is no GET query for submiting but editing has GET query, editing query is value of ACTION attribute
	xmlHttp.open("POST" , ( type=="submit" ? document.URL : formObject.getAttribute("action") ) , true);
	xmlHttp.onreadystatechange=function() 
	{
		var result = xmlHttp.responseText;
		var array = result.split("|!|~|!|");
		
		var ajax_frm = (typeof array[0] == "undefined") ? "" : array[0];	// [+jot.html.form+]
		var ajax_com = (typeof array[1] == "undefined") ? "" : array[1];	// [+jot.html.comments+]
		var ajax_mod = (typeof array[2] == "undefined") ? "" : array[2];	// [+jot.html.moderate+]
		var ajax_navi = (typeof array[3] == "undefined") ? "" : array[3];	// [+jot.html.navigation+]
		var ajax_sub = (typeof array[4] == "undefined") ? "" : array[4];	// [+jot.html.subscribe+]
		
		if(xmlHttp.readyState==1)
		{
			if(typeof ajax_jot_loading == "undefined" || ajax_jot_loading == null)
				var ajax_jot_loading = '<div id="jot-loading" style="margin:50px; text-align:center; font-size:2em;">Loading<br />Please wait....</div>';
			
			document.getElementById("jot-des").innerHTML  += ajax_jot_loading;
		}
		
		if(xmlHttp.readyState==4 && xmlHttp.status==200)
		{
			if(type == "edit")
			{	// eliminate editing element
				if( document.getElementById("jot-editing") )
				{
					document.getElementById("jot-editing").innerHTML = "";
					document.getElementById("jot-editing").style.display = "none";
					document.getElementById("jot-editing").removeAttribute("id");
				}
			}
			
			if(document.getElementById("jot-loading") != null)	// hide loading
			{
				document.getElementById("jot-loading").innerHTML = "";
				document.getElementById("jot-loading").style.display = "none";
				document.getElementById("jot-loading").removeAttribute("id");
			}
			
			if(output == 1)	// default mode: results will prints in parent node of jot form
			{
				var tmp = ajax_frm + ajax_sub + ajax_mod + ajax_navi + ajax_com + ajax_navi;
				document.getElementById(ajax_jot_load_container).innerHTML = tmp.replace("|!|~|!|", "");
				delete(tmp);
			}
			
			if(placeholders == 1)	// &placeholders is on and data must replace with placeholders
			{
				for( var i = 0 ; i < ajax_jot_container.length ; i++ )
				{	
					var elem = ajax_jot_container[i];	// is an Array
					for( var j = 0 ; j < elem.length ; j++ )
						document.getElementById(elem[j]).innerHTML = array[i].replace("|!|~|!|", "");
					
				}
			}
		}
	}
	xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");
	xmlHttp.send(query);
	
}



// Jot actions
//		Comment actions: Publish, Unpublish, Delete, Show edit form
//		Moderation
//		Navigation
//		Subscribe
//	req: complete url of a GET query for getting to Jot + &ajaxJot=1
//	action: [ publish | unpublish | delete | moderate | navigation | subscribe | edit | cancel ]
function ajax_action(req, action)
{
	if(typeof ajax_jot_load_container == "undefined" || ajax_jot_load_container == "")
		ajax_jot_load_container = document.getElementById("jot-des").parentNode.getAttribute("id");
	
	var xmlHttp = ajaxRequest();
	xmlHttp.open("GET" , req, true);
	xmlHttp.onreadystatechange=function() 
	{
		if(xmlHttp.readyState==1)
		{
			if(typeof ajax_jot_loading == "undefined" || ajax_jot_loading == null)
				var ajax_jot_loading = '<div id="jot-loading" style="margin:50px; text-align:center; font-size:2em;">Loading<br />Please wait....</div>';
			
			document.getElementById("jot-des").innerHTML  += ajax_jot_loading;
		}
		
		if(xmlHttp.readyState==4 && xmlHttp.status==200)
		{
			var result = xmlHttp.responseText;
			var array = result.split("|!|~|!|");
			
			var ajax_frm = (typeof array[0] == "undefined") ? "" : array[0];	// [+jot.html.form+]
			var ajax_com = (typeof array[1] == "undefined") ? "" : array[1];	// [+jot.html.comments+]
			var ajax_mod = (typeof array[2] == "undefined") ? "" : array[2];	// [+jot.html.moderate+]
			var ajax_navi = (typeof array[3] == "undefined") ? "" : array[3];	// [+jot.html.navigation+]
			var ajax_sub = (typeof array[4] == "undefined") ? "" : array[4];	// [+jot.html.subscribe+]
			
			var tmp = ajax_frm + ajax_sub + ajax_mod + ajax_navi + ajax_com + ajax_navi;
			var tmp =  tmp.replace("|!|~|!|", "");
		
			if(document.getElementById("jot-loading") != null)	// hide loading
			{
				document.getElementById("jot-loading").innerHTML = "";
				document.getElementById("jot-loading").style.display = "none";
				document.getElementById("jot-loading").removeAttribute("id");
			}
			
			if(placeholders == 1)	// &placeholders is on and data must replace with placeholders
			{
				if(action == "edit")
				{
					for( var i = 0 ; i < ajax_jot_container.length ; i++ )
					{
						var elem = ajax_jot_container[i];	// is an Array
						for( var j = 0 ; j < elem.length ; j++ )
							document.getElementById(elem[j]).innerHTML = "";
					}
					
					document.getElementById(ajax_jot_load_container).innerHTML += '<div id="jot-editing">' + array[0] + '</div>';
				}
				
				if(action != "edit")
				{		
					for( var i = 0 ; i < ajax_jot_container.length ; i++ )
					{
						if( action == "navigation" )
							if( i==0 || i==2 || i==4 )
								continue;
						
						if( action == "publish" || action == "unpublish" || action == "delete" || action == "moderate")
							if( i==0 || i==4 )
								continue;
						
						if( action == "subscribe" )
							if( i==0 || i==1 || i==2 || i==3 )
								continue;					
						
						var elem = ajax_jot_container[i];	// is an Array
						for( var j = 0 ; j < elem.length ; j++ )
							document.getElementById(elem[j]).innerHTML = array[i].replace("|!|~|!|", "");
					}
					
					if(action == "cancel")
					{	// eliminate editing element
						document.getElementById("jot-editing").innerHTML = "";
						document.getElementById("jot-editing").style.display = "none";
						document.getElementById("jot-editing").removeAttribute("id");
					}
				}
			}
			
			if(output == 1)
			{
				if(placeholders == 1)
				{
					if(action == "edit")
						document.getElementById(ajax_jot_load_container).innerHTML += '<div id="jot-editing">' +  tmp + '</div>';
					else
						document.getElementById(ajax_jot_load_container).innerHTML +=  tmp;
				}
				else
				{
					if(action == "edit")
						document.getElementById(ajax_jot_load_container).innerHTML = '<div id="jot-editing">' + tmp + '</div>';
					else
						document.getElementById(ajax_jot_load_container).innerHTML = tmp;
				}
			}
		}
	}
	xmlHttp.send(null);
}




// Ajax object request
function ajaxRequest(){
	try
	{
		var xmlhttp = new XMLHttpRequest();
	}
	catch(err1)
	{
		var ieXmlHttpVersions = new Array();
		ieXmlHttpVersions[ieXmlHttpVersions.length] = "MSXML2.XMLHttp.7.0";
		ieXmlHttpVersions[ieXmlHttpVersions.length] = "MSXML2.XMLHttp.6.0";
		ieXmlHttpVersions[ieXmlHttpVersions.length] = "MSXML2.XMLHttp.5.0";
		ieXmlHttpVersions[ieXmlHttpVersions.length] = "MSXML2.XMLHttp.4.0";
		ieXmlHttpVersions[ieXmlHttpVersions.length] = "MSXML2.XMLHttp.3.0";
		ieXmlHttpVersions[ieXmlHttpVersions.length] = "MSXML2.XMLHttp";
		ieXmlHttpVersions[ieXmlHttpVersions.length] = "Microsoft.XMLHttp";
		
		var i;
		for (i=0; i < ieXmlHttpVersions.length; i++)
		{
			try
			{
				var xmlhttp = new ActiveXObject(ieXmlHttpVersions[i]);
				break;
			}
			catch (err2)
			{
				return false;
			}
		}
	}
	
	return xmlhttp;
}
