var sizeNames = new Array('100mm - approx 4 inches', '45mm - approx 1.8 inches', '25mm - approx 1 inch');
var sizes = new Array('100mm', '45mm', '25mm');

var where = (navigator.appName == "Microsoft Internet Explorer") ? -1 : null;

var scriptName = /delivery.html/;

var globalElementToLoad1;
var globalElementToLoad2;

/*--------------- Added for restricted words ----------------------*/
var restrictedWords = new Array();

var phaseNo = 0;
var functionsToCall = new Array();
var globalPhaseCount = 0;
var globalValfield;

function functionDispatcher() {
	if (phaseNo <= globalPhaseCount)
		eval(functionsToCall[phaseNo]);
	else
		if (document.getElementById('progress')) document.getElementById('progress').style.display = 'none';
}

function initialPhases(phaseCount, script, elemName) {
	functionsToCall = new Array();
	globalPhaseCount = phaseCount;
	phaseNo = 0;
	functionsToCall[0] = 'loadRibbonColors(\'' + elemName + '\', ' + script + ')';
	functionsToCall[1] = 'loadUrl(\'http://www.sashesnribbons.co.uk/control/rpc.php?siteid=1&mode=8&t=' + ((new Date()).valueOf()) + '\', 5);'; 
	functionDispatcher();	
}

function initialPhasesNew(phaseCount, script, elemName, size) {
	functionsToCall = new Array();
	globalPhaseCount = phaseCount;
	phaseNo = 0;
	functionsToCall[0] = 'loadRibbonColorsNew(\'' + elemName + '\', ' + script + ', \'' + size + '\')';
	functionsToCall[1] = 'loadUrl(\'http://www.sashesnribbons.co.uk/control/rpc.php?siteid=1&mode=8&t=' + ((new Date()).valueOf()) + '\', 5);'; 
	functionDispatcher();	
}

function initialPhasesNew2(phaseCount, script, elemName, size) {
	functionsToCall = new Array();
	globalPhaseCount = phaseCount;
	phaseNo = 0;
	functionsToCall[0] = 'loadRibbonColorsNew(\'' + elemName + '\', ' + script + ', \'' + size + '\')';
	functionsToCall[1] = 'loadUrl(\'http://www.sashesnribbons.co.uk/control/rpc.php?siteid=1&mode=8&t=' + ((new Date()).valueOf()) + '\', 5);'; 
	functionsToCall[2] = 'getDataSpecial(\'holiday/fetchholiday.php?siteid=1&simple=1&\', /design.php/, 6);'; 
	functionDispatcher();	
}

function initialPhasesNew3(phaseCount, script, elemName, size) {
	functionsToCall = new Array();
	globalPhaseCount = phaseCount;
	phaseNo = 0;
	functionsToCall[0] = 'loadRibbonColorsNew(\'' + elemName + '\', ' + script + ', \'' + size + '\')';
	functionsToCall[1] = 'loadUrl(\'http://www.sashesnribbons.co.uk/control/rpc.php?siteid=1&mode=8&t=' + ((new Date()).valueOf()) + '\', 5);'; 
	functionsToCall[2] = 'getDataSpecial(\'holiday/fetchholiday.php?siteid=1&simple=1&\', /design2.php/, 6);'; 
	functionDispatcher();	
}

function initialProductPhases(phaseCount, script, size1, size2) {
	functionsToCall = new Array();
	globalPhaseCount = phaseCount;
	phaseNo = 0;
	functionsToCall[0] = 'loadRibbonColorsNew(\'ribbonColor1\', ' + script + ', \'' + size1 + '\')';
	functionsToCall[1] = 'loadRibbonColorsNew(\'ribbonColor2\', ' + script + ', \'' + size2 + '\')';
	functionsToCall[2] = 'loadUrl(\'http://www.sashesnribbons.co.uk/control/rpc.php?siteid=1&mode=8&t=' + ((new Date()).valueOf()) + '\', 5);'; 
	functionDispatcher();	
}

function restrictedWordsLoaded() {
  if (req.readyState == 4 && req.status == 200 ) {
  	restrictedWords = eval(req.responseText);

		phaseNo++;
		functionDispatcher();	
  }
}

function checkForRestrictedWords(elem) {
	if (isNotEmpty(elem)) {
		var valueString = elem.value.toUpperCase();
		for (var i = 0; i < restrictedWords.length; i++) {
			if (valueString.indexOf(restrictedWords[i].toUpperCase()) >= 0) {
				alert('We believe that the word/phrase \'' + restrictedWords[i] +'\' that you have requested is subject to TradeMark or Copyright restrictions.\nWe are therefore not able to reproduce this text on your item.');
				setfocus(elem);
				return false;
//				break;
			}
		}
		return true;
	}
}

