// --- gstools.js -----
var sessionGraceTime = 10; // number of grace minutes till session times out
var sessionTimer;
var showSessionStatus = true;
var formIsClean = true;
var makeUpperCase = false;
var PAYPAL_CART = "Paypal";
var SECURE_CART = "Secure";
var carttype = SECURE_CART;
var discountPercent = 0;

function isPaypalCart() {return carttype == PAYPAL_CART}
function isSecureCart() {return carttype == SECURE_CART}
var checkToForceCase = function() { return }

function filterInnerText(inStr) {
var outStr = inStr+"";
var re = /a/
outStr = outStr.replace(/&/g,"&amp;");
outStr = outStr.replace(/</g,"&lt;");
outStr = outStr.replace(/>/g,"&gt;");
return outStr;

}

function startSessionTimer(timeout) {
  sessionTimer = setTimeout("displayGraceWarning()",(timeout-sessionGraceTime)*60000)
  if (showSessionStatus) {
    window.defaultStatus ="Session warning timer: "+(timeout-sessionGraceTime)
    if(window.parent != null) {
      parent.window.defaultStatus ="Session warning timer: "+(timeout-sessionGraceTime)
    }
  }
}

function displayGraceWarning() {
  alert("This work session is about to expire. Click the OK button within "+sessionGraceTime+" minutes to "+
      "extend the session")
  var newWin = window.open("http://www.ngumc.org/chgcon02/login/refreshsession.asp","refreshSession","dependent,fullscreen")
  newWin.focus()
}

function parseDollars(str){
if (str=="") { return 0;}
var aChar = "";
var aStr = "";
var theSign = 1;
var decct = -1;
  for(var i=0; i<str.length; i++){
    aChar = str.charAt(i);
    if (aChar == ".") { decct++; aStr = aStr+aChar}
    if ((aChar == "-")||(aChar == "(")) {theSign = -1}
    if ((aChar >= "0") && (aChar <="9")) {
      if ((aChar != "0") || (aStr != "")){
        aStr = aStr+aChar;
		if (decct >=0) { decct++; if (decct > 2) {break} }
      }
    }
  }
  if (decct == -1) (aStr = aStr + ".00")
  if (decct == 0) (aStr = aStr + "00")
  return (aStr==""? 0 : theSign * parseFloat(aStr));
}

function parseNumber(str){
  return parseDollars(str);
}

function formatDollars(amt) {
  var tStr = ""+Math.floor(Math.abs(amt));
  var fract = ""+(Math.round((Math.abs(amt)-Math.floor(Math.abs(amt)))*100));
  if (fract.length == 1) {fract = "0"+fract}
  aStr = "";
  for (var i=tStr.length-1; i>=0; i--) {
    aStr = tStr.charAt(i)+aStr;
    if (((tStr.length-i) % 3 == 0)&&(i!=0)){ aStr = ","+aStr; }
  }
  aStr = aStr + "."+fract;
  return (amt<0 ? "($"+aStr+")" : "$"+aStr);
}

function formatNumber(amt) {
  var tStr = ""+Math.floor(Math.abs(amt));
  aStr = "";
  for (var i=tStr.length-1; i>=0; i--) {
    aStr = tStr.charAt(i)+aStr;
    if (((tStr.length-i) % 3 == 0)&&(i!=0)){ aStr = ","+aStr; }
  }
  return (amt<0 ? "("+aStr+")" : aStr);
}

function formatDate(theDate) {
  var mo = 0
  var day = 0
  var year = 0
  var tStr;
  var dStr = ""+theDate;
  if (dStr=="") { return "";}
  try {
    tStr = dStr.split(/[\-\/]/g);
  } catch (e) { return "";}
  var aStr = "";
  var numVal = tStr.length;
  if (numVal==0) {return "";}
  year= parseNumber(tStr[numVal-1]);
  if (year < 100) {
    if (year<20) {year+=2000} else {year+=1900}
  }
  if(numVal>1) { 
    mo=parseNumber(tStr[0])
    if (numVal>2){
      day=parseNumber(tStr[1])
    }
  }
  if(mo>0) {
    aStr+=mo+"/";
    if (mo>12) {alert("Invalid month")}
  }
  if(day>0) {
    aStr+=day+"/";
    if (day>31) {alert("Invalid day")}
  }
  aStr+=year;
  if ((year<1900)||(year>2100)) {alert("Check year")}
  return aStr;
}

function cleanupDollars(obj) {
  obj.value = formatDollars(parseDollars(obj.value));
}

function removeFracCents(amt){
  return parseDollars(formatDollars(amt));
}

