//js for Mozilla Firefox

//OK
//to get substring from a given string
function SubString(str, start, len)
/***
        IN: str - the string we are LEFTing
            start - our string's starting position (0 based!!)
            len - how many characters from start we want to get

        RETVAL: The substring from start to start+len
***/
{
    // Make sure start and len are within proper bounds
    if (start < 0 || len < 0) return "";

    var iEnd, iLen = String(str).length;
    if (start + len > iLen)
            iEnd = iLen;
    else
            iEnd = start + len;

    return String(str).substring(start,iEnd);
}   

//OK
//To trim strings
function Trim(sString)
{
	while (sString.substring(0,1) == ' ')
	{
	sString = sString.substring(1, sString.length);
	}
	while (sString.substring(sString.length-1, sString.length) == ' ')
	{
	sString = sString.substring(0,sString.length-1);
	}
	return sString;
}

//OK
//To make XMLHttpRequest
function AjaxCallback(URL)
{
    var http_request = false; //XMLHttpRequest object

    if (window.XMLHttpRequest) { // Mozilla, Opera, Safari,...
        http_request = new XMLHttpRequest();
        if (http_request.overrideMimeType) {
            http_request.overrideMimeType('text/xml');
            // See note below about this line
        }
    }
	if (!http_request) {
        //alert('Giving up :( Cannot create an XMLHTTP instance');
        return false;
    }
    http_request.onreadystatechange = function() { 
        alertContents(httpRequest); 
    }
    http_request.open('POST', URL, false);
    http_request.send(null);
    var resultSet = http_request.responseText;
    return resultSet;
}

//OK
//entry point into Ajax calls:
//will prepare for long query strings etc
function CallAjax(URL, QString)
{
	var i = 0;
	var Batches = 0;
	var BatchNo = 0;
	var FinalAjaxResult = '';
	var AjaxResultStatus;
	var BQString = '';

	if(QString.length > 1900)
	{
		Batches = parseInt(QString.length)/parseInt(1600);
		Batches = Math.ceil(Batches);
		//alert(Batches);
		var sI,eI,Len;
		var PartQString='';
		//"Args=Action:CHECKAJAX#CurItems:" + CurItems;
		sI = 0;
		eI = 0;
		Len = parseInt(1600);
		//alert(Batches);
		for(i=0;i<Batches;i++)
		{ 
			sI = eI;
			eI = parseInt(sI + Len);
			PartQString = SubString(QString, sI,Len);
			//alert(PartQString);
			eI += 1;
			PartQString = "PartAjaxArgs=" + PartQString;
			//alert(PartQString);
			BQString = "Batches=" + Batches + "&BatchNo=" + parseInt(i + 1) + "&" + PartQString;
			//alert(BQString);
			var AjaxResult1 = AjaxCallback(URL + "?" + BQString);		
			//we only need the return string
			//that is sent from server the last time:
			var arr1,arr2;
			arr1= AjaxResult1.split("~");
			arr2 = arr1[0].split("@#");
			AjaxResultStatus = arr2[0];
			FinalAjaxResult = arr2[1];
		}
	}
	else
	{
		QString = "AjaxArgs=" + QString;
		//alert(QString);
		//var AjaxResult1 = AjaxCallback("Common/CommonXMLHttpRequestHandler.aspx?" + QString);		
		//alert(URL);
		var AjaxResult1 = AjaxCallback(URL + "?" + QString);		
		//alert(AjaxResult1);
		var arr1,arr2;
		arr1= AjaxResult1.split("~");
		arr2 = arr1[0].split("@#");
		AjaxResultStatus =  arr2[0];
		FinalAjaxResult= arr2[1];
	}
	if(AjaxResultStatus == "Success")
		return FinalAjaxResult;
	else
	{
		alert("Some errors occured.");
		//clear the error and proceed
		return false;
	}
}

//OK
//keypress on the document
//to initiate SearchInSite
function OnEnter()
{
	var txtSearchKeyWords = document.getElementById("txtSearchKeyWords");
	var strKeyWords = txtSearchKeyWords.value;	
	//alert(strKeyWords);	
	if(strKeyWords == '')
		return;
	var  key_enter= 0; // 13 = Enter
	//alert(event.keyCode);
	//if (key_enter==event.keyCode)
	//{
		//event.keyCode=0;
		SearchInSite();
		return false;
	//}
}

