// global search variables

var refineDate = new Date();
var refineYear = refineDate.getFullYear();
var firstYear = 1954;
var myDecade = ( refineYear.toString() ).substr( 0, 3 );
var refineString = ""; // this will be refine search data that display on page
var monthsArr = new Array('January','February','March','April','May','June','July','August','September','October','November','December');

////////////////////////////////////////////////////////////////////////////

// populates date drop lists
function populate(objForm,selectIndex,mfield,dfield,yfield) {
	var daySelectedIndex = dfield.selectedIndex;
	//alert("daySelectedIndex: " + daySelectedIndex)
	timeA = new Date(yfield.options[yfield.selectedIndex].text,mfield.options[mfield.selectedIndex].value,1);
	timeDifference = timeA - 86400000;
	timeB = new Date(timeDifference);
	var daysInMonth = timeB.getDate();
	
	// all options get removed
	for (var i = 0; i < dfield.length; i++) {
		dfield.options[0] = null;
	}
	// blank option is written
	dfield.options[0] = new Option("", "");
	// options are written based on # of days in month
	for (var i = 0; i < daysInMonth; i++) {
		var value = ZeroFill( i + 1 );
		var text = ZeroFill( i + 1 );
		dfield.options[i + 1] = new Option(text, value);
	}
	// if the original daySelectedIndex exists reset as selected, if not select option[1]
	if(dfield.options[daySelectedIndex])
	{
		dfield.options[daySelectedIndex].selected = true;
	}
	else
	{
		dfield.options[1].selected = true;
	}

	//getYears(yfield);
	return true
}

//////////// INITIALIZE SEARCH FUNCTIONS /////////////

function getYears(field) {

	var years = new Array()
	var i = 0;
	for(var x=firstYear; x<=refineYear; x++)
	{
		years[i] = x;
		i = i + 1;
	}
	
	for (var i = 1; i < field.length; i++) {
		field.options[i0] = null;
	}

	for (var i = 0; i < years.length; i++) {
		field.options[i + 1] = new Option(years[i],years[i]);
	}
	field.options[0].selected=true;
}


function setAdvancedSearch(){

	if((searchNotVal != "") ||
		(searchPhraseVal != "") ||
		(searchOrVal != ""))
	{
		toggleBox("advancedSearch", "open");
		return true;
	}
	else
	{
		toggleBox("advancedSearch", "close");
	}
	return false;

}

function toggleBox(boxid, action){

	var box = document.getElementById(boxid);
	if(action == "open")
	{
		box.style.display = "";
		isAdvanced = true;
	}
	else if(action == "close")
	{
		box.style.display = "none";
		isAdvanced = false;
	}
	else
	{
		return false;
	}

}


function populateDropdown( objname, objsuffix, start, end, order ) { // generate numerical dropdowns
	var obj = cnnGetObject( objname + objsuffix );
	if( obj ) {
		if( order == "des" ) {
			for( var optCounter=start; optCounter <= end; optCounter++ ) {
				var text = ZeroFill( optCounter );
				var value = ZeroFill( optCounter );
				if( objsuffix == "m" ) {
					text = date_arr[optCounter][0];
					value = ZeroFill( optCounter + 1 );

				} else if( objname == "decade" ) {
					text = text + "0s";
					value = value + "0";
				}
				obj.options[obj.options.length] = new Option( text, value );
				
			}
		} else {
			for( var optCounter=end; optCounter >= start; optCounter-- ) {
				var text = ZeroFill( optCounter );
				var value = ZeroFill( optCounter );
				if( objsuffix == "m" ) {
					text = date_arr[optCounter][0];
					value = ZeroFill( optCounter + 1 );
				} else if( objname == "decade" ) {
					text = text + "0s";
					value = value + "0";
				}
				obj.options[obj.options.length] = new Option( text, value );
			}
		}
	}
}

//////////// END INITIALIZE SEARCH FUNCTIONS /////////////

/*
//////////////////////

	variables for search and refine search set in common/search.ftl

//////////////////////
*/

function submitRefineForm(rForm,numperpage){
	//alert("in submitRefineForm");
	var thisSearchType = searchTypeVal;
	return submitSearchForm(document.searchForm,rForm,numperpage,thisSearchType)
}