function cleanupNumber(obj) {
  obj.value = formatNumber(parseNumber(obj.value));
}

function isFormClean() {
  return formIsClean;
}

function dirtyForm() {
  formIsClean = false;
}

function getAmount(amtName,amtOtherName){
  var amt=0;
  var amtObj = document.getElementById(amtName);
  if(amtObj){
    amt = parseNumber(amtObj.value);
    if(amtObj.value == 'other'){
      amtObj = document.getElementById(amtOtherName);
      if(amtObj){
        if(amtObj.value){
          amt = parseNumber(amtObj.value);
        }
      }    
    }
  }
  return amt;
}

var myInitFuncs = new Array(10);
var myInitFuncsIndex = 0;
function init(){
  if(myInitFuncsIndex){
    for (var i=0; i<myInitFuncsIndex; i++){
      myInitFuncs[i]();
    }
  }
}

function addInit(func){
  myInitFuncs[myInitFuncsIndex++] = func;
}


function forcePayPalFront(){
//   window.windows.paypal.focus();
}
function lettersInStr(str){
  var a=str.match(/\S/g);
  return a == null ? 0 :a.length;
}

function capsInStr(str){
  var a=str.match(/[A-Z]/g);
  return a == null ? 0 :a.length;
}

function countLetters(fld,baseid){
  var ct = lettersInStr(fld.value);
  document.getElementById(baseid+'ct').innerHTML = ct;
  var fd = document.getElementById('fontdisplay');
  var font = document.getElementById(baseid+'font').value;
  checkToForceCase(font)
  updateFontDisplayLetters(fld.value);
}
var baseprice=0;
var charcount=0
var charsz=0;
postprocessing = null;
preprocessing = null;
function adjustLetterPrice(baseid){
  var font = document.getElementById(baseid+'font').value;
  checkToForceCase(font)
  var ct = document.getElementById(baseid+'ct').innerHTML * 1;
  var sz = document.getElementById(baseid+'size').value;
  var tksel = document.getElementById(baseid+'thick');
  var tk = tksel!=null?tksel.value:'1';
  var specialsel = document.getElementById(baseid+'special');
  var special = specialsel!=null?specialsel.checked:false;
  var sect = (isPainted==""?baseid : "p"+baseid);
  charcount = ct;
  charsz = sz;
  baseprice = ct * (sz!='' && tk!='' ?prices[sect][tk][sz]:0);
  if(preprocessing!=null){preprocessing(ct,sz,tk,special,baseprice);}
  if(special){baseprice *= 0.90;}
  var subtotal = baseprice + removeFracCents(addCartItemExtras(baseprice));
  var discountobj = document.getElementById('discount');
  var discount = 0;
  if(discountobj && discountPercent != 0) {
	discount = removeFracCents(subtotal * (discountPercent / 100));
	discountobj.innerHTML = formatDollars(discount);
	var subtotalobj = document.getElementById('subtotal');
	if(subtotalobj) { subtotalobj.innerHTML = formatDollars(subtotal);}
   }
  var totalprice = subtotal - discount;
  document.getElementById(baseid+'cost').innerHTML = formatDollars(totalprice);
  if(postprocessing!=null){postprocessing(ct,sz,tk,special,totalprice);}
}
function addLetterCart(baseid){
  var descfunc1 = (isPainted==""?unpaintdesc : paintdesc);
  var letters = document.getElementById(baseid+'str').value;
  var ct = document.getElementById(baseid+'ct').innerHTML * 1;
  var sz = document.getElementById(baseid+'size').value;
  var tksel = document.getElementById(baseid+'thick');
  var tk = tksel!=null?tksel.value:'-';
  var font = document.getElementById(baseid+'font').value;
  checkToForceCase(font)
  var comment = document.getElementById(baseid+'comment').value;
  var price = parseDollars(document.getElementById(baseid+'cost').innerHTML);
  var ribbonsel = document.getElementById(baseid+'ribbon');
  var extra = ribbonsel!=null?ribbonsel.value:'No';
  var templatesel = document.getElementById(baseid+'template');
  extra = templatesel!=null?(templatesel.checked?" with mounting template.":""):extra;
  var specialsel = document.getElementById(baseid+'special');
  var special = specialsel!=null?specialsel.checked:false;
  var specialtext = special?" Preorder for Christmas delivery":"";
  
  if(ct==0){
    alert("Enter desired letters");
    var letterstr = document.getElementById("letterstr");
    if (letterstr) { letterstr.focus(); }
    return;
  }
  if(font==''){alert("Select a font");return;}
  if(sz==''){alert("Select a size");return;}
  if(tk==''){alert("Select a thickness");return;}
  if(isPainted && fd_color==''){alert("Select a color");return;}
  if(price==0) {alert("The thickness and size are not available. Please consult the price chart for availability.");return;}
  if(!addCartItemChkExtras()){return;}
//  var desc = sz+' Inch Unpainted Indoor Letters, '+tk+'in. birchply, '+ct+' letters using '+font;
  var desc = descfunc1(sz,tk,ct,font.replace(/\-\-/,""),extra,specialtext);
  if (isPaypalCart()){
    document.forms.addcart.item_name.value = desc;
    document.forms.addcart.os0.value = makeUpperCase ? letters.toUpperCase() : letters;
    document.forms.addcart.amount.value = price;
    document.forms.addcart.on1.value = (comment!=""? "Comment" : "");
    document.forms.addcart.os1.value = comment;
    document.forms.addcart.submit();
    window.location.href = "itemordered.html";
  }
  if (isSecureCart()){
    // must create a unique id because cart requires it
    document.forms.securecart.ID.value = new Date().getTime();
    document.forms.securecart.Describe.value = desc;
    document.forms.securecart.AddOn1.value = "LETTERS: " + (makeUpperCase ? letters.toUpperCase() : letters);
    document.forms.securecart.AddOn2.value = (comment!="" ? "COMMENT: " + comment : "");
    document.forms.securecart.Price.value = price;
    document.forms.securecart.submit();
  }
}

