

var selectedAdvertiserObject;
var selectedBrandObject;


// called when the user clicks on the advertiser name in the pop-up layer
function advertiserClick(advertiserIndex) {
	var advertiserName = response.Advertisers[advertiserIndex].advertiserName;
	//var advertiserId = response.Advertisers[advertiserIndex].ID;
	// set advertiser values
	document.getElementById("advertiser").value = advertiserName;
	// TODO: do we need this?
	//document.getElementById("advertiserID").value = advertiserId;
	// hide advertiser list
	document.getElementById("foundAdvertisers").style.display = 'none';
	currentlyHighlighted = -1;
	// remember selected advertiser object
	for (i=0; i<response.Advertisers.length; i++) {
		if (response.Advertisers[i].advertiserName.toLowerCase() == advertiserName.toLowerCase()) {
			selectedAdvertiserObject = response.Advertisers[i];
			break;
		}
	}
	// if necessary populate locations dropdown
	if( document.forms[0].location ) {
		populateLocations();
		window.setTimeout("document.forms[0].location.focus();", 200);
	}
}

// NOTE: function not currently in use as advertiser and brand fields have been merged
function brandClick(brandIndex) {
	var brandName = response.Brands[brandIndex].brandName;
	// set brand values
	document.getElementById("brand").value = brandName;
	// hide brand list
	document.getElementById("foundBrands").style.display = 'none';
	currentlyHighlighted = -1;
	// remember selected brand object
	for (i=0; i<response.Brands.length; i++) {
		if (response.Brands[i].brandName.toLowerCase() == brandName.toLowerCase()) {
			
			selectedBrandObject = response.Brands[i];
			break;
		}
	}
	// if necessary populate locations dropdown
	if( document.forms[0].location ) {
		populateLocations();
		window.setTimeout("document.forms[0].location.focus();", 200);
	}
}


// called onblur of the advertiser field
function onAdvertiserBlur(isCreativeBenchmarking) {
	var advertiserField = document.getElementById("advertiser");
	// hide advertiser list
	window.setTimeout("document.getElementById('foundAdvertisers').style.display = 'none'; currentlyHighlighted = -1;", 200);
	// if there is no advertiser object or no advertiser name then clear the fields
	if (advertiserField.value == "") {
		if (isCreativeBenchmarking) {
			advertiserField.value = "type advertiser or brand here";
			advertiserField.style.color = "#8b8b8b";
		} else {
			advertiserField.value = "";
		}
		// TODO: do we need this?
		//document.getElementById("advertiserID").value = "-1";
		selectedAdvertiserObject = undefined;
	}
	// populate locations if necessary
	if(document.forms[0].location) {
		populateLocations();
	}
}

//NOTE: function not currently in use as advertiser and brand fields have been merged
function onBrandBlur() {
	document.getElementById("foundBrands").style.display = 'none';
	var brandField = document.getElementById("brand");
	// hide brand list
	window.setTimeout("document.getElementById('foundBrands').style.display = 'none'; currentlyHighlighted = -1;", 200);
	// if there is no brand object or no brand name then clear the fields
	if (selectedBrandObject === undefined || brandField.value == "") {
		//alert("selectedBrandObject === undefined || brandField.value == empty");
		brandField.value = "";
		// TODO: do we need this?
		//document.getElementById("brandID").value = "-1";
		selectedBrandObject = undefined;
	}
	// populate locations if necessary
	if(document.forms[0].location) {
		//alert("location found");
		populateLocations();
	}
}


var currentlyHighlighted = -1;
var numItems = 0;
var isBrand = false;

