/* 
(c) Ehsan Darrudi, 2005-2010
Iran National Science Foundation
www.insf.org

Some of the codes have been borrowed from tutorial websites. 
In this case the name of the original author and/or the 
copyright notice proceed the code. */

// General Vars & Functions ------------------------------------------------------------

var b = navigator.userAgent.toLowerCase() ;
var msie  = (b.indexOf('msie')>-1)  ? true : false ;
var gecko = (b.indexOf('gecko')>-1) ? true : false ;
var opera = (b.indexOf('opera')>-1) ? true : false ;

function CorrectYa(fld, e) 
{
	if (!msie && !gecko)
		return true;
	
	if (msie)
	{		
		k = window.event.keyCode;
		
		if (k == 0 || k == 13 || k == 27 || k == 8) 
			return true;
		
		if (k == 1740 || k == 1609)
		{
			window.event.keyCode = 1610;	// Convert Farsi YEH to Arabic one
		}
		else if (k == 1705) 
		{
			window.event.keyCode = 1603;	// Convert Farsi KAF to Arabic one
		}
		else if (k >= 48 && k <= 57) 
		{
			window.event.keyCode = (k - 48) + 1776;	// farsi unicode numbers
		}

	}
	else if (gecko)
	{
		k = e.charCode;
		
		if (k == 0 || k == 13 || k == 27 || k == 8) 
			return;
		
		if (k == 1740 || k == 1609)
		{
			str = 'ي';
		}
		else if (k == 1705)
		{
			str = 'ك';
		}
		else if (k >= 48 && k <= 57)
		{
			str = String.fromCharCode(k - 48 + 1776);
		}
		else
			return true;
	
		insertAtCursor(fld, str)
		
		if (e.preventDefault) 
			e.preventDefault();
			
		e.returnValue = false;
	}
}

function setSelectionRange (input, selectionStart, selectionEnd) 
{
	input.focus()
	input.setSelectionRange(selectionStart, selectionEnd)
}

function insertAtCursor(fld, str)
{
	var nScrollTop = fld.scrollTop;
	var nScrollLeft = fld.scrollLeft;
	var nScrollWidth = fld.scrollWidth;
	var selectionStart = fld.selectionStart;
	var selectionEnd = fld.selectionEnd;
	
	fld.value = fld.value.substring(0, selectionStart) + str + fld.value.substring(selectionEnd);
	
	setSelectionRange(fld, selectionStart + str.length, selectionStart + str.length);

	var nW = fld.scrollWidth - nScrollWidth;
	
	if (fld.scrollTop == 0)
		fld.scrollTop = nScrollTop;
}

function Group1000s(field) 
{ 	
	val = field.value;
	
	while (val.indexOf(" ") != -1)
		val = val.replace(" ", ""); 
		
	while (val.indexOf(",") != -1)
		val = val.replace(",", ""); 

	len = val.length;
	out = "";
	
	if (len > 3)
	{
		res = len % 3;
		
		if (res > 0)
			out = val.substr(0, res) + ",";
					
		for (i = res; i < len; i += 3)
		{
			out = out + val.substr(i, 3);
			if (i + 3 < len)
				out += ",";
		}
		
		val = out;
	}
		
	field.value = val;
	
	return true;
} 

function OnlyNumber(fld, e)
{	
	if (!msie && !gecko)
		return true;
	
	if (msie)
	{		
		k = window.event.keyCode;
		
		if (k == 0 || k == 13 || k == 27 || k == 8) 
			return true;
		
		if (k >= 48 && k <= 57) 
		{
			return true;
		}	
	}
	else if (gecko)
	{		
		k = e.which;
		
		if (k == 0 || k == 13 || k == 27 || k == 8) 
			return true;
		
		if (k >= 48 && k <= 57)
		{
			return true;
		}
	}
		
	alert('اين فيلد فقط ميتواند شامل اعداد باشد. لطفا فقط عدد وارد نماييد');
	return false;
}

function OnlyNumberUnicode(fld, e)
{	
	if (!msie && !gecko)
		return true;
	
	if (msie)
	{		
		k = window.event.keyCode;
		
		if (k == 0 || k == 13 || k == 27 || k == 8) 
			return true;
		
		if (k >= 48 && k <= 57) 
		{
			window.event.keyCode = (k - 48) + 1776;	// farsi unicode numbers
			return true;
		}	
	}
	else if (gecko)
	{		
		k = e.which;
		
		if (k == 0 || k == 13 || k == 27 || k == 8) 
			return true;
		
		if (k >= 48 && k <= 57)
		{
			str = String.fromCharCode(k - 48 + 1776);
		
			insertAtCursor(fld, str)
			
			if (e.preventDefault) 
				e.preventDefault();
				
			e.returnValue = false;
			
			return false;
		}
	}
		
	alert('اين فيلد فقط ميتواند شامل اعداد باشد. لطفا فقط عدد وارد نماييد');
	return false;
}

