var wsi = '/cgi-bin/sfwsi';
var cardsReturned = new Array();
var paramSearchWSI = wsi+'/paramvals';
var talents;
var factions;

function ajax(url, vars, callback) {
    if (window.XMLHttpRequest) {
        var cls = new XMLHttpRequest();
    } else {
        var cls = new ActiveXObject("MSXML2.XMLHTTP.3.0");
    }
        
    cls.open("POST", url, true);
    cls.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); 
    cls.onreadystatechange = function() {
        if (cls.readyState == 4 && cls.status == 200) {
            if (cls.responseText) {
                callback(cls.responseText,cls.responseXML);
            }
        } else if (cls.readyState == 4) {
            alert('Received HTTP status ['+cls.status+']['+cls.statusText+']');
        }
    }
    cls.send(vars);
}

function doSearch() {
   var searchparams = 'search=search';
   var form = document.getElementById('searchForm');
   for(i=0;i<form.cardSets.options.length;i++) {
     if(form.cardSets.options[i].selected) {
       searchparams += '&set='+form.cardSets.options[i].value;
     }
   }
   for(i=0;i<form.primaryFaction.options.length;i++) {
     if(form.primaryFaction.options[i].selected) {
       searchparams += '&faction='+form.primaryFaction.options[i].value;
     }
   }
   for(i=0;i<form.cardTypes.options.length;i++) {
     if(form.cardTypes.options[i].selected) {
       searchparams += '&cardtype='+form.cardTypes.options[i].value;
     }
   }
   for(i=0;i<form.designators.options.length;i++) {
     if(form.designators.options[i].selected) {
       searchparams += '&designator='+form.designators.options[i].value;
     }
   }
   for(i=0;i<form.rarities.options.length;i++) {
     if(form.rarities.options[i].selected) {
       searchparams += '&rarity='+form.rarities.options[i].value;
     }
   }
   for(i=0;i<form.artists.options.length;i++) {
     if(form.artists.options[i].selected) {
       searchparams += '&artist='+form.artists.options[i].value;
     }
   }
   if(form.isFdn.checked) {
       searchparams += '&foundation=1';
   }
   searchparams += '&minbody=' + form.bfMin.value;
   searchparams += '&maxbody=' + form.bfMax.value;
   searchparams += '&mincost=' + form.pcMin.value;
   searchparams += '&maxcost=' + form.pcMax.value;
   searchparams += '&mingen=' + form.pgMin.value;
   searchparams += '&maxgen=' + form.pgMax.value;
   if(form.reqF.value != '') {
      searchparams += '&rFaction=' + form.reqF.value;
      searchparams += '&rFactionMin=' + form.rfMin.value;
      searchparams += '&rFactionMax=' + form.rfMax.value;
   }
   if(form.reqT.value != '') {
      searchparams += '&rTalent=' + form.reqT.value;
      searchparams += '&rTalentMin=' + form.rtMin.value;
      searchparams += '&rTalentMax=' + form.rtMax.value;
   }
   if(form.prvF.value != '') {
      searchparams += '&pFaction=' + form.prvF.value;
      searchparams += '&pFactionMin=' + form.pfMin.value;
      searchparams += '&pFactionMax=' + form.pfMax.value;
   }
   if(form.prvT.value != '') {
      searchparams += '&pTalent=' + form.prvT.value;
      searchparams += '&pTalentMin=' + form.ptMin.value;
      searchparams += '&pTalentMax=' + form.ptMax.value;
   }
   ajax(wsi+'/cardsearch',searchparams
      , function(responseText,responseXML) {
         displayResults(responseXML.getElementsByTagName('Card'));
      }
   );
   var resultsDiv = document.getElementById('results');
   resultsDiv.innerHTML = 'Loading...';
}

function displayResults(cardNodes) {
   var resultsDiv = document.getElementById('results');
   var resultsHtml = '<select size="25" onchange="viewcard(this.value);">';
   cardsReturned.length = 0;
   for(i=0;i<cardNodes.length;i++) {
      var cardNode = cardNodes[i];
      cardsReturned[cardNode.getAttribute('id')] = cardNode;
      resultsHtml += '<option value="' + cardNode.getAttribute('id') + '">' + cardNode.getAttribute('title') + '</option>';
   }
   resultsHtml += '</select>';
   resultsDiv.innerHTML = resultsHtml;
}

function viewcard(cardid) {
   document.getElementById('cardPreviewPane').style.display='block';
   var cardNode = cardsReturned[cardid];
   document.getElementById('cardImage').src = cardNode.getAttribute('image_url');
   var spoilerText = '';
   spoilerText += 'Title: ' + cardNode.getAttribute('title');
   spoilerText += '<br/>Subtitle: ' + cardNode.getAttribute('subtitle');
   spoilerText += '<br/>Type: ' + cardNode.getAttribute('type');
   spoilerText += '<br/>Cost: ' + cardNode.getAttribute('power_cost');
   spoilerText += '<br/>Provides: ' + '';
   if(cardNode.getAttribute('type').indexOf('Character') != -1) {
     spoilerText += '<br/>Fighting: ' + cardNode.getAttribute('fighting');
   }
   if(cardNode.getAttribute('type').indexOf('Site') != -1) {
     spoilerText += '<br/>Body: ' + cardNode.getAttributes('body');
     spoilerText += '<br/>Generates: ' + cardNode.getAttributes('generates');
   }
   if(cardNode.getElementsByTagName('Text').length > 0) {
     spoilerText += '<br/><br/>' + cardNode.getElementsByTagName('Text')[0].firstChild.nodeValue + '</div>';
   }
   if(cardNode.getElementsByTagName('Tag').length > 0) {
     spoilerText += '<br/><br/>Tag: ' + cardNode.getElementsByTagName('Tag')[0].firstChild.nodeValue + '</div>';
   }
   spoilerText += '<br/><br/>Artist: ' + cardNode.getAttribute('artist');
   spoilerText += '<br/>Set: ' + cardNode.getAttribute('setname');
   spoilerText += '<br/>Rarity: ' + cardNode.getAttribute('rarity');
   document.getElementById('spoilerPane').innerHTML = spoilerText;
}

