﻿var iKeys = 0;
var productType = 1;
var cartIsValid = true;
var ignorePopup = false;
var focusField = null;
var defGift = '';
var maxItemsForCurrentProduct = -1;
var noItemsForCurrentProduct = 0;
var ad = 0;

function SendXMLHttp(sUrl, sType)
{
  var today = new Date();
  var sToken = GetRandomNumber(20, 'no')
  var iTime = today.getHours() * 3600000 + today.getMinutes() * 60000 + today.getSeconds() * 1000 + today.getMilliseconds()
  
  var oXML = new ActiveXObject("Msxml2.XMLHTTP");
  
  if (sUrl.indexOf('?') > -1)
    sUrl += '&'
  else
    sUrl += '?'
    
  sUrl += 'time=' + sToken + '-' + iTime;
  oXML.Open(sType, sUrl, false);

  if (sType == "POST")
  	oXML.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")

 	oXML.send(); //Send the stream
 
  var ret = oXML.responseText;
  
  return (ret)
}


function setDropDownValue(ddl, value)
{
  ddl.selectedIndex = -1;
  
  for (var i=0; i < ddl.length; i++)
  {
    if (ddl.options[i].value == value)
      ddl.options[i].selected = true;
  }
}

function selectAll(select) 
{
   var formObj = document.forms[0];
   
   for (var i=0;i < formObj.length;i++) 
   {
      fldObj = formObj.elements[i];
      
      if (fldObj.type == 'checkbox')
      { 
         fldObj.checked = select;
      }
      else if (fldObj.type == 'radio')
      {
        fldObj.checked = select;
      }
   }
}

function selectAllText(obj)
{ 
  if (obj != null)
  {
    obj.focus();
    obj.select();
  }
}

function findElement(id) 
{
   var formObj = document.forms[0];
   for (var i=0;i < formObj.length;i++) 
   {
      fldObj = formObj.elements[i];
      if (fldObj.id.search(id) != -1)
        return fldObj;
   }
   
   return null;
}

function findItem(id) 
{
   for (var i=0;i < document.all.length;i++) 
   {
      fldObj = document.all[i];
      if (fldObj.id.search(id) != -1)
        return fldObj;
   }
   
   return null;
}

function findImage(id) 
{
   for (var i=0;i < document.images.length;i++) 
   {
      fldObj = document.images[i];
      if (fldObj.id.search(id) != -1)
        return fldObj;
   }
   
   return null;
}


// --------------- DATE FUNCTIONS ----------------

// Declaring valid date character, minimum year and maximum year
var dtCh= "/";
var minYear=1900;
var maxYear=2100;

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 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 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 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 isDate2(dtStr){
	var daysInMonth = DaysArray(12)
	var pos1=dtStr.indexOf(dtCh)
	var pos2=dtStr.indexOf(dtCh,pos1+1)
	var strMonth=dtStr.substring(0,pos1)
	var strDay=dtStr.substring(pos1+1,pos2)
	var strYear=dtStr.substring(pos2+1)
	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){
		//alert("The date format should be : mm/dd/yyyy")
		return false
	}
	if (strMonth.length<1 || month<1 || month>12){
		//alert("Please enter a valid month")
		return false
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
		//alert("Please enter a valid day")
		return false
	}
	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
		//alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear)
		return false
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
		//alert("Please enter a valid date")
		return false
	}
return true
}






