/*******************************************************************************
 * File Name			: JCP.js
 * Author				: Keane India Pvt Ltd.,
 * Date of Creation		: 18 September 2008.
 * Description			: Utility methods used across JCP Application.
 * Version Number		: 1.0
 * Modification History	:
   Date			Version		Who				Description of change
   2008-09-18	1.0			Keane India		Initial - created with the utility 
   													methods.
   2009-05-07	1.01			RB1				Remedy 1600228: Amend functions secureRedirect & redirectToSecurePage
*******************************************************************************/

/**
 * Validates E-Mail address.
 *
 * @param addr		String - E-Mail address.
 * @return true		Boolean - Indicates whether the mail Id is valid or not.
 */
function validateEmailAddress(addr) {
	
	var invalidChars = '\/\'\\ ";:?!()[]\{\}^|';

	for (var i = 0; i < invalidChars.length; i++) {
		if (addr.indexOf(invalidChars.charAt(i), 0) > -1) {
			return true;
		}
	}

	for (var i = 0; i < addr.length; i++) {
		if (addr.charCodeAt(i) > 127) {
			return true;
		}
	}

	var atPos = addr.indexOf('@', 0);

	if (atPos == -1) {
		return true;
	}
	if (atPos == 0) {
		return true;
	}
	if (addr.indexOf('@', atPos + 1) > - 1) {
		return true;
	}
	if (addr.indexOf('.', atPos) == -1) {
		return true;
	}
	if (addr.indexOf('@.', 0) != -1) {
		return true;
	}
	if (addr.indexOf('.@', 0) != -1) {
		return true;
	}
	if (addr.indexOf('..', 0) != -1) {
		return true;
	}
	return false;
}

// Sets the currency symbol based on the currency of the user. 
function setCurrencySymbol(pCurrency) {

	var currencySymbol;
		
	if (("FRF").match(pCurrency) || ("ESP").match(pCurrency) 
			||("DEM").match(pCurrency)) {
		currencySymbol = "&euro;"; 
	} else if (("USD").match(pCurrency) || ("AUD").match(pCurrency)) {
		currencySymbol = "$";
	} else {
		currencySymbol = "&pound;";
	}
	return currencySymbol;
}

// Function to set the title.
function setTitle(pTitle) {
	parent.document.title = eval(pTitle + languageCode);
}

/** 
 * Creates a new AJAX Object
 */
function initRequest() {

   try {
      req = new XMLHttpRequest();
   }
   catch (objErr) {
      try { 
         req = new ActiveXObject("Microsoft.XMLHTTP");
      } catch(aXObjErr) {
         try {
            req = new ActiveXObject("Msxml2.XMLHTTP");
         } catch(e) {
			alert("Exception while creating Ajax object: " + e.description);
         }
      }
   }
}

/**
 * Converts the language Id into the String language code for ex. langId = -2 ==>
 * type = "_Fr"
 *
 * @param int pLangId the language Id
 * @return String language code.
 */
function getLanguageCode(pLangId)
{
	var type = false;
	
	if (pLangId != undefined && pLangId != null)
	{
		if (pLangId == 0 || pLangId == -1)
		{
			type = "_En";
		}
		else if (pLangId == -2)
		{
			type = "_Fr";
		}
		else if ( pLangId == -3 )
		{
			type = "_Ge";
		}
		else if (pLangId == -4)
		{
			type = "_It";
		}
		else if (pLangId == -5)
		{
			type = "_Sp";
		}
		else if (pLangId == -10)
		{
			type = "_Ja";
		}
		else if (pLangId == -11)
		{
			type = "_Du";
		}
		else
		{
			type = "_En";
		}
	}
	else
	{
		type = "_En";
	}
	return type;
}

/**
 * Generates random number between the ASCII numbers 33 and 127.
 *
 * @return random ASCII number between 33 and 127.
 */
function getRandomNum()
{
    var rndNum = Math.random()			// between 0 - 1
    rndNum = parseInt(rndNum * 1000);	// rndNum from 0 - 1000
    rndNum = (rndNum % 94) + 33;		// rndNum from 33 - 127
    return rndNum;
}

/**
 * Checks whether the random ASCII is between the values 33 and 127 and return 
 * true, else false
 *
 * @return true, if num is between 33 and 127, false, else.
 */
function checkPunc(num)
{
    if ((num >=33) && (num <=47)) { return true; }
    if ((num >=58) && (num <=64)) { return true; }
    if ((num >=91) && (num <=96)) { return true; }
    if ((num >=123) && (num <=126)) { return true; }
    return false;
}

/**
 * Generates a Unique Id for logging in the server side using the MemberId and
 * the current time when the Ajax call in initiated.
 *
 * @param String pMemberId the member Id
 * @return Unique Id.
 */