function submitRefineTopicForm(rForm){
	//alert("in submitRefineTopicForm");
	var startDate = "";
	var endDate = "";
	
	var startMonth = rForm.startm.value;
	var startDay = rForm.startd.value;
	var startYear = rForm.starty.value;
	var endMonth = rForm.endm.value;
	var endDay = rForm.endd.value;
	var endYear = rForm.endy.value;
	var decade = rForm.decade.value;
	

	// build date strings from select list values
	startDate = buildDateStringTopic(startMonth,startDay,startYear);
	endDate = buildDateStringTopic(endMonth,endDay,endYear);
	
	// cannot enter both a decade and dates
	if( (decade != "" && startDate != "") || (decade != "" && endDate != ""))
	{
		alert("Please enter either a decade or start and/or end dates.")
		return false
	}
	
	// if decade value is present, start and end date values use decade field 
	if(decade != "" && startDate == "" && endDate == "")
	{
		var beginYear = parseInt(decade);
		var endYear = beginYear + 9;
			
		// set new start and end date values
		startDate = buildDateStringTopic("01", "01", beginYear);
		endDate = buildDateStringTopic("12", "31", endYear);
	}
	
	if(startDate == "")
	{
		startDate = defaultTopicBeginDate;
	}
	if(endDate == "")
	{
		endDate = defaultTopicEndDate;
	}
	if(assetSubType == "article")
	{
		sortOrder = "mdd";
	}
	if(assetSubType == 'video')
	{
		var loc = vaultServerPath + '/' + assetType + '/' + assetSubType + '/' + topic + '/' + startDate + '/' + endDate + '/' + indexsuffix;
	}
	else
	{
		var loc = vaultServerPath + '/' + assetType + '/' + assetSubType + '/' + topic + '/' + startDate + '/' + endDate + '/' + sortOrder + '/' + indexsuffix;
	}
	//alert(loc);
	window.location = loc;
	return false
}

function submitRefineCoverForm(rForm){
	var startDate = "";
	var endDate = "";
	
	var startMonth = rForm.startm.value;
	var startDay = rForm.startd.value;
	var startYear = rForm.starty.value;
	var endMonth = rForm.endm.value;
	var endDay = rForm.endd.value;
	var endYear = rForm.endy.value;
	var decade = rForm.decade.value;
	
//alert("submitRefineCoverForm decade" + decade + "\n");
	// build date strings from select list values
	startDate = buildDateStringTopic(startMonth,startDay,startYear);
	endDate = buildDateStringTopic(endMonth,endDay,endYear);
	
	// cannot enter both a decade and dates
	if( (decade != "" && startDate != "") || (decade != "" && endDate != ""))
	{
		alert("Please enter either a decade or start and/or end dates.")
		return false
	}
	
	// if decade value is present, start and end date values use decade field 
	if(decade != "" && startDate == "" && endDate == "")
	{
		var beginYear = parseInt(decade);
		var endYear = beginYear + 9;
			
		// set new start and end date values
		startDate = buildDateStringTopic("01", "01", beginYear);
		endDate = buildDateStringTopic("12", "31", endYear);
	}
	
	if(startDate == "")
	{
		startDate = defaultTopicBeginDate;
	}
	if(endDate == "")
	{
		endDate = defaultTopicEndDate;
	}

	if(assetSubType == 'select' || (assetType == 'swimsuit' && assetSubType == 'cover'))
	{
		var loc = vaultServerPath + '/' + assetType + '/' + assetSubType + '/' + startDate + '/' + endDate + '/dd/1/' + indexsuffix;
	}

	//alert(loc);
	window.location = loc;
	return false
}