function OnlyTarikhUnicode(fld, e)
{	
	if (!msie && !gecko)
		return true;
	
	if (msie)
	{		
		k = window.event.keyCode;
		
		if (k == 0 || k == 13 || k == 27 || k == 8 || k == 47)
			return true;
		
		if (k >= 48 && k <= 57) 
		{
			window.event.keyCode = (k - 48) + 1776;	// farsi unicode numbers
			return true;
		}	
	}
	else if (gecko)
	{		
		k = e.which;
		
		if (k == 0 || k == 13 || k == 27 || k == 8 || k == 47) 
			return true;
		
		if (k >= 48 && k <= 57)
		{
			str = String.fromCharCode(k - 48 + 1776);
		
			insertAtCursor(fld, str)
			
			if (e.preventDefault) 
				e.preventDefault();
				
			e.returnValue = false;
			
			return false;
		}
	}
		
	alert('اين فيلد فقط مي توانيد کاراکتر هاي تاريخ را بپذيرد');
	return false;
}

function OnlyNumberEn()
{
	if (window.event.keyCode >= 48 && window.event.keyCode <= 57)
	{
		return true;
	}
	else if (window.event.keyCode == 46)
	{
		return true;
	}
	else if (window.event.keyCode == 13)
	{
		return true;
	}
		
	alert('This field may only contain digits! Please enter only numbers.');	
	
	window.event.keyCode = 0;
		
	return false;
}

function IsEmpty(Text)
{
	var i;
	for(i = 0; i < Text.length; i++)
		if(Text.charCodeAt(i) != 32)
			return false;
	return true;
}

function IsEmail(Str)
{
	Str = Str.toLowerCase();
	
	var Reg = /^[\w-\.]+\@[\w\.-]+\.[a-z]{2,4}$/
	return Reg.test(Str)
}

function Popup(title, msg)
{  
  var width = 300;
  var height = 300;  
  
  var left = (screen.width/2) - width/2;
  var top = (screen.height/2) - height/2;

  var styleStr = 'toolbar=no,location=no,directories=no,scrollbars=yes,status=no,menubar=no,copyhistory=yes,width='+width+',height='+height+',left='+left+',top='+top+',screenX='+left+',screenY='+top;

  var msgWindow = window.open("","msgWindow", styleStr);

  var head = '<head><meta http-equiv="Content-Type" content="text/html; charset=windows-1256"><title>'+title+'</title><link title="formal" href="/css/insf.css" type="text/css" rel="stylesheet"></head>';

  var body = '<body background="images/back-transparent.jpg">' + msg + '<br></body>';

  msgWindow.document.write(head + body);
  
  return false;

}

function myYesNoConfirm(str)
{
	return confirm(str);
}

/*@cc_on @*/
/*@if (@_win32 && @_jscript_version>=5)

function vbYesNoDialog(str)
{
    execScript('n = msgbox("'+str+'","4132")', "vbscript");
    return(n == 6);
}

myYesNoConfirm = vbYesNoDialog;

@end @*/

function ShowReadOnlyMsg()
{
	alert('شما بصورت «فقط خواندني» وارد سايت شده ايد. لذا قادر نيستيد تغييري در اطلاعات ايجاد نماييد'); 
	return false;
}

function PopupSMS(sms)
{  
  var width = 300;
  var height = 250;  
  
  var left = (screen.width/2) - width/2;
  var top = (screen.height/2) - height/2;

  var styleStr = 'toolbar=no,location=no,directories=no,scrollbars=yes,status=no,menubar=no,copyhistory=yes,width='+width+',height='+height+',left='+left+',top='+top+',screenX='+left+',screenY='+top;

  var msgWindow = window.open("","msgWindow", styleStr);

  var head = '<head><title>متن پيامک</title></head>';

  var body = '<body background="images/back-transparent.jpg"><p align=left dir=ltr style="font-size:10pt;"><font face=Verdana>' + sms + '</p></body>';

  msgWindow.document.write(head + body);
  
  return false;

}

// banded table rows ------------------------------------------------------------------------

lastSelectedObject = null;

function MouseIn(obj, color) 
{	
	if (obj.style.backgroundColor == "" || obj.style.backgroundColor == "white" || obj.style.backgroundColor == "#FFFFFF")
	{
		obj.style.backgroundColor = color;
	}
}