function setFocusDelayed() {
	globalValfield.focus();
}

function setfocus(valfield) {
	globalValfield = valfield;
	setTimeout('setFocusDelayed()', 100);
}

function isNotEmpty(elem) {
	if (elem == null) return false;
  var str = elem.value;
  var re = /.+/;
  
  return str.match(re);
}

/*-----------------------------------------------------------------*/

/* 
 * Loads requested url 
 * url - url to load
 * mode - # of function to use for processing loaded data
 */
function loadUrl(url, mode) {
  if(window.XMLHttpRequest) {
    try { req = new XMLHttpRequest();
    } catch(e) { req = false; }
  } else if(window.ActiveXObject) {
    try { req = new ActiveXObject('Msxml2.XMLHTTP');
    } catch(e) {
    try { req = new ActiveXObject('Microsoft.XMLHTTP');
    } catch(e) { req = false; }
  } }
  if(req) {
  	switch (mode) {
  		case 1:
 			case 2: req.onreadystatechange = parseCheckingResult; break;
 			case 3: req.onreadystatechange = calendarLoaded; break;
 			case 4: req.onreadystatechange = ribbonColorsLoaded; break;
 			case 5: req.onreadystatechange = restrictedWordsLoaded; break;
 			case 6: req.onreadystatechange = dataLoaded; break;
 			case 7: req.onreadystatechange = rushDateLoaded; break;
 		}
    req.open('GET', url, true);
    req.send('');
  }
}

function checkParams2(elem, mode, scrName, elemToLoad1, elemToLoad2) {
	globalMode = mode;
	scriptName = scrName;
	if (elemToLoad1 != '') globalElementToLoad1 = document.getElementById(elemToLoad1);
	if (elemToLoad2 != '') globalElementToLoad2 = document.getElementById(elemToLoad2);
	
	if (mode == 1) showLoading(globalElementToLoad1);
	showLoading(globalElementToLoad2);
	getData('checkcolors.php?ribbon=' + elem.value + '&', mode);
}

function loadRibbonColors(elemId, scrName) {
	scriptName = scrName;
	globalElementToLoad1 = document.getElementById(elemId);
	getData('checkcolors.php?all=1&', 4);
}

function loadRibbonColorsNew(elemId, scrName, size) {
	scriptName = scrName;
	globalElementToLoad1 = document.getElementById(elemId);
	getData('checkcolors.php?all=1&size=' + size + '&', 4);
}

function ribbonColorsLoaded() {
  if (req.readyState == 4 && req.status == 200 ) {
  	var valArray = eval(req.responseText);
  	
  	var elementToLoad = globalElementToLoad1;
	  var newElem;
	  while (elementToLoad.options.length) {
	      elementToLoad.remove(0);
	  }
	  newElem = document.createElement('option');
	  newElem.text = '..please pick colour..';
	  newElem.value = '0';
	  elementToLoad.add(newElem, where);
		for (var i = 0; i < valArray.length; i++) {
		  newElem = document.createElement('option');
		  newElem.text = valArray[i];
		  newElem.value = valArray[i];
		  elementToLoad.add(newElem, where);
		}
		
/*--------------- Added for restricted words ----------------------*/
		phaseNo++;
		functionDispatcher();	
/*-----------------------------------------------------------------*/
  }
}

function showLoading(elementToLoad) {
  while (elementToLoad.options.length) {
      elementToLoad.remove(0);
  }
  var newElem;
  newElem = document.createElement('option');
  newElem.text = 'Loading...';
  newElem.value = '0';
  elementToLoad.add(newElem, where);
}

function getData(script, mode) {
	var url = window.location.toString();

	if (url.substr(url.length - 1, 1) == '/')
		url = script + 't=' + ((new Date()).valueOf());
	else
		url = url.replace(scriptName , script + 't=' + ((new Date()).valueOf()));

	loadUrl(url, mode);
}

function getSizeName(size) {
	for (var i = 0; i < sizes.length; i++)
		if (sizes[i] == size) return sizeNames[i];
	return '..please pick ribbon colour first..';
}

function checkDate() {
	lastDate = document.getElementById('chosenDay').innerHTML;
	document.getElementById('progress').style.display = 'block';
	getData('datevalidation.php?', 3);
	return true;
}

