/* $Id: forum.js,v 1.10 2009/03/06 02:35:18 sasha@netcomposite.com Exp $ */
var TimerInterval = 500;
var waitForumHTML =
	'<div id="ForumFormLoading">' +
		'<p><img src="/assets/images/icons/ic_loading_processing_gray.gif" width="48" height="48" alt="Please wait" />' +
			'Please wait...' +
		'</p>' +
	'</div>';
var formLoadTarget;
var formSaveHTML;
var formSavedDivId ='';
var uagent = navigator.userAgent.toLowerCase();
var is_safari = ((uagent.indexOf('safari') != -1) || (navigator.vendor == "Apple Computer, Inc."));
var is_opera = (uagent.indexOf('opera') != -1);
var is_webtv = (uagent.indexOf('webtv') != -1);
var is_ie = ((uagent.indexOf('msie') != -1) && (!is_opera) && (!is_safari) && (!is_webtv));
var is_ie4 = ((is_ie) && (uagent.indexOf("msie 4.") != -1));
var is_moz = ((navigator.product == 'Gecko') && (!is_opera) && (!is_webtv) && (!is_safari));
var is_ns = ((uagent.indexOf('compatible') == -1) && (uagent.indexOf('mozilla') != -1) && (!is_opera) && (!is_webtv) && (!is_safari));
var is_ns4 = ((is_ns) && (parseInt(navigator.appVersion) == 4));
var is_kon = (uagent.indexOf('konqueror') != -1);
var is_win = ((uagent.indexOf("win") != -1) || (uagent.indexOf("16bit") !=- 1));
var is_mac = ((uagent.indexOf("mac") != -1) || (navigator.vendor == "Apple Computer, Inc."));
var ua_vers = parseInt(navigator.appVersion);
var upLoadFiles = new Array();

 function forum_confirm_action(question,message, url)
 {
 	if(window.confirm(question) == true)
 	{
 		document.location = url;
 	}
 	else
 	{
 		alert(message);
 	}
	return false;
 }

 function forumFormExpandSwap(sender)
 {
  
  var el = document.getElementById("ForumExtendedOption"); 
  var el2 = document.getElementById("ForumExtendedOptionWrap"); 
  if(sender.className == 'Open')
  {
   el.className = "ExtendedOpen"
   sender.className = 'Close';
   el2.style.display ="block";
  }
  else
  {
   el.className = "ExtendedClosed"
   sender.className = 'Open';
   el2.style.display ="none";
  }
  return false;
 }

function forumGetDestination(parent_type)
{
  var el = document.getElementById('DESTINATION');
  var id = el.value;
  el = document.getElementById('PARENT_NAME');
  el.value = "Please wait...";
  var req=new j2httpRequest_js;
  mode='dst';
  method='GET';
  req.onreadystatechange = function()
  {
   if (req.readyState == 4)
   {
     var result=req.responseJS;
     var el = document.getElementById('DESTINATION');
     el.value = result['id'];
     el = document.getElementById('PARENT_NAME');
     el.value = result['name'];
   }
 }
 req.open(method, '/discussion/load_form.php', true);
 req.send({'mode':mode,'id':id,'parent_type':parent_type});
 return false;
   
}

function forumCloseForm()
{
 if(formSavedDivId == '') return true;
 var dst = document.getElementById(formSavedDivId);
 formSavedDivId = "";
 dst.innerHTML = formSaveHTML;
 return false;
}

function forumLoadForm(target_id,action,parent,quote)
{
        forumCloseForm();
        var value=form_data;
        value['action']=action;
        value['parent']=parent;
        value['quote']=quote;
        dst = document.getElementById(target_id);
        form_load_target = dst;
        formSaveHTML = dst.innerHTML;
        formSavedDivId = target_id;
        dst.innerHTML = waitForumHTML;
        dst.style.display="block"; 
	var req=new j2httpRequest_js;
        mode='uri';
	method='GET';
	req.onreadystatechange = function()
	{
		if (req.readyState == 4)
		{
			var result=req.responseJS;
			if (result['html'])
			{
			  form_load_target.innerHTML=result['html'];
			}
		}
	}
	req.open(method, '/discussion/load_form.php', true);
	req.send({'mode':mode,'value':value});
	return false;
}
function forumCountChars(max,id,dst_id)
{
	var src = document.getElementById(id);
	src.value = src.value.substring(0,max);
        var t = src.value;
        var cl = document.getElementById(dst_id);
        var cleft = max - src.textLength;
        cl.innerHTML = cleft + " characters left";
}

function forumCountTags(max,id,dst_id)
{
	var src = document.getElementById(id);
        var t = src.value;
        var tags = t.split(',');
        var cl = document.getElementById(dst_id);
        var cleft = max - tags.length;
        cl.innerHTML = cleft + " tags left";
}