function submitSearchForm(form,refineform,numperpage,rfsearchtype){
	var startDate = "";
	var endDate = "";
	var query = "";
	var exactClause = "";
	var notClause = "";
	var orClause = "";
	var currentPage = "1";
	var npp = numperpage; 	
	var searchType = "";			// number per page set in config
	var searchType = "mag_article"; // this type of search will always return the article view
	
	var searchUrl = form.action; // this is the url to submit the form
	if(rfsearchtype && rfsearchtype != "")
	{
		var searchType = rfsearchtype;
		searchUrl = vaultServerPath + '/' + assetType + '/' + assetSubType  + '/' + indexsuffix;
		//alert(searchUrl);
	}
	
	query = form.query.value;	
	
	// if advanced search fields are open, get field values
	if(isAdvanced)
	{
		//alert("is advanced");
		exactClause = form.exactClause.value;
		notClause = form.notClause.value;
		orClause = form.orClause.value;
	}
	
	// check for refine search existence and data 
	if(refineform != "no")
	{
		if(refineform.elements[0])
		{
			var refineForm = refineform;
			var startMonth = refineForm.startm.value;
			var startDay = refineForm.startd.value;
			var startYear = refineForm.starty.value;
			var endMonth = refineForm.endm.value;
			var endDay = refineForm.endd.value;
			var endYear = refineForm.endy.value;
			var decade = refineForm.decade.value;
	
			// build date strings from select list values
	
			startDate = buildDateString(startMonth,startDay,startYear);
			endDate = buildDateString(endMonth,endDay,endYear);
			
			// if decade value is present, start and end date values use decade field 
			if(decade != "" && startDate == "" && endDate == "")
			{
				var beginYear = parseInt(decade);
				var endYear = beginYear + 9;
				//alert(beginYear + "  " + endYear);
				
				// set new start and end date values
				startDate = buildDateString("01", "01", beginYear);
				endDate = buildDateString("12", "31", endYear);
			}
		}
	}
	
	
	
	var formValueArray = new Array();
		formValueArray['searchType'] = searchType;
		formValueArray['query'] = query;
		formValueArray['exactClause'] = exactClause;
		formValueArray['notClause'] = notClause;
		formValueArray['orClause'] = orClause;
		formValueArray['startDate'] = startDate;
		formValueArray['endDate'] = endDate;
		formValueArray['currentPage'] = currentPage;
		formValueArray['npp'] = npp;
		
	//alert("about to validate");
	//alert("startDate: " + startDate + " endDate: " + endDate);
	
	if(	validateRequired(formValueArray) &&
		validateQueryChars(formValueArray) &&
		validateEndDate(startDate,endDate))
	{
	
		var queryString = buildQueryString(formValueArray, searchType);
		window.location = searchUrl + queryString;
	}
	return false
}

function submitBottomSearchForm(form,numperpage){
	//alert('submitBottomSearchForm');
	//alert(isAdvanced);
	var startDate = "";
	var endDate = "";
	var query = "";
	var exactClause = "";
	var notClause = "";
	var orClause = "";
	var currentPage = "1"; 		// search always returns page 1
	var npp = numperpage; 		// number per page
	var searchType = "mag_article"; // this type of search will always return the article view
	
	query = form.queryb.value;
	
	// if advanced search fields are open, get field values
	if(isAdvanced)
	{
		exactClause = form.exactClauseb.value;
		notClause = form.notClauseb.value;
		orClause = form.orClauseb.value;
	}
	var formValueArray = new Array();
		formValueArray['searchType'] = searchType;
		formValueArray['query'] = query;
		formValueArray['exactClause'] = exactClause;
		formValueArray['notClause'] = notClause;
		formValueArray['orClause'] = orClause;
		formValueArray['startDate'] = startDate;
		formValueArray['endDate'] = endDate;
		formValueArray['currentPage'] = currentPage;
		formValueArray['npp'] = npp;
		
	//alert("about to validate");
	if(validateRequired(formValueArray)&&
	   validateQueryChars(formValueArray))
	{
		var queryString = buildQueryString(formValueArray, searchType);
		//alert(queryString);
		window.location = form.action + queryString;

	}

	return false
}


//////////// POPULATE FIELDS FUNCTIONS /////////////

function populateTextSearchFields(){
	
	var searchAll = document.getElementById('querytop');
	var searchNot = document.getElementById('notClause');
	var searchPhrase = document.getElementById('exactClause');
	var searchOr = document.getElementById('orClause');
	
	searchAll.value = searchAllVal;
	searchNot.value = searchNotVal;
	searchPhrase.value = searchPhraseVal;
	searchOr.value = searchOrVal;
}

function processDateData(smfield, sdfield, syfield, sdate, emfield, edfield, eyfield, edate){
	var smonth = "";
	var sday = "";
	var syear = "";
	var emonth = "";
	var eday = "";
	var eyear = "";
	if(sdate != "")
	{
		var smonth = getMonth(sdate);
		var sday = getDay(sdate);
		var syear = getYear(sdate);
	}
	if(edate != "")
	{
		var emonth = getMonth(edate);
		var eday = getDay(edate);
		var eyear = getYear(edate);
		// if the end year is later than the current year, use current year
		// this would happen if no end date was selected in refine search box
		if(eyear > refineDate.getFullYear())
		{
			eyear = refineDate.getFullYear();
		}
	}
	var isDecade = checkDateForDecade(smonth,sday,syear,emonth,eday,eyear)
	if(isDecade) // populate decade field
	{
		populateDecadeData(sdate);
	}
	else // populate date fields
	{
		//alert('this is not a decade');
		createRefineString(smonth, sday, syear, sdate, emonth, eday, eyear, edate);
		populateDateData(smfield, sdfield, syfield, sdate, smonth, sday, syear);
		populateDateData(emfield, edfield, eyfield, edate, emonth, eday, eyear);
	}
}