function FormatDate(DateToFormat,FormatAs){
  if(DateToFormat==""){return"";}
  if(!FormatAs){FormatAs="dd/mm/yyyy";}

  var strReturnDate;
  FormatAs = FormatAs.toLowerCase();
  DateToFormat = DateToFormat.toLowerCase();
  var arrDate
  var arrMonths = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
  var strMONTH;
  var Separator;

  while(DateToFormat.indexOf("st")>-1){
    DateToFormat = DateToFormat.replace("st","");
  }

  while(DateToFormat.indexOf("nd")>-1){
    DateToFormat = DateToFormat.replace("nd","");
  }

  while(DateToFormat.indexOf("rd")>-1){
    DateToFormat = DateToFormat.replace("rd","");
  }

  while(DateToFormat.indexOf("th")>-1){
    DateToFormat = DateToFormat.replace("th","");
  }

  if(DateToFormat.indexOf(".")>-1){
    Separator = ".";
  }

  if(DateToFormat.indexOf("-")>-1){
    Separator = "-";
  }


  if(DateToFormat.indexOf("/")>-1){
    Separator = "/";
  }

  if(DateToFormat.indexOf(" ")>-1){
    Separator = " ";
  }

  arrDate = DateToFormat.split(Separator);
  DateToFormat = "";
	  for(var iSD = 0;iSD < arrDate.length;iSD++){
		    if(arrDate[iSD]!=""){
		    DateToFormat += arrDate[iSD] + Separator;
		  }
	  }
  DateToFormat = DateToFormat.substring(0,DateToFormat.length-1);
  arrDate = DateToFormat.split(Separator);

  if(arrDate.length < 3){
    return "";
  }

  var DAY = arrDate[0];
  var MONTH = arrDate[1];
  var YEAR = arrDate[2];




  if(parseFloat(arrDate[1]) > 12){
    DAY = arrDate[1];
    MONTH = arrDate[0];
  }

  if(parseFloat(DAY) && DAY.toString().length==4){
    YEAR = arrDate[0];
    DAY = arrDate[2];
    MONTH = arrDate[1];
  }


  for(var iSD = 0;iSD < arrMonths.length;iSD++)
  {
    var ShortMonth = arrMonths[iSD].substring(0,3).toLowerCase();
    var MonthPosition = DateToFormat.indexOf(ShortMonth);
	    if(MonthPosition > -1)
	    {
	      MONTH = iSD + 1;
		      if(MonthPosition == 0)
		      {
		        DAY = arrDate[1];
		        YEAR = arrDate[2];
		      }
	    break;
	    }
  }

  var strTemp = YEAR.toString();
  if(strTemp.length==2)
  {
	  if(parseFloat(YEAR)>40)
	  {
	    YEAR = "19" + YEAR;
	  }
	  else
	  {
	    YEAR = "20" + YEAR;
	  }

  }


	  if(parseInt(MONTH)< 10 && MONTH.toString().length < 2)
	  {
	  MONTH = "0" + MONTH;
	  }
	  if(parseInt(DAY)< 10 && DAY.toString().length < 2)
	  {
	    DAY = "0" + DAY;
	  }
    switch (FormatAs)
    {
      case "dd/mm/yyyy":
        return DAY + "/" + MONTH + "/" + YEAR;
      case "mm/dd/yyyy":
        return MONTH + "/" + DAY + "/" + YEAR;
      case "dd/mmm/yyyy":
        return DAY + " " + arrMonths[MONTH -1].substring(0,3) + " " + YEAR;
      case "mmm/dd/yyyy":
        return arrMonths[MONTH -1].substring(0,3) + " " + DAY + " " + YEAR;
      case "dd/mmmm/yyyy":
        return DAY + " " + arrMonths[MONTH -1] + " " + YEAR;	
      case "mmmm/dd/yyyy":
        return arrMonths[MONTH -1] + " " + DAY + " " + YEAR;
	  }

  return DAY + "/" + strMONTH + "/" + YEAR;;

}

function isDate(DateToCheck){
  if(DateToCheck==""){return true;}
  
  var m_strDate = FormatDate(DateToCheck);
  
  if(m_strDate==""){
    return false;
  }
  
  var m_arrDate = m_strDate.split("/");
  var m_DAY = m_arrDate[0];
  var m_MONTH = m_arrDate[1];
  var m_YEAR = m_arrDate[2];
  if(m_YEAR.length > 4){return false;}
  
  m_strDate = m_MONTH + "/" + m_DAY + "/" + m_YEAR;
  var testDate=new Date(m_strDate);
  
  if(testDate.getMonth()+1==m_MONTH){
    return true;
  } 
  else
  {
    return false;
  }
}//end function







// ------------------- END OF DATE FUNCTIONS -----------------------------------

