	function checkcharsNet(elmLength,charCode) {
	       if (elmLength > 209 && (charCode != 8)) {
	         window.alert("Please do not enter more than 210 characters.  Please hit the Backspace key and shorten your message.");   
	       }
	     }

	function checkcharsIE(elmLength) {
	       if (elmLength > 209 && (event.keyCode != 8)) {
	         window.alert("Please do not enter more than 210 characters.  Please hit the Backspace key and shorten your message.");   
	         window.event.returnValue=false; 
	       }
	}

	function isDigit (c) {
	  return ((c >= "0") && (c <= "9"))
	}

	function isEmpty(s) {
	  return ((s == null) || (s.length == 0))
	}

	function isInteger(s) {
	  var i;
	  var defaultEmptyOK = false;

	  if (isEmpty(s)) 
	     if (isInteger.arguments.length == 1) return defaultEmptyOK;
	     else return (isInteger.arguments[1] == true);

	     for (i = 0; i < s.length; i++)
	     {   
	       var c = s.charAt(i);
	       if (!isDigit(c)) return false;
             }

	  return true;
	}

	function stripCharsNotInBag (s, bag) {
	  var i;
	  var returnString = "";
		for (i = 0; i < s.length; i++)
		{
		var c = s.charAt(i);
		if (bag.indexOf(c) != -1) returnString += c;
		}
		return returnString;
	}

	function isWhitespace (j) {
	  var i,s;
	  var whitespace = " \t\n\r";
		s = j.value
		if (isEmpty(s)) return true;
		for (i = 0; i < s.length; i++)
		  {
			var c = s.charAt(i);
			if (whitespace.indexOf(c) == -1) return false;
		}
		return true;
	}


	function isFloat (s) {
	  var i;
	  var seenDecimalPoint = false;
	  var decimalPointDelimiter = ".";
	  var defaultEmptyOK = false;
	  var decimalPositions = 0;

	  if (isEmpty(s)) 
            if (isFloat.arguments.length == 1) return defaultEmptyOK;
            else return (isFloat.arguments[1] == true);

	  if (s == decimalPointDelimiter) return false;

	  for (i = 0; i < s.length; i++)
	  {   
             var c = s.charAt(i);

            if ((c == decimalPointDelimiter) && !seenDecimalPoint) {
               seenDecimalPoint = true;
               }
            else
               if ((!isDigit(c)) || (decimalPositions > 3)) {
                  return false;
                  }
               else 
                  if (seenDecimalPoint) {
                     decimalPositions++;
                     if (decimalPositions > 3) {
                        return false;
                        }
                     }
	  }
	  return true;
	}

	/*  Leap Year	
	 *  is evenly divisible by 4
	 *  and is not evenly divisible by 100, unless it is divisible by 400
	 *  Thus 1900 is not a leap year but 2000 is. We can use the modulus or mod() fuction to translate the phrase, "is evenly divisible by." Here, then, is the Xbasic code for the isLeapYear() function:
	*/
	function isLeapYear(yr) {
		if ((yr % 4) > 0) {
			return false;
		} else if ((yr % 400) == 0) {
			return true;
		} else if ((yr % 100) == 0) {
			return false;
		} else {
			return true;
		}
	}

	function getNumber(s) {
		if (typeof(s) == "String") {
			return parseInt(s.replace(/^0*/, ""));
		} else {
			return s;
		}
	}

	function getMonthDays(month, year) {
		//alert("GetMonthDays(" + month + "," + year + ")");
		var monthDays = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
		month = getNumber(month);
		if (isNaN(month) || month < 1 || month > 12) {
			return 0;
		}
		var days = monthDays[month];
		if (month == 2 && year && isLeapYear(year)) {
			days++;
		}	
		return days;
	}

	function validateAITemplate(Object) {
		var webPrompt = '', controllerPrompt = '', rangeMin = '', rangeMax = '';
		var isRequired = false;
		var i;
		var editType = '', formatType = '';
		var NumberOfItems = Object.elements["AICount"].value;
		
		
			
		for (var i = 0; i < NumberOfItems; i++) {
			webPrompt = aptEdits[i].webPrompt;
			controllerPrompt = aptEdits[i].controllerPrompt;
			rangeMin = aptEdits[i].min;
			rangeMax = aptEdits[i].max;
			isRequired = aptEdits[i].isRequired;
			editType = aptEdits[i].editType;			
			
			if (isRequired) {
				if (editType == "D") {
					if ((Object.elements["ItemYear" + i].selectedIndex == 0) || 
					    (Object.elements["ItemMonth" + i].selectedIndex == 0) || 
					    (Object.elements["ItemDay" + i].selectedIndex == 0)) {
					    Object.elements["ItemMonth" + i].focus();						
						return translateAIMessage(APT_REQUIRED_MSG, controllerPrompt, webPrompt, rangeMin, rangeMax);
					} else {
						if (getMonthDays(Object.elements["ItemMonth" + i].value, Object.elements["ItemYear" + i].value) < getNumber(Object.elements["ItemDay" + i].value)) {
							Object.elements["ItemDay" + i].focus();
							return translateAIMessage(APT_INVALID_DATE_MSG, controllerPrompt, webPrompt, rangeMin, rangeMax);
						}
					}
				} else if (editType == "R") {
				     
					if (Object.elements["Item" + i].value == "") {
						Object.elements["Item" + i].focus();
						return translateAIMessage(APT_REQUIRED_MSG, controllerPrompt, webPrompt, rangeMin, rangeMax);
					} else {
						if (aptEdits[i].isNumeric) {
							if (isInteger(Object.elements["Item" + i].value)) {
								if ((parseInt(Object.elements["Item" + i].value) < parseInt(rangeMin)) &&
									(parseInt(Object.elements["Item" + i].value) > parseInt(rangeMax))) {
									Object.elements["Item" + i].focus();
									return translateAIMessage(APT_INVALID_RANGE_MSG, controllerPrompt, webPrompt, rangeMin, rangeMax);
								}
							} else {
								Object.elements["Item" + i].focus();
								return translateAIMessage(APT_NUMERIC_MSG, controllerPrompt, webPrompt, rangeMin, rangeMax);
							}
						} else {							
							if ((Object.elements["Item" + i].value < rangeMin) && 
								(Object.elements["Item" + i].value > rangeMax)) {
								Object.elements["Item" + i].focus();
								return translateAIMessage(APT_INVALID_RANGE_MSG, controllerPrompt, webPrompt, rangeMin, rangeMax);
							}
						}
					}
				} else if (editType == "T") {
					if (Object.elements["Item" + i].selectedIndex == 0) {
						Object.elements["Item" + i].focus();
						return translateAIMessage(APT_REQUIRED_MSG, controllerPrompt, webPrompt, rangeMin, rangeMax);
					}
				} else if (editType == "N") {
				
					//-----Begin-----Modified by IndSigma on Jan142006//
					
					var strreturn = HandleWhiteSpaces(Object.elements["Item" + i]);						
						
					//-----End-----Modified by IndSigma on Jan142006//				
					
	
					if (Object.elements["Item" + i].value == "") {
						Object.elements["Item" + i].focus();						
						return translateAIMessage(APT_REQUIRED_MSG, controllerPrompt, webPrompt, rangeMin, rangeMax);
					} else {
						if (aptEdits[i].isNumeric && !isInteger(Object.elements["Item" + i].value)) {
								Object.elements["Item" + i].focus();
								return translateAIMessage(APT_NUMERIC_MSG, controllerPrompt, webPrompt, rangeMin, rangeMax);
						}
					}
				}				
			} else  {  // Not Required
				if (editType == "D") {
					if ((Object.elements["ItemYear" + i].selectedIndex > 0) || 
						(Object.elements["ItemMonth" + i].selectedIndex > 0) || 
						(Object.elements["ItemDay" + i].selectedIndex > 0)) {
						if (Object.elements["ItemYear" + i].selectedIndex == 0 || 
							Object.elements["ItemMonth" + i].selectedIndex == 0 || 
							Object.elements["ItemDay" + i].selectedIndex == 0) {
							Object.elements["ItemMonth" + i].focus();
							return translateAIMessage(APT_REQUIRED_MSG, controllerPrompt, webPrompt, rangeMin, rangeMax);
						} else {
							if (getMonthDays(Object.elements["ItemMonth" + i].value, Object.elements["ItemYear" + i].value) < getNumber(Object.elements["ItemDay" + i].value)) {
								Object.elements["ItemDay" + i].focus();
								return translateAIMessage(APT_INVALID_DATE_MSG, controllerPrompt, webPrompt, rangeMin, rangeMax);
							}
						}
					}
				} else if (editType == "R") {
					if (Object.elements["Item" + i].value != "") {
						if (aptEdits[i].isNumeric) {
							if (isInteger(Object.elements["Item" + i].value)) {
								if ((parseInt(Object.elements["Item" + i].value) < parseInt(rangeMin)) &&
									(parseInt(Object.elements["Item" + i].value) > parseInt(rangeMax))) {
									Object.elements["Item" + i].focus();
									return translateAIMessage(APT_INVALID_RANGE_MSG, controllerPrompt, webPrompt, rangeMin, rangeMax);
								}
							} else {
								Object.elements["Item" + i].focus();
								return translateAIMessage(APT_NUMERIC_MSG, controllerPrompt, webPrompt, rangeMin, rangeMax);
							}
						} else {
							if ((Object.elements["Item" + i].value < rangeMin) && 
								(Object.elements["Item" + i].value > rangeMax)) {
								Object.elements["Item" + i].focus();
								return translateAIMessage(APT_INVALID_RANGE_MSG, controllerPrompt, webPrompt, rangeMin, rangeMax);
							}
						}
					}
				} else if (editType == "T") {
					// No Validation, can't enter a bad value in a dropdown
				} else if (editType == "N") {
					if (Object.elements["Item" + i].value != "") {
						if (aptEdits[i].isNumeric) {
							if (!isInteger(Object.elements["Item" + i].value)) {
								Object.elements["Item" + i].focus();
								return translateAIMessage(APT_NUMERIC_MSG, controllerPrompt, webPrompt, rangeMin, rangeMax);
			               }
				        }
					}
				}
			}
		}
		return '';
	}

    function translateAIMessage(msg, controllerPrompt, webPrompt, min, max) {
		//Capitalize Controller prompt
		
		if (controllerPrompt.length > 1) {
			controllerPrompt = controllerPrompt.substr(0,1).toUpperCase() + controllerPrompt.substr(1).toLowerCase();			
		}
		msg = msg.replace("<*apt_controller_prompt*>", controllerPrompt);
		msg = msg.replace("<*apt_web_prompt*>", webPrompt);
		msg = msg.replace("<*apt_range_min*>", min);
		msg = msg.replace("<*apt_range_max*>", max);
		return msg;    
    }
    

	var CROSS_SELL = 'P1';
	var SUBSTITUTE = 'P2';
	
	var AddPromotionToBasketClick = false;
	var blnFormSubmitted; // set to true on submit
	var PType = ''; // this will be set to type of promotion ie crosssell or substitute     


	function CheckTermsAndConditions(frmName) {
		var strOpt;
		var h;
		var w;
		var df;
		var blnRet = false;
		
		df = document.forms[frmName];
		if((df.action.indexOf('productr.asp') < 0) || (df.action.indexOf('KOTF=') > 0))
		{
			if(df.tc_id.value > 0)
			{
				if(df.tc_accepted.value != 'accepted')
				{
					w = df.tc_width.value;
					h = df.tc_height.value;
					// figure out settings to center popup
					lngSW = 640;
					lngSH = 480;
					if(document.all || document.layers)
					{ 
						lngSW = screen.availWidth;  	// get width of screen
						lngSH = screen.availHeight;   // get height of screen
					} 
					lngL = (lngSW - w) / 2;
					lngT = (lngSH - h) / 2;		


					strOpt = 'width=' + w + ',height=' + h + ',directories=no,location=no,menubar=no,scrollbars=yes,status=yes,toolbar=no,Resizable=no,left=' + lngL + ',top=' + lngT;
					popup(rootURL + 'TermsAndConditions.asp?frm=' + frmName, 'Terms', strOpt);
					
					blnRet = false;
				}
				else
				{
					blnRet = true;
				}
			}
			else
			{
				blnRet = true;
			}
		}
		else
		{
			blnRet = true;
		}
		return blnRet;
	}


	function SubmitPromoForm(intPType,e) {
		


		var blnReturn;
		var strOriginationCode;
		AddPromotionToBasketClick = true;
		
		PType = intPType;
		blnReturn = validatefamilyInput('Integer', e.form.qty);

		if(blnReturn)			
		{			
			// fill in origination code of product(s)
			switch(PType)
			{
			case 'P1': //cross sell
				strOriginationCode = '1';
				break;
			case 'P2': // substitution
				strOriginationCode = '2';
				break;
			default:
				strOriginationCode = '';
				break;
			}
			e.form.elements['OC'].value = strOriginationCode;	
			e.form.elements['htxtAddPromotionToBasket'].value = true;	
			e.form.submit();
		}
		PType = '';
		AddPromotionToBasketClick = false;
	}


	function open_window(page) {
		return popup(page, 'win1','',640,480);
	}
	
	function open_windowhw(page, h, w) {
		return popup(page, 'win','', w, h);
	}
     
	function popup(page, name, opt, w, h) {
		var sw, sh, l, t;
		sw = 640;
		sh = 480;
		if(document.all || document.layers)	
		{ 
			sw = screen.availWidth;
			sh = screen.availHeight;
		} 
		l = (sw - w) / 2;
		t = (sh - h) / 2;
		if(opt.length == 0)
			opt = 'toolbar=no,location=no,directories=no,status=yes,menubar=no,scrollbars=yes,resizable=no,copyhistory=no,width=' + w + ',height=' + h + ',top=' + t + ',left=' + l;
		mywin = window.open(page, name, opt);
		if(!mywin.opener) // if the popup doesn't have a reference back to page that opened it, create a reference back
		{
			mywin.opener = self;
		}	
		if(!window.hPopup)
		{
			window.hPopup = mywin;
		}
	    mywin.focus();
	}
	
	function BuildOLISAddinfo(Object)
	{
	    var err;
        // check this is a Template from OLIS attached Product
          
        if(typeof Object.elements['TotalOLIS'] == 'undefined')
          {
          return true;
        //indsigma 24/07/06
	    // Triage : 1281
	      }
              //Code for validation of OLIS Template Info
                err=ValidateOLISAPTemplate(Object);
                if (err.length != 0)
       	        { 
                 alert(err);
    	  	     return false;
               }
              // indsigma 28/07/06
             // Triage : 1471
               // To Collect all the AI info into one Single Text Box control
                RetainOLIS_AIInfo(Object);
                return true;
        
	}
	
	function BuildAddInfo(Object) {
	
		var spaces = new String("                                  ");
		var separator = new String("");
		var addinfo = new String;
		var addinfoToCheck = new String;
		var i,j,addlen,EmptyCheck;
		var blnReturn = false;
		var err = new String("");
		
		if (Object.elements["addl_info_required"].value != "N")
		{
			if (Object.elements["AdditionalInfoType"].value == "TEMPLATE") {
				err = validateAITemplate(Object);
				if (err.length == 0) {
					j = Object.elements["AICount"].value; 
					for (i = 0; i < j; i++) {
					
						switch(aptEdits[i].editType) {
							case "D":
							   
								addinfo += separator;
								addinfo += Object.elements["ItemMonth" + i].value;
								addinfo += Object.elements["ItemDay" + i].value;
								addinfo += Object.elements["ItemYear" + i].value;
								break;
							case "R":
							case "N":
								addinfo += separator + Object.elements["Item" + i].value;
								break;
							case "T":
							  
								addinfo += separator + Object.elements["Item" + i].value;
								break;
							default:
								break;
						}	
						separator = "~"
					}
					Object.elements["AdditionalInfoInput"].value = addinfo;
					blnReturn = true;
				} else {
					alert(err);
					blnReturn = false;
				}
			} else {
				j = Object.elements["AICount"].value; 

				//-----Begin-----Modified by IndSigma Jan172005-----//			
			   
					// Triage:62 - 2560 Personlization Template.
					
var GoodTest = 0;
					
					for (i = 1; i <= j; i++){					
						HandleWhiteSpaces(Object.elements["addl_info_text" + i]);				
						addinfoToCheck = Object.elements["addl_info_text" + i].value;
						if (addinfoToCheck != ""){
							GoodTest = 1;
						}
					}
					
					if (GoodTest == 0){
							// User did n't typeanything in add info
							alert("Enter Additional info");
							Object.elements["addl_info_text" + 1].focus();
							blnReturn = false;
							return blnReturn;	
					}					
							
					

				//------------------End Modified by IndSigma Nov182005
	
				for (i = 1; i <= j; i++) 
				{
					addinfo += Object.elements["addl_info_text" + i].value;
					addlen = addinfo.length
					if (addlen < i * 30) 
					{
						addinfo += spaces.substring(0, i * 30 - addlen);
					}
				}
				Object.elements["AdditionalInfoInput"].value = addinfo;
				blnReturn = true;
			}
		} else {
			blnReturn = true;
		}
		
		
		if (blnReturn== true)
		{
		 //If the Personalisation Template for the product gets validated then only OLIS AP to be checked
		  blnReturn= BuildOLISAddinfo(Object) ;
		    
		 }
		return blnReturn;
	}
     
	function validateInput(Type, Object) {
		var blnReturn;
		var FieldDescription;
		var Items, i;
		var GoodDigits = "123456789";
		var tmpQty, tmpStripedQty;
		var tmpTotalQtyOrdered = 0;
		
		blnReturn = true;

		if (AddPromotionToBasketClick == false) 
		{	
			// check whether quantity exceeds maximum
			if (isValidQty(Object,"")) {
				// if okay, check if quantity is integer or decimal
				if (Type=='Integer') 
				{
					

					if (isInteger(Object.value) || isEmpty(Object.value)) 
					{
					    //Fine So Far
						if (Object.value==0) 
						{
					    		alert('This field must not be zero(i.e. 1)');
							
							Object.focus();
							blnReturn = false;
							
						}
					}
					else 
					{
						alert('This field must be a whole number (i.e. 1)');
						
						Object.focus();
						blnReturn = false;
					}
				} 
				else if (Type=='Decimal') 
				{
					if (isFloat(Object.value) || isEmpty(Object.value)) 
					{
					    //Fine So Far
					}
					else 
					{
						alert('This field must be a whole or decimal number (i.e. 1 or 1.125) up to 3 decimal positions.');
						Object.focus();
						blnReturn = false; 
					}
				}
			} else {
				blnReturn = false;
			}
		} 
		else 
		{
			if (document.forms['form1'].elements[PType + "PromotionMaxItems"] != null) 
			{
				Items = document.forms['form1'].elements[PType + "PromotionMaxItems"].value
				for (i = 1; i <= Items; i++) 
				{
					FieldDescription = document.forms['form1'].elements[PType + "txtFieldDescription" + i].value;

					if (document.forms['form1'].elements[PType + "txtIsFractional" + i].value == 'N') 
					{
						if (isEmpty(document.forms['form1'].elements[PType + "ListItemEditQty" + i].value)) 
						{
							document.forms['form1'].elements[PType + "ListItemEditQty" + i].value = '0';
						} 
						else 
						{
							if (isValidQty(document.forms['form1'].elements[PType + "ListItemEditQty" + i], FieldDescription)) 
							{
								if (isInteger(document.forms['form1'].elements[PType + "ListItemEditQty" + i].value)) 
								{				
									tmpTotalQtyOrdered = tmpTotalQtyOrdered + parseInt(document.forms['form1'].elements[PType + "ListItemEditQty" + i].value);
								} else {
									alert('The item "' + FieldDescription + '" must be a whole number (i.e. 1)');
									document.forms['form1'].elements[PType + "ListItemEditQty" + i].focus();
									blnReturn = false; 
								}
							} else {
								blnReturn = false;
							}
						}
					} 
					else if (document.forms['form1'].elements[PType + "txtIsFractional" + i].value == 'Y') 
					{
						if (isEmpty(document.forms['form1'].elements[PType + "ListItemEditQty" + i].value)) 
						{
							document.forms['form1'].elements[PType + "ListItemEditQty" + i].value = "0";						
						}
						else
						{
							if (isValidQty(document.forms['form1'].elements[PType + "ListItemEditQty" + i],FieldDescription)) {
								if (isFloat(document.forms['form1'].elements[PType + "ListItemEditQty" + i].value)) {
									tmpTotalQtyOrdered = tmpTotalQtyOrdered + parseFloat(document.forms['form1'].elements[PType + "ListItemEditQty" + i].value);
								} else {
									alert('The item "' + FieldDescription + '" must be a whole or decimal number (i.e. 1 or 1.125) up to 3 decimal positions.');
									document.forms['form1'].elements[PType + "ListItemEditQty" + i].focus();
									blnReturn = false; 
								}
							} else {
								blnReturn = false;
							}
						}
					}

					if (document.forms['form1'].elements[PType + "StyleMasterInfoRequired" + i].value == 'True') 
					{
						tmpQty = document.forms['form1'].elements[PType + "ListItemEditQty" + i].value;
						tmpStripedQty = stripCharsNotInBag(tmpQty, GoodDigits);
						if (tmpStripedQty.length > 0) 
						{
							if (isWhitespace(document.forms['form1'].elements[PType + "txtStyleMasterInfo" + i])) 
							{
								alert('There are style(s), color(s) or size(s) required for item "' + FieldDescription + '".');
								document.forms['form1'].elements[PType + "ListItemEditQty" + i].focus();
								blnReturn = false;
							}
						}
					}
				}
				if (tmpTotalQtyOrdered == 0 && blnReturn == true) 
				{
					alert('Total quantities ordered can not be 0.  Please enter a quantity greater than 0');
					document.forms['form1'].elements[PType + "ListItemEditQty" + 1].focus();
					blnReturn = false;
				}
			}
			document.forms['form1'].action = document.forms['form1'].elements[PType + "PromotionstrFormAction"].value
		}

		return blnReturn;
	}

	function BuildAddInfoAndValidate(frmName, doCheckTC) {
    try{
		var blnReturn;
		var df;

		blnReturn = false;
		if(blnFormSubmitted != true)
		{
			df = document.forms[frmName];
			blnReturn = BuildAddInfo(df);
	//-------- Begin Modified by Indsigma Nov182005
     		// Triage 62 - 2560 Personlization Template
			if (blnReturn==false)
			  {
			   // Not to Post back to server if the String is empty (ie. no space character)
			    //alert("No need to submit");
				return blnReturn;
			  }
			//-------- End Modified by Indsigma Nov182005
			
		
			if(blnReturn)
			{
				if(df.KitItem.value != true)
				{
					if(typeof df.qty != 'undefined')
					{
						blnReturn = validateInput(df.qty_type.value, df.qty);
					}
				}
				if(blnReturn)
				{
					if (doCheckTC)
						blnReturn = CheckTermsAndConditions(frmName);
					
					if(blnReturn)
						blnFormSubmitted = true;
				}
			}
		}
			
		return blnReturn;
	}
	catch(err)
	{
	}
}


	function ShowAttrib(FrmName,Number){
	  var Item, Ret, Count, Skip, Text, Attribs;

	  if (Number == 1){
            Item = FrmName.attr_value1.selectedIndex;
            if (Item != -1) {
               Text = FrmName.attr_value1.options[Item].text;
               if (typeof(Attrib1[Text]) != "undefined") {
                 Attribs = Parser(Attrib1[Text]);
                 FrmName.attr_value2.options.length = 0;
                 for (Count = 1; Count <= Attribs[0]; Count++) {
                     FrmName.attr_value2[Count-1] = new Option(Attribs[Count]);
                 }
                 FrmName.attr_value2[0].selected = true;
               }
               else {
                 FrmName.attr_value2.options.length = 0;
               }   
            }
	  }
	}

	function Parser (InString){
	  var Sep = ";", NumSeps=1, Count, Start, ParseMark, parse; 
  
	  for (Count=1; Count < InString.length; Count++){
           if (InString.charAt(Count)==Sep)
           NumSeps++;
	  }

	  parse = new Array ();
	  var Start=0, Count=1, ParseMark=0, LoopCtrl=1;

	  while (LoopCtrl==1){
            ParseMark = InString.indexOf(Sep, ParseMark);
            TestMark=ParseMark;
            if ((TestMark==0) || (TestMark==-1)){
                parse[Count]= InString.substring (Start, InString.length);
                LoopCtrl=0;
                break;
            }
            parse[Count] = InString.substring (Start, ParseMark);
            Start=ParseMark+1, ParseMark=Start, Count++;
	  }
	  parse[0]=Count;
	  return (parse);
	}

	//this function will open a new window and load the additional information page
	function showInfoPage(strPageURL) {
	  var strFeatures;
	  var dialogWin;
	
	  if ( navigator.appName == "Microsoft Internet Explorer" )
	  {
	 	window.status	="";
		strFeatures		="dialogWidth=620px; dialogHeight=320px; scrollbars=yes; center=yes; border=thick; help=no; status=no";
		dialogWin = window.showModalDialog (strPageURL, "Product Information", strFeatures);
	  }
	  else
	  {
		var heightValue	= 420;
		var widthValue	= 620;
		var topValue	= window.screenX+((window.outerWidth-widthValue)/2);
		var leftValue	= window.screenX + ((window.outerHeight-heightValue)/2);
		
		var objHeight	= new Number(heightValue);
		var objWidth	= new Number(widthValue);
		var objTop		= new Number(topValue);
		var objLeft		= new Number(leftValue);

		strFeatures		= "width="+objWidth.toString()+",height="+objHeight.toString()+",top="+objTop.toString()+",left="+objLeft.toString()+",modal=yes,scrollbars=yes";
		dialogWin = window.open(strPageURL,"dlog",strFeatures);
		dialogWin.document.body.onBlur="window.focus()";
	  }
	  return;
	}

	function additem(box, hiddenfield, qty, txtDisplay, txtValue) {
	  var opt;

	  opt = new Option();
	  if (qty != 0)
	  {
		opt.text = qty + ' - ' + txtDisplay
		opt.value = qty + ' - ' + txtDisplay
		if (hiddenfield.value.length > 0)
			hiddenfield.value += '|';
			
		hiddenfield.value += qty + '|' + txtValue + '|' + txtDisplay;
	  }
	  else
	  {
		opt.text = '                    ';
		opt.value = '                    ';
	  }		
	  box.options[box.options.length] = opt;
	
	}



	// SCS Variables/Functions
	function clsAttr() {
		this.Display = null;
		this.Value = null;
		this.Selected = null;
		
		return(this);
	}

	var Attr1 = new clsAttr;
	var Attr2 = new clsAttr;
	var Attr3 = new clsAttr;
	var SCSLink;

	function BuildSCSSelectionList(lngAttr, lngSize, lngWidth) {
	  var lngI;
	  var Att;
	  var d;
	  var strWidth;
	  var strSize;
	
	  if(lngSize > 0)
		strSize = ' size=' + lngSize + ' ';
	  else
		strSize = '';
	
	  if(lngWidth > 0)
		strWidth = ' width=' + lngWidth + ' ';
	  else
		strWidth = '';
		
	  switch(lngAttr)
	  {
		case 2:
			Att = Attr2;
			break;
		case 3:
			Att = Attr3;
			break;
		default:
			Att = Attr1;
			break;
	  }	
	  d = document;

	  if(Att.Display)
	  {
		if(Att.Display.length > 0)
		{
			d.writeln('<select id=SCSListAtt' + lngAttr + ' name="SCSListAtt' + lngAttr + '" ' + strSize + strWidth + ' style="' + strWidth + '" class="clsSCSList' + lngAttr + '" multiple>');
			for(lngI=0;lngI<Att.Display.length;lngI++)
			{
				if(Att.Selected[lngI] == 1)
					d.writeln('<option value="' + Att.Display[lngI] + '" class="clsSCSListOpt' + lngAttr + '" selected>' + unescape(Att.Display[lngI]) + '</option>');
				else
					d.writeln('<option value="' + Att.Display[lngI] + '" class="clsSCSListOpt' + lngAttr + '">' + unescape(Att.Display[lngI]) + '</option>');
			}		
			d.writeln('</select>');
		}
		d.writeln('<INPUT TYPE="HIDDEN" NAME="SCSListCnt' + lngAttr + '" ID="SCSListCnt' + lngAttr + '" VALUE="' + Att.Display.length + '">');
		d.writeln('<INPUT TYPE="HIDDEN" NAME="SCSSelected' + lngAttr + '" ID="SCSSelected' + lngAttr + '" VALUE="' + Att.Selected + '">');
	  }
	  else
	  {
		d.writeln('<INPUT TYPE="HIDDEN" NAME="SCSListCnt' + lngAttr + '" ID="SCSListCnt' + lngAttr + '" VALUE="-1">');
		d.writeln('<INPUT TYPE="HIDDEN" NAME="SCSSelected' + lngAttr + '" ID="SCSSelected' + lngAttr + '" VALUE="0">');
	  }
	}

	function ViewSCS() {
	  var lngSCS;
	  var lngOpt;
	  var frm;
	  var opt;
	  var strDisplay;
	
	  frm = document.form1 
	
	  for(lngSCS = 1; lngSCS <= 2; lngSCS++)
	  {
		strDisplay = '';
		if(typeof frm.elements['SCSListAtt' + lngSCS] != 'undefined')
		{
			opt = frm.elements['SCSListAtt' + lngSCS].options;
			for(lngOpt = 0; lngOpt < opt.length; lngOpt++)
			{
				if(lngOpt != 0)
					strDisplay += ',';
					
				if(opt[lngOpt].selected)
					strDisplay += '1';
				else
					strDisplay += '0';
			}
			frm.elements['SCSSelected' + lngSCS].value = strDisplay;
		}		
	  }	

	  frm.action = SCSLink;
	  frm.submit();
	  return true;
	}


	function GetAddInfo(PopupTitle, ASPFormName, w, h, PostBackFormName, PostBackControlName1, PostBackControlName2, mscssid, pf_id) 
	{
	  var winl = (screen.width - w) / 2;
	  var wint = (screen.height - h) / 2;

	  winprops = 'height='+h+',width='+w+',top='+wint+',left='+winl+',location=no,scrollbars=no,menubars=no,dependent=yes,toolbars=no,resizable=no';
	  var page = ASPFormName+'?PopupTitle='+PopupTitle+'&PostBackFormName='+PostBackFormName+'&PostBackControlName1='+PostBackControlName1+'&PostBackControlName2='+PostBackControlName2+'&mscssid='+mscssid+'&pf_id='+pf_id;
	  DispWin = window.open(page, "Popup", winprops);
	  if (parseInt(navigator.appVersion) >= 4) { DispWin.window.focus()};
	    return true;
	}