function MouseOut(obj, color) 
{
	objColor = obj.style.backgroundColor;
	
	if (objColor.indexOf("rgb") != -1)
		objColor = rgbConvert(objColor);
		
//	alert();
	if (objColor == color)
 	   obj.style.backgroundColor= 'white';
}

function TableRowClick(obj, color)
{
	objColor = obj.style.backgroundColor;
	
	if (objColor.indexOf("rgb") != -1)
		objColor = rgbConvert(objColor);
	
	//alert(objColor + " --- " + color);
	
	if (objColor == color)
	{
		obj.style.backgroundColor = 'white';
		
		if (lastSelectedObject != null)
			lastSelectedObject.style.backgroundColor = 'white';
	
		lastSelectedObject = null;
		
		return;
	}
	
	obj.style.backgroundColor = color;
	
	if (lastSelectedObject != null)
		lastSelectedObject.style.backgroundColor = 'white';
		
	if (lastSelectedObject == obj)
		lastSelectedObject = null;
	else
		lastSelectedObject = obj;
}

function rgbConvert(str) 
{   
	str = str.replace(/rgb\(|\)/g, "").split(",");   
	str[0] = parseInt(str[0], 10).toString(16).toLowerCase();   
	str[1] = parseInt(str[1], 10).toString(16).toLowerCase();   
	str[2] = parseInt(str[2], 10).toString(16).toLowerCase();   
	str[0] = (str[0].length == 1) ? '0' + str[0] : str[0];   
	str[1] = (str[1].length == 1) ? '0' + str[1] : str[1];   
	str[2] = (str[2].length == 1) ? '0' + str[2] : str[2];   
	
	return ('#' + str.join(""));
}

// +/- font size -----------------------------------------------------------------------

function getElementsByClassName(needle) 
{ 
   var my_array = document.getElementsByTagName("*"); 
   var retvalue = new Array(); 
   var i; 
   var j; 

   for (i=0,j=0;i<my_array.length;i++) 
   { 
      var c = " " + my_array[i].className + " "; 
      if (c.indexOf(" " + needle + " ") != -1) retvalue[j++] = my_array[i]; 
   } 
   
   return retvalue; 
} 

var pageFontSize = 'normal'; 
var fontStyles =['text', 'zar', 'textbig', 'textOnvan', 'textc', 'in', 'Title', 'TitleBig', 'Titr', 'TitrMini', 'TitrMinor', 'EnInFa', 'FVF', 'FVE', 'uf', 'ue'];

function toggleFontClass() 
{ 
	for (i = 0; i < fontStyles.length; i++)
	{
		if (pageFontSize == 'normal')
		{
			currentStyle = fontStyles[i];
			newStyle = fontStyles[i] + 'm';
		}
		else
		{
			currentStyle = fontStyles[i] + 'm';
			newStyle = fontStyles[i];
		}
		
		elements = getElementsByClassName(currentStyle) ;
	   
		for(j = 0; j < elements.length; j++) 
		{ 
			elements[j].className = newStyle; 
		}
	}
   
	if (pageFontSize == 'normal')
		pageFontSize = 'big';
	else
		pageFontSize = 'normal';	
}