function isPrice(price, canBeNegative)
 {
	  var i;
	  var s = price;
	  
	  if (s == "")
	  {
	    return false;
	  }
	  
    for (i = 0; i < s.length; i++){   
        // Check that current character is number.
        var c = s.charAt(i);
        if ((((c < "0") || (c > "9")) && (c != ".") && (c != "-")))
        {
          return false;
        }
    }
    
    if (canBeNegative == false)
    {
      if (parseFloat(price) < 0)
      {
        return false;
      }
    }
    
    // All characters are numbers.
    return true;
}

function isDecimal(price)
 {
	  var i;
	  var s = price;
	  
	  if (s == "")
	  {
	    return false;
	  }
	  
    for (i = 0; i < s.length; i++){   
        // Check that current character is number.
        var c = s.charAt(i);
        if ((((c < "0") || (c > "9")) && (c != ".")))
        {
          return false;
        }
    }
    
    // All characters are numbers.
    return true;
}

function val_IsDate(sender, args)
 {
   args.IsValid = isDate(args.Value);
 }
 
 
 function val_IsInteger(sender, args)
 {
   args.IsValid = isInteger(args.Value);
   
   if (parseInt(args.Value) < 0)
        args.IsValid = false;
}

function val_IsDiscount(sender, args)
 {
	  var i;
	  var s = args.Value;
	  
	  if (s == "")
	  {
	    args.IsValid = false;
	    return;
	  }
	  
    for (i = 0; i < s.length; i++){   
        // Check that current character is number.
        var c = s.charAt(i);
        if ((((c < "0") || (c > "9")) && (c != ".")))
        {
          args.IsValid = false;
          return;
        }
    }
    
    // also check for not greater than 100 or less than 0.
    if (args.IsValid)
    {
        if (parseFloat(args.Value) > 100 || parseFloat(args.Value) < 0)
        {
          args.IsValid = false;
          return;
        }
    }
    
    // All characters are numbers.
    args.IsValid = true;
}

function val_IsPositivePrice(sender, args)
{
    args.IsValid = isPrice(args.Value, false);
}

function val_IsPrice(sender, args)
{
    args.IsValid = isPrice(args.Value, true);
}

function val_IsDecimal(sender, args)
{
    args.IsValid = isDecimal(args.Value);
}


function val_Strand(sender, args)
{
  var strand = findElement('StrandCheckBox')
  var valid = true;
  
  if (strand != null)
  {
    if (strand.checked)
    {
      if (args.Value != "")
      {
        valid = isInteger(args.Value);
        
        if (valid)
          if (parseInt(args.Value) <= 0)
            valid = false;
      }
      else
        valid = false;
    }
  }
  
  args.IsValid = valid;
}

function val_Engraving(sender, args)
{
  var strand = findElement('EngravingCheckBox')
  var valid = true;
  
  if (strand != null)
  {
    if (strand.checked)
    {
      if (args.Value != "")
      {
        valid = isInteger(args.Value);
        
        if (valid)
          if (parseInt(args.Value) <= 0)
            valid = false;
      }
      else
        valid = false;
    }
  }
  
  args.IsValid = valid;
}

var poppedWindow = null;

function popWindow(url, name, width, height)
{
  var left = (screen.availWidth - width) / 2;
  var top = (screen.availHeight - height) / 2;
  poppedWindow = window.open(url, name, 'width=' + width + ',height=' + height + 
                        'left=' + left + ',top=' + top + ', status=yes,scrollbars=yes,resizable=yes');
  poppedWindow.focus();
}

function popImageWindow(url, name, width, height)
{
  var left = (screen.availWidth - width) / 2;
  var top = (screen.availHeight - height) / 2;
  poppedWindow = window.open(url, name, 'width=' + width + ',height=' + height + 
                        'left=' + left + ',top=' + top);
  poppedWindow.focus();
}

function writeToWindow(win, txt)
{
  win.document.write(txt);
}