function wrap_tags(postfieldobj,opentext,closetext,issingle)
{
	var has_closed = false;
	if ( ! issingle )
	{
		issingle = false;
	}
	//----------------------------------------
	// It's IE!
	//----------------------------------------
	if ( (ua_vers >= 4) && is_ie && is_win )
	{
		if ( postfieldobj.isTextEdit )
		{			
			postfieldobj.focus();			
			var sel = document.selection;
			var rng = sel.createRange();
			var stored_range = rng.duplicate();
			stored_range.moveToElementText( postfieldobj );
			stored_range.setEndPoint( 'EndToEnd', rng );

			// Stores start position of text selection
			postfieldobj.selectionStart = stored_range.text.length - rng.text.length;
			// Stores end position of text selection
			postfieldobj.selectionEnd = postfieldobj.selectionStart + rng.text.length;
			rng.colapse;
			if ( (sel.type == "Text" || sel.type == "None") && rng != null)
			{
				if (closetext != "" && rng.text && rng.text.length > 0)
				{
					opentext += rng.text + closetext;
				} else if ( issingle )
				{
					has_closed = true;
				}
				rng.text = rng.text.charAt(rng.text.length - 1) == ' ' ? opentext + ' ' : opentext;
			} else
			{
				postfieldobj.value += opentext;
				has_closed = true;
			}
		} else
		{					
			postfieldobj.value += opentext;
			has_closed = true;
		}
		ie_range_cache = null;
		rng.select();
	}
	//----------------------------------------
	// It's MOZZY!
	//----------------------------------------
	else if ( postfieldobj.selectionEnd )
	{
		var ss = postfieldobj.selectionStart;
		var st = postfieldobj.scrollTop;
		var es = postfieldobj.selectionEnd;
		if (es <= 0)
		{
			es = postfieldobj.textLength;
		}
		var start = (postfieldobj.value).substring(0, ss);
		var middle = (postfieldobj.value).substring(ss, es);
		var end = (postfieldobj.value).substring(es, postfieldobj.textLength);
		//-----------------------------------
		// text range?
		//-----------------------------------
		if ( postfieldobj.selectionEnd - postfieldobj.selectionStart > 0 )
		{
			middle = opentext + middle + closetext;
		} else
		{
			middle = opentext + middle;
			if ( issingle )
			{
				has_closed = true;
			}
		}
		postfieldobj.value = start + middle + end;
		var cpos = ss + (middle.length);
		postfieldobj.selectionStart = cpos;
		postfieldobj.selectionEnd = cpos;
		postfieldobj.scrollTop = st;
	} else
	{
		if ( issingle )
		{
			has_closed = false;
		}
		postfieldobj.value += opentext + ' ' + closetext;
	}
	postfieldobj.focus();	
	return has_closed;
}

function insert_attach_to_textarea(rtewindow,aid)
{
	try {
		rtewindow.focus();
		wrap_tags(rtewindow,"[attachmentid="+aid+"]", "");
		rtewindow.focus();
	} catch (ex) {}
}

function remove_attach_to_textarea(rtewindow,aid)
{
	var s="[attachmentid="+aid+"]";	
	try {
		while (rtewindow.value.indexOf(s)!=-1)
		{
			rtewindow.value=rtewindow.value.replace(s,'');
		}
	} catch (ex) {}
	load_f(document.getElementById('MessageForm'),'unl',aid);
}

function inputDel(fname,message)
{
	okdelete = confirm(message);
	if (okdelete)
	{
		try
		{
			var input = document.getElementById('DESCRIPTION');
			var h = document.getElementById('uploadDelFilesID');
			if (h.value.length)
			{
				h.value = h.value+','+fname;
			} else
			{
				h.value = fname;
			}
			remove_attach_to_textarea(input,fname);
		} catch(ex)
		{
			return false;
		}
	}
	return false;
}

function inputAdd(fname)
{
	try
	{
		var input = document.getElementById('DESCRIPTION');
		if (input != null)
		{
			insert_attach_to_textarea(input,fname);
		}
	} catch(ex)
	{
		return false;
	}
	return false;	
}

function uploadForm()
{
	var input = null;
	if (document.getElementById('iduplFile').value.length>0) input = document.getElementById('iduplFile');
	if (document.getElementById('iduplURL').value.length>0)  input = document.getElementById('iduplURL');
	if (input != null && input.value.length)
	{
		var name = input.value.replace(/^\s*|\s*$/g,"");
		while (name.indexOf('\\')!=-1)
		{
			name = name.replace('\\','/');
		}
		if (name.lastIndexOf('/') != -1)
		{
			name = name.slice(name.lastIndexOf('/')+1);
		}
		for (var i=upLoadFiles.length-1;i>=0;i--)
		{
			if (upLoadFiles[i].name == name)
			{
				return false;
			}
		}
		upLoadFiles[upLoadFiles.length++] = {'name':name,'progress':1};
		addUploadTable(name,1);
		getProgress();
	}
	updateProgress();
	return false;
}