function loadSets() {
   ajax(paramSearchWSI,'type=cardsets'
      , function(responseText,responseXML) {
         var cardSetSelect = document.getElementById('cardSetSelect');
	 cardSetSelect.options.length = 0;
	 var cardSets = responseXML.getElementsByTagName('CardSet');
	 for(i=0;i<cardSets.length;i++) {
	    cardSetSelect.options[i] = new Option(
	    		cardSets[i].getAttribute('name'),
			cardSets[i].getAttribute('id')
                  );
	 }
      }
   );
}
function loadFactions() {
   ajax(paramSearchWSI,'type=factions'
      , function(responseText,responseXML) {
         var primaryFactionSelect = document.getElementById('factionSelect');
	 var requireSelect = document.getElementById('reqF');
	 var provideSelect = document.getElementById('prvF');
	 primaryFactionSelect.options.length = 0;
	 requireSelect.options.length = 0;
	 requireSelect.options[0] = new Option('Any','');
	 provideSelect.options.length = 0;
	 provideSelect.options[0] = new Option('Any','');
         factions = responseXML.getElementsByTagName('Faction');
	 for(i=0;i<factions.length;i++) {
	    var faction = factions[i];
	    primaryFactionSelect.options[i] = new Option(
	             faction.getAttribute('name'),
	             faction.getAttribute('id')
	          );
	    requireSelect.options[i+1] = new Option(
	             faction.getAttribute('name'),
	             faction.getAttribute('id')
	          );
	    provideSelect.options[i+1] = new Option(
	             faction.getAttribute('name'),
	             faction.getAttribute('id')
	          );
	 }
      }
   );
}

function loadCardTypes() {
   ajax(paramSearchWSI,'type=cardtypes'
      , function(responseText,responseXML) {
         var cardTypeSelect = document.getElementById('cardTypeSelect');
	 cardTypes = responseXML.getElementsByTagName('CardType');
	 cardTypeSelect.options.length = 0;
	 for(i=0;i<cardTypes.length;i++) {
	    var cardType = cardTypes[i];
	    cardTypeSelect.options[i] = new Option(
	    		cardType.getAttribute('type'),
			cardType.getAttribute('id')
		);
	 }
      }
   );
}
function loadDesignators() {
   ajax(paramSearchWSI,'type=designators'
      , function(responseText,responseXML) {
         var designatorSelect = document.getElementById('designatorSelect');
	 designators = responseXML.getElementsByTagName('Designator');
	 designatorSelect.options.length = 0;
	 for(i=0;i<designators.length;i++) {
	    var designator = designators[i];
	    designatorSelect.options[i] = new Option(
	    		designator.getAttribute('value'),
			designator.getAttribute('id')
		);
	 }
      }
   );
}
function loadRarities() {
   ajax(paramSearchWSI,'type=rarities'
      , function(responseText,responseXML) {
         var raritySelect = document.getElementById('raritySelect');
	 rarities = responseXML.getElementsByTagName('Rarity');
	 raritySelect.options.length = 0;
	 for(i=0;i<rarities.length;i++) {
	    var rarity = rarities[i];
	    raritySelect.options[i] = new Option(
	    		rarity.getAttribute('label'),
			rarity.getAttribute('id')
		);
	 }
      }
   );
}
function loadArtists() {
   ajax(paramSearchWSI,'type=artists'
      , function(responseText,responseXML) {
         var artists = responseXML.getElementsByTagName('Artist');
	 var artistSelect = document.getElementById('artistSelect');
	 artistSelect.options.length = 0;
	 for(i=0;i<artists.length;i++) {
	    var artist = artists[i];
	    artistSelect.options[i] = new Option(
	   		artist.getAttribute('first_name') + (artist.getAttribute('last_name')!=null?(' ' + artist.getAttribute('last_name')):''),
			artist.getAttribute('id')
		);
	 }
      }
   );
}
function loadTalents() {
   ajax(paramSearchWSI,'type=talents'
      , function(responseText,responseXML) {
	 var requireSelect = document.getElementById('reqT');
	 var provideSelect = document.getElementById('prvT');
	 requireSelect.options.length = 0;
	 requireSelect.options[0] = new Option('Any','');
	 provideSelect.options.length = 0;
	 provideSelect.options[0] = new Option('Any','');
         talents = responseXML.getElementsByTagName('Talent');
	 for(i=0;i<talents.length;i++) {
	    var talent = talents[i];
	    requireSelect.options[i+1] = new Option(
	             talent.getAttribute('name'),
	             talent.getAttribute('id')
	          );
	    provideSelect.options[i+1] = new Option(
	             talent.getAttribute('name'),
	             talent.getAttribute('id')
	          );
	 }
      }
   );
}

function loadCard(card_id,preview) {
   ajax(wsi+'/cardsearch','card_id='+card_id
      , function(responseText,responseXML) {
         var card = responseXML.getElementsByTagName('Card')[0];
         cardsReturned[card.getAttribute('id')] = card;
         if(preview) { viewcard(card_id); }
      }
   );
}

function loadOptions() {
   loadSets();
   loadFactions();
   loadCardTypes();
   loadDesignators();
   loadRarities();
   loadArtists();
   loadTalents();
}