// Declaring required variables
var digits = "0123456789";
// non-digit characters which are allowed in phone numbers
var phoneNumberDelimiters = "()- ";
// characters which are allowed in international phone numbers
// (a leading + is OK)
var validWorldPhoneChars = phoneNumberDelimiters + "+";
// Minimum no of digits in an international phone no.
var minDigitsInIPhoneNumber = 10;

function checkInternationalPhone(strPhone)
{
  s=stripCharsInBag(strPhone,validWorldPhoneChars);
  return (isInteger(s) && s.length >= minDigitsInIPhoneNumber);
}

function val_Phone(sender, args)
{
  args.IsValid = checkInternationalPhone(args.Value)
}










function addOption(selectbox,text,value )
{
  var optn = document.createElement("OPTION");
  optn.text = text;
  optn.value = value;
  selectbox.options.add(optn);
}


function addPropertyValue()
{
  var tb = findElement('PropertyValueTextBox');
  var ddl = findElement('PropertyValuesDropDownList');
  
  if (tb == null || ddl == null)
    return false;
  
  if (tb.value == "")
    return false;
    
  
  addOption(ddl, tb.value, tb.value);
  tb.value = '';
  tb.focus();
  return false;
}

function removePropertyValue()
{
  var ddl = findElement('PropertyValuesDropDownList');
  
  if (ddl == null)
    return;
  
  var i; 
  for (i = ddl.length - 1; i>=0; i--)
  { 
    if (ddl.options[i].selected)
    { 
      ddl.remove(i); 
    } 
  } 

    
  return false;
}


function checkPropertyValues()
{
  return true;
  
  var tb = findElement('PropertyNameTextBox');
  var ddl = findElement('PropertyValuesDropDownList');
  
  if (tb == null || ddl == null)
    return false;
    
  if (tb.value == "" && ddl.length > 0)
  {
    alert('You have Property Values assigned but no Property Name')
    return false;
  }
  else if (tb.value != "" && ddl.length == 0)
  {
    alert('You have entered a Property Name but have not assigned any Property Values.')
    return false;
  }
  else
    return true;
}

function changeClasp()
{
  ddl = findElement('ClaspDropDownList')
  img = findImage('ClaspImage')
  
  if (ddl == null || img == null)
    return;
  
  img.src = 'images/' + claspImg[ddl.selectedIndex]
  img.style.visibility = 'visible';
}

function changeSlide()
{
  ddl = findElement('SlideDropDownList')
  img = findImage('SlideImage')
  
  if (ddl == null || img == null)
    return;
  
  if (ddl.selectedIndex == 0)
  {
    img.src = '';
    img.style.visibility = 'hidden';
  }
  else
  {
    img.src = 'images/' + slideImg[ddl.selectedIndex]
    img.style.visibility = 'visible';
  }
}

function changeCrystal()
{
  ddl = findElement('CrystalDropDownList')
  img = findImage('CrystalImage')
  
  if (ddl == null || img == null)
    return;
  
//  if (ddl.selectedIndex == 0)
//  {
//    img.src = '';
//    img.style.visibility = 'hidden';
//  }
//  else
//  {
    img.src = 'images/crystaladdon/' + crystalImg[ddl.selectedIndex]
    img.style.visibility = 'visible';
//  }
}

function changeTagImage()
{
  ddl = findElement('TagListDropDownList')
  img = findImage('TagListImage')
  
  if (ddl == null || img == null)
    return;
  
  img.src = 'images/tags/' + tagImg[ddl.selectedIndex]
  img.style.visibility = 'visible';
}




function GetRandomNumber(number,symbols)
{
  var length=62;
  var character = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ£$%&*+-?<>";
  var password="";
  if(symbols=="yes"){length=length+10}
  for (var i=0; i<=(number-1);i++){
  var rand = Math.floor(Math.random()*length);
  password = password+=character.substring(rand,rand+1)}
  return password
}


function SendXMLHttp(sUrl, sType)
{
  var today = new Date();
  var sToken = GetRandomNumber(20, 'no')
  var iTime = today.getHours() * 3600000 + today.getMinutes() * 60000 + today.getSeconds() * 1000 + today.getMilliseconds()
  var oXML = new ActiveXObject("Msxml2.XMLHTTP");
  
  sUrl = sUrl + '&time=' + sToken + '-' + iTime;
  oXML.Open(sType, sUrl, false);

  if (sType == "POST")
  	oXML.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")

 	oXML.send(); //Send the stream
 
  var ret = oXML.responseText;
  return (ret)
}