function HandleWhiteSpaces(e){
		
		try{		
			var n;
		 	var n1 = 0;
						
			for (n=0; n < e.value.length; n++){
				if (e.value.charAt(n) == ' '){
					n1 = parseInt(n1) + 1;
				}
			}
									
			if (n1 == e.value.length){
				e.value = "";
			}
			
		}catch(e){
			//alert(e);
		}
		
	
	}
	
	
	//To Validate All OLIS Template Attached with the product
	function ValidateOLISAPTemplate(Object)
	{
	 
		var webPrompt = '', controllerPrompt = '', rangeMin = '', rangeMax = '';
		var isRequired = false;
		
		var editType = '', formatType = '';
	
	    //var separator = new String("");
       // var temp = new String;   
        var lngTotalOLISItem ;
        var err;
        var i,j ;
          
         var templateid; 
         var OLISArrayName;
       
        lngTotalOLISItem= Object.elements['TotalOLIS'].value;
        
        // Naviage through each OLIS Items 
        for (i = 0; i < lngTotalOLISItem; i++)
        {   
           //alert('value of i ' + i + ': ' + Object.elements['AddInfoExist'+i].value);   
            
            // check this is a Template from OLIS attached Product
             if (Object.elements['AddInfoExist'+i].value=="1")
               {
                  //  alert ('Template Exist ' + i);
                  
                  
                  //Code Block for generating OLIS AP Array ..that was created by XLS
                  // Array Name  format--> AP + TemplatedID with left padding of zeros
                  //Ex Template Id = 10  .. append zeros in left
                  //AP+right('00000010')--> AP0000010
                   templateid= Object.elements['OLISTemplateID'+i].value;
                   
                   OLISArrayName='0000000'+ templateid;
                   var APObject= eval('AP'+Right(OLISArrayName,7));
                    
                    //Move J to start position of OLIS Items
                      for (j = 0; j < Object.elements.length; j++)
                       {
                         if (Object.elements[j].name ==Object.elements['AddInfoExist'+i].name) 
                              {
                              //reached staring position
                              j = j+1;
                              break;
                              }
                       }
                    
                           var k; //OLIS AP TemplateArray
                            k = 0;  
                          
                             while(k < Object.elements['AICount'+i].value)
                             {
                              //Get Individual field  info
                              webPrompt = APObject[k].webPrompt;
			                  controllerPrompt = APObject[k].controllerPrompt;
			                  rangeMin = APObject[k].min;
			                  rangeMax = APObject[k].max;
			                  isRequired = APObject[k].isRequired;
			                  editType = APObject[k].editType;
			                  	
			                 //alert( Object.elements[j].name +'  ' + webPrompt + ' isRequired ' + isRequired + '  editType ' + editType);
			                  if (isRequired) {
			                  switch (editType)
                              {
                              case "D":
                              
                                            if ((Object.elements[j+2].selectedIndex == 0) ||(Object.elements[j].selectedIndex == 0) || (Object.elements[j+1].selectedIndex == 0))
					                         {
					                          Object.elements[j].focus();		
					                          return translateAIMessage(APT_REQUIRED_MSG, controllerPrompt, webPrompt, rangeMin, rangeMax);
      						                 } 
      						                 else {
						                        if (getMonthDays(Object.elements[j].value, Object.elements[j+2].value) < getNumber(Object.elements[j+1].value)) 
							                      {
							                        Object.elements[j+1].focus();
							                        return translateAIMessage(APT_INVALID_DATE_MSG, controllerPrompt, webPrompt, rangeMin, rangeMax);
						                           }
						                     }
                                    j = j +2;  //for date field move the j position (2 )
                                    break;
                              case "N":
                                    if (Object.elements[j].value == "")
						            {
						                Object.elements[j].focus();						
						    	        return translateAIMessage(APT_REQUIRED_MSG, controllerPrompt, webPrompt, rangeMin, rangeMax);
					                }
					              else {
					                    if (APObject[k].isNumeric && !isInteger(Object.elements[j].value)) 
						                  {
								            Object.elements[j].focus();
								            return translateAIMessage(APT_NUMERIC_MSG, controllerPrompt, webPrompt, rangeMin, rangeMax);
								          } 
					                     } 
					                break;
					           case "T" :
					               if (Object.elements[j].selectedIndex == 0) 
						            {
						            Object.elements[j].focus();
						            return translateAIMessage(APT_REQUIRED_MSG, controllerPrompt, webPrompt, rangeMin, rangeMax);   
					                }
	                                break;
                                // indsigma 29/07/06 
                                // Added from ValidateAITemplate
					            case "R" :
					                  if (Object.elements[j].value == "") {
                                            Object.elements[j].focus();
                                            return translateAIMessage(APT_REQUIRED_MSG, controllerPrompt, webPrompt, rangeMin, rangeMax);
                                        } else {
                                      //  alert( 'value :' + Object.elements[j].value + ' rangeMin: ' + rangeMin +  'rangeMax: '+ rangeMax);
                                            if (APObject[k].isNumeric) {
                                                if (isInteger(Object.elements[j].value)) {
                                                    if ((parseInt(Object.elements[j].value) < parseInt(rangeMin)) ||
                                                        (parseInt(Object.elements[j].value) > parseInt(rangeMax))) {
                                                        Object.elements[j].focus();
                                                        return translateAIMessage(APT_INVALID_RANGE_MSG, controllerPrompt, webPrompt, rangeMin, rangeMax);
                                                    }
                                                } else {
                                                    Object.elements[j].focus();
                                                    return translateAIMessage(APT_NUMERIC_MSG, controllerPrompt, webPrompt, rangeMin, rangeMax);
                                                }
                                            } else {
                                          
                                                if ((Object.elements[j].value < rangeMin) ||
                                                    (Object.elements[j].value > rangeMax)) {
                                                  
                                                    Object.elements[j].focus();
                                                    return translateAIMessage(APT_INVALID_RANGE_MSG, controllerPrompt, webPrompt, rangeMin, rangeMax);
                                                }
                                            }
                                        }

				
					            
					             } // end of switch
					           } // end of required or not if
					          k = k +1;
					          j = j+1;   
                        }//end of while  
             
              }//else  'OLIS exist
         } //for
	         
	    return '';
	}
	
	
	
	 function Right(str, n)
        /***
                IN: str - the string we are RIGHTing
                    n - the number of characters we want to return

                RETVAL: n characters from the right side of the string
        ***/
        {
                if (n <= 0)     // Invalid bound, return blank string
                   return "";
                else if (n > String(str).length)   // Invalid bound, return
                   return str;                     // entire string
                else { // Valid bound, return appropriate substring
                   var iLen = String(str).length;
                   return String(str).substring(iLen, iLen - n);
                }
        }
       
       // indsigma 28/07/06
       // Triage : 1471
       // To fill/Retain the OLIS AI info into the Additional info Text Box
       // code copied from BuildOLISAddinfo
        function RetainOLIS_AIInfo(Object)
         {
        var separator = new String("");
        var temp = new String;   
        var lngTotalOLISItem ;
        var i,j ;
          // check this is a Template from OLIS attached Product
          
                         
        lngTotalOLISItem= Object.elements['TotalOLIS'].value;
  
		
        for (i = 0; i < lngTotalOLISItem; i++)
        {       //alert('value of i ' + i + ': ' + Object.elements['AddInfoExist'+i].value);   
             if (Object.elements['AddInfoExist'+i].value=="1")
               {
                    //alert ('Template Exist ' + i);
                  
                    
                    for (j = 0; j < Object.elements.length; j++)
                      {
                         if (Object.elements[j].name ==Object.elements['AddInfoExist'+i].name) 
                              {
                             //alert ('we reached that starting position' );
                            //Reset all the values .. 
                            temp ='';
                            separator = "";
                           while(1)
                             {
                            
                             if (String(Object.elements[j+1].name).substring(0,14) == 'OLIS_itemMonth')
                              {
                              // Date Field is filtered
                            //    alert('date is found' + Object.elements[j+1].name);
                              //To hold a separator for either side of date field
                            //  if (temp!='')
                              
                              //   separator = "~";   //
                                
                                temp= temp + separator+ Object.elements[j+1].value+''+ Object.elements[j+2].value + '' + Object.elements[j+3].value;
                                j = j+3;
                                separator = "~";
                                
                              }
                              
                              
                              
                            
                              if (Object.elements[j+1].name == Object.elements['AdditionalOLISInfoInput'+i].name )
                                { //alert (We reached end position);
                                //  alert ( 'Template content of ' + i + ' ::' + temp );
                                  //Assign back to hidden control
                                   Object.elements['AdditionalOLISInfoInput'+i].value = temp;
                                 
                                  break;
                                 }
                                else
                                 {  
                                    temp= temp + separator + Object.elements[j+1].value ;   
                                 }
                                j = j+1;
                               separator = "~";
                              } //end of while
                          }  //end  of if
                    
                }  //end of for
             }//else 
              //  alert('Template not Exist ' + i);
                   
         }
	          
	 
         }