function checkDate2(elem) {
	lastDate = document.getElementById('chosenDay').innerHTML;
	document.getElementById('progress').style.display = 'block';
	getData('datevalidation.php?datetime=' + elem.value + '&', 1);
	return true;
}

function calendarLoaded() {
  if (req.readyState == 4 && req.status == 200 ) {
    document.getElementById('resSpan').innerHTML = req.responseText;

/*
		var delivDateEnds = req.responseText.search('#%#');
		var delivDateStarts = req.responseText.search('delivDate_') + 11;
		var delivDate = req.responseText.substr(delivDateStarts, delivDateEnds - delivDateStarts);

		var optEnds = req.responseText.search('%#%');
		var optStarts = req.responseText.search('availoption_') + 13;
		var currOption = req.responseText.substr(optStarts, optEnds - optStarts);

		var optValEnds = req.responseText.search('#@#');
		var optValStarts = req.responseText.search('optvalue_') + 10;
		var currOptionValue = req.responseText.substr(optValStarts, optValEnds - optValStarts);

		var unOptValEnds = req.responseText.search('@#@');
		var unOptValStarts = req.responseText.search('unavail_') + 9;
		var unOptionValue = req.responseText.substr(unOptValStarts, unOptValEnds - unOptValStarts);

		var saturday = req.responseText.substr(req.responseText.search('saturday_')+10, 4);

   	document.getElementById('chosenDay').innerHTML = delivDate;
		document.getElementById('itemname2').value = delivDate;
   	document.getElementById('chosenOption').innerHTML = currOption;
		document.getElementById('itemname3').value = currOptionValue;
		
		document.getElementById('optionsWarning').innerHTML = '<font color=navy face=arial size=2><strong>Important:</strong></font><BR>' + 
		'<font face=arial size=2>For the delivery date chosen,<BR>' + 
			' &nbsp;&nbsp;&nbsp;&nbsp;- Delivery option(s) is/are: <strong>' + currOption +
			'</strong> <BR>' + 
			'&nbsp;&nbsp;&nbsp;&nbsp;- The option(s) <strong>' + unOptionValue + '</strong> is/are not available.<BR>' + 
			'Any unavailable options could become available if a later date is selected.<br>' + 
			'<br><i><strong><font color=navy>Please note:</font></strong></i><BR>' +
			'The Delivery date is not guaranteed if you choose the First Class option - although of course we will try our best<BR>' +
			'<B><font color=red>Guaranteed Deliveries and delivery date options only apply to UK addresses</font></B><BR>' +
			'Specific Delivery dates for destinations outside of the UK cannot be guaranteed – at least  5-7 working days should be allowed for Ireland and Europe and 7-10 working days for outside Europe<BR><BR>' +
'<strong><font color=navy>Code:</font></strong><br><strong>FC</strong> = First Class UK Post,<br><strong>C</strong> = Next Day Courier to UK mainland,<br><strong>SD</strong> = Royal Mail Special Delivery to the UK (Mon-Sat)<br>';

		
		if (saturday == 'true') {
			document.getElementById('saturdayWarning').style.display = 'block';
			//document.getElementById('saturdaySurcharge').name = 'X1include';
		} else {
			document.getElementById('saturdayWarning').style.display = 'none';
			//document.getElementById('saturdaySurcharge').name = 'X1includeNO';
		}
*/

		document.getElementById('progress').style.display = 'none';
		
		getDataSpecial('holiday/fetchholiday.php?siteid=1&simple=1&', scriptName, 6);
	}
}

function chooseDay(delivDay, saturday, currOption, currOptionValue, showOW) {

	document.getElementById('chosenDay').innerHTML = delivDay;
	document.getElementById('itemname2').value = delivDay;
 	document.getElementById('chosenOption').innerHTML = currOption;
	document.getElementById('itemname3').value = currOptionValue;

	if (showOW) {
		var unOptionValue = '';
		if (currOption.indexOf('C ') == -1) unOptionValue += ' C';
		if (currOption.indexOf('FC') == -1) unOptionValue += ' FC';
		if (currOption.indexOf('SD') == -1) unOptionValue += ' SD';

		document.getElementById('optionsWarning').innerHTML = '<font color=navy face=arial size=2><strong>Important:</strong></font><BR>' + 
		'<font face=arial size=2>For the delivery date chosen,<BR>' + 
			' &nbsp;&nbsp;&nbsp;&nbsp;- Delivery option(s) is/are: <strong>' + currOption +
			'</strong> <BR>' + 
			((unOptionValue != '')?'&nbsp;&nbsp;&nbsp;&nbsp;- The option(s) <strong>' + unOptionValue + '</strong> is/are not available.<BR>' + 
			'Any unavailable options could become available if another date is selected.<br>':'') + 
			'<strong><font color=navy>Code:</font></strong><br><strong>FC</strong> = First Class UK Post,<br><strong>C</strong> = Next Day Courier to UK mainland,<br><strong>SD</strong> = Royal Mail Special Delivery to the UK (Mon-Sat)<br>';

		document.getElementById('optionsWarning').style.display = 'block';
	} else
		document.getElementById('optionsWarning').style.display = 'none';

	if (saturday) {
		document.getElementById('saturdayWarning').style.display = 'block';
		//document.getElementById('saturdaySurcharge').name = 'X1include';
	} else {
		document.getElementById('saturdayWarning').style.display = 'none';
		//document.getElementById('saturdaySurcharge').name = 'X1includeNO';
	}
	
}