function addToNewsletter(path)
{
  var email = findElement('NewsletterEmailTextBox')
  
  if (email == null)
    alert('you must enter an email address');
  else if (email.value == '' || email.value == 'enter e-mail address here')
    alert('you must enter an email address');
  else
  {
    var resp = SendXMLHttp(path + '?email=' + email.value, 'GET');
    resp = resp.substring(0,1);
        
    if (resp == '1')
      alert('You have been added to our newsletter.  Thank you.');
    else if (resp == '0')
      alert('There was a problem adding you to our newsletter.  Please try again later');
    else
    {
      selectAllText(email);
      alert('You have entered an invalid email address');
    }
  }
}

function ignoreEnter2(myfield, e)
{
  var keycode;
  if (window.event) keycode = window.event.keyCode;
  else if (e) keycode = e.which;
  else return true;

  if (keycode == 13)
   return false;
  else
   return true;
}

function ignoreEnter() 
{
alert(!(window.event && window.event.keyCode == 13))
  return !(window.event && window.event.keyCode == 13); 
}

function enterPressed(myfield, e)
{
  var keycode;
  if (window.event) keycode = window.event.keyCode;
  else if (e) keycode = e.which;
  else return true;

  if (keycode == 13)
   return true;
  else
   return false;
}

function submitEnterButton(myfield,e, button)
{
  var keycode;
  if (window.event) keycode = window.event.keyCode;
  else if (e) keycode = e.which;
  else return true;

  if (keycode == 13)
     {
     button.click();
     return false;
     }
  else
     return true;
}

function submitEnter(myfield,e)
{
  var keycode;
  if (window.event) keycode = window.event.keyCode;
  else if (e) keycode = e.which;
  else return true;

  if (keycode == 13)
     {
     myfield.form.submit();
     return false;
     }
  else
     return true;
}


function CountWords (this_field, show_word_count, show_char_count) {
  if (show_word_count == null) {
    show_word_count = true;
  }
  if (show_char_count == null) {
    show_char_count = false;
  }
  
  var char_count = this_field.value.length;
  var fullStr = this_field.value + " ";
  var initial_whitespace_rExp = /^[^A-Za-z0-9]+/gi;
  var left_trimmedStr = fullStr.replace(initial_whitespace_rExp, "");
  var non_alphanumerics_rExp = rExp = /[^A-Za-z0-9]+/gi;
  var cleanedStr = left_trimmedStr.replace(non_alphanumerics_rExp, " ");
  var splitString = cleanedStr.split(" ");
  var word_count = splitString.length -1;
  
  if (fullStr.length <2) {
    word_count = 0;
  }
  if (word_count == 1) {
    wordOrWords = " word";
  }
  else {
    wordOrWords = " words";
  }
  
  if (char_count == 1) {
    charOrChars = " character";
  } else {
    charOrChars = " characters";
  }
  
  if (show_word_count & show_char_count) {
    alert ("Word Count:\n" + "    " + word_count + wordOrWords + "\n" + "    " + char_count + charOrChars);
  }
  else {
    if (show_word_count) {
      alert ("Word Count:  " + word_count + wordOrWords);
    }
    else {
      if (show_char_count) {
        alert ("Character Count:  " + char_count + charOrChars);
        }
     }
  }
  return word_count;
}


/* snowman */
var noSnowmen = 0;
var snowMen = new Array()
var snowMenDesc = new Array()