function printUploadFile()
{
	if (upLoadFiles.length)
	{
		for (var i=upLoadFiles.length-1;i>=0;i--)
		{
			addUploadTable(upLoadFiles[i].name,upLoadFiles[i].progress);
		}
	}
}

function searchUploadFile(name,text)
{
	if (text)
	{
		var tbody = text.toLowerCase();
	} else
	{
		var tbody = document.getElementById('tableAttachmentsPostTable').getElementsByTagName("tbody")[0].innerHTML.toLowerCase();
	}
	var sfind = name+'</a>';
	return tbody.indexOf(sfind.toLowerCase()) != -1;
}

function packUploadFile()
{
	var tmpAr = new Array();
	for (var i=0;i<upLoadFiles.length;i++)
	{
		if (!searchUploadFile(upLoadFiles[i].name))
		{
			tmpAr[tmpAr.length++] = upLoadFiles[i];
		}
	}
	upLoadFiles = tmpAr;
}

function addUploadTable(name,progress)
{
	var table = document.getElementById('tableAttachmentsPostTable');
	var tbody = document.getElementById('tableAttachmentsPostTable').getElementsByTagName("tbody")[0];
	if (tbody)
	{
	    var row = document.createElement("tr");
	    var td1 = document.createElement("td");
	    td1.setAttribute('class','File');
	    var a = document.createElement("a");
	    a.setAttribute('name',name);
	    a.appendChild(document.createTextNode(name));
	    td1.appendChild(a);
	    var td2 = document.createElement("td");
    	td2.setAttribute('class','Size');
	    td2.appendChild (document.createTextNode("Uploading..."));
	    var td3 = document.createElement("td");
	    td3.setAttribute('class','Tools');
	  	var span = document.createElement("span");
	 	span.setAttribute("class", "AttachmentUploading");
	 	span.setAttribute("style", 'width: '+progress+'%');
	  	var textNode = document.createTextNode(progress+'%');
	  	span.appendChild(textNode);
	    td3.appendChild (span);
	    row.appendChild(td1);   
	    row.appendChild(td2);
	    row.appendChild(td3);		
		if (table.getElementsByTagName('tr').length > 1)
		{
			tbody.insertBefore(row,table.getElementsByTagName('tr')[1]);
		} else
		{
			tbody.appendChild(row);
		}
   	}
}

function updateProgress()
{
	if (upLoadFiles.length)
	{
		var table = document.getElementById('tableAttachmentsPostTable');
		var trList= table.getElementsByTagName('tr');
		var count = 0;
	 	for (var i=upLoadFiles.length-1;i>=0;i--)
		{
			if (upLoadFiles[i].progress > 75 && upLoadFiles[i].progress < 100)
			{
				upLoadFiles[i].progress += 1;
			} else
			{
				upLoadFiles[i].progress += 2;
			}
			if (upLoadFiles[i].progress > 100) upLoadFiles[i].progress = 1;
			for (var j=0;j<trList.length;j++)
			{
				var tdList = trList[j].getElementsByTagName('td');
				var find = false;
                for (var k=0;k<tdList.length;k++)
				{
					if (k==0) find = searchUploadFile(upLoadFiles[i].name,tdList[k].innerHTML);
					if (find && k==2 && tdList[k].firstChild.nodeName=='SPAN')
					{
						tdList[k].firstChild.setAttribute("style", 'width: '+upLoadFiles[i].progress+'%');
						tdList[k].firstChild.innerHTML = upLoadFiles[i].progress+'%';
						count++;
					}
				}				 
			}
		}
		if (count) window.setTimeout(updateProgress,TimerInterval);
	}
	return false;
}

function getProgress()
{
	load_f(document.getElementById('MessageForm'));
}

function load_f(mode,act,value)
{
	j2httpRequest_js.query(
		'/discussion/includes/attachments.php',
		{'mode':mode,'act':act,'fname':value},
		function(result,errors)
		{
//			if (errors) alert(errors);
			if (result["html"])
			{
				document.getElementById('uploadFilesFileset').innerHTML=result["html"];
				if (result['badName'])
				{
					var tmpAr = new Array();
					for (var i=0;i<upLoadFiles.length;i++)
					{
						if (upLoadFiles[i].name!=result['badName'])
						{
							tmpAr[tmpAr.length++] = upLoadFiles[i];
						}
					}
					upLoadFiles = tmpAr;
				}
				uploadForm();
			}			
		},
		false
	);	
	return false;
}