function generateUID()
{
    var length = 5;
    var uid = "";

    for (i=0; i < length; i++)
    {
        numI = getRandomNum();
        
        while (checkPunc(numI))
        {
        	numI = getRandomNum();
        }
        uid = uid + String.fromCharCode(numI);
    }
    return uid;
}


/**
 * Function to obtain the sub-models of a particular model.
 *
 * @param pLineArray 	String[] - an array containing the model elements.
 * @param pSplitText 	String - the xml file contents split into individual
 *						lines.
 * @return children 	String[] - an array of all sub-models.
 */
function getAllChildren(pLineArray, pSplitText) {
	var line = null;
	var splitTextParams = null;
	var splitTextIds = null;
	var lineArrayIds = null;
	var splitTextLength = null;
	var children = new Array();
	var splitTextLength = pSplitText.length;
	var j = 0;

	for (var i = 0; i < splitTextLength - 1; i++) {	
		line = pSplitText[i].substring((i == 0 ? 1 : 2));
		line = line.replace('[', '');
		splitTextParams = line.split("\'");
		splitTextIds = splitTextParams[0].split(",");
		
		if (pLineArray[0] == splitTextIds[1]) {
			children[j++] = line;
		}
	}
	return children;
}

/**
 * Function to build the model menu or dropdown menu based on input.
 *
 * @param pBuildType 	String - indicates whether a dropdown is to be built or 
 						model menu.
 * @param pText 		String - contents of the xml file.
 */
function buildUtility(pBuildType, pText) {
	var line = null;
	var lineArray = new Array();
	var	lineIdentifiers = null;
	var splitTextLength = null;
	var splitText = pText.split("]");
	splitTextLength = splitText.length;

	for (var j = 0; j < splitTextLength - 1; j++) { //splitTextLength - 1
		line = splitText[j].substring(j == 0 ? 1 : 2);
		line = line.replace('[', '');

		// lineArray contains the text split into individual lines
		lastIndexOfModelId = line.indexOf(",");
		lastIndexOfParentId = line.indexOf(",", lastIndexOfModelId + 1);
		firstIndexOfModelName = line.indexOf("'");
		
		modelId = line.substring(0, lastIndexOfModelId);
		parentIdForModel = line.substring(lastIndexOfModelId + 1, lastIndexOfParentId);
		modelName = line.substring(lastIndexOfParentId + 2,
					line.length - 1);
		
		lineArray[0] = modelId;
		lineArray[1] = parentIdForModel;
		lineArray[2] = modelName;
		// Check for a model, get all children(sub-models) of the model
		if ((parentId).match(parentIdForModel)) {
			var children = getAllChildren(lineArray, splitText);

			// If the model is same as sub-model, Build the menu with sub-model
			if (children.length == 1) {
				eval("(" + pBuildType + ")")(children, lineArray, 1);
			} else {
			// Else, build the menu with children indented from parent
				eval("(" + pBuildType + ")")(children, lineArray, 0);
			}
		}
	}
}