function handleArrowKeys(evt) {
	if (isBrand) {
		field = "brand";
	}
	else {
		field = "advertiser";
	}
	if (document.getElementById("found"+field.substring(0,1).toUpperCase()+field.substr(1)+"s").style.display == "inline") {
		var arrowPressed = false;
		var itemToHighlight = currentlyHighlighted;
		switch (evt.keyCode) {
			case 38:	// up
				arrowPressed = true;
				if (currentlyHighlighted == -1 || currentlyHighlighted == 0) {		// if nothing or first item is currently highlighted
					itemToHighlight = numItems-1;
				}
				else {
					itemToHighlight--;
				}
				break;
			case 40:	// down
				arrowPressed = true;
				if (currentlyHighlighted == -1 || currentlyHighlighted == numItems-1) {		// if nothing or last item is currently highlighted
					itemToHighlight = 0;
				}
				else {
					itemToHighlight++;
				}
				break;
			
		}
		if (arrowPressed) {
			// de-highlight old row if necessary
			if (currentlyHighlighted != -1) {
				document.getElementById(field+"Span"+currentlyHighlighted).style.backgroundColor = "";
			}
			// highlight row
			document.getElementById(field+"Span"+itemToHighlight).style.backgroundColor = "#FFFF99";
			// remember highlighted
			currentlyHighlighted = itemToHighlight;
		}
	}
}


var advertiserFieldValue = "";
var brandFieldValue = "";

// function called every time something is typed in the advertiser name field
function onAdvertiserKeyUp(e, isCreativeBenchmark) {
	if (!e) { e = window.event; }
	var advertiserField = document.getElementById("advertiser");
	var newAdvertiserValue = advertiserField.value;
	// if the advertiser name has changed
	if (newAdvertiserValue != advertiserFieldValue) {
		// reset the advertiser & location objects
		selectedAdvertiserObject = undefined;
		selectedLocationObject = undefined;
		// if advertiser name is 3 characters or more then submit AJAX request
		var advertiserFieldVal = advertiserField.value.toLowerCase();
		if (advertiserFieldVal.length > 0) {
			if (isCreativeBenchmark) 
				sndReqCBAdvertiser(advertiserFieldVal);
			else
				sndReq(advertiserFieldVal);
		}
	}
	// else the arrow keys may have been pressed
	else {
		isBrand = false;
		handleArrowKeys(e);
	}
	// remember new advertiser name
	advertiserFieldValue = newAdvertiserValue;
}

//NOTE: function not currently in use as advertiser and brand fields have been merged
function onBrandKeyUp(e) {
	if (!e) { e = window.event; }
	var brandField = document.getElementById("brand");
	var newBrandValue = brandField.value;
	
	// if the brand name has changed
	if (newBrandValue != brandFieldValue) {
		// reset the brand & location objects
		selectedBrandObject = undefined;
		selectedLocationObject = undefined;
		// if brand name is 3 characters or more then submit AJAX request
		var brandFieldVal = brandField.value.toLowerCase();
		if (brandFieldVal.length > 0) {
			sndReqCBBrand(brandFieldVal);
		}
	}
	// else the arrow keys may have been pressed
	else {
		isBrand = true;
		handleArrowKeys(e);
		
	}
	// remember new brand name
	brandFieldValue = newBrandValue;
}


function onCategoryChange(categoryField) {
	var newCategoryId = categoryField.value;
	// reset sub-cat dropdown
	var subCatSelect = document.getElementById("subCategory");;
    subCatSelect.options.length=0;
    subCatSelect.options[0] = new Option("Sub-Category", "", false, false);
    subCatSelect.style.color = "#ACA899";
	// submit ajax request
	if (newCategoryId != "") {
		sndReqSubCat(newCategoryId);
	}
}


function createRequestObject() {
    var ro;
    var browser = navigator.appName;
    if(browser == "Microsoft Internet Explorer"){
        ro = new ActiveXObject("Microsoft.XMLHTTP");
    }else{
        ro = new XMLHttpRequest();
    }
    return ro;
}


var http = createRequestObject();
var response = "";


function sndReq(advertiserFilter) {
    http.open('get', '/nma/ajax/MainServlet?service=advertiserLookup&advertiserFilter='+escape(advertiserFilter));
    http.onreadystatechange = handleResponse;
    http.send(null);
}

function sndReqSubCat(categoryId) {
    http.open('get', '/nma/ajax/MainServlet?service=creativeBenchmarkSubCategoryLookup&categoryId='+escape(categoryId));
    http.onreadystatechange = handleSubCategoryResponse;
    http.send(null);
}

function sndReqCBAdvertiser(subString) {
    http.open('get', '/nma/ajax/MainServlet?service=creativeBenchmarkAdvertiserBrandLookup&advertiser='+escape(subString));
    http.onreadystatechange = handleResponse;
    http.send(null);
}