snowMenDesc[0] = 'Black hat with black crystal'
snowMenDesc[1] = 'Red hat with red crystal'
snowMenDesc[2] = 'Amethyst hat and crystal'
snowMenDesc[3] = 'Red hat with amethyst crystal'
snowMenDesc[4] = 'Light sapphire hat and crystal'
snowMenDesc[5] = 'Rose hat and crystal'
snowMenDesc[6] = 'Sapphire hat and crystal'
snowMenDesc[7] = 'Tanzanite hat and crystal'
snowMenDesc[8] = 'Blue Angel'
snowMenDesc[9] = 'Clear Angel'
snowMenDesc[10] = 'Dark Ping Angel'
snowMenDesc[11] = 'Purple Angel'
snowMenDesc[12] = 'Green Angel'
snowMenDesc[13] = 'Red Angel'
snowMenDesc[14] = 'Christmas tree Charm'
snowMenDesc[15] = 'Tree Charm with Bali Stand'

function addSnowman(snowmanNo)
{
  var oSnowman = document.getElementById('snowmanDiv');
  var ddl = null;
  var i = parseInt(noSnowmen) + 1;
  
  ddl = 'Snowman ' + i + ': ' + snowMenDesc[snowmanNo - 1]
  
  var newdiv = document.createElement('div');
  newdiv.setAttribute('id', 'snowmanDiv' + i);
  
  ddl = ddl + '<input type="hidden" name="snowmanOption' + i + '" value="' + snowmanNo + ':' + snowMenDesc[snowmanNo-1] + '"/>'
  
  newdiv.innerHTML = newdiv.innerHTML + ddl
  
  ddl = '&nbsp;<a href="javascript: removeSnowman(' + noSnowmen + ');">remove</a>';
  newdiv.innerHTML = newdiv.innerHTML + ddl + '<br/>';
  
  oSnowman.appendChild(newdiv);
  
  snowMen[noSnowmen] = snowmanNo
  noSnowmen = noSnowmen + 1
  
  findElement('SnowmanHiddenField').value = noSnowmen;
}

function removeSnowman(i)
{
  // if we only have one snowman, we wont do anything
  //if (noSnowmen == 1)
    //return;
  
  // first remove the item from the list
  var oSnowman = document.getElementById('snowmanDiv');
  //var olddiv = document.getElementById('snowmanDiv' + i)
  //oSnowman.removeChild(olddiv);
  
  snowMen[i] = ''
  
  // now clear the div
  oSnowman.innerHTML = '';
  
  // create the new list
  setSnowmenItems()
}

function setSnowmenItems()
{
  
  // copy the array
  var tempArray = new Array()
  var count = 0;
  
  for (var i = 0; i < noSnowmen; i++)
  {
    if (snowMen[i] != '')  
    {
      tempArray[count] = snowMen[i]
      count = count + 1
    }
  }
  
  // reset the array
  noSnowmen = 0;
  snowMen = new Array()
    
  for (var i=0; i < count; i++)
  {
    snowMen[i] = tempArray[i]
    addSnowman(snowMen[i])
  }
}

var checkoutEmailWarning = true;

function validationSpecialOptions()
{
  var specialText = '';
  var re = null;
  var ddl = null;
  
  // check if we need to validate email
  var email = findElement('OrderEmailTextBox').value;

  if (findItem('EmailRequired') || email != '')
  {
    if (email == '')
    {
        specialText = specialText + '<li>Email is required</li>';
        findItem('EmailRequired').style.visibility = 'visible';
        if (findItem('EmailExpressionRequired') != null)
            findItem('EmailExpressionRequired').style.visibility = 'hidden';
    }
    else
    {
        if (findItem('EmailRequired'))
            findItem('EmailRequired').style.visibility = 'hidden';
      
      re = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

      if (re.test(email) == false)
      {
          specialText = specialText + '<li>Email is invalid</li>';
          if (findItem('EmailExpressionRequired') != null)
              findItem('EmailExpressionRequired').style.visibility = 'visible';
      }
      else
      {
          if (findItem('EmailExpressionRequired') != null)
              findItem('EmailExpressionRequired').style.visibility = 'hidden';
      }
    }
  }
  
  if (ad == 1 && email == '' && checkoutEmailWarning == true)
  {
    checkoutEmailWarning = false;
    specialText = specialText + 'You have currently not entered an email for this order.  If you forgot to ask for this, do it now.';
    alert('You have currently not entered an email for this order.  If you forgot to ask for this, do it now.');
  }

  findItem('SpecialOptionsErrorDiv').innerHTML = specialText;
  
  if (specialText == '')
    return true
  else
    return false;
}