//   client side version of the useful Server.HtmlDecode method 
//   takes one string (encoded) and returns another (decoded) 
function HtmlDecode(s) { 
      var out = ""; 
      if (s == null) {
      	return;
      }
      var l = s.length; 

      for (var i=0; i<l; i++) { 

            var ch = s.charAt(i);
            if (ch == '&') { 
                  var semicolonIndex = s.indexOf(';', i+1);
            if (semicolonIndex > 0) {
            	var entity = s.substring(i + 1, semicolonIndex); 

                        if (entity.length > 1 && entity.charAt(0) == '#') { 

                              if (entity.charAt(1) == 'x' || entity.charAt(1) == 'X')
                                    ch = String.fromCharCode(eval('0'+entity.substring(1)));
                              else 
                               ch = String.fromCharCode(eval(entity.substring(1))); 
                        }  else { 

                              switch (entity) { 

                                    case 'quot': ch = String.fromCharCode(0x0022); break; 

                                    case 'amp': ch = String.fromCharCode(0x0026); break; 

                                    case 'lt': ch = String.fromCharCode(0x003c); break; 

                                    case 'gt': ch = String.fromCharCode(0x003e); break; 

                                    case 'nbsp': ch = String.fromCharCode(0x00a0); break; 

                                    case 'iexcl': ch = String.fromCharCode(0x00a1); break; 

                                    case 'cent': ch = String.fromCharCode(0x00a2); break; 

                                    case 'pound': ch = String.fromCharCode(0x00a3); break; 

                                    case 'curren': ch = String.fromCharCode(0x00a4); break; 

                                    case 'yen': ch = String.fromCharCode(0x00a5); break; 

                                    case 'brvbar': ch = String.fromCharCode(0x00a6); break; 

                                    case 'sect': ch = String.fromCharCode(0x00a7); break; 

                                    case 'uml': ch = String.fromCharCode(0x00a8); break; 

                                    case 'copy': ch = String.fromCharCode(0x00a9); break; 

                                    case 'ordf': ch = String.fromCharCode(0x00aa); break; 

                                    case 'laquo': ch = String.fromCharCode(0x00ab); break; 

                                    case 'not': ch = String.fromCharCode(0x00ac); break; 

                                    case 'shy': ch = String.fromCharCode(0x00ad); break; 

                                    case 'reg': ch = String.fromCharCode(0x00ae); break; 

                                    case 'macr': ch = String.fromCharCode(0x00af); break; 

                                    case 'deg': ch = String.fromCharCode(0x00b0); break; 

                                    case 'plusmn': ch = String.fromCharCode(0x00b1); break; 

                                    case 'sup2': ch = String.fromCharCode(0x00b2); break; 

                                    case 'sup3': ch = String.fromCharCode(0x00b3); break; 

                                    case 'acute': ch = String.fromCharCode(0x00b4); break; 

                                    case 'micro': ch = String.fromCharCode(0x00b5); break; 

                                    case 'para': ch = String.fromCharCode(0x00b6); break; 

                                    case 'middot': ch = String.fromCharCode(0x00b7); break; 

                                    case 'cedil': ch = String.fromCharCode(0x00b8); break; 

                                    case 'sup1': ch = String.fromCharCode(0x00b9); break; 

                                    case 'ordm': ch = String.fromCharCode(0x00ba); break; 

                                    case 'raquo': ch = String.fromCharCode(0x00bb); break; 

                                    case 'frac14': ch = String.fromCharCode(0x00bc); break; 

                                    case 'frac12': ch = String.fromCharCode(0x00bd); break; 

                                    case 'frac34': ch = String.fromCharCode(0x00be); break; 

                                    case 'iquest': ch = String.fromCharCode(0x00bf); break; 

                                    case 'Agrave': ch = String.fromCharCode(0x00c0); break; 

                                    case 'Aacute': ch = String.fromCharCode(0x00c1); break; 

                                    case 'Acirc': ch = String.fromCharCode(0x00c2); break; 

                                    case 'Atilde': ch = String.fromCharCode(0x00c3); break; 

                                    case 'Auml': ch = String.fromCharCode(0x00c4); break; 

                                    case 'Aring': ch = String.fromCharCode(0x00c5); break; 

                                    case 'AElig': ch = String.fromCharCode(0x00c6); break; 

                                    case 'Ccedil': ch = String.fromCharCode(0x00c7); break; 

                                    case 'Egrave': ch = String.fromCharCode(0x00c8); break; 

                                    case 'Eacute': ch = String.fromCharCode(0x00c9); break; 

                                    case 'Ecirc': ch = String.fromCharCode(0x00ca); break; 

                                    case 'Euml': ch = String.fromCharCode(0x00cb); break; 

                                    case 'Igrave': ch = String.fromCharCode(0x00cc); break; 

                                    case 'Iacute': ch = String.fromCharCode(0x00cd); break; 

                                    case 'Icirc': ch = String.fromCharCode(0x00ce ); break; 

                                    case 'Iuml': ch = String.fromCharCode(0x00cf); break; 

                                    case 'ETH': ch = String.fromCharCode(0x00d0); break; 

                                    case 'Ntilde': ch = String.fromCharCode(0x00d1); break; 

                                    case 'Ograve': ch = String.fromCharCode(0x00d2); break; 

                                    case 'Oacute': ch = String.fromCharCode(0x00d3); break; 

                                    case 'Ocirc': ch = String.fromCharCode(0x00d4); break; 

                                    case 'Otilde': ch = String.fromCharCode(0x00d5); break; 

                                    case 'Ouml': ch = String.fromCharCode(0x00d6); break; 

                                    case 'times': ch = String.fromCharCode(0x00d7); break; 

                                    case 'Oslash': ch = String.fromCharCode(0x00d8); break; 

                                    case 'Ugrave': ch = String.fromCharCode(0x00d9); break; 

                                    case 'Uacute': ch = String.fromCharCode(0x00da); break; 

                                    case 'Ucirc': ch = String.fromCharCode(0x00db); break; 

                                    case 'Uuml': ch = String.fromCharCode(0x00dc); break; 

                                    case 'Yacute': ch = String.fromCharCode(0x00dd); break; 

                                    case 'THORN': ch = String.fromCharCode(0x00de); break; 

                                    case 'szlig': ch = String.fromCharCode(0x00df); break; 

                                    case 'agrave': ch = String.fromCharCode(0x00e0); break; 

                                    case 'aacute': ch = String.fromCharCode(0x00e1); break; 

                                    case 'acirc': ch = String.fromCharCode(0x00e2); break; 

                                    case 'atilde': ch = String.fromCharCode(0x00e3); break; 

                                    case 'auml': ch = String.fromCharCode(0x00e4); break; 

                                    case 'aring': ch = String.fromCharCode(0x00e5); break; 

                                    case 'aelig': ch = String.fromCharCode(0x00e6); break; 

                                    case 'ccedil': ch = String.fromCharCode(0x00e7); break; 

                                    case 'egrave': ch = String.fromCharCode(0x00e8); break; 

                                    case 'eacute': ch = String.fromCharCode(0x00e9); break; 

                                    case 'ecirc': ch = String.fromCharCode(0x00ea); break; 

                                    case 'euml': ch = String.fromCharCode(0x00eb); break; 

                                    case 'igrave': ch = String.fromCharCode(0x00ec); break; 

                                    case 'iacute': ch = String.fromCharCode(0x00ed); break; 

                                    case 'icirc': ch = String.fromCharCode(0x00ee); break; 

                                    case 'iuml': ch = String.fromCharCode(0x00ef); break; 

                                    case 'eth': ch = String.fromCharCode(0x00f0); break; 

                                    case 'ntilde': ch = String.fromCharCode(0x00f1); break; 

                                    case 'ograve': ch = String.fromCharCode(0x00f2); break; 

                                    case 'oacute': ch = String.fromCharCode(0x00f3); break; 

                                    case 'ocirc': ch = String.fromCharCode(0x00f4); break; 

                                    case 'otilde': ch = String.fromCharCode(0x00f5); break; 

                                    case 'ouml': ch = String.fromCharCode(0x00f6); break; 

                                    case 'divide': ch = String.fromCharCode(0x00f7); break; 

                                    case 'oslash': ch = String.fromCharCode(0x00f8); break; 

                                    case 'ugrave': ch = String.fromCharCode(0x00f9); break; 

                                    case 'uacute': ch = String.fromCharCode(0x00fa); break; 

                                    case 'ucirc': ch = String.fromCharCode(0x00fb); break; 

                                    case 'uuml': ch = String.fromCharCode(0x00fc); break; 

                                    case 'yacute': ch = String.fromCharCode(0x00fd); break; 

                                    case 'thorn': ch = String.fromCharCode(0x00fe); break; 

                                    case 'yuml': ch = String.fromCharCode(0x00ff); break; 

                                    case 'OElig': ch = String.fromCharCode(0x0152); break; 

                                    case 'oelig': ch = String.fromCharCode(0x0153); break; 

                                    case 'Scaron': ch = String.fromCharCode(0x0160); break; 

                                    case 'scaron': ch = String.fromCharCode(0x0161); break; 

                                    case 'Yuml': ch = String.fromCharCode(0x0178); break; 

                                    case 'fnof': ch = String.fromCharCode(0x0192); break; 

                                    case 'circ': ch = String.fromCharCode(0x02c6); break; 

                                    case 'tilde': ch = String.fromCharCode(0x02dc); break; 

                                    case 'Alpha': ch = String.fromCharCode(0x0391); break; 

                                    case 'Beta': ch = String.fromCharCode(0x0392); break; 

                                    case 'Gamma': ch = String.fromCharCode(0x0393); break; 

                                    case 'Delta': ch = String.fromCharCode(0x0394); break; 

                                    case 'Epsilon': ch = String.fromCharCode(0x0395); break; 

                                    case 'Zeta': ch = String.fromCharCode(0x0396); break; 

                                    case 'Eta': ch = String.fromCharCode(0x0397); break; 

                                    case 'Theta': ch = String.fromCharCode(0x0398); break; 

                                    case 'Iota': ch = String.fromCharCode(0x0399); break; 

                                    case 'Kappa': ch = String.fromCharCode(0x039a); break; 

                                    case 'Lambda': ch = String.fromCharCode(0x039b); break; 

                                    case 'Mu': ch = String.fromCharCode(0x039c); break; 

                                    case 'Nu': ch = String.fromCharCode(0x039d); break; 

                                    case 'Xi': ch = String.fromCharCode(0x039e); break; 

                                    case 'Omicron': ch = String.fromCharCode(0x039f); break; 

                                    case 'Pi': ch = String.fromCharCode(0x03a0); break; 

                                    case ' Rho ': ch = String.fromCharCode(0x03a1); break; 

                                    case 'Sigma': ch = String.fromCharCode(0x03a3); break; 

                                    case 'Tau': ch = String.fromCharCode(0x03a4); break; 

                                    case 'Upsilon': ch = String.fromCharCode(0x03a5); break; 

                                    case 'Phi': ch = String.fromCharCode(0x03a6); break; 

                                    case 'Chi': ch = String.fromCharCode(0x03a7); break; 

                                    case 'Psi': ch = String.fromCharCode(0x03a8); break; 

                                    case 'Omega': ch = String.fromCharCode(0x03a9); break; 

                                    case 'alpha': ch = String.fromCharCode(0x03b1); break; 

                                    case 'beta': ch = String.fromCharCode(0x03b2); break; 

                                    case 'gamma': ch = String.fromCharCode(0x03b3); break; 

                                    case 'delta': ch = String.fromCharCode(0x03b4); break; 

                                    case 'epsilon': ch = String.fromCharCode(0x03b5); break; 

                                    case 'zeta': ch = String.fromCharCode(0x03b6); break; 

                                    case 'eta': ch = String.fromCharCode(0x03b7); break; 

                                    case 'theta': ch = String.fromCharCode(0x03b8); break; 

                                    case 'iota': ch = String.fromCharCode(0x03b9); break; 

                                    case 'kappa': ch = String.fromCharCode(0x03ba); break; 

                                    case 'lambda': ch = String.fromCharCode(0x03bb); break; 

                                    case 'mu': ch = String.fromCharCode(0x03bc); break; 

                                    case 'nu': ch = String.fromCharCode(0x03bd); break; 

                                    case 'xi': ch = String.fromCharCode(0x03be); break; 

                                    case 'omicron': ch = String.fromCharCode(0x03bf); break; 

                                    case 'pi': ch = String.fromCharCode(0x03c0); break; 

                                    case 'rho': ch = String.fromCharCode(0x03c1); break; 

                                    case 'sigmaf': ch = String.fromCharCode(0x03c2); break; 

                                    case 'sigma': ch = String.fromCharCode(0x03c3); break; 

                                    case 'tau': ch = String.fromCharCode(0x03c4); break; 

                                    case 'upsilon': ch = String.fromCharCode(0x03c5); break; 

                                    case 'phi': ch = String.fromCharCode(0x03c6); break; 

                                    case 'chi': ch = String.fromCharCode(0x03c7); break; 

                                    case 'psi': ch = String.fromCharCode(0x03c8); break; 

                                    case 'omega': ch = String.fromCharCode(0x03c9); break; 

                                    case 'thetasym': ch = String.fromCharCode(0x03d1); break; 

                                    case 'upsih': ch = String.fromCharCode(0x03d2); break; 

                                    case 'piv': ch = String.fromCharCode(0x03d6); break; 

                                    case 'ensp': ch = String.fromCharCode(0x2002); break; 

                                    case 'emsp': ch = String.fromCharCode(0x2003); break; 

                                    case 'thinsp': ch = String.fromCharCode(0x2009); break; 

                                    case 'zwnj': ch = String.fromCharCode(0x200c); break; 

                                    case 'zwj': ch = String.fromCharCode(0x200d); break; 

                                    case 'lrm': ch = String.fromCharCode(0x200e); break; 

                                    case 'rlm': ch = String.fromCharCode(0x200f); break; 

                                    case 'ndash': ch = String.fromCharCode(0x2013); break; 

                                    case 'mdash': ch = String.fromCharCode(0x2014); break; 

                                    case 'lsquo': ch = String.fromCharCode(0x2018); break; 

                                    case 'rsquo': ch = String.fromCharCode(0x2019); break; 

                                    case 'sbquo': ch = String.fromCharCode(0x201a); break; 

                                    case 'ldquo': ch = String.fromCharCode(0x201c); break; 

                                    case 'rdquo': ch = String.fromCharCode(0x201d); break; 

                                    case 'bdquo': ch = String.fromCharCode(0x201e); break; 

                                    case 'dagger': ch = String.fromCharCode(0x2020); break; 

                                    case 'Dagger': ch = String.fromCharCode(0x2021); break; 

                                    case 'bull': ch = String.fromCharCode(0x2022); break; 

                                    case 'hellip': ch = String.fromCharCode(0x2026); break; 

                                    case 'permil': ch = String.fromCharCode(0x2030); break; 

                                    case 'prime': ch = String.fromCharCode(0x2032); break; 

                                    case 'Prime': ch = String.fromCharCode(0x2033); break; 

                                    case 'lsaquo': ch = String.fromCharCode(0x2039); break; 

                                    case 'rsaquo': ch = String.fromCharCode(0x203a); break; 

                                    case 'oline': ch = String.fromCharCode(0x203e); break; 

                                    case 'frasl': ch = String.fromCharCode(0x2044); break; 

                                    case 'euro': ch = String.fromCharCode(0x20ac); break; 

                                    case 'image': ch = String.fromCharCode(0x2111); break; 

                                    case 'weierp': ch = String.fromCharCode(0x2118); break; 

                                    case 'real': ch = String.fromCharCode(0x211c); break; 

                                    case 'trade': ch = String.fromCharCode(0x2122); break; 

                                    case 'alefsym': ch = String.fromCharCode(0x2135); break; 

                                    case 'larr': ch = String.fromCharCode(0x2190); break; 

                                    case 'uarr': ch = String.fromCharCode(0x2191); break; 

                                    case 'rarr': ch = String.fromCharCode(0x2192); break; 

                                    case 'darr': ch = String.fromCharCode(0x2193); break; 

                                    case 'harr': ch = String.fromCharCode(0x2194); break; 

                                    case 'crarr': ch = String.fromCharCode(0x21b5); break; 

                                    case 'lArr': ch = String.fromCharCode(0x21d0); break; 

                                    case 'uArr': ch = String.fromCharCode(0x21d1); break; 

                                    case 'rArr': ch = String.fromCharCode(0x21d2); break; 

                                    case 'dArr': ch = String.fromCharCode(0x21d3); break; 

                                    case 'hArr': ch = String.fromCharCode(0x21d4); break; 

                                    case 'forall': ch = String.fromCharCode(0x2200); break; 

                                    case 'part': ch = String.fromCharCode(0x2202); break; 

                                    case 'exist': ch = String.fromCharCode(0x2203); break; 

                                    case 'empty': ch = String.fromCharCode(0x2205); break; 

                                    case 'nabla': ch = String.fromCharCode(0x2207); break; 

                                    case 'isin': ch = String.fromCharCode(0x2208); break; 

                                    case 'notin': ch = String.fromCharCode(0x2209); break; 

                                    case 'ni': ch = String.fromCharCode(0x220b); break; 

                                    case 'prod': ch = String.fromCharCode(0x220f); break; 

                                    case 'sum': ch = String.fromCharCode(0x2211); break; 

                                    case 'minus': ch = String.fromCharCode(0x2212); break; 

                                    case 'lowast': ch = String.fromCharCode(0x2217); break; 

                                    case 'radic': ch = String.fromCharCode(0x221a); break; 

                                    case 'prop': ch = String.fromCharCode(0x221d); break; 

                                    case 'infin': ch = String.fromCharCode(0x221e); break; 

                                    case 'ang': ch = String.fromCharCode(0x2220); break; 

                                    case 'and': ch = String.fromCharCode(0x2227); break; 

                                    case 'or': ch = String.fromCharCode(0x2228); break; 

                                    case 'cap': ch = String.fromCharCode(0x2229); break; 

                                    case 'cup': ch = String.fromCharCode(0x222a); break; 

                                    case 'int': ch = String.fromCharCode(0x222b); break; 

                                    case 'there4': ch = String.fromCharCode(0x2234); break; 

                                    case 'sim': ch = String.fromCharCode(0x223c); break; 

                                    case 'cong': ch = String.fromCharCode(0x2245); break; 

                                    case 'asymp': ch = String.fromCharCode(0x2248); break; 

                                    case 'ne': ch = String.fromCharCode(0x2260); break; 

                                    case 'equiv': ch = String.fromCharCode(0x2261); break; 

                                    case 'le': ch = String.fromCharCode(0x2264); break; 

                                    case 'ge': ch = String.fromCharCode(0x2265); break; 

                                    case 'sub': ch = String.fromCharCode(0x2282); break; 

                                    case 'sup': ch = String.fromCharCode(0x2283); break; 

                                    case 'nsub': ch = String.fromCharCode(0x2284); break; 

                                    case 'sube': ch = String.fromCharCode(0x2286); break; 

                                    case 'supe': ch = String.fromCharCode(0x2287); break; 

                                    case 'oplus': ch = String.fromCharCode(0x2295); break; 

                                    case 'otimes': ch = String.fromCharCode(0x2297); break; 

                                    case 'perp': ch = String.fromCharCode(0x22a5); break; 

                                    case 'sdot': ch = String.fromCharCode(0x22c5); break; 

                                    case 'lceil': ch = String.fromCharCode(0x2308); break; 

                                    case 'rceil': ch = String.fromCharCode(0x2309); break; 

                                    case 'lfloor': ch = String.fromCharCode(0x230a); break; 

                                    case 'rfloor': ch = String.fromCharCode(0x230b); break; 

                                    case 'lang': ch = String.fromCharCode(0x2329); break; 

                                    case 'rang': ch = String.fromCharCode(0x232a); break; 

                                    case 'loz': ch = String.fromCharCode(0x25ca); break; 

                                    case 'spades': ch = String.fromCharCode(0x2660); break; 

                                    case 'clubs': ch = String.fromCharCode(0x2663); break; 

                                    case 'hearts': ch = String.fromCharCode(0x2665); break; 

                                    case 'diams': ch = String.fromCharCode(0x2666); break; 

                                    default: ch = ''; break; 
                              } 
                        } 
                        i = semicolonIndex; 
                  }
            } 
            out += ch; 
      }
      return out;
}