//NOTE: function not currently in use as advertiser and brand fields have been merged
function sndReqCBBrand(subString) {
    http.open('get', '/nma/ajax/MainServlet?service=creativeBenchmarkBrandLookup&brand='+escape(subString));
    http.onreadystatechange = handleBrandResponse;
    http.send(null);
}

function handleResponse() {
    if (http.readyState == 4){
    	var advertiserFieldVal = document.getElementById("advertiser").value.toLowerCase();
        response = JSON.parse(http.responseText);
        //alert("response = \n"+http.responseText);
    	//clipboardData.setData("Text", http.responseText);
        // if there is a syntax error in the JSON then do nothing
        if (response == false) { return; }
		var displayVal = "none";
		if (response.Advertisers.length > 0) {
			var exactAdvertiserPos = -1;
			// build html string
			var htmlVal = "";
			for (i=0; i<response.Advertisers.length; i++) {
				var theName = response.Advertisers[i].advertiserName;
				htmlVal += "<div id=\"advertiserSpan" + i + "\" onMouseDown=\"advertiserClick("+i+")\" onMouseOver=\"onAjaxItemOver('advertiserSpan"+i+"')\" onMouseOut=\"onAjaxItemOut('advertiserSpan"+i+"')\" class=\"ajaxListItem\">" + theName + "</div>";
				if (advertiserFieldVal == theName.toLowerCase()) {
					exactAdvertiserPos = i;
				}
			}
			// check if the value entered is a full advertiser name, if so then populate the advertiser object and the advertiserID
			if (exactAdvertiserPos != -1) {
				selectedAdvertiserObject = response.Advertisers[exactAdvertiserPos];
				// TODO: do we need this line?
				//document.getElementById("advertiserID").value = response.Advertisers[exactAdvertiserPos].ID;
			}
			else {		// else reset object and value
				selectedAdvertiserObject = undefined;
				// TODO: do we need this line?
				//document.getElementById("advertiserID").value = "-1";
			}
			// populate and show pop-up
			displayVal = "inline";
		}
		// set pop-up display
		var advertisersDiv = document.getElementById("foundAdvertisers");
		advertisersDiv.innerHTML = htmlVal;
		advertisersDiv.style.display = displayVal;
		// remember the number of advertisers
		numItems = response.Advertisers.length;
    }
}

function handleSubCategoryResponse() {
    if(http.readyState == 4){
        response = JSON.parse(http.responseText);
        if (response == false) { return; }
        var subCatSelect = document.getElementById("subCategory");
        subCatSelect.options.length=0;
		if (response.SubCategories != null && response.SubCategories.length > 0) {
			subCatSelect.options[0]=new Option("Select Sub-Category", "",false, false);
			for (var i=0; i < response.SubCategories.length; i++) {
				subCatSelect.options[subCatSelect.options.length]=new Option(response.SubCategories[i].subCategoryName, response.SubCategories[i].subCategoryName, false, false);
			}
			subCatSelect.style.color = "#000000";
			subCatSelect.title = "";
		}
		else {
			subCatSelect.options[0]=new Option("No Sub-Categories", "", false, false);
			subCatSelect.style.color = "#ACA899";
			subCatSelect.title = "Please select a category first";
		}
    }
}

//NOTE: function not currently in use as advertiser and brand fields have been merged
function handleBrandResponse() {
    if (http.readyState == 4){
    	var brandFieldVal = document.getElementById("brand").value.toLowerCase();
        response = JSON.parse(http.responseText);
        if (response == false) { return; }
		var displayVal = "none";
		if (response.Brands.length > 0) {
			var exactBrandPos = -1;
			// build html string
			var htmlVal = "";
			for (i=0; i<response.Brands.length; i++) {
				var theName = response.Brands[i].brandName;
				htmlVal += "<div id=\"brandSpan" + i + "\" onMouseDown=\"brandClick(" + i + ")\" class=\"ajaxListItem\">" + theName + "</div>";
				if (brandFieldVal == theName.toLowerCase()) {
					exactBrandPos = i;
				}
			}
			// check if the value entered is a full brand name, if so then populate the brand object and the brandID
			if (exactBrandPos != -1) {
				selectedBrandObject = response.Brands[exactBrandPos];
			}
			else {		// else reset object and value
				selectedBrandObject = undefined;
			}
			// populate and show pop-up
			displayVal = "inline";
		}
		// set pop-up display
		var brandsDiv = document.getElementById("foundBrands");
		brandsDiv.innerHTML = htmlVal;
		brandsDiv.style.display = displayVal;
		// remember the number of brands
		numItems = response.Brands.length;
    }
}