//  function utilities for calculating files' size and appending it to link titles
// the entry point is in rainbow.js. it needs ajax.js and AjaxCalls.php to function correctly
function appendFileInfo(obj, info)
{
	var info = String(info);
	fields = info.split(',');
	
	size = fields[0];
	
	if (size != '')
	{
		size = makeHumanReadableSize(size);
	}
	
	// for english pages we priovide a simple tooltip
	var self = String(getCurrentDocument());
	if (self.match(/En.php$/))
	{
		obj.title = 'File Size: ' + size;
		return;
	}
	
	// to get around a stupid bug in firefox 6.0.x
	browser = navigator.userAgent.toLowerCase();
	if (browser.match(/firefox\/6.0/))
	{
		obj.title = 'حجم فايل: ' + size;
		return;
	}
	
	// ----------------
	
	datef = fields[1];
	
	type = '';
	
	href = String(obj.href);
	pos = href.lastIndexOf(".");
	if (pos != -1)
	{
		type = href.substr(pos + 1);
		type_brief = href.substr(pos + 1, 3);
		
		if (type_brief.match(/(doc|docx|xls|xlsx|pdf|jpg|png|gif|ttf|txt|ppt|pps|pptx|mdb|jpeg|bmp|avi|wmv|mov|divx|mp4|mp3|wma|m4a|mpa|wav|ogg|mid|zip|rar|lha)/i))
		{
			// known file types
		}
		else
		{
			type_brief = 'file';
		}
		
		img = '<img src="/images/fileicons16/' + type_brief + '.png" width="16" height="16" align="absmiddle" />';
	
	tooltip = "<div id='ToolTipTextWrap'>« مشخصات فايل »</div><hr size='1' id='ToolTipLine'><p>حجم فايل: <b>" + size + "</b> <br>نوع فايل: <b>" + type + ' ' + img + "</b><br>بارگذاري: <b>" + datef + "</b> <br></p>";
	}
	
	var url = String(obj.href);
	if (url.match(/\/(peyvast|resume|davari|form|nezarat|tafahomname|library|gozaresh|letter|hokm)\//i))
	{
		tooltip += "<p>توجه:</p><p>در اين صفحه <span style='color: red;'>نبايد </span> براي دانلود فايل از گزينه Save Target As استفاده شود! براي دانلود فايل فقط روي لينک کليک نماييد. </p><p>چنانچه بعد از کليک کردن روي لينک، برنامه  Download Manager شما باز شد آن را کنسل نماييد تا صفحه به صورت عادي باز شود.</p><p>در غير اين صورت فقط يک فايل HTML حاوي پيغام خطاي «لينک داغ ممنوع است» دريافت خواهيد کرد.</p>";
	}
	
	obj.setAttribute("tooltiptext", tooltip);
	
	obj.removeAttribute("title");
	obj.onmouseover = function gomouseover() {ddrivetip(obj.getAttribute("tooltiptext"))};
	obj.onmouseout = function gomouseout() {hideddrivetip();};
}

function makeHumanReadableSize(size)
{
	var byte = 'بايت';
	var kbyte = 'کيلوبايت';
	var mbyte = 'مگابايت';
	
	var self = String(getCurrentDocument());
	if (self.match(/En.php$/))
	{
		byte = 'Bytes';
		kbyte = 'KB';
		mbyte = 'MB';
	}
	
	if (size < 1024)
		return size + ' ' + byte;
	else if (size < 1048576)
	{
		size = size / 1024;
		return size.toFixed() + ' ' + kbyte;
	}
	else if (size < 1073741824)
	{
		size = size / (1024*1024);
		return size.toFixed(2) + ' ' + mbyte;
	}
	else
	{
		size = size / (1024*1024*1024);
		return size.toFixed(2) + ' گيگابايت';
	}
}

function getCurrentDocument() 
{
	var file_name = document.location.href;
	
	var end = (file_name.indexOf("?") == -1) ? file_name.length : file_name.indexOf("?");
	
	return file_name.substring(file_name.lastIndexOf("/")+1, end);
}

//-----------------------

function isFarsiString(text)
{
	if (text == '')
		return false;
	
	text = String(text);
	
	if (text.indexOf("&#17") != -1) return true; // unicode farsi numbers
	if (text.indexOf("&#16") != -1) return true; // unicode arabic numbers
	
	farsi = String("ابضصثقفغعهخحجچشسيلتنمکگظطزرذدئوپءأإؤژيةآك");
	
	len = farsi.length;
	
	for (i = 0; i < len; i++)
	{
		if (text.indexOf(farsi.charAt(i)) != -1)
			return true;
	}
	
	return false;
}

//--------- enabling :focus selector for IE 6.0 ----------

sfFocus = function() 
{
	var sfEls1 = document.getElementsByTagName("INPUT");
	var sfEls2 = document.getElementsByTagName("TEXTAREA");
	//var sfEls3 = document.getElementsByTagName("SELECT");
	
	changeOnFocus(sfEls1);
	changeOnFocus(sfEls2);
	//changeOnFocus(sfEls3);
}

function changeOnFocus(sfEls)
{
	for (var i=0; i<sfEls.length; i++) 
	{
		sfEls[i].onfocus=function() 
		{
			this.className+=" sffocus";
		}
		
		sfEls[i].onblur=function() 
		{
			this.className=this.className.replace(new RegExp(" sffocus\\b"), "");
		}
	}
}

if (window.attachEvent) window.attachEvent("onload", sfFocus);

function myPaste(obj)
{
	setTimeout(function() 
				{
					obj.value = obj.value.replace(/\u06CC/g, 'ي'); // farsi ye
					obj.value = obj.value.replace(/¬/g, '\u200C'); // &zwnj;
				}, 
				100);
}

function myClose()
{
	window.open('', '_self', ''); 
	window.close();
}

function myCloseWindow(win)
{
	win.open('', '_self', ''); 
	win.close();
}
