//FUNCTION findError()
//DEVELOPED BY :: SUDIPTO LAHIRI
//COPYRIGHT :: EARTH TECHNOLOGY
//THIS FUNCTION IS USED TO DETECT THE ERRORS AND IF ERROR OCCUR IT WILL THROW THE ERROR.

function findError(operationString)
{
	countOpenBrace = calculateBrace(operationString, '(')
	countCloseBrace = calculateBrace(operationString, ')')

	if((operationString.search(/a/i)!=-1) || (operationString.search(/b/i)!=-1) || (operationString.search(/c/i)!=-1) || (operationString.search(/d/i)!=-1) || (operationString.search(/e/i)!=-1) || (operationString.search(/f/i)!=-1) || (operationString.search(/g/i)!=-1) || (operationString.search(/h/i)!=-1) || (operationString.search(/i/i)!=-1) || (operationString.search(/j/i)!=-1) || (operationString.search(/k/i)!=-1) || (operationString.search(/l/i)!=-1) || (operationString.search(/m/i)!=-1) || (operationString.search(/n/i)!=-1) || (operationString.search(/o/i)!=-1) || (operationString.search(/p/i)!=-1) || (operationString.search(/q/i)!=-1) || (operationString.search(/r/i)!=-1) || (operationString.search(/s/i)!=-1) || (operationString.search(/t/i)!=-1) || (operationString.search(/u/i)!=-1) || (operationString.search(/v/i)!=-1) || (operationString.search(/w/i)!=-1) || (operationString.search(/x/i)!=-1) || (operationString.search(/y/i)!=-1) || (operationString.search(/z/i)!=-1) || (operationString.indexOf('!')!=-1) || (operationString.indexOf('@')!=-1) || (operationString.indexOf('#')!=-1) || (operationString.indexOf('%')!=-1) || (operationString.indexOf('&')!=-1) || (operationString.indexOf(':')!=-1) || (operationString.indexOf(',')!=-1) || (operationString.indexOf('?')!=-1) || (operationString.indexOf('{')!=-1) || (operationString.indexOf('}')!=-1) || (operationString.indexOf('[')!=-1) || (operationString.indexOf(']')!=-1) || (operationString.indexOf('=')!=-1) || (operationString.indexOf('~')!=-1) || (operationString.indexOf('`')!=-1) || (operationString.indexOf('$')!=-1) || (operationString.indexOf('_')!=-1))
	{
		return 'Error : Invalid Character!'
	}
	else if(countOpenBrace!=countCloseBrace)
	{
		return 'Error : Missing Open Or Close Bracket'
	}
	else if(findSimultaniousOperator(operationString))
	{
		return 'Error : Simultaneous Operator Is  Present'
	}
	else if(findIsolatedOperator(operationString) || findInvalidOperation(operationString))
	{
		return 'Error : Invalid Operation'
	}
	else
	{
		return 'none'
	}
}

//FUNCTION findError()
//DEVELOPED BY :: SUDIPTO LAHIRI
//COPYRIGHT :: EARTH TECHNOLOGY
//THIS FUNCTION IS USED TO CALCULATE THE NUMBER OF OPEN AND CLOSE BRACE.

function calculateBrace(operationStringCatch, searchString)
{
	var countIndex = 0
	for(var a=0; a<operationStringCatch.length; a++)
	{
		if(operationStringCatch.charAt(a) == searchString)
		{
			countIndex = countIndex + 1
		}
	}
	return countIndex
}

//FUNCTION findError()
//DEVELOPED BY :: SUDIPTO LAHIRI
//COPYRIGHT :: EARTH TECHNOLOGY
//THIS FUNCTION IS USED TO DETECT WHETHER THE SIMULTANIOUS OPERATOR IS PRESENT OR NOT.