function keyCheck(evt) {
    evt = (evt) ? evt : ((window.event) ? event : null);
	// if tab or return has been pressed
	if (evt && (evt.keyCode == 9 || evt.keyCode == 13)) {
		// if advertisers popup is showing
		if (document.getElementById("foundAdvertisers").style.display == "inline") {
			// if nothing is highlighted then highlight the first item
			if (currentlyHighlighted == -1) {
				currentlyHighlighted = 0;
			}
			// simulate a click on the highlighted advertiser
			advertiserClick(currentlyHighlighted);
		}
		// else if brand popup is showing
		else if (document.getElementById("foundBrands")!= null && document.getElementById("foundBrands").style.display == "inline") {
			// if nothing is highlighted then highlight the first item
			if (currentlyHighlighted == -1) {
				currentlyHighlighted = 0;
			}
			// simulate a click on the highlighted brand
			brandClick(currentlyHighlighted);
		}
	}
}

document.onkeydown = keyCheck;




function onAllNewspapersClick(theField){
	// if all newspapers has been checked then uncheck all newspapers
	if (theField.checked) {
		var allPapers = document.getElementsByName("selectedNewspapers");
		for (var i=1; i<allPapers.length; i++) {
			allPapers[i].checked = false;
		}
	}
}

function onNewspaperClick(theField) {
	// if all boxes are now ticked then reflect that with the All box, else untick the All box
	var allTicked = true;
	var allPapers = document.getElementsByName("selectedNewspapers");
	for (var i=1; i<allPapers.length; i++) {
		if (!allPapers[i].checked) {
			allTicked = false;
			break;
		}
	}
	if (allTicked) {
		allPapers[0].checked = true;
		onAllNewspapersClick(allPapers[0]);
	}
	else {
		allPapers[0].checked = false;
	}
}


function onAllCategoriesClick(theField){
	// if all products checkbox has been checked then uncheck all other fields
	if (theField.checked) {
		var allCats = document.getElementsByName("selectedCategories");
		for (var i = 1; i < allCats.length; i++) {
			allCats[i].checked = false;
		}
	}
}

function onCategoryClick(theField) {
	// if all boxes are now ticked then reflect that with the All box, else untick the All box
	var allTicked = true;
	var allCats = document.getElementsByName("selectedCategories");
	for (var i=1; i<allCats.length; i++) {
		if (!allCats[i].checked) {
			allTicked = false;
			break;
		}
	}
	if (allTicked) {
		allCats[0].checked = true;
		onAllCategoriesClick(allCats[0]);
	}
	else {
		allCats[0].checked = false;
	}
}




// validate advanced search form
function validateAdvancedSearch(objForm) {
	// if no categories are selected then select all the categories checkboxes
	var noCatsChecked = true;
	var allCats = document.getElementsByName("selectedCategories");
	for (var i=1; i<allCats.length; i++) {
		if (allCats[i].checked) {
			noCatsChecked = false;
			break;
		}
	}
	if (noCatsChecked) {
		for (var i = 0; i < allCats.length; i++) {
			allCats[i].checked = true;
		}
	}
	// if no newspapers are selected then select all the newspapers checkboxes
	var noPapersChecked = true;
	var allPapers = document.getElementsByName("selectedNewspapers");
	for (var i=1; i<allPapers.length; i++) {
		if (allPapers[i].checked) {
			noPapersChecked = false;
			break;
		}
	}
	if (noPapersChecked) {
		for (var i = 0; i < allPapers.length; i++) {
			allPapers[i].checked = true;
		}
	}
	// populate hidden advertiserBrand field
	document.getElementById("advertiserBrand").value = document.getElementById("advertiser").value;
}