var reSemi = /\;/g
var reFsh = /\//g
var rePct = /\%/g
var rePnd = /\#/g
var reBsh = /\\/g

function filterLetters(letters){
  return letters.replace(reSemi,"--SEMI--").replace(reFsh,"--FSH--").replace(rePct,"--PCT--").replace(rePnd,"--PND--").replace(reBsh,"--BSH--");	
}

var fd_letters = "";
var fd_font = "";
var fd_color = "";
var fd_bgcolor = "White2";
var fd_baseline = "Black";

function updateFontDisplayLetters(letters){
  if(letters != ""){
    fd_letters = makeUpperCase ? letters.toUpperCase() :  letters;
    showFontDisplay();
  } else { 
    hideFontDisplay();
    fd_letters = "";
  }
}

function updateFontDisplayFont(font){
  var fdsel = document.getElementById("fdsel");
  if (fdsel) { fdsel.value = font ;}
  var fontsel = document.getElementById("letterfont")
  if (fontsel) { fontsel.value = font ;}
  if(font != ""){
    fd_font = font;
  checkToForceCase(font)

    showFontDisplay();
  } else {
    hideFontDisplay();
    fd_font = "";
  }
  
}

function showFontDisplay(){
//  if(fd_letters != "" && fd_font != "") {
    var fd = document.getElementById('fontdisplay');
    if (fd){
      fd.style.display="block";
      updateFontDisplay();
    }
//  }
}

function hideFontDisplay(){
 // var fd = document.getElementById('fontdisplay');
 // if (fd){
 //   fd.style.display="none";
 // }  
}
function updateFontDisplay(){
  var fd = document.getElementById('fontdisplay');
  if (fd){
    document.getElementById('fdimg').src = 'font/'+
    (fd_letters==''?'Your Letters Appear Here':filterLetters(makeUpperCase?fd_letters.toUpperCase():fd_letters))+'_'+
    (fd_font==''||(fd_font.toUpperCase().indexOf('--')>=0)?'ArialBold':fd_font)+'_'+(fd_color==''?'black':'black')+'_'+fd_bgcolor+'_'+fd_baseline+'.jpg';
  }
}

function updateFontDisplayColor(color){
  var fdcolorsel = document.getElementById("fdcolorsel");
  if (fdcolorsel) { fdcolorsel.value = color ;}
  var fontcolorsel = document.getElementById("letterfontcolor")
  if (fontcolorsel) { fontcolorsel.value = color ;}
  fd_color = color;
  showFontDisplay();
  adjustLetterPrice('letter');
}

function updateFontDisplayBGColor(color){
  if(color != ""){
    fd_bgcolor = color;
  } else {
    fd_bgcolor = "White";
  }
  showFontDisplay();
}

function updateFontDisplayBaseline(color){
  if(color != ""){
    fd_baseline = color;
  } else {
    fd_baseline = "none";
  }
  showFontDisplay();
}

var prices = new Array();
var isPainted = false;

var myCartItemFuncs = new Array(10);
var myCartItemIndex = 0;
function addCartItemExtras(baseprice){
  var amt = 0;
  if(myCartItemIndex){
    for (var i=0; i<myCartItemIndex; i++){
      amt += myCartItemFuncs[i](baseprice);
    }
  }
  return amt;
}