function getCurrency(pCountry) {
	var type = false;

	if (pCountry != undefined && pCountry != null) {

		if (pCountry == "UnitedStates") {
			type = eval("UNITED_STATES");
		}
		else if (pCountry == "UnitedKingdom") {
			type = eval("UNITED_KINGDOM");
		}
		else if (pCountry == "Germany" ) {
			type = eval("GERMANY");
		}
		else if (pCountry == "France") {
			type = eval("FRANCE");
		}
		else if (pCountry == "Spain") {
			type = eval("SPAIN");
		}
		else if (pCountry == "Australia") {
			type = eval("AUSTRALIA");
		}
		else if (pCountry == "OtherCountry") {
			type = eval("OTHER_COUNTRY");
		}
	
	} else {
		type = "NA";
	}
	return type;
}

function getDeliveryType(pCountry) {
	var type = false;

	if (pCountry != undefined && pCountry != null) {

		if (pCountry == "UnitedStates") {
			type = eval("US_DELIVERY_TYPE");
		}
		else if (pCountry == "UnitedKingdom") {
			type = eval("Uk_DELIVERY_TYPE");
		}
		else if (pCountry == "Germany" ) {
			type = eval("GERMANY_DELIVERY_TYPE");
		}
		else if (pCountry == "France") {
			type = eval("FRANCE_DELIVERY_TYPE");
		}
		else if (pCountry == "Spain") {
			type = eval("SPAIN_DELIVERY_TYPE");
		}
		else if (pCountry == "Australia") {
			type = eval("AUSTRALIA_DELIVERY_TYPE");
		}
		else if (pCountry == "OtherCountry") {
			type = eval("OTHER_COUNTRY_DELIVERY_TYPE");
		}
	
	} else {
		type = "NA";
	}
	return type;
}