function callFreeItem(e){
	
		try{
			window.location.href = "freeitem.asp?banner=" + e;
		}	
		catch(e){
			//alert(e);
		}
		
	}

function validatefamilyInput(Type, Object) {
		var blnReturn;
		var FieldDescription;
		var Items, i;
		var GoodDigits = "123456789";
		var tmpQty, tmpStripedQty;
		var tmpTotalQtyOrdered = 0;
		var frmobject=Object.form;
		
		blnReturn = true;

		if (AddPromotionToBasketClick == false) 
		{	
			// check whether quantity exceeds maximum
			if (isValidQty(Object,"")) {
				// if okay, check if quantity is integer or decimal
				if (Type=='Integer') 
				{
					

					if (isInteger(Object.value) || isEmpty(Object.value)) 
					{
					    //Fine So Far
						if (Object.value==0) 
						{
					    		alert('This field must not be zero(i.e. 1)');
							
							Object.focus();
							blnReturn = false;
							
						}
					}
					else 
					{
						alert('This field must be a whole number (i.e. 1)');
						
						Object.focus();
						blnReturn = false;
					}
				} 
				else if (Type=='Decimal') 
				{
					if (isFloat(Object.value) || isEmpty(Object.value)) 
					{
					    //Fine So Far
					}
					else 
					{
						alert('This field must be a whole or decimal number (i.e. 1 or 1.125) up to 3 decimal positions.');
						Object.focus();
						blnReturn = false; 
					}
				}
			} else {
				blnReturn = false;
			}
		} 
		else 
		{
			if (frmobject.elements[PType + "PromotionMaxItems"] != null) 
			{
				Items = frmobject.elements[PType + "PromotionMaxItems"].value
				for (i = 1; i <= Items; i++) 
				{
					FieldDescription = frmobject.elements[PType + "txtFieldDescription" + i].value;

					if (frmobject.elements[PType + "txtIsFractional" + i].value == 'N') 
					{
						if (isEmpty(frmobject.elements[PType + "ListItemEditQty" + i].value)) 
						{
							frmobject.elements[PType + "ListItemEditQty" + i].value = '0';
						} 
						else 
						{
							if (isValidQty(frmobject.elements[PType + "ListItemEditQty" + i], FieldDescription)) 
							{
								if (isInteger(frmobject.elements[PType + "ListItemEditQty" + i].value)) 
								{				
									tmpTotalQtyOrdered = tmpTotalQtyOrdered + parseInt(frmobject.elements[PType + "ListItemEditQty" + i].value);
								} else {
									alert('The item "' + FieldDescription + '" must be a whole number (i.e. 1)');
									frmobject.elements[PType + "ListItemEditQty" + i].focus();
									blnReturn = false; 
								}
							} else {
								blnReturn = false;
							}
						}
					} 
					else if (frmobject.elements[PType + "txtIsFractional" + i].value == 'Y') 
					{
						if (isEmpty(frmobject.elements[PType + "ListItemEditQty" + i].value)) 
						{
							frmobject.elements[PType + "ListItemEditQty" + i].value = "0";						
						}
						else
						{
							if (isValidQty(frmobject.elements[PType + "ListItemEditQty" + i],FieldDescription)) {
								if (isFloat(frmobject.elements[PType + "ListItemEditQty" + i].value)) {
									tmpTotalQtyOrdered = tmpTotalQtyOrdered + parseFloat(frmobject.elements[PType + "ListItemEditQty" + i].value);
								} else {
									alert('The item "' + FieldDescription + '" must be a whole or decimal number (i.e. 1 or 1.125) up to 3 decimal positions.');
									frmobject.elements[PType + "ListItemEditQty" + i].focus();
									blnReturn = false; 
								}
							} else {
								blnReturn = false;
							}
						}
					}

					if (frmobject.elements[PType + "StyleMasterInfoRequired" + i].value == 'True') 
					{
						tmpQty = frmobject.elements[PType + "ListItemEditQty" + i].value;
						tmpStripedQty = stripCharsNotInBag(tmpQty, GoodDigits);
						if (tmpStripedQty.length > 0) 
						{
							if (isWhitespace(frmobject.elements[PType + "txtStyleMasterInfo" + i])) 
							{
								alert('There are style(s), color(s) or size(s) required for item "' + FieldDescription + '".');
								frmobject.elements[PType + "ListItemEditQty" + i].focus();
								blnReturn = false;
							}
						}
					}
				}
				if (tmpTotalQtyOrdered == 0 && blnReturn == true) 
				{
					alert('Total quantities ordered can not be 0.  Please enter a quantity greater than 0');
					frmobject.elements[PType + "ListItemEditQty" + 1].focus();
					blnReturn = false;
				}
			}
			frmobject.action = frmobject.elements[PType + "PromotionstrFormAction"].value
		}

		return blnReturn;
	}