/* 
	createRefineString and writeRefineString
	writes out red date range, or decade, above the refine search box
*/
function createRefineString(smonth, sday, syear, sdate, emonth, eday, eyear, edate){
	var dStart = "";
	var dEnd = "";
	if(sdate != "")
	{
		var dStartMonth = monthsArr[setArrIndex(smonth)];
		var dStart = dStartMonth + " " + sday + ", " + syear;
	}
	if(edate != "")
	{
		var dEndMonth = monthsArr[setArrIndex(emonth)];
		var dEnd = " to " + dEndMonth + " " + eday + ", " + eyear;
		if(sdate == "")
		{
			dEnd = "August 16, 1954 " + dEnd; // 08/16/54 is date of first SI issue
		}
	}
	refineString = dStart + dEnd
	if(refineString != "")
	{
		writeRefineString();
	}
}

function writeRefineString (){
	if(assetType != "cover" && assetSubType != "select")
	{
  	var theBox = document.getElementById('refineData');
  	theBox.innerHTML = refineString;
  	theBox.style.display = "";
	}
}

function setArrIndex(str){
	if(str.charAt(0) == '0')
	{
		str = str.substr(1);
	}
	strIndex = parseInt(str) - 1;
	return strIndex;
}

function checkDateForDecade(sm, sd, sy, em, ed, ey){
	// check to see if start year ends with 0
	if(sy.substr(3) == '0')
	{
		var syear = parseInt(sy);
		var eyear = parseInt(ey);
		
		if( (syear + 9) == eyear)
		{
			if((sm == "01") && (sd == "01") && (em == "12") && (ed == "31"))
			{
				return true;
			}
		}
	} 
	return false;
}

function populateDecadeData(date){
	
	var decade = date.substr(0,3);
	var decadeValue = decade + "0";
	var decadeField = document.getElementById('decade');
	for(var x = 0; x < decadeField.options.length; x++)
	{
		if(decadeField.options[x].value == decadeValue)
		{
			decadeField.options[x].selected=true;
			// set refineString variable which will display on page
			refineString = decadeField.options[x].text;  
			writeRefineString();
			return x;
			break;
		}
	}
	return;
}

function populateDateData (mfield, dfield, yfield, date, m, d, y){
	if(date != "")
	{
		var month = m;
		var day = d;
		var year = y;
		
		var monthIndex = populateMonth(mfield,month);
		populateYear(yfield,year);
		// run populate script to get correct days for month and year
		populate("",monthIndex,mfield,dfield,yfield);
		populateDay(dfield,day);

	}
	else 
	{
		return false;
	}
}

function populateMonth(mfield,month){
	
	for(var x = 0; x < mfield.options.length; x++)
	{
		if(mfield.options[x].value == month)
		{
			mfield.options[x].selected=true;
			return x;
			break;
		}
	}
	return;
}

function populateDay(dfield,day){

	for(var x = 0; x < dfield.options.length; x++)
	{
		if(dfield.options[x].value == day)
		{
			dfield.options[x].selected=true;
			break;
		}
	}
	return;

}

function populateYear(yfield,year){

	for(var x = 0; x < yfield.options.length; x++)
	{
		if(yfield.options[x].value == year)
		{
			yfield.options[x].selected=true;
			//return x;
			break;
		}
	}
	return;

}

function getMonth(date){
	var dateParts = new Array()
	//dateParts = date.split('/');
	dateParts = date.split('-');
	return dateParts[1];
}

function getDay(date){
	
	var dateParts = new Array()
	//dateParts = date.split('/');
	dateParts = date.split('-');
	return dateParts[2];
}

function getYear(date){
	var dateParts = new Array()
	//dateParts = date.split('/');
	dateParts = date.split('-');
	return dateParts[0];
}

////////////////////////////////////////////////////


////// SUBMIT FORM FUNCTIONS///////////////////////