function validationCheckout(button)
{
    var billingText = '';
    var shippingText = '';
    var re = null;
    var ddl = null;

    // check billing
    if (findElement('BillingFirstNameTextBox').value == '')
    {
        billingText = billingText + '<li>Billing First Name is required.</li>';
        findItem('BillingFirstNameRequiredFieldValidator').style.visibility = 'visible';
    }
    else
        findItem('BillingFirstNameRequiredFieldValidator').style.visibility = 'hidden';

    if (findElement('BillingLastNameTextBox').value == '')
    {
        billingText = billingText + '<li>Billing Last Name is required.</li>';
        findItem('BillingLastNameRequiredFieldValidator').style.visibility = 'visible';
    }
    else
        findItem('BillingLastNameRequiredFieldValidator').style.visibility = 'hidden';


    if (findElement('BillingAddressLine1TextBox').value == '')
    {
        billingText = billingText + '<li>Billing Address Line 1 is required.</li>';
        findItem('BillingAddressLine1RequiredFieldValidator').style.visibility = 'visible';
    }
    else
        findItem('BillingAddressLine1RequiredFieldValidator').style.visibility = 'hidden';


    if (findElement('BillingCityTextBox').value == '')
    {
        billingText = billingText + '<li>Billing City is required.</li>';
        findItem('BillingCityRequiredFieldValidator').style.visibility = 'visible';
    }
    else
        findItem('BillingCityRequiredFieldValidator').style.visibility = 'hidden';


    ddl = findElement('BillingStateDropDownList')
    if (ddl.options[ddl.selectedIndex].value == '')
    {
        billingText = billingText + '<li>Billing State is required.</li>';
        findItem('BillingStateRequiredFieldValidator').style.visibility = 'visible';
    }
    else
        findItem('BillingStateRequiredFieldValidator').style.visibility = 'hidden';


    if (findElement('BillingZipCodeTextBox').value == '')
    {
        billingText = billingText + '<li>Billing ZipCode is required.</li>';
        findItem('BillingZipRequiredFieldValidator').style.visibility = 'visible';
    }
    else
        findItem('BillingZipRequiredFieldValidator').style.visibility = 'hidden';

    if (findItem('BillingDayPhoneRequiredFieldValidator'))
    {
        if (findElement('BillingDayPhoneTextBox').value == '')
        {
            billingText = billingText + '<li>Billing Day Phone is required.</li>';
            findItem('BillingDayPhoneRequiredFieldValidator').style.visibility = 'visible';
        }
        else
            findItem('BillingDayPhoneRequiredFieldValidator').style.visibility = 'hidden';
    }

    // did they click the continue button?  If so validate the shipping as well
    if (button.id.indexOf('ContinueButton') > -1)
    {
        if (findElement('ShippingFirstNameTextBox').value == '')
        {
            shippingText = shippingText + '<li>Shipping First Name is required.</li>';
            findItem('ShippingFirstNameRequiredFieldValidator').style.visibility = 'visible';
        }
        else
            findItem('ShippingFirstNameRequiredFieldValidator').style.visibility = 'hidden';

        if (findElement('ShippingLastNameTextBox').value == '')
        {
            shippingText = shippingText + '<li>Shipping Last Name is required.</li>';
            findItem('ShippingLastNameRequiredFieldValidator').style.visibility = 'visible';
        }
        else
            findItem('ShippingLastNameRequiredFieldValidator').style.visibility = 'hidden';


        if (findElement('ShippingAddressLine1TextBox').value == '')
        {
            shippingText = shippingText + '<li>Shipping Address Line 1 is required.</li>';
            findItem('ShippingAddressLine1RequiredFieldValidator').style.visibility = 'visible';
        }
        else
            findItem('ShippingAddressLine1RequiredFieldValidator').style.visibility = 'hidden';

        if (findElement('ShippingCityTextBox').value == '')
        {
            shippingText = shippingText + '<li>Shipping City is required.</li>';
            findItem('ShippingCityRequiredFieldValidator').style.visibility = 'visible';
        }
        else
            findItem('ShippingCityRequiredFieldValidator').style.visibility = 'hidden';


        ddl = findElement('ShippingStateDropDownList')
        if (ddl.options[ddl.selectedIndex].value == '')
        {
            shippingText = shippingText + '<li>Shipping State is required.</li>';
            findItem('ShippingStateRequiredFieldValidator').style.visibility = 'visible';
        }
        else
            findItem('ShippingStateRequiredFieldValidator').style.visibility = 'hidden';

        if (findElement('ShippingZipCodeTextBox').value == '')
        {
            shippingText = shippingText + '<li>Shipping ZipCode is required.</li>';
            findItem('ShippingZipRequiredFieldValidator').style.visibility = 'visible';
        }
        else
            findItem('ShippingZipRequiredFieldValidator').style.visibility = 'hidden';

        if (findItem('ShippingDayPhoneRequiredFieldValidator'))
        {
            if (findElement('ShippingDayPhoneTextBox').value == '')
            {
                shippingText = shippingText + '<li>Shipping Day Phone is required.</li>';
                findItem('ShippingDayPhoneRequiredFieldValidator').style.visibility = 'visible';
            }
            else
                findItem('ShippingDayPhoneRequiredFieldValidator').style.visibility = 'hidden';
        }
    }

    findItem('BillingErrorsDiv').innerHTML = billingText;
    findItem('ShippingErrorsDiv').innerHTML = shippingText;

    if (billingText == '' && shippingText == '')
        return true
    else
        return false;
}

 function strandTypeOptionClick(checkObj)
{
  // clear all radio buttons
  var obj = null;
  
  obj = findElement('StrandTagTypeDefaultRadioButton');
  obj.checked = false;
  
  obj = findElement('StrandTagTypeRingsTagRadioButton');
  obj.checked = false;
  
  obj = findElement('StrandTagTypeCustomRadioButton');
  obj.checked = false;
  
  // check the one the user wanted
  obj = findElement(checkObj);
  obj.checked = true;
}