// To create cookie.
function createCookie(name, value) {
	document.cookie = name + "=" + value + "; path=/";
}

// To read data from cookie.
function readCookie(name) {	
  	var results = document.cookie.match ( '(^|;) ?' + name + '=([^;]*)(;|$)' );

  	if (results) {
   	 return (results[2]);
  	} else {
    	return null;
    }
}

// To set the url for continue shopping.
function setShoppingUrl() {
    top.frames[1].document.getElementById("shoppingUrl").value = window.location;
}

/**
 * Search for the context root in the URL and return.
 *
 * @return the context root
 */
function getUrl()
{
	var url = onlineURL;//new String(document.URL);
	return url;
}

// Function to set the title.
function setTitle(pTitle) {
	parent.document.title = pTitle;
}

// Function to obtain the coordinates of the mouse click.
function getMouseCoordinates() {
	var posx = 0;
	var posy = 0;
	var event = window.event;
	
	if (event.pageX || event.pageY) {
		posx = event.pageX;
		posy = event.pageY;
	} else if (event.clientX || event.clientY) 	{
		posx = event.clientX + document.body.scrollLeft
			+ document.documentElement.scrollLeft;
		posy = event.clientY + document.body.scrollTop
			+ document.documentElement.scrollTop;
	}
	
	return (posx + ":" + posy);
}

