/// <summary>
        /// Parse all variables in template
        /// </summary>
        private void ParseVariables()
        {
            int idxCurrent = 0;

            while ((idxCurrent = this._ParsedBlock.IndexOf(this.VariableTagBegin, idxCurrent)) != -1)
            {
                string VarName, VarValue;
                int    idxVarTagEnd;

                idxVarTagEnd = this._ParsedBlock.IndexOf(this.VariableTagEnd, (idxCurrent + this.VariableTagBegin.Length));
                if (idxVarTagEnd == -1)
                {
                    throw new Exception(String.Format("Index {0}: could not find Variable End Tag", idxCurrent));
                }

                // Getting Variable Name

                VarName = this._ParsedBlock.Substring((idxCurrent + this.VariableTagBegin.Length), (idxVarTagEnd - idxCurrent - this.VariableTagBegin.Length));

                // Checking for Modificators

                string[] VarParts = VarName.Split(this.ModificatorTag.ToCharArray());
                VarName = VarParts[0];

                // Getting Variable Value
                // If Variable doesn't exist in _hstValue then
                // Variable Value equal empty string

                // [added 6/6/2006] If variable is null than it will also has empty string

                VarValue = String.Empty;
                if (this._hstValues.ContainsKey(VarName) && this._hstValues[VarName] != null)
                {
                    VarValue = this._hstValues[VarName].ToString();
                }

                //Added by Shrikant
                if (VarName.Contains(this.BlockTagBeginBegin))
                {
                    string lst = VarName.Substring(0, VarName.LastIndexOf('-'));
                    if (this._hstValues.ContainsKey(VarName) && this._hstValues[VarName] != null)
                    {
                        VarValue = this._hstValues[VarName].ToString();
                    }
                }
                //End Add

                // Apply All Modificators to Variable Value

                for (int i = 1; i < VarParts.Length; i++)
                {
                    this.ApplyModificator(ref VarValue, VarParts[i]);
                }

                // Replace Variable in Template

                this._ParsedBlock = this._ParsedBlock.Substring(0, idxCurrent) + VarValue + this._ParsedBlock.Substring(idxVarTagEnd + this.VariableTagEnd.Length);

                // Add Length of added value to Current index
                // to prevent looking for variables in the added value
                // Fixed Date: April 5, 2006
                idxCurrent += VarValue.Length;
            }
        }