//| JS functions for Search template query submission
//|------------------------------------------------------------------------------
//| Copyright 2007 by Mark Anderson for Shoantel Limited (mark@shoantel.com)
//| Site's catalogue content is copyright site owner, templates and support
//| JS/NP files are copyright Shoantel (except where attributed) and may not be
//| copied or re-used without prior permission of Shoantel
//|------------------------------------------------------------------------------
//| Language               : JavaScript
//| Author                 : Mark Anderson (mark@shoantel.com)
//|------------------------------------------------------------------------------
//| Description:
//|   Defines utility data variables/functions for Portfolio NetPublish site.
//|
//| History:
//|   04 Sep 2007          : 1.0 (Release).
//|   15 Jul 2010          : 1.1 (DDFA changes)
//|   23 Jul 2010          : 1.1a (Allow template parameter)
//|   06 Sep 2010          : 2.0 (Amend to work with new Ajax forms)
//|------------------------------------------------------------------------------
//|

//var cookie_id = readCookie("ses_user_id");
//if (cookie_id === '' || cookie_id === null ){
//  location.href = '/res/sites/ddfa/resources/main/login_error.html';
//}

// number of days for which cookies will persist
// if changing set *same* value in local.np
var numCookieDays = 1;
var productJoin = 'and'; 


// Reinstates Enter key submit - for use with processForm
function searchKeyPress(e,frm,t,s) {
	
	// look for window.event in case event isn't passed in
	if (window.event) { e = window.event; }
	var theCode = (e.keyCode ? e.keyCode : e.which);
	if (theCode == 13) {
		//alert('Enter detected');
		processForm(frm,t,s);
		return false;
	}
}

// Use with multiple other form (visible, user,theSort) inputs
function processForm(formID,theTemplate,theSort) {
  var theSite = document.getElementById('site').value;
  var urlStubA = '/netpub/server.np?find';
  var urlStubB = '';
  var urlStubC = '';
  var urlStubD = '&site=' + theSite + '&catalog=catalog&template='+theTemplate+'&sorton='+theSort+'&ascending=1';
  var valueCount = 7; // caps the maximum number of query argument sets (# of used 'dumb' inputs + number parsed out of Keywords must be <= valueCount)
  var f = document.getElementById(formID);
  var valStr = '', fieldName = '', opType = '', valueStr = '';
  var freeText = document.getElementById('freesearchterms');
  var arrKeys = [];
  if ((f.value[0].value === '') && (f.value[1].value === '')) {
    alert('Please select both a Product AND a Region for your search and try again.');
    return false;
  } else if (f.value[0].value === '') {
    alert('Please select a Product for your search and try again.');
    return false;
  } else if (f.value[1].value === '') {
    alert('Please select a Region for your search and try again.');
    return false;
  }
  fieldName = (f.method == 'get') ? f.value[0].value.replace(/ /g,'+') : f.value[0].value;
  opType = (f.method == 'get') ? f.op[1].value.replace(/ /g,'+') : f.op[1].value;
  valueStr = (f.method == 'get') ? f.value[1].value.replace(/ /g,'+') : f.value[1].value;
  urlStubB += '&field=' + fieldName + '&op=' + opType + '&value=' + valueStr;
  if (freeText.value !== '') {
    arrKeys = checkSearch(freeText.value,'','AND',0,'textdata',valueCount-2,false,true);
  }
  if(arrKeys.length > 0) {
    urlStubB += '&join=' + productJoin; // productJoin set at top of file
	  for (var j=0;j<arrKeys.length;j=j+1) {
	    urlStubC += '&field=' + arrKeys[j][0] + '&op=' + arrKeys[j][1] + '&value=' + encodeURIComponent(arrKeys[j][2]);
	    urlStubC += j<(arrKeys.length-1) ? '&join=' + arrKeys[j][3] : '';
	  }
	}
  urlStubB += '&product=' + fieldName;
  var expDate = new Date();
  expDate.setTime(expDate.getTime() + (numCookieDays * 24 * 60 * 60 * 1000)); //numCookieDays set at head of this file
  if (freeText.value !== '') {
  	setCookie('keys', freeText.value,  expDate, '/'); //setCookie escapes string
	} else {
		deleteCookie('keys');
	}
	setCookie('product_req', f.value[0].value, expDate, '/'); //setCookie escapes string
	setCookie('region_req', f.value[1].value, expDate, '/'); //setCookie escapes string
  //alert(urlStubA + '\n' + urlStubB + '\n' + urlStubC + '\n' + urlStubD);
  window.location.href = urlStubA + urlStubB + urlStubC + urlStubD;
}

