import com.fear.movieclip.CoreMovieClip;
import com.fear.yahoo.services.impl.SimpleSearchResultXML;
import com.fear.yahoo.services.views.ImageSearchResultsDisplay;
import com.fear.util.StringUtil;
import com.fear.yahoo.menu.SearchSlidingMenu;
import com.fear.app.paginator.Paginator;
class com.fear.yahoo.SearchTest extends CoreMovieClip
{
private var $itemsPerPage:Number;
private var $searchType:String;
private var $searchXML:XML;
private var $imageXML:XML;
private var $linksNode:XMLNode;
private var $totalResultsAvailable:Number;
private var $totalResultsReturned:Number;
private var $firstResultPosition;
// assets assumed to be present in .fla
private var paginator:Paginator;
private var searchInput:TextField;
private var searchResultsView:TextField;
private var debug:TextField;
private var scrollbar:MovieClip;
private var imageResults:MovieClip;
private var localSearch:MovieClip;
private var navigation:MovieClip;
private var btnSubmit:Button;
public function SearchTest()
{
this.setClassDescription('com.fear.yahoo.SearchTest');
// default(s)
this.$itemsPerPage = 10;
this.$searchType = 'web';
this.formatUI();
this.localSearch.searchInput.onChanged = function(textfield_txt:TextField)
{
_parent._parent.searchInput.text = this.text;
}
this.btnSubmit.onRelease = function()
{
_parent.submitForm();
}
this.handleKeyEvents();
}
private function handleKeyEvents()
{
var keyListener:Object = new Object();
keyListener.context = this;
keyListener.onKeyDown = function()
{
//fscommand('','onRemoteEvent(' + Key.getCode() + ')');
switch(Key.getCode())
{
case 13:
{
// enter key
this.context.submitForm();
}
break;
}
//trace("Key.DOWN -> Code: "+Key.getCode()+"\tACSII: "+Key.getAscii()+"\tKey: "+chr(Key.getAscii()));
};
keyListener.onKeyUp = function()
{
//trace("Key.UP -> Code: "+Key.getCode()+"\tACSII: "+Key.getAscii()+"\tKey: "+chr(Key.getAscii()));
};
Key.addListener(keyListener);
}
private function onSearchTypeChange(searchType:String)
{
//trace('SearchTest.onSearchTypeChange: '+ searchType)
this.$searchType = searchType;
this.formatUI();
this.submitForm();
}
public function submitForm():Void
{
trace('[SearchTest] submitForm invoked w/ arg: ' + arguments[0])
var pageOffset = arguments[0];
var newStart;
if(pageOffset > 1)
{
newStart = Number((pageOffset * this.$itemsPerPage) - this.$itemsPerPage + 1);
}
else
{
newStart = 1;
}
if(this.searchInput.text != '')
{
if(this.$searchType == 'local')
{
// pass the zip in for local search
this.$searchXML = new SimpleSearchResultXML(this, resultHandler, this.searchInput.text, this.$searchType, this.localSearch.searchInputZip.text, this, newStart);
}
else
{
this.$searchXML = new SimpleSearchResultXML(this, resultHandler, this.searchInput.text, this.$searchType, undefined, this, newStart);
}
}
else
{
this.searchResultsView.htmlText = '';
}
}
public function next(context:MovieClip):Void
{
var current:Number = Number(context.searchXML.firstChild.attributes.firstResultPosition);
trace('next invoked: '+ Number(Number(paginator.currentPage) + 1))
context.submitForm(Number(Number(paginator.currentPage) + 1));
}
public function previous(context:MovieClip):Void
{
var current:Number = Number(context.searchXML.firstChild.attributes.firstResultPosition);
trace('previous invoked: '+ Number(Number(paginator.currentPage) - 1))
context.submitForm(Number(Number(paginator.currentPage) - 1));
}
public function gotoPage(context:MovieClip, page:Number):Void
{
trace('gotoPage invoked');
trace('context: '+context);
trace('page: '+page);
context.submitForm(page);
}
private function resultHandler(sender:Object, success:Boolean, resultXML, context)
{
trace('[SearchTest] resultHandler invoked');
trace('sender: '+sender);
trace('success: '+success);
trace('context: '+context);
sender.debug.htmlText = "xml load succeeded: " + success;
trace("xml load succeeded: " + success);
if(success != true)
{
sender.submitForm();
return;
}
sender.debug.htmlText += "\nxml:\n"+ resultXML;
sender.$searchXML = resultXML;
/*
trace('context: '+this)
trace('success: '+success)
trace('resultXML: '+resultXML)
*/
var i:Number = 0;
sender.$imageXML = new XML();
sender.$linksNode = sender.$imageXML.createElement("images");
// place the root into the XML tree
sender.$imageXML.appendChild(sender.$linksNode);
//
context.searchResultsView.htmlText = '';
var node:XMLNode;
var resultsArray:Array = new Array();
// build data array from xml results
var i = 0;
//trace('sender.imageResults._visible: '+ sender.imageResults._visible)
//trace('sender.$searchXML.firstChild.childNodes: '+sender.$searchXML.firstChild.childNodes.length)
sender.$totalResultsAvailable = sender.$searchXML.firstChild.attributes.totalResultsAvailable;
sender.$totalResultsReturned = sender.$searchXML.firstChild.attributes.totalResultsReturned;
sender.$firstResultPosition = sender.$searchXML.firstChild.attributes.firstResultPosition;
if(sender.$totalResultsAvailable > 1000)
{
sender.$totalResultsAvailable = 1000;
}
//trace('[SearchTest] resultHandler found results:');
//trace("\ttotalResultsAvailable: "+ sender.$totalResultsAvailable);
//trace("\ttotalResultsReturned: "+ sender.$totalResultsReturned);
//trace("\tfirstResultPosition: "+ sender.$firstResultPosition);
sender.paginator.init(sender.$totalResultsAvailable, 10, 'pageMenuItem', sender.$firstResultPosition, 8, sender);
for(node in sender.$searchXML.firstChild.childNodes)
{
var nodes = sender.$searchXML.firstChild.childNodes[node].childNodes;
var primaryDetailArray:Array = new Array();
for(var prop in nodes)
{
//trace(nodes[prop].nodeName+' = '+nodes[prop].firstChild.nodeValue)
if(nodes[prop].childNodes.length > 1)
{
// trace(nodes[prop].nodeName + ' has children')
primaryDetailArray[nodes[prop].nodeName] = new Array();
for(var props in nodes[prop].childNodes)
{
primaryDetailArray[nodes[prop].nodeName][nodes[prop].childNodes[props].nodeName] = nodes[prop].childNodes[props].firstChild.nodeValue
}
}
else
{
// trace(nodes[prop].nodeName + ' has NO children')
primaryDetailArray[nodes[prop].nodeName] = nodes[prop].firstChild.nodeValue;
}
}
// trace('put in: '+ primaryDetailArray.Title);
resultsArray[i] = primaryDetailArray;
i++;
}
//trace('paint: '+sender.paint);
sender.paint(resultsArray);
sender.formatUI();
}
private function paint(resultsArray:Array)
{
for(var result in resultsArray)
{
//trace('[SearchTest] paint invoked w/ searchtype: '+this.$searchType)
switch(this.$searchType)
{
case "web":
this.searchResultsView.htmlText += ''+resultsArray[result].Title + '
';
if(resultsArray[result].Summary != undefined)
{
this.searchResultsView.htmlText += resultsArray[result].Summary + '
'
}
break;
case "image":
var itemNode:XMLNode = this.$imageXML.createElement("item");
itemNode.attributes.imageURL = StringUtil.strip(resultsArray[result].Url);
itemNode.attributes.name = StringUtil.strip(resultsArray[result].Title);
itemNode.attributes.thumbURL = StringUtil.strip(resultsArray[result].Thumbnail.Url)
this.$linksNode.appendChild(itemNode);
break;
case "local":
if(resultsArray[result].Title != undefined)
{
this.searchResultsView.htmlText += ''+resultsArray[result].Title + '
';
if(resultsArray[result].Summary != undefined)
{
this.searchResultsView.htmlText += resultsArray[result].Summary + '
'
}
}
break;
case "news":
this.searchResultsView.htmlText += ''+resultsArray[result].Title + '
';
if(resultsArray[result].Summary != undefined)
{
this.searchResultsView.htmlText += resultsArray[result].Summary + '
'
}
break;
case "video":
this.searchResultsView.htmlText += ''+resultsArray[result].Title + '
';
if(resultsArray[result].Summary != undefined)
{
this.searchResultsView.htmlText += resultsArray[result].Summary + '
'
}
break;
}
}
}
private function formatUI()
{
//trace('[SearchTest] formatUI invoked w/ searchType: ' + this.$searchType);
switch(this.$searchType)
{
case 'image':
{
//trace('this.imageResults: '+this.imageResults);
//trace('this.$imageXML: '+this.$imageXML);
this.scrollbar._visible = false;
this.imageResults._visible = true;
this.searchResultsView._visible = false;
this.localSearch._visible = false;
this.searchInput._visible = true;
var imageResults = new ImageSearchResultsDisplay(this.imageResults, this.$imageXML, 'image');
}
break;
case 'local':
{
this.localSearch.searchInput.text = this.searchInput.text;
this.localSearch._visible = true;
this.imageResults._visible = false;
this.searchInput._visible = false;
}
break;
default:
{
this.searchInput._visible = true;
this.searchResultsView._visible = true;
this.scrollbar._visible = true;
this.localSearch._visible = false;
this.imageResults._visible = false;
}
break;
}
}
public function get searchXML():XML
{
return this.$searchXML;
}
public function get itemsPerPage():Number
{
return this.$itemsPerPage;
}
}