/*
function parseCheckingResult() {
  if (req.readyState == 4 && req.status == 200 ) {
    colorRes = eval(req.responseText);
		
		loadRealValues(document.getElementById('ribbonWidth'), colorRes[0].ribbonsize, true);
		loadRealValues(document.getElementById('textColor'), colorRes[0].ribbontext, false);
	}
}
*/

function parseCheckingResult() {
  if (req.readyState == 4 && req.status == 200 ) {
    colorRes = eval(req.responseText);
		
		if (globalMode == 1) loadRealValues(globalElementToLoad1, colorRes[0].ribbonsize, true);
		loadRealValues(globalElementToLoad2, colorRes[0].ribbontext, false);
	}
}


function loadRealValues(elem, valArray, size) {
  while (elem.options.length) {
      elem.remove(0);
  }
  var newElem;
	for (var i = 0; i < valArray.length; i++) {
	  newElem = document.createElement('option');
	  newElem.text = (size?getSizeName(valArray[i]):valArray[i]);
	  newElem.value = valArray[i];
	  elem.add(newElem, where);
	}
}

function checkFields() {
	if ((document.getElementById('itemname2').value == '') || (document.getElementById('itemname3').value == '')) {
		alert('Please specify delivery date!');
	} else {
		document.forms['delivForm'].submit();
	}
}


/* -------------------------- New stuff for Rush Order ------------------------------------------------ */
function loadRushDate() {
	document.getElementById('resSpan').innerHTML = '&nbsp;';
	document.getElementById('progress').style.display = 'block';
	loadUrl('http://www.sashesnribbons.co.uk/rushorder/datevalidation.php?t=' + ((new Date()).valueOf()), 7);
	return true;
}

function rushDateLoaded() {
  if (req.readyState == 4 && req.status == 200 ) {
    document.getElementById('resSpan').innerHTML = req.responseText;
    document.getElementById('optionsWarning').innerHTML = '&nbsp;';

		var delivDateEnds = req.responseText.search('#%#');
		var delivDateStarts = req.responseText.search('delivDate_') + 11;
		var delivDate = req.responseText.substr(delivDateStarts, delivDateEnds - delivDateStarts);

		var optValEnds = req.responseText.search('#@#');
		var optValStarts = req.responseText.search('optvalue_') + 10;
		var currOptionValue = req.responseText.substr(optValStarts, optValEnds - optValStarts);

		var saturday = req.responseText.substr(req.responseText.search('saturday_')+10, 4);

   	document.getElementById('chosenDay').innerHTML = delivDate;
		document.getElementById('itemname2').value = delivDate;
   	document.getElementById('chosenOption').innerHTML = 'Rush Delivery';
		document.getElementById('itemname3').value = currOptionValue;
		
		if (saturday == 'true') {
			document.getElementById('saturdayWarningRush').style.display = 'block';
			document.getElementById('warningRush').style.display = 'none';
			document.getElementById('saturdayWarning').style.display = 'none';
		} else {
			document.getElementById('saturdayWarningRush').style.display = 'none';
			document.getElementById('warningRush').style.display = 'block';
			document.getElementById('saturdayWarning').style.display = 'none';
		}

		document.getElementById('progress').style.display = 'none';
	}
}

function hideWarnings() {
 	document.getElementById('chosenDay').innerHTML = '';
	document.getElementById('itemname2').value = '';
 	document.getElementById('chosenOption').innerHTML = '';
	document.getElementById('itemname3').value = '';

	document.getElementById('saturdayWarningRush').style.display = 'none';
	document.getElementById('warningRush').style.display = 'none';
	document.getElementById('saturdayWarning').style.display = 'none';
}

/* -------------------------- New stuff for Rush Order END ------------------------------------------------ */
