// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// swsg/control.js
//
// copyright (c) 2009-2011 drow <drow@bin.sh>
// all rights reserved.

var form="system_form",name_rpc="/name/rpc.cgi",seed=Math.floor(Math.random()*2147483647)+1,system={},planet={keys:["function","government","type","terrain","temperature","gravity","atmosphere","hydrosphere","day","year","starport","population","tech_level"],display:["type","terrain","temperature","gravity","atmosphere","hydrosphere","day","year","starport","population","function","government","tech_level"],"function":{title:"Function:",table:{dice:"d6pct","11":"abandoned_colony","12":"academic",
"13":"administrative","14-21":"agriculture","22":"colony","23":"disaster","24":"entertainment","25-26":"exploration","31":"hidden_base","32-33":"homeworld","34":"luxury_goods","35-41":{dice:"1d6","1-2":"manufacturing_low","3-4":"manufacturing_mid","5-6":"manufacturing_high"},"42":"military","43-46":"mining","51-55":"natural_resources","56":"research","61":"service","62-63":"subsistence","64-66":"trade"},data:{abandoned_colony:{title:"Abandoned Colony"},academic:{title:"Academic",mod:{starport:1,tech_level:1}},
administrative:{title:"Administrative/Government",mod:{starport:1,tech_level:1}},agriculture:{title:"Agriculture",incom:["asteroid_belt","artificial","floating_city","space_station","barren"]},colony:{title:"Colony"},disaster:{title:"Disaster",mod:{atmosphere:3,starport:-3,tech_level:-2}},entertainment:{title:"Entertainment"},exploration:{title:"Exploration",mod:{starport:-2,tech_level:-2}},hidden_base:{title:"Hidden Base"},homeworld:{title:"Homeworld"},luxury_goods:{title:"Luxury Goods"},manufacturing_low:{title:"Manufacturing/Processing (Low Tech)"},
manufacturing_mid:{title:"Manufacturing/Processing (Mid Tech)",mod:{starport:2,tech_level:2}},manufacturing_high:{title:"Manufacturing/Processing (High Tech)",mod:{starport:3,tech_level:3}},military:{title:"Military",mod:{starport:3,tech_level:2}},mining:{title:"Mining",mod:{starport:2,tech_level:1}},natural_resources:{title:"Natural Resources"},research:{title:"Research"},service:{title:"Service",mod:{starport:1,tech_level:2}},subsistence:{title:"Subsistence"},trade:{title:"Trade",mod:{starport:3,
tech_level:2}}}},government:{title:"Government:",table:{dice:"d6pct","11":"alliance","12":"anarchy","13-16":"competing_states","21-22":"corporate_owned","23-24":"dictatorship","25":"family","26-31":"feudalism","32":"guild","33-42":"imperial_governor","43-45":"govt_military","46-52":"monarchy","53":"organized_crime","54":"participatory","55":"rebel_alliance","56":"representative","61":"selection","62":"theocracy","63-66":"tribal"},data:{alliance:{title:"Alliance/Federation"},anarchy:{title:"Anarchy"},
competing_states:{title:"Competing States"},corporate_owned:{title:"Corporate Owned",mod:{starport:3,tech_level:2}},dictatorship:{title:"Dictatorship"},family:{title:"Family"},feudalism:{title:"Feudalism"},guild:{title:"Guild/Professional Organizations"},imperial_governor:{title:"Imperial Governor"},govt_military:{title:"Military"},monarchy:{title:"Monarchy"},organized_crime:{title:"Organized Crime"},participatory:{title:"Participatory Democracy"},rebel_alliance:{title:"Rebel Alliance"},representative:{title:"Representative Democracy"},
selection:{title:"Ruler by Selection/Rite"},theocracy:{title:"Theocracy"},tribal:{title:"Tribal"}}},type:{title:"Type:",table:{dice:"2d6","2-9":"terrestrial","10":"satellite","11":"asteroid_belt","12":{dice:"1d6","1-2":"artificial","3-4":"floating_city","5-6":"space_station"}},data:{terrestrial:{title:"Terrestrial"},satellite:{title:"Satellite"},asteroid_belt:{title:"Asteroid Belt",mod:{population:-2},incom:["stone","feudal","industrial","terrain","temperature","gravity","atmosphere","hydrosphere",
"day","year"],worldgen:[{image:"asteroid,drakath.jpg",byline:"Asteroid by",credit:"Armin Schieb",link:"http://drakath-terracube.blogspot.com/"},{image:"asteroid,shoofly-stock.jpg",byline:"Space Station model by",credit:"Shoofly Stock",link:{url_fmt:"deviantart",user:"shoofly-stock"}},{image:"offworld,bruno_werneck.jpg",credit:[{byline:"Illustration by",credit:"Bruno Werneck",link:"http://www.brunowerneck.com/"},{credit:"Posthuman Studios, LLC",link:"http://eclipsephase.com/"}]},{image:"outpost,digitalblasphemy.jpg",
byline:"Outpost by",credit:"Ryan Bliss, Digital Blasphemy",link:"http://digitalblasphemy.com/"}]},artificial:{title:"Artificial",mod:{population:-2},incom:["stone","feudal","industrial","atomic","terrain","temperature","gravity","atmosphere","hydrosphere","day","year"],worldgen:[{image:"allied_base,skynet3020.jpg",byline:"Allied Fleets Base by",credit:"Skynet3020",link:{url_fmt:"r-gallery",id:"513664"}},{image:"foghar,sigmaworld.jpg",byline:"Planet Foghar: Colony 7C of the Thulaner by",credit:"SIGMAWORLD",
link:{url_fmt:"renderosity",id:"452776"}},{image:"industrial_rapsody,alexwild.jpg",byline:"Industrial Rapsody by",credit:"Alex Wild",link:{url_fmt:"deviantart",user:"alexwild"}},{image:"olympus,paul_davies.jpg",credit:[{byline:"Olympus by",credit:"Paul Davies",link:"http://www.pdportraits.co.uk/"},{credit:"Posthuman Studios, LLC",link:"http://eclipsephase.com/"}]},{image:"winter_outpost,skynet3020.jpg",byline:"Outpost in Winter Wasteland by",credit:"Skynet3020",link:{url_fmt:"r-gallery",id:"513664"}}]},
floating_city:{title:"Artificial",mod:{population:-2},incom:["stone","feudal","industrial","atomic","terrain","temperature","gravity","atmosphere","hydrosphere","day","year"],worldgen:[{image:"aerostat,paul_davies.jpg",credit:[{byline:"Venus Aerostat by",credit:"Paul Davies",link:"http://www.pdportraits.co.uk/"},{credit:"Posthuman Studios, LLC",link:"http://eclipsephase.com/"}]},{image:"biodome,digitalblasphemy.jpg",byline:"Biodome by",credit:"Ryan Bliss, Digital Blasphemy",link:"http://digitalblasphemy.com/"},
{image:"cloud_city.jpg",byline:"Cloud City from",credit:"The Empire Strikes Back, &copy; Lucasfilm Ltd."},{image:"cloud_city,jfliesenborghs.jpg",byline:"Cloud City by",credit:"Jean-Francois Liesenborghs",link:{url_fmt:"deviantart",user:"jfliesenborghs"}},{image:"gothic,jfliesenborghs.jpg",byline:"Gothic by",credit:"Jean-Francois Liesenborghs",link:{url_fmt:"deviantart",user:"jfliesenborghs"}}]},space_station:{title:"Artificial",mod:{population:-2},incom:["stone","feudal","industrial","atomic","terrain",
"temperature","gravity","atmosphere","hydrosphere","day","year"],worldgen:[{image:"aziath_station,madaboutgames.jpg",byline:"Aziath Space Station by",credit:"Shaun Williams",link:{url_fmt:"r-gallery",id:"585204"}},{image:"frontier,the_customs,alexwild.jpg",byline:"Frontier: The Customs by",credit:"Alex Wild",link:{url_fmt:"deviantart",user:"alexwild"}},{image:"space_city,tlbklaus.jpg",byline:"Space City by",credit:"TLBKlaus",link:{url_fmt:"deviantart",user:"tlbklaus"}},{image:"space_station,bruno_werneck.jpg",
credit:[{byline:"Illustraton by",credit:"Bruno Werneck",link:"http://www.brunowerneck.com/"},{credit:"Posthuman Studios, LLC",link:"http://eclipsephase.com/"}]},{image:"the_hole,jfliesenborghs.jpg",byline:"The Hole by",credit:"Jean-Francois Liesenborghs",link:{url_fmt:"deviantart",user:"jfliesenborghs"}}]}}},terrain:{title:"Terrain:",table:{dice:"d6pct","11":"barren","12-13":"cave","14":"crater_field","15-16":"desert","21-24":"forest","25-26":"glacier","31-32":"jungle","33-34":"mountain","35-41":"ocean",
"42-44":"plain","45-46":"plateau","51-52":"urban","53-61":"wetlands","62-63":"volcanic","64-66":"special"},data:{barren:{title:"Barren",mod:{atmosphere:3,population:-2},incom:["moist","saturated"],worldgen:{palette:"Barren"}},cave:{title:"Cave",mod:{atmosphere:2,population:-2}},crater_field:{title:"Crater Field"},desert:{title:"Desert",incom:["moist","saturated"],worldgen:{palette:"Barren"}},forest:{title:"Forest",incom:["searing","frigid","arid"]},glacier:{title:"Glacier",incom:["searing","hot",
"temperate","arid","dry"]},jungle:{title:"Jungle",incom:["cool","frigid","arid","dry"]},mountain:{title:"Mountain",incom:["saturated"]},ocean:{title:"Ocean",mod:{population:-1},incom:["arid","dry"]},plain:{title:"Plain",incom:["searing","frigid","arid","saturated"]},plateau:{title:"Plateau",incom:["saturated"]},urban:{title:"Urban",mod:{population:1}},wetlands:{title:"Wetlands",incom:["searing","frigid","arid","dry"]},volcanic:{title:"Volcanic",mod:{atmosphere:8,population:-2}},special:{title:"Special"}}},
temperature:{title:"Temperature:",table:{dice:"2d6","2":"searing","3-4":"hot","5-9":"temperate","10-11":"cool","12":"frigid"},data:{searing:{title:"Searing",worldgen:{pct_ice:0}},hot:{title:"Hot",worldgen:{pct_ice:0}},temperate:{title:"Temperate",worldgen:{pct_ice:10}},cool:{title:"Cool",worldgen:{pct_ice:25}},frigid:{title:"Frigid",worldgen:{pct_ice:90}}}},gravity:{title:"Gravity:",table:{dice:"2d6","2":"zero_gravity","3-4":"light","5-11":"standard","12":"heavy"},data:{zero_gravity:{title:"Zero Gravity"},
light:{title:"Light",mod:{atmosphere:2}},standard:{title:"Standard"},heavy:{title:"Heavy",mod:{atmosphere:2}}}},atmosphere:{title:"Atmosphere:",table:{dice:"2d6","2":"none","3-9":"type_i","10":"type_ii","11":"type_iii","12":"type_iv"},data:{none:{title:"None"},type_i:{title:"Type I (Breathable)"},type_ii:{title:"Type II (Breath Mask Suggested)"},type_iii:{title:"Type III (Breath Mask Required)"},type_iv:{title:"Type IV (Environment Suit Required)"}}},hydrosphere:{title:"Hydrosphere:",table:{dice:"2d6",
"2":"arid","3-4":"dry","5-9":"moderate","10-11":"moist","12":"saturated"},data:{arid:{title:"Arid",worldgen:{pct_water:10}},dry:{title:"Dry",worldgen:{pct_water:33}},moderate:{title:"Moderate",worldgen:{pct_water:66}},moist:{title:"Moist",worldgen:{pct_water:90}},saturated:{title:"Saturated",worldgen:{pct_water:95}}}},day:{title:"Length of Day:",table:{dice:"1d6","1-2":"2d6 + 10 hours","3-4":"1d6 + 20 hours","5":"1d6 + 25 hours","6":"1d6 + 30 hours"}},year:{title:"Length of Year:",table:{dice:"1d6",
"1":"75 + 1d6 * 15 days","2":"150 + 1d6 * 15 days","3-4":"225 + 1d6 * 15 days","5":"300 + 1d6 * 15 days","6":"375 + 1d6 * 15 days"}},starport:{title:"Starport:",table:{dice:"2d6","2":"landing_field","3-5":"limited_services","6-8":"standard_class","9-11":"stellar_class","12":"imperial_class"},data:{landing_field:{title:"Landing Field"},limited_services:{title:"Limited Services"},standard_class:{title:"Standard Class"},stellar_class:{title:"Stellar Class"},imperial_class:{title:"Imperial Class"}}},
population:{title:"Population:",table:{dice:"1d6","1":{dice:"1d6","1-2":"1d9","3-4":"1d9 * 10","5-6":"1d9 * 100"},"2-3":{dice:"1d6","1-2":"1d9 thousand","3-4":"(1d89 + 10) thousand","5-6":"(1d89 + 10) * 10 thousand"},"4-5":{dice:"1d6","1-2":"(1d89 + 10) / 10 million","3-4":"(1d89 + 10) million ","5-6":"(1d89 + 10) * 10 million"},"6":{dice:"1d6","1-2":"(1d89 + 10) / 10 billion","3-4":"(1d89 + 10) billion ","5-6":"(1d89 + 10) * 10 billion"}}},tech_level:{title:"Tech Level:",table:{dice:"2d6","2":"stone",
"3":"feudal","4":"industrial","5":"atomic","6-7":"information","8-12":"space"},data:{stone:{title:"Stone"},feudal:{title:"Feudal"},industrial:{title:"Industrial"},atomic:{title:"Atomic"},information:{title:"Information"},space:{title:"Space"}}},trade_goods:{table:{dice:"1d8","1":"low_technology","2":"mid_technology","3":"high_technology","4":"metals","5":"minerals","6":"luxury_goods","7":"foodstuffs","8":"medicinal_goods"}},inc_list:{},incom:[]},roman=["I","II","III","IV","V","VI","VII","VIII","IX",
"X"],station=["Base","City","Station"],swsg_fmt={scifi_image:"/scifi/images/#{type}/#{image}"};Object.keys(swsg_fmt).each(function(a){append_fmt(a,swsg_fmt[a])});function init_form(){client_form(form);get_name();update_planet()}function get_name(){var a={type:"Star Wars Planet",n:1};a={method:"get",parameters:a,onSuccess:function(b){recv_name(b.responseText)},onFailure:function(b){rpc_error(b.statusText)},onException:function(){rpc_error("System Error")}};new Ajax.Request(name_rpc,a)}
function recv_name(a){system.name=a;update_name()}function rpc_error(a){$("system_name").update(a)}
function update_name(){planet.name=planet.type.value=="terrestrial"?system.name:planet.type.value=="satellite"?system.name+" "+roman[seed%10]:planet.type.value=="asteroid_belt"?system.name+" Belt":planet.type.value=="artificial"?system.name+" "+station[seed%3]:planet.type.value=="floating_city"?system.name+" "+station[seed%2+1]:planet.type.value=="space_station"?system.name+" "+station[seed%2+1]:system.name;$("system_name").update(system.name);$("planet_name").update(planet.name);if($("planet_marker")){var a;
a=planet.type.value=="terrestrial"?planet.name:planet.type.value=="asteroid_belt"?planet.name:system.name;$("planet_marker").update(a)}}
function update_planet(){var a={};planet.keys.each(function(c){if(compat(c))a[c]=planet_stat(c)});var b=planet.display.map(function(c){return a[c]});$("planet").update(b.join(""));if(planet.type.value!=system.planet_type){b={seed:seed,primary:{type:planet.type.value}};$("system").update(fmt_system(new_system(b)));system.planet_type=planet.type.value}worldgen&&update_map();system.name&&update_name()}
function planet_stat(a){var b;if(planet[a].table)for(set_mods(planet,a);!b;){var c=select_res(planet[a].table);if(compat(c.value)){planet[a].value=c.value;b=planet[a].value}else{delete c.value;delete c.roll}}else if(planet[a].value)b=planet[a].value;(c=res_data(planet[a]))&&set_compat(a,c);c=c&&c.title?c.title:b;b=$(b)?$(b).innerHTML:"";return fmt_row({title:planet[a].title,value:c,desc:b,new_stat:true,key:a})}
function set_compat(a,b){if(b.incom)planet.inc_list[a]=b.incom;else planet.inc_list[a]&&delete planet.inc_list[a];var c=[];Object.keys(planet.inc_list).each(function(d){planet.inc_list[d].each(function(e){c.push(e)})});planet.incom=c}function compat(a){return planet.incom.indexOf(a)==-1}
function update_map(){var a={};planet.keys.each(function(c){if(proto=des_obj(res_data(planet[c]),["worldgen"])){if(Object.isArray(proto))proto=select_from_list(proto);Object.keys(proto).each(function(d){a[d]=proto[d]})}});if(a.disable){$("planet_map").update("");$("image_credit").update("")}else if(a.image){var b=scifi_image(planet.type.value,a.image);$("planet_map").update(b);a.credit?$("image_credit").update(build_credit(a)):$("image_credit").update("")}else{a.seed=seed;$("planet_map").update(build_img(worldgen_url(a)));
$("image_credit").update($("fwg_credit").innerHTML)}}function scifi_image(a,b){a=eval_fmt("scifi_image",{type:a,image:b});return build_img(a)}function build_img(a){return eval_fmt("img",{src:a})}function build_credit(a){if(Object.isArray(a.credit))return a.credit.map(build_credit).join("<br />");else{text=a.credit;if(a.link)text=build_link(a.link,text);if(a.byline)text=a.byline+" "+text;return text}}
function build_link(a,b){if(fmt_id=a.url_fmt)a=eval_url(fmt_id,a);return eval_fmt("link_out",{href:a,text:b})}function new_stat(a){set_compat("new_stat",{incom:[planet[a].value]});delete planet[a].table.res;delete planet[a].value;update_planet()}document.observe("dom:loaded",init_form);