//////////////////////////////////////////////////////////
// The following functions are specifically for the Creative Benchmarking search and are not used in the advanced search page
//////////////////////////////////////////////////////////

function onSubmitForm() {
	// if advertisers popup is showing && a advertiser is highlighted
	if (document.getElementById("foundAdvertisers").style.display == "inline" && currentlyHighlighted != -1) {
		var advertiserName = document.getElementById("advertiserSpan"+currentlyHighlighted).innerText;
		document.getElementById("advertiser").value = advertiserName;
		document.getElementById("foundAdvertisers").style.display == "none";
	}
	// clear text fields of default text
	var searchField = document.forms[1].keyword;
	if (searchField != null && searchField.value == "type general search text here") {
		searchField.value = "";
	}
	var advertiserField = document.getElementById("advertiser");
	if (advertiserField != null &&  advertiserField.value == "type advertiser or brand here") {
		advertiserField.value = "";
	}
	// if we are currently on special event tab then reset sort order
	if (document.forms[1].searchOrderBy && document.forms[1].searchOrderBy[0].disabled == true) {
		document.forms[1].searchOrderBy[0].checked = true;
	}
	return true;
}


tabs = ["searchResults","monthlyTop", "rollingTop", "specialEvent"];
function viewTab(tabName) {
	var clickedTab = document.getElementById(tabName + "Tab");
	var tab;
	var posSelected;
	if (clickedTab.className.indexOf("Selected") == -1) {
		for (var i = 0; i < tabs.length; i++) {
			
			if (tabName == tabs[i]) {
				clickedTab.className += "Selected";
				document.getElementById(tabs[i] + "Div").style.display="block";
			}
			else {
				tab = document.getElementById(tabs[i] + "Tab");
				// exists and Selected?
				if (tab != null && (posSelected = tab.className.indexOf("Selected")) != -1) {
					tab.className = tab.className.substring(0,posSelected);
					document.getElementById(tabs[i] + "Div").style.display="none";
				}
			}
		}
	}
}

function onAdvertiserFocus() {
	var advertiserField = document.getElementById("advertiser");
	if (advertiserField.value == "type advertiser or brand here") {
		advertiserField.value = "";
		advertiserField.style.color = "#000";
	}
}

function onSearchFocus() {
	var searchField = document.forms[1].keyword;
	if (searchField.value == "type general search text here") {
		searchField.value = "";
		searchField.style.color = "#000";
	}
}

function onSearchBlur() {
	var searchField = document.forms[1].keyword;
	if (searchField.value == "") {
		searchField.value = "type general search text here";
		searchField.style.color = "#8b8b8b";
	}
}

function showHideInfoText(show, type) {
	var textDisplayVal = "none";
	var link1DisplayVal = "inline";
	var link2DisplayVal = "none";
	if (show) {
		textDisplayVal = "block";
		link1DisplayVal = "none";
		link2DisplayVal = "inline";
	}
	document.getElementById(type+"InfoText").style.display = textDisplayVal;
	document.getElementById(type+"InfoLink1").style.display = link1DisplayVal;
	document.getElementById(type+"InfoLink2").style.display = link2DisplayVal;
}

function advancedOptionsToggle(show) {
	var displayVal1 = "block";
	var displayVal2 = "block";
	var displayVal4 = "none";
	var displayVal5 = "block";
	var displayVal6 = "block";
	var visibilityVal1 = "hidden";
	if (!show) {
		displayVal1 = "none";
		displayVal2 = "none";
		displayVal4 = "block";
		displayVal5 = "none";
		displayVal6 = "none";
		visibilityVal1 = "visible";
	}
	document.getElementById("searchFields1").style.display = displayVal1;
	document.getElementById("searchFields2").style.display = displayVal2;
	document.getElementById("searchFields4").style.display = displayVal4;
	document.getElementById("searchFields5").style.display = displayVal5;
	document.getElementById("searchFields6").style.display = displayVal6;
	document.getElementById("searchButton1").style.visibility = visibilityVal1;
}