function buildQueryString(arr, type){
	//the query string cannot start with searchType
	//compositing is looking for a match on '&searchType'
	var queryString = "?query=" + escape(arr['query']);
	queryString += "&searchType=" + type;
	queryString += "&exactClause=" + escape(arr['exactClause']);
	queryString += "&notClause=" + escape(arr['notClause']);
	queryString += "&orClause=" + escape(arr['orClause']);
	queryString += "&startDt=" + arr['startDate'];
	queryString += "&endDt=" + arr['endDate'];
	queryString += "&shootId=";
	queryString += "&sortBy=date"; // always sort by date when submitting form
	queryString += "&currentPage=" + arr['currentPage'];
	queryString += "&npp=" + arr['npp'];

	//alert("buildQueryString search.js " + queryString);
	return queryString;

}



// need to date later than from date validation

function validateEndDate(sdate,edate){
	// if dates have not value, do not run validate function
	if(sdate != "" && edate != "")
	{
		var sMonth = getMonth(sdate);
		var sDay = getDay(sdate);
		var sYear = getYear(sdate);
		var eMonth = getMonth(edate);
		var eDay = getDay(edate);
		var eYear = getYear(edate);
		
		//alert("sMonth: " + sMonth + " eMonth: " + eMonth);
		
		// month must be the index value of js month array
		jsSMonth = setMonth(sMonth);
		jsEMonth = setMonth(eMonth);
		
		var startTime = new Date(sYear,jsSMonth,sDay);
		var endTime = new Date(eYear,jsEMonth,eDay);
		//alert("start time: " + startTime + "<br/>end time: " + endTime);
		if(endTime < startTime)
		{
			alert("Search Through Date must be later than Search From Date");
			return false;
		}
	}
	return true;
}

function validateRequired(fArr){

	if(	(fArr['query'] == "") &&
		(fArr['exactClause'] == "") &&
		(fArr['notClause'] == "") &&
		(fArr['orClause'] == ""))
	{
		alert("At least one text field is required for a search.");
		return false;
	}
	else
	{
		return true;
	}
	
}

function validateQueryChars(fArr){
	var mask = new RegExp("^[ \\-,_'.a-zA-Z0-9]*$");
	
	if(	mask.test(fArr['query']) &&
		mask.test(fArr['exactClause']) &&
		mask.test(fArr['notClause']) &&
		mask.test(fArr['orClause']))
	{
		return true;
	}
	else
	{
		alert("Your search contains invalid characters.\nPlease enter only letters, numbers, commas, hyphens, underscores, periods and apostrophes.");
		return false;
	}
}


////////////////////////////////////////////////////

///// UTILITY FUNCTIONS ///////////////////////////

function ZeroFill( num ) { // returns one digit numbers as two digits
	return ( ( num <= 9 ) ? ( "0" + num ) : num );
	
}

function cnnGetObject( id ) {
	var object = null;
	if ( document.getElementById ) { object = document.getElementById( id ); }
	else if ( document.all ) { object = document.all[ id ]; }
	return object;
}

function buildDateString(m,d,y){
	var fullDateString = "";
	//alert("buildDateString" + m + d + y);
	if(	(m != "") && 
		(d != "") &&
		(y != ""))
	{
		//fullDateString = m + "/" + d + "/" + y;
		fullDateString = y + "-" + m + "-" + d;
	}
	//alert("fullDateString: " + fullDateString);
	return fullDateString;
	
}

function buildDateStringTopic(m,d,y){
	var fullDateString = "";
	//alert("buildDateString" + y + m + d);
	if(	(m != "") && 
		(d != "") &&
		(y != ""))
	{
		//fullDateString = m + "/" + d + "/" + y;
		fullDateString = y + "-" + m + "-" + d;
	}
	return fullDateString;
	
}

function setMonth(str){
	var theMonth = str;
  	if(str.length==2)
	{
		if(str.charAt(0)=='0')
		{
			var theMonth = theMonth.substring(1)
		}
  	}
	var jsMonth = theMonth-1;
  return jsMonth
}

// clears search dates in form when selecting a new Decade 
function clearSearchDates(rForm) {
	rForm.startm.value = '';
	rForm.startd.value = '';
	rForm.starty.value = '';	
	rForm.endm.value = '';
	rForm.endd.value = '';
	rForm.endy.value = '';
}

function clearDecade(rForm){
	rForm.decade.value = '';
}