function addCartItemFunc(func){
  myCartItemFuncs[myCartItemIndex++] = func;
}

var ribbonPrice = 1.00;
var ribbonfunc = function() {
  var ribbonsel = document.getElementById('letterribbon');
  var extra = ribbonsel!=null?ribbonsel.value:'No';
  var extraRibbon = (extra != 'No') && (baseprice>0);
  var extraPrice = charcount * ribbonPrice;
  var ribbonextraprice = document.getElementById('ribbonextraprice');
  if(ribbonextraprice!=null) ribbonextraprice.innerHTML = formatDollars(extraRibbon ? extraPrice:0);
  return extraRibbon ? extraPrice : 0;
}

var myCartItemChkFuncs = new Array(10);
var myCartItemChkIndex = 0;
function addCartItemChkExtras(){
  if(myCartItemChkIndex){
    for (var i=0; i<myCartItemChkIndex; i++){
      if(!myCartItemChkFuncs[i]()){ return false };
    }
  }
  return true;
}

function addCartItemChkFunc(func){
  myCartItemChkFuncs[myCartItemChkIndex++] = func;
}

// setCookie( 'mycookie', 'visited 9 times', 30, '/', '', '' );function setCookie( name, value, expires, path, domain, secure )
{
// set time, it's in milliseconds
var today = new Date();
today.setTime( today.getTime() );

/*
if the expires variable is set, make the correct
expires time, the current script below will set
it for x number of days, to make it for hours,
delete * 24, for minutes, delete * 60 * 24
*/
if ( expires )
{
expires = expires * 1000 * 60 * 60 * 24;
}
var expires_date = new Date( today.getTime() + (expires) );

document.cookie = name + "=" +escape( value ) +
( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) +
( ( path ) ? ";path=" + path : "" ) +
( ( domain ) ? ";domain=" + domain : "" ) +
( ( secure ) ? ";secure" : "" );
}

function getCookie( check_name ) {
	// first we'll split this cookie up into name/value pairs
	// note: document.cookie only returns name=value, not the other components
	var a_all_cookies = document.cookie.split( ';' );
	var a_temp_cookie = '';
	var cookie_name = '';
	var cookie_value = '';
	var b_cookie_found = false; // set boolean t/f default f

	for ( i = 0; i < a_all_cookies.length; i++ )
	{
		// now we'll split apart each name=value pair
		a_temp_cookie = a_all_cookies[i].split( '=' );


		// and trim left/right whitespace while we're at it
		cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, '');

		// if the extracted name matches passed check_name
		if ( cookie_name == check_name )
		{
			b_cookie_found = true;
			// we need to handle case where cookie has no value but exists (no = sign, that is):
			if ( a_temp_cookie.length > 1 )
			{
				cookie_value = unescape( a_temp_cookie[1].replace(/^\s+|\s+$/g, '') );
			}
			// note that in cases where cookie is initialized but no value, null is returned
			return cookie_value;
			break;
		}
		a_temp_cookie = null;
		cookie_name = '';
	}
	if ( !b_cookie_found )
	{
		return null;
	}
}

// this deletes the cookie when called
function Delete_Cookie( name, path, domain ) {
if ( Get_Cookie( name ) ) document.cookie = name + "=" +
( ( path ) ? ";path=" + path : "") +
( ( domain ) ? ";domain=" + domain : "" ) +
";expires=Thu, 01-Jan-1970 00:00:01 GMT";
}

function setVisibility(className, value)
{
  var elements = document.getElementsByTagName("div");
  for(i=0;i<elements.length;i++)
  {
    var elem = elements.item(i);
    if (elem.className == className)
    {
      elem.style.visibility = value;
    }
  }
  
}

// check email - returns null if good or error str
function echeck(str) 
{
		var at="@"
		var dot="."
		var lat=str.indexOf(at)
		var lstr=str.length
		var ldot=str.indexOf(dot)
		if (str.indexOf(at)==-1){
		   return "Invalid E-mail ID"
		}

		if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
		   return "Invalid E-mail ID"
		}

		if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
		    return "Invalid E-mail ID"
		}

		 if (str.indexOf(at,(lat+1))!=-1){
		    return "Invalid E-mail ID"
		 }

		 if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
		    return "Invalid E-mail ID"
		 }

		 if (str.indexOf(dot,(lat+2))==-1){
		    return "Invalid E-mail ID"
		 }
		
		 if (str.indexOf(" ")!=-1){
		    return "Invalid E-mail ID"
		 }

 		 return null					
}