// To display Subcategories onclick on menus.
function displayContentPage(pDescription) {
	var id = pDescription.replace(" ", "_");
	var idValue = eval(id + "_Id");
	top.frames[3].document.location = "TrustSubCategory.html?catgroupId=" + idValue + "&parentName=" + escape(pDescription);
}

// To clear the category list in left frame.
function resetLeftFrame() {
	if (top.frames[2].document.getElementById("ParentCategoryHolder") != null) {
		top.frames[2].document.getElementById("ParentCategoryHolder").innerHTML = "";
		top.frames[2].document.getElementById("leftCategory_id").innerHTML = "";
	}
}

// Declaring valid date character, minimum year and maximum year
var dtCh= "/";
var minYear = 0000;
var maxYear = 9999;

// Function to validate the integer.
function isInteger(s){
	var i;
    for (i = 0; i < s.length; i++){   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

// Function to validate the space in date.
function stripCharsInBag(s, bag){
	var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

// Function to check the no of days in february.
function daysInFebruary (year){
	// February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}

// Function to validate no of days in a month.
function DaysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
		if (i==2) {this[i] = 29}
   } 
   return this
}

//Function to validate the user entered date.
function isDate(dtStr){
	var daysInMonth = DaysArray(12);
	var pos1=dtStr.indexOf(dtCh);
	var pos2=dtStr.indexOf(dtCh,pos1+1);
	var strDay=dtStr.substring(0,pos1);
	var strMonth=dtStr.substring(pos1+1,pos2);
	var strYear=dtStr.substring(pos2+1);
	
	if (strDay.length < 2) {
			return true;






	}
	
	if (strMonth.length < 2) {
		return true;
	}
	
	strYr=strYear;

	if (strDay.charAt(0)=="0" && strDay.length>1) 
		strDay=strDay.substring(1);

	if (strMonth.charAt(0)=="0" && strMonth.length>1) 
		strMonth=strMonth.substring(1);
	for (var i = 1; i <= 3; i++) {

		if (strYr.charAt(0)=="0" && strYr.length>1) 
			strYr=strYr.substring(1);
	}
	month=parseInt(strMonth);
	day=parseInt(strDay);
	year=parseInt(strYr);

	if (pos1==-1 || pos2==-1){
		return true;
	}

	if (day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]) {
		return true;
	}

	if (month<1 || month>12) {
		return true;
	}

	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
		return true;
	}

	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
		return true;
	}
	return false;
}