function tagTypeOptionClick(checkObj)
{
    // clear all radio buttons
    var obj = null;

    obj = findElement('DefaultTagRadioButton');
    obj.checked = false;

    obj = findElement('RingsTagRadioButton');
    if (obj != null)
        obj.checked = false;

    // check the one the user wanted
    obj = findElement(checkObj);
    obj.checked = true;
}



///// engravings copied from an order or lineitem
var copiedEngravings = new Array()

function setEngravingLines(number)
{
  var obj = null;
  
  var engItems = copiedEngravings[number]
    
  // find how many strands
  for ( var i=1; i <= 5; i++)
  {
    obj = findElement('EngravingItem' + i)
    
    if (obj != null)
    {
      if (engItems[i-1] != null)
        obj.value = engItems[i-1];
      else
        obj.value = '';
    }
  }
}

var defaultButton = null;
function setDefaultButton(btn)
{
  defaultButton = findElement(btn);
}

function doDefaultButton()
{ 
  if (defaultButton == null)
    return true;
  
  if(event.which || event.keyCode)
  {
    if ((event.which == 13) || (event.keyCode == 13))
    {
      defaultButton.click();
      return false;
    }
  }
  
  return true;
}

function SetToFirstControl()
{
    var bFound = false;

    //for each form
    for (f = 0; f < document.forms.length; f++)
    {
        //for each element in each form
        for (i = 0; i < document.forms[f].length; i++)
        {
            //if it's not a hidden element
            if (document.forms[f][i].type != "hidden")
            {
                //and it's not disabled
                if (document.forms[f][i].disabled != true)
                {
                    try
                    {
                        //set the focus to it
                        document.forms[f][i].focus();
                        var bFound = true;
                    }
                    catch (er)
                    {
                    }
                }
            }
            //if found in this element, stop looking
            if (bFound == true)
                break;
        }
        //if found in this form, stop looking
        if (bFound == true)
            break;
    }
}