//OK
//To support Searching inside the 
//site:
//1. News 
//2. Articles
function SearchInSite()
{  
	var txtSearchKeyWords = document.getElementById("txtSearchKeyWords");
	var strKeyWords = txtSearchKeyWords.value;
	var Valid = Validate(txtSearchKeyWords,strKeyWords,"","Search Field");
	if(Valid == false)
		return;
	strKeyWords = txtSearchKeyWords.value;
	//alert(strKeyWords);
	var URL = HomeDomainBaseURL();   //"Action:CHECKAJAX#CurItems:" + CurItems;		
	//alert(URL);
	URL = URL + "/Common/CommonXMLHttpRequestHandler.aspx"
	var RetStr = CallAjax(URL, "Action:UPDATE_CUR_SEARCH_KEYWORDS#CurSearchKeywords:" + strKeyWords);		
	//alert(RetStr);
	//now break it into key/value pairs and 
	//use it as required
	var arr1,arr2;
	arr1= RetStr.split("@##");

	/*var rbNews = document.getElementById("rbNews");
	var rbArticles = document.getElementById("rbArticles");
	var NA = '';
	if(rbNews.checked)
		NA = "N";
	if(rbArticles.checked)
		NA = "A"; */
	//window.event.cancelBubble = true;//stop the event being passed to higher level
	//window.event.returnValue = false;
	window.location.href = HomeDomainBaseURL() + "/Search/SearchResults.aspx?strKeyWords=" + strKeyWords;
}

//OK
//To get the Base URL of 
//the CURRENT(MAIL/ACCOUNTS ETC) DOMAIN
//without the last "/"
function DomainBaseURL()
{
	var str = document.location.href; 
	var arr1 = str.split("//");
	var arr2 = arr1[1].split("/");
	var DomainBaseURL = "";
	var Protocol = document.location.protocol;
	var PathName = document.location.pathname;
	arr1 = PathName.split("/");
	var Host = document.location.host;
	if(Host == 'localhost')
	{
		DomainBaseURL = Protocol + "//" + Host + "/" + arr1[1]; 
	}
	else
		DomainBaseURL = Protocol + "//" + Host; 
	//alert(DomainBaseURL);
	return DomainBaseURL;
}

//OK
//To get the Base URL of 
//the HOME DOMAIN
//without the last "/"
function HomeDomainBaseURL()
{
	var URL = DomainBaseURL() + "/Common/CommonXMLHttpRequestHandler.aspx"
	var RetStr = CallAjax(URL, "Action:GETHOMEDOMAINBASEURL");		
	//alert(RetStr);
	return RetStr;
}