function searchFor(theName) {
  var theSite = document.getElementById('site').value;
  var urlStubA = '/netpub/server.np?find';
  var theTemplate = 'results.np'
  var theSort = 'Sorting'
  var urlStubB = '';
  var urlStubC = '';
  var urlStubD = '&site=' + theSite + '&catalog=catalog&template='+theTemplate+'&sorton='+theSort+'&ascending=1';
  var valueCount = 7; // caps the maximum number of query argument sets (# of used 'dumb' inputs + number parsed out of Keywords must be <= valueCount)
  var f = document.getElementById('setProduct');
  var valStr = '', fieldName = '', opType = '', valueStr = '';
  var freeText = document.getElementById('freesearchterms');
  var arrKeys = [];
  if ((f.value[0].value === '') && (f.value[1].value === '')) {
    alert('Please select both a Product AND a Region for your search and try again.');
    return false;
  } else if (f.value[0].value === '') {
    alert('Please select a Product for your search and try again.');
    return false;
  } else if (f.value[1].value === '') {
    alert('Please select a Region for your search and try again.');
    return false;
  }
  fieldName = (f.method == 'get') ? f.value[0].value.replace(/ /g,'+') : f.value[0].value;
  opType = (f.method == 'get') ? f.op[1].value.replace(/ /g,'+') : f.op[1].value;
  valueStr = (f.method == 'get') ? f.value[1].value.replace(/ /g,'+') : f.value[1].value;
  urlStubB = '&field=' + fieldName + '&op=' + opType + '&value=' + valueStr;
  urlStubB += '&join=' + productJoin; // productJoin set at top of file
  urlStubB += '&field=Artist&op=matches&value=' + theName.replace(/ /g,'+')
  urlStubB += '&product=' + fieldName;
  var expDate = new Date();
  expDate.setTime(expDate.getTime() + (numCookieDays * 24 * 60 * 60 * 1000)); //numCookieDays set at head of this file
	setCookie('product_req', f.value[0].value, expDate, '/'); //setCookie escapes string
	setCookie('region_req', f.value[1].value, expDate, '/'); //setCookie escapes string
	deleteCookie('keys');
  //alert(urlStubA + '\n' + urlStubB + '\n' + urlStubC + '\n' + urlStubD);
  window.location.href = urlStubA + urlStubB + urlStubC + urlStubD;
}

function searchForCategory(theName) {
  var theSite = document.getElementById('site').value;
  var urlStubA = '/netpub/server.np?find';
  var theTemplate = 'results.np'
  var theSort = 'Sorting'
  var urlStubB = '';
  var urlStubC = '';
  var urlStubD = '&site=' + theSite + '&catalog=catalog&template='+theTemplate+'&sorton='+theSort+'&ascending=1';
  var valueCount = 7; // caps the maximum number of query argument sets (# of used 'dumb' inputs + number parsed out of Keywords must be <= valueCount)
  var f = document.getElementById('setProduct');
  var valStr = '', fieldName = '', opType = '', valueStr = '';
  var freeText = document.getElementById('freesearchterms');
  var arrKeys = [];
  if ((f.value[0].value === '') && (f.value[1].value === '')) {
    alert('Please select both a Product AND a Region for your search and try again.');
    return false;
  } else if (f.value[0].value === '') {
    alert('Please select a Product for your search and try again.');
    return false;
  } else if (f.value[1].value === '') {
    alert('Please select a Region for your search and try again.');
    return false;
  }
  fieldName = (f.method == 'get') ? f.value[0].value.replace(/ /g,'+') : f.value[0].value;
  opType = (f.method == 'get') ? f.op[1].value.replace(/ /g,'+') : f.op[1].value;
  valueStr = (f.method == 'get') ? f.value[1].value.replace(/ /g,'+') : f.value[1].value;
  urlStubB = '&field=' + fieldName + '&op=' + opType + '&value=' + valueStr;
  urlStubB += '&join=' + productJoin; // productJoin set at top of file
  urlStubB += '&field=textdata&op=matches&value=' + theName.replace(/ /g,'+')
  urlStubB += '&product=' + fieldName;
  var expDate = new Date();
  expDate.setTime(expDate.getTime() + (numCookieDays * 24 * 60 * 60 * 1000)); //numCookieDays set at head of this file
	setCookie('product_req', f.value[0].value, expDate, '/'); //setCookie escapes string
	setCookie('region_req', f.value[1].value, expDate, '/'); //setCookie escapes string
	deleteCookie('keys');
  //alert(urlStubA + '\n' + urlStubB + '\n' + urlStubC + '\n' + urlStubD);
  window.location.href = urlStubA + urlStubB + urlStubC + urlStubD;
}