// Function to check the end date with current date.
function checkDate(pStartDate, pEndDate) {
	var startDateArray = (pStartDate).split("/");
	var endDateArray = (pEndDate).split("/");
	var startDate = startDateArray[0];
	var endDate = endDateArray[0];
	var startMonth = startDateArray[1];
	var endMonth = endDateArray[1];
	var startYear = startDateArray[2];
	var endYear = endDateArray[2];
	var completeStartDate = new Date(startYear, startMonth - 1, startDate);
	var completeEndDate = new Date(endYear, endMonth - 1, endDate);
	var difference = completeStartDate - completeEndDate;
	var difference = difference / (24 * 60 * 60 * 1000);
	
	if (parseInt(difference) > 0) {
		return true;
	} else {
		return false;
	}
}

// Function to check the end date with current date.
function checkRegDate(pStartDate, pEndDate) {
	var startDateArray = (pEndDate).split("/");
	var endDateArray = (pStartDate).split("/");
	var startDate = startDateArray[0];
	var endDate = endDateArray[0];
	var startMonth = startDateArray[1];
	var endMonth = endDateArray[1];
	var startYear = startDateArray[2];
	var endYear = endDateArray[2];
	var completeStartDate = new Date(startYear, startMonth - 1, startDate);
	var completeEndDate = new Date(endYear, endMonth - 1, endDate);
	var difference = completeStartDate - completeEndDate;
	var difference = difference / (24 * 60 * 60 * 1000);
	
	if (parseInt(difference) > 0) {
		return true;
	} else {
		return false;
	}
}