//OK
//Web page validation functions
function Validate(ctl, val, Type, FieldName, Optional)
{
	//alert('ctl=' + ctl + 'val=' + val + 'Type=' +  Type + 'FieldName=' + FieldName);
	var _Type='';

	//check for empty values
	//only if it is not optional

	if(Optional == "O")
	{
		var str = Trim(val);
		if(str=="")
		{
			return true;
		}
	}
	else
	{			
		if(Trim(val) == '')
		{
			alert(FieldName + " is empty.");
			ctl.focus();
			return false;
		}
	}	
	
	//check for html tags
	var sIndex, eIndex,NoOfTags;
	var arr;
	var TempVal,TempBeforeVal,TempRemainingVal,FinalVal;
	
	TempVal = val;
	sIndex = TempVal.indexOf("<");
	while(sIndex != -1)
	{
		eIndex = TempVal.indexOf(">");
		if(eIndex == -1)
		{}
		else
		{
			TempBeforeVal = '';
			for(var i = 0; i < sIndex; i++)
			{
				var cChar = TempVal.charAt(i);
				TempBeforeVal += cChar;
			}
			//alert(TempBeforeVal);			
			//NoOfTags += 1;
			TempRemainingVal = '';
			for(var i = eIndex + 1 ; i < TempVal.length; i++)
			{
				var cChar = TempVal.charAt(i);
				TempRemainingVal += cChar;
			}	
			//alert(TempRemainingVal);	
			TempVal = TempBeforeVal + TempRemainingVal;
			//alert(TempVal);			
			sIndex = TempVal.indexOf("<");
			val = TempVal;
			//alert("replacing");
			ctl.value = val;
		}
	}

	var str1 = Type.split("&");	//AN&MinL|3&MaxL|10
	//rules:
	//N=Numeric
	//AN=Alpha Numeric
	//N*=Numeric or * (etc)
	//A=Alphabets
	
	//alert("Val: " + Type + " Len: " + str1.length);
	for(var j=0;j < str1.length;j++)
	{
		var _Type = str1[j];  
		//checks if the given val is numeric
		if(_Type == 'N')
		{ 
			var StoreReg = /^([0-9]+)$/
			var isvalid=StoreReg.test(val);
			//alert(isvalid);
			if(isvalid==true)
			{
			}
			else
			{
				alert(FieldName + " should be Numeric.");
				ctl.select();
				ctl.focus();
				return false;
			} 
		}
		
		//checks if the given val is Numeric or '*' 
		if(_Type == 'N*')
		{
			var StoreReg=/^(^[0-9]+$)|(^([*]{1})$)+$/
			if (StoreReg.test(val))
			{
			}
			else
			{
				alert(FieldName + " should be Numeric or *.");
				ctl.select();
				ctl.focus();
				return false;
			}
		}

		//checks if the given val is Alphabats  
		if(_Type == 'A')
		{
			var StoreReg=/^([a-z]+)$/i
			if (StoreReg.test(val))
			{
			}
			else
			{
				alert(FieldName + " should be Alphabats.");
				ctl.select();
				ctl.focus();
				return false;
			}
		}	
				
		//check if Alpha numeric for Alert Names (Don't Allow character "'") 
		if(_Type == 'ANA')
		{	
			//var StoreReg=/^([\w\s\D]*[']+[\w\s\D]*)+$/ 
			if (StoreReg.test(val))
			{
				alert(FieldName + " should not contain character (') and not to End with Space");
				ctl.select();
				ctl.focus();
				return false;
			}
			else
			{
			}
		}

		//check if Alpha numeric 
		if(_Type == 'ANU')
		{	
			var StoreReg=/^([a-z0-9]+)$/i   
			//alert(StoreReg.test(val));
			if (StoreReg.test(val))
			{	
			}
			else
			{	
				alert(FieldName + " should contain only alphabats or numbers");
				ctl.select();
				ctl.focus();
				return false;			
			}
		}

		//check for valid User Name
		
		if(_Type == 'USERNAME')
		{	
			var StoreReg=/^([a-z0-9_]+)$/i   
			//alert(StoreReg.test(val));
			if (StoreReg.test(val))
			{	
			}
			else
			{	
				alert(FieldName + " should contain only alphabats or numbers");
				ctl.select();
				ctl.focus();
				return false;			
			}
		}

		//check for valid filename pattern
		if(_Type == 'FILENAME')
		{
			var StoreReg = /^([a-zA-Z0-9_\-\.\!\,\?\s]+)$/i
			//alert(StoreReg.test(val));
			if (StoreReg.test(val))
			{	
			}
			else
			{	
				alert(FieldName + " contains invalid characters.");
				ctl.select();
				ctl.focus();
				return false;			
			}		
		}		

		//check if EmailID

		if(_Type == 'EMAIL')
		{	
			var StoreReg = /([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})/
			//alert(StoreReg.test(val));
			if (StoreReg.test(val))
			{	
			}
			else
			{	
				alert(FieldName + " is not a valid EmailID.");
				ctl.select();
				ctl.focus();
				return false;			
			}
		}		
		
		//check if Quotes are present '/' in val'
		if(_Type == 'ANC')
		{
			//var StoreReg=/^[a-z0-9_\,]+$/i   
			var StoreReg=/^[a-z0-9_]+[\,]?[a-z0-9_]+([a-z0-9_]*[\,]?[a-z0-9_]+)*$/i
			//alert(StoreReg.test(val));
			if (StoreReg.test(val))
			{	
			}
			else
			{
				alert(FieldName + " should contain only alphabats,numbers,comma and not multiple commas and should not end with comma");
				ctl.select();
				ctl.focus();
				return false;						
			}
		}	
		
		//Checks Maximum/Minimum length
		var str3 = _Type.split("|");
		var str4 = str3[0];
		var str5 = str3[1];
	
		//Checks Maximum length to be less than some cutoff
		if(str4 == 'MaxL')
		{	
			var ValidLength = parseInt(str5);
			if(val.length > ValidLength)
			{
				alert(FieldName + " cannot be more than " + ValidLength + " characters.");
				ctl.select();
				ctl.focus();
				return false;
			}
		}
		//Checks Minimum length to be more than some cutoff
		if(str4 == 'MinL')
		{
			var ValidLength = parseInt(str5);
			if(val.length < ValidLength)
			{
				alert(FieldName + " cannot be less than " + ValidLength + " characters.");
				ctl.select();
				ctl.focus();
				return false;
			}
		}
		
		//Checks Maximum val to be less than some cutoff
		if(str4 == 'MaxVal')
		{	
			var ValidLength = parseInt(str5);
			if(val > ValidLength)
			{
				alert(FieldName + " cannot be more than " + ValidLength + ".");
				ctl.select();
				ctl.focus();
				return false;
			}
		}		
		
		//Checks Minimum val to be more than some cutoff
		if(str4 == 'MinVal')
		{
			var ValidLength = parseInt(str5);
			if(val < ValidLength)
			{
				alert(FieldName + " cannot be less than " + ValidLength + ".");
				ctl.select();
				ctl.focus();
				return false;
			}
		}
		
		//check if val is Alpha 
		if(_Type == 'ANHP')
		{
			var StoreReg=/^(([a-z0-9]+)\s?([a-z0-9]+))$/i
			//alert(StoreReg.test(val));
			if (StoreReg.test(val))
			{
			}
			else
			{
				alert(FieldName + " should not contain Special characters");
				ctl.select();
				ctl.focus();
				return false;
			}
		}								
	}
	return true;
}