function resetCbSearch() {
	// reset main search text field
	var keywordField = document.forms[1].keyword;
	keywordField.value = "type general search text here";
	keywordField.style.color = "#8b8b8b";
	// reset advertiser ajax dropdown
	var advertiserField = document.forms[1].advertiser;
	advertiserField.value = "type advertiser or brand here";
	advertiserField.style.color = "#8b8b8b";
	selectedAdvertiserObject = undefined;
	advertiserFieldValue = "";
	// reset category dropdown
	document.forms[1].category.selectedIndex = 0;
	// reset sub-category dropdown
	var subCatField = document.forms[1].subCategory;
	subCatField.options.length = 1;
	subCatField.style.color = "#ACA899";
	subCatField.title = "Please select a category first";
	// reset date dropdowns
	document.forms[1].dateFrom.selectedIndex = 0;
	document.forms[1].dateTo.selectedIndex = document.forms[1].dateTo.options.length-1;
	// reset images checkbox
	document.forms[1].hideImages.checked = false;
}

function onHideImagesClick(theField) {
	var displayVal 		= "block";
	var headingWidth	= "330px";
	var infoClearVal 	= "both";
	var infoFloatVal 	= "none";
	if (theField.checked) {
		displayVal 		= "none";
		headingWidth	= "180px";
		infoClearVal 	= "none";
		infoFloatVal 	= "right";
	}
	var divsArray = document.getElementsByTagName("div");
	// show/hide images
	for (var i=0; i<divsArray.length; i++) {
		if (divsArray[i].className != "resultImage") { continue; }
		divsArray[i].style.display = displayVal;
	}
	// set text styles
	for (var i=0; i<divsArray.length; i++) {
		if (divsArray[i].className != "resultHeading") { continue; }
		divsArray[i].style.width 		= headingWidth;
	}
	for (var i=0; i<divsArray.length; i++) {
		if (divsArray[i].className != "resultInfo") { continue; }
		divsArray[i].style.clear	 	= infoClearVal;
		divsArray[i].style.cssFloat 	= infoFloatVal;		// w3c
		divsArray[i].style.styleFloat 	= infoFloatVal;	// ie
	}
	
	
	toggleNavigationLink("navigationLeft0", theField.checked);
	toggleNavigationLink("navigationRight0", theField.checked);
	toggleNavigationLink("navigationLeft1", theField.checked);
	toggleNavigationLink("navigationRight1", theField.checked);
	
}

function toggleNavigationLink(id, hide) {
	var strToSearch = "&hideImages=on";
	var elt;
	elt=document.getElementById(id);
	if (elt) {
		if (hide) {
			if (elt.href.indexOf(strToSearch) == -1) {
				if (id.indexOf("Left") != -1) {
					elt.href += strToSearch;
				}
				else {
					elt.href += strToSearch;
				}
			}
		}
		else {
			if (elt.href.indexOf(strToSearch) != -1) {
				elt.href = elt.href.replace(strToSearch, "");
			}
		}
	}
}

function onAjaxItemOver(itemId) {
	document.getElementById(itemId).style.backgroundColor = "#C4EDFD";
}

function onAjaxItemOut(itemId) {
	document.getElementById(itemId).style.backgroundColor = "#ffffff";
}

function submitOnEnter(evt) {
	evt = (evt) ? evt : ((window.event) ? event : null);
	// if tab or return has been pressed
	if (evt) {
		if (evt.keyCode == 13) {
			submitForm();
		}
	}
}

function submitForm() {
	onSubmitForm();
	document.forms[1].submit();
	return false;
}

function onResultOrderClick(radioIndex, selectRadio) {
	if (selectRadio) {
		document.forms[1].searchOrderBy[radioIndex].checked = true;
	}
	submitForm();
}

function onEventOrderClick(radioIndex, selectRadio, url) {
	if (selectRadio) {
		document.forms[1].searchOrderBy[radioIndex].checked = true;
	}
	document.location.href = url;
}

function onSpecialEventChange(theDropdown) {
	var dropVal = theDropdown.options[theDropdown.selectedIndex].value;
	if (dropVal == "-1") { return; }
	else { document.location.href = dropVal; }
}