function findSimultaniousOperator(operationStringCatch)
{
	for(var b=0; b<operationStringCatch.length; b++)
	{
		if(b!=0)
		{
			if((operationStringCatch.charAt(b) == '.') && (operationStringCatch.charAt(b-1) == '.'))
			{
				return true
			}
			if((operationStringCatch.charAt(b) == '+') && (operationStringCatch.charAt(b-1) == '+'))
			{
				return true
			}
			if((operationStringCatch.charAt(b) == '-') && (operationStringCatch.charAt(b-1) == '-'))
			{
				return true
			}
			if((operationStringCatch.charAt(b) == '*') && (operationStringCatch.charAt(b-1) == '*'))
			{
				return true
			}
			if((operationStringCatch.charAt(b) == '/') && (operationStringCatch.charAt(b-1) == '/'))
			{
				return true
			}
			if((operationStringCatch.charAt(b) == '^') && (operationStringCatch.charAt(b-1) == '^'))
			{
				return true
			}
			if((operationStringCatch.charAt(b) == '+' && operationStringCatch.charAt(b-1) == '-') || (operationStringCatch.charAt(b) == '-' && operationStringCatch.charAt(b-1) == '+'))
			{
				return true
			}
			if((operationStringCatch.charAt(b) == '+' && operationStringCatch.charAt(b-1) == '*') || (operationStringCatch.charAt(b) == '*' && operationStringCatch.charAt(b-1) == '+'))
			{
				return true
			}
			if((operationStringCatch.charAt(b) == '+' && operationStringCatch.charAt(b-1) == '/') || (operationStringCatch.charAt(b) == '/' && operationStringCatch.charAt(b-1) == '+'))
			{
				return true
			}
			if((operationStringCatch.charAt(b) == '+' && operationStringCatch.charAt(b-1) == '^') || (operationStringCatch.charAt(b) == '^' && operationStringCatch.charAt(b-1) == '+'))
			{
				return true
			}
			if((operationStringCatch.charAt(b) == '-' && operationStringCatch.charAt(b-1) == '*') || (operationStringCatch.charAt(b) == '*' && operationStringCatch.charAt(b-1) == '-'))
			{
				return true
			}
			if((operationStringCatch.charAt(b) == '-' && operationStringCatch.charAt(b-1) == '/') || (operationStringCatch.charAt(b) == '/' && operationStringCatch.charAt(b-1) == '-'))
			{
				return true
			}
			if((operationStringCatch.charAt(b) == '-' && operationStringCatch.charAt(b-1) == '^') || (operationStringCatch.charAt(b) == '^' && operationStringCatch.charAt(b-1) == '-'))
			{
				return true
			}
			if((operationStringCatch.charAt(b) == '*' && operationStringCatch.charAt(b-1) == '/') || (operationStringCatch.charAt(b) == '/' && operationStringCatch.charAt(b-1) == '*'))
			{
				return true
			}
			if((operationStringCatch.charAt(b) == '*' && operationStringCatch.charAt(b-1) == '^') || (operationStringCatch.charAt(b) == '^' && operationStringCatch.charAt(b-1) == '*'))
			{
				return true
			}
			if((operationStringCatch.charAt(b) == '/' && operationStringCatch.charAt(b-1) == '^') || (operationStringCatch.charAt(b) == '^' && operationStringCatch.charAt(b-1) == '/'))
			{
				return true
			}
		}
	}
}

//FUNCTION findError()
//DEVELOPED BY :: SUDIPTO LAHIRI
//COPYRIGHT :: EARTH TECHNOLOGY
//THIS FUNCTION IS USED TO DETECT WHETHER A ISOLATED OPERATOR IS PRESENT OR NOT.

function findIsolatedOperator(operationStringCatch)
{
	for(var c=0; c<operationStringCatch.length; c++)
	{
		if(operationStringCatch.charAt(c) == '+')
		{
			if(operationStringCatch.charAt(c-1) == '' || operationStringCatch.charAt(c+1) == '')
			{
				return true
			}
		}
		if(operationStringCatch.charAt(c) == '-')
		{
			if(operationStringCatch.charAt(c-1) == '' || operationStringCatch.charAt(c+1) == '')
			{
				return true
			}
		}
		if(operationStringCatch.charAt(c) == '*')
		{
			if(operationStringCatch.charAt(c-1) == '' || operationStringCatch.charAt(c+1) == '')
			{
				return true
			}
		}
		if(operationStringCatch.charAt(c) == '/')
		{
			if(operationStringCatch.charAt(c-1) == '' || operationStringCatch.charAt(c+1) == '')
			{
				return true
			}
		}
		if(operationStringCatch.charAt(c) == '^')
		{
			if(operationStringCatch.charAt(c-1) == '' || operationStringCatch.charAt(c+1) == '')
			{
				return true
			}
		}
	}
}
function findInvalidOperation(operationStringCatch)
{
	if((operationStringCatch.indexOf('(')!=-1) && (operationStringCatch.indexOf('(')!=-1))
	{
		var fastOcc = operationStringCatch.lastIndexOf('(')
		var searchStart = fastOcc + 1
		var lastOcc = operationStringCatch.indexOf(')', searchStart)
		var innerSlice = operationStringCatch.slice(searchStart,lastOcc)
		if(innerSlice == '' || innerSlice == '^' || innerSlice == '*' || innerSlice == '/' || innerSlice == '+' || innerSlice == '-' || innerSlice == '.')
		{
			return true	
		}
	}
}