function secureRedirect() {

   	   var cUrl = document.URL;
	   var secureProtocol = "https://";
	   var pUrl = top.document.URL;

	   if (pUrl.indexOf(secureProtocol) != 0) {		
	      redirected = false;
		  pUrl = pUrl.replace((protocol + "://"), secureProtocol)
          pUrl = pUrl.replace("81", "1443");
          if(document.location.search.substring(1).length > 0) {
          	if(pUrl.indexOf("?")==-1) {
          		pUrl = pUrl + "?"+document.location.search.substring(1)+"&redirect=1";
          	}else{
          		pUrl = pUrl + "&"+document.location.search.substring(1)+"&redirect=1";
          	}
          }else{
          	if(pUrl.indexOf("?")==-1) {
          		pUrl = pUrl + "?redirect=1";
          	}else{
          		pUrl = pUrl + "&redirect=1";
          	}
          }		
		  top.document.location = pUrl;
	   }
       else if (cUrl.indexOf(secureProtocol) != 0) {
		  cUrl = cUrl.replace((protocol + "://"), secureProtocol);
		  document.location = cUrl;
       }
}

function redirectToSecurePage() {
   if ((top.location.search.indexOf("redirect") > 0 ) && (document.location.search.indexOf("noredirect") < 0)) {
   	  if(top.document.URL.indexOf("applicationType=JCP")==-1) {
   	  	document.location = "TrustLogon.html"+top.location.search+"&redirected=true";
   	  }else{
   	  	document.location = "JCPLogon.html"+top.location.search+"&redirected=true";
   	  }
   }
}

function getInnerFrameHeight() {
	var frameHeight = null;
	try {
		frameHeight = window.innerHeight;
	}
	catch (e) {
	}
	if ((frameHeight == null) || (frameHeight == undefined)) {
		frameHeight = document.documentElement.clientHeight;
	}
	return frameHeight;
}

function getInnerFrameWidth() {
	var frameWidth = null;
	try {
		frameWidth = window.innerWidth;
	}
	catch (e) {
	}
	if ((frameWidth == null) || (frameWidth == undefined)) {
		frameWidth = document.documentElement.clientWidth;
	}
	return frameWidth;
}

function checkWidth() {

	if (top.frames[2].document.getElementById('heightDiv') == null) {
		setTimeout(checkWidth,500);
	}


    //adjust the width if scroll bars need to show for IE6 and below...
	try {
		if ((msieversion() > 0) && (msieversion() < 7)) {
   			try {   				
				top.frames[2].document.getElementById('heightDiv').style.width = (document.getElementById('heightDiv').offsetWidth) + "px";
				top.frames[2].document.getElementById('heightDiv').style.overflowX = "hidden";
	   		}
   			catch (scrlEx) {
   			}
   		}
	}
	catch (brwVerEx) {
	}
	
	
}

function msieversion() {
	var ua = window.navigator.userAgent;
	var msie = ua.indexOf ( "MSIE " );
	var msVer = 0;
	if ( msie > 0 ) {
		msVer = parseInt (ua.substring (msie+5, ua.indexOf (".", msie )));
	}
	return msVer;
}