//OK
//To calculate and reset the 
//height of the document body, i.e. Container table
//when some page is loaded into the iframe
//after the page is written from the server
function CalcHeight()
{	
	var the_height=document.getElementById('ifrm').contentWindow.document.body.scrollHeight;//find the height of the internal page
	document.getElementById('ifrm').style.height=the_height; //change the height of the iframe
	var tblContainer = document.getElementById('tblContainer');
	//alert(tblContainer);
	if(tblContainer != null)
		tblContainer.style.height=the_height  + parseInt(30);
}

function StartSearch()
{
    txtSearchKeyWords = document.getElementById("txtSearchKeyWords");
    var strDomainBaseURL = DomainBaseURL();
    //alert(txtSearchKeyWords.value);
    window.location.href = strDomainBaseURL + "/Search/SearchResults.aspx?strKeyWords=" + txtSearchKeyWords.value;
}

//to Mark the selected text in a textarea as link
function MarkSelTextLink(ta)
{ 
	var ta = document.getElementById(ta);
	var $before, $after, $selection;
	$before= ta.value.substring(0, ta.selectionStart)
	$selection = ta.value.substring(ta.selectionStart, ta.selectionEnd)
	if ($selection == '')
		return false;
	$after = ta.value.substring(ta.selectionEnd, ta.value.length);
	ta.value= $before + "[link]" + $selection + "[/link]" + $after;
}

//To Initiate some JS activity on page load
//Include this fn in body: onload="init();"
//Right not it does:
//1. captures mousedown on document
//2. 
//NOTE: For making use of these fns, use the 
//variables mouseX, mouseY etc as needed
//in the JS fns on the page

//called on page load
function init() 
{
	document.onclick = onmousedown;
} 

//mouse donw points
function onmousedown(e) 
{
	mouseX=e.clientX; mouseY=e.clientY;
	//status="x= "+e.clientX+", y= "+e.clientY;
}