function setEvent(theId,theName) {
	myElem = document.getElementById(theId);
	if (myElem !== null) {
		if(myElem.selectedIndex > 0) {
			var myCookie = myElem.options[myElem.selectedIndex].value;
			//var theIndex = myElem.selectedIndex;
			//var elemName = myElem.name;
			var expDate = new Date();
			expDate.setTime(expDate.getTime() + (numCookieDays * 24 * 60 * 60 * 1000)); //numCookieDays set at head of this file
			setCookie(theName, myCookie, expDate, '/'); //setCookie escapes string
		} else {
			deleteCookie( theName );
		}
	} else {
		deleteCookie( theName );
	}
}

// Results pages
// Purpose: Check ticks are present before subitting
function checkForTicks(myForm,myField) {
  if (myField.length >=1){
    for (i = 0; i < myField.length; i++) {
      if (myField[i].checked === true) {
        myForm.submit();
        return true;
      }
    }
    alert('You must tick at least one item!');
    return false;
  } else {
    if(myField.checked===true) {
        myForm.submit();
        return true;
    } else {
    alert('You must tick at least one item!');
    return false;
    }
  }
}

// code below ported from older site version's cookie.js
// section below copyright as per original header
//*
//|------------------------------------------------------------------------------
//| Copyright 2001 by GalaSoft Laurent Bugnion
//|------------------------------------------------------------------------------
//| Website                : www.benoitlange.ch
//| Language               : JavaScript
//| Author                 : Laurent Bugnion (galasoft-LB@bluewin.ch)
//|------------------------------------------------------------------------------
//| Description:
//|   Defines the cookie functions.
//|
//| History:
//|   06.03.2000 Lbu : Created in this version.
//|------------------------------------------------------------------------------
//*
// Cookie functions -------------------------------------------------------------
// Thanx a lot to Jerry Aman, Optima System
// and Bill Dortch, hIdaho Design for the free use of their code.
// Found on http://www.cookiecentral.com/js_cookie8.htm

function getCookieVal( offset ) {
  var endstr = document.cookie.indexOf ( ";", offset );
  if ( endstr == -1 )
  {
    endstr = document.cookie.length;
  }
  return decodeURI( document.cookie.substring( offset, endstr ) );
}

function getCookie( name ) {
  var arg = name + "=";
  var alen = arg.length;
  var clen = document.cookie.length;
  var i = 0;
  while ( i < clen )
  {
    var j = i + alen;
    if ( document.cookie.substring( i, j ) == arg )
    {
      return getCookieVal ( j );
    }
    i = document.cookie.indexOf( " ", i ) + 1;
    if ( i == 0 )
    {
      break;
    }
  }
  return null;
}

function setCookie( name, value ) {
  var argv = setCookie.arguments;
  var argc = setCookie.arguments.length;
  var expires = (argc > 2) ? argv[2] : null;
  var path = (argc > 3) ? argv[3] : null;
  var domain = (argc > 4) ? argv[4] : null;
  var secure = (argc > 5) ? argv[5] : false;
  document.cookie = name + "=" + encodeURI(value) +
    ( ( expires == null ) ? "" : ( "; expires=" + expires.toGMTString() ) ) +
    ( ( path == null ) ? "" : ( "; path=" + path ) ) +
    ( ( domain == null ) ? "" : ( "; domain=" + domain ) ) +
    ( ( secure == true ) ? "; secure" : "" );
}

function deleteCookie ( name ) {
  var exp = new Date();
  exp.setTime ( exp.getTime() - 10000 );  
  setCookie( name, "", exp , '/');
}

function testCookie() {
  var expDate = new Date();
  //valid one minute
  expDate.setTime( expDate.getTime() + ( 60 * 1000 ) );
  setCookie( "testCookie", "OK", expDate );
  testing = getCookie( "testCookie" );
  if ( testing == "OK" ) {
    return true;
  } else {
    return false;
  }
}
