Semantic schemas.org on agency viewing
Semantic schemas.org on agency viewing


Former-commit-id: 4a2f4b2fce4ec7cb97237d515c58f064787b0211

file:b/.gitignore (new)
--- /dev/null
+++ b/.gitignore
@@ -1,1 +1,1 @@
-
+/nbproject/private/

--- a/.gitmodules
+++ b/.gitmodules
@@ -1,4 +1,13 @@
-[submodule "sag"]
-	path = sag
-	url = https://github.com/sbisbee/sag.git
+[submodule "couchdb/couchdb-lucene"]
+	path = couchdb/couchdb-lucene
+	url = https://github.com/rnewson/couchdb-lucene.git
+[submodule "couchdb/settee"]
+	path = couchdb/settee
+	url = https://github.com/inadarei/settee.git
+[submodule "lib/springy"]
+	path = lib/springy
+	url = https://github.com/dhotson/springy.git
+[submodule "lib/php-diff"]
+	path = lib/php-diff
+	url = https://github.com/chrisboulton/php-diff.git
 

file:b/about.php (new)
--- /dev/null
+++ b/about.php
@@ -1,1 +1,61 @@
+<?php
+include_once('include/common.inc.php');
+include_header();
+?>
+<div class="foundation-header">
+    <h1><a href="about.php">About/FAQ</a></h1>
+    <h4 class="subheader">Lorem ipsum.</h4>
+</div>
+<h2> What is this? </h2>
+Disclosr is a project to monitor Australian Federal Government agencies 
+compliance with their <a href="http://www.oaic.gov.au/publications/other_operational/foi_policy_frequently_asked_questions.html#_Toc291837571">"proactive disclosure requirements"</a>.
+OGRE (Open Government Realization Evaluation) is a ranking of compliance with these requirements.
+Prometheus is the agent which polls agency websites to assess compliance.
 
+<h2> Open everything </h2>
+all documents released CC-BY 3 AU
+Open source git @
+
+<h2>Organisational Data Sources</h2>
+
+http://www.comlaw.gov.au/Browse/Results/ByTitle/AdministrativeArrangementsOrders/Current/Ad/0 defines departments
+Agencies can be found in the Schedule to an Appropriation Bill (budget), Schedule to FMA Regulations and/or Public Service Act.
+
+http://www.finance.gov.au/publications/flipchart/docs/FMACACFlipchart.pdf summarises these. view-source:https://www.tenders.gov.au/?event=public.advancedsearch.home is great for the suspended/active status
+
+When defining the hierachy, this system is designed towards monitoring accountablity. Thus large agencies that have registered their own ABN 
+and have their own accountablity mechanisms/website receive a seperate record as a child of their department.
+Some small agencies will choose to simply rely on their parent department's accountablity measures.
+
+This flows through to organisation name and other/past names. A department that completely accounts for an agency will list that agency as an other child name.
+As agencies themselves shift between departments, there may be scope for providing time ranges but typically the newest hierarchy will be the one recorded.
+A department/agency name will be the newest active name assigned to that ABN.
+
+ABN information is derived from the ABR. This is the definitive umpire about which former name should be linked to which current name. 
+For example "Department of Transport and Regional Services" became "Department of Infrastructure, Transport, Regional Development and Local Government" (same ABN)
+however it later split into "Department of Infrastructure and Transport" (same ABN) 
+and "Department of Regional Australia, Regional Development and Local Government" (new ABN).
+
+Statistical information from http://www.apsc.gov.au/stateoftheservice/1011/statsbulletin/section1.html#t2total https://www.apsedii.gov.au/apsedii/CustomQueryx33.shtml
+and individual annual reports.
+
+Webpage Assessment
+Much due care has been put into correctly recording disclosure URLs. Typically the "About", "Corporate", "Publications" and "Sitemap" sections are checked at the very least. 
+Occasionally it is nessicary to use a site or Google search. In several rare cases, there is a secret "Disclosure" navigation menu you can find if you find one of the mandatory publishing obligations in that category (seriously).
+Some rules about leniency:
+    An empty FOI disclosure log counts, a page outlining what the FOI Act is does not.
+    A disclosure log in PDF or Word format counts :(
+    An empty File/Record list counts (although that's very minimalistic that you have no files, electronic or paper)
+    Only a current information publication scheme page counts, not a s.9 FOI Act page or an organisation chart.
+    If there isn't a page easily listing all current and past Annual Reports, the most current one (html, pdf) counts.
+    Consultancy contracts might not need it's own webpage (if in Annual Report), grants/appointments might not apply to all organisations but Legal Services Expenditure (and all other obligations) does need a webpage. 
+
+<h2>Open Government Scoring</h2>
++1 point for every true Has... attribute
+-1 point for every false Has... (ie. Has Not) attribute
+
+Don't like this? Make your own score, suggest a better scoring mechanism.
+
+<?php
+include_footer();
+?>

file:b/admin/cacfma.csv (new)
--- /dev/null
+++ b/admin/cacfma.csv
@@ -1,1 +1,191 @@
+AAF Company,82?008?629?490
+Aboriginal Hostels Limited ,47?008?504?587
+Administrative Appeals Tribunal,90?680?970?626
+Aged Care Standards and Accreditation Agency Ltd,64?079?618?652
+Airservices Australia  ,59?698?720?886
+Albury-Wodonga Development Corporation  ,71?893?478?442
+Anindilyakwa Land Council ,45?175?406?445
+Army and Air Force Canteen Service ,69?289?134?420
+ASC Pty Ltd ,64?008?605?034
+Attorney-General's Department,92?661?124?436
+Australia Business Arts Foundation Ltd ,88?072?479?835
+Australia Council,38?392?626?187
+Australian Agency for International Development (AusAID),62?921?558?838
+Australian Broadcasting Corporation,52?429?278?345
+Australian Bureau of Statistics,26?331?428?522
+Australian Centre for International Agricultural Research (ACIAR),34?864?955?427
+Australian Commission for Law Enforcement Integrity (ACLEI),78?796?734?093
+Australian Commission on Safety and Quality in Health Care,97250687371
+Australian Communications and Media Authority (ACMA),55?386?169?386
+Australian Competition and Consumer Commission,94?410?483?623
+Australian Crime Commission,11?259?448?410
+"Australian Curriculum, Assessment and Reporting Authority ",54?735?928?084
+Australian Customs and Border Protection Service,66?015?286?036
+Australian Electoral Commission,21?133?285?851
+Australian Federal Police,17?864?931?143
+"Australian Film, Television and Radio School",19?892?732?021
+Australian Fisheries Management Authority,81?098?497?517
+Australian Government Solicitor,69?405?937?639
+Australian Hearing Services ,80?308?797?003
+Australian Human Rights Commission,47?996?232?602
+Australian Industry Development,55?085?059?559
+Australian Institute for Teaching and School Leadership Limited,17?117?362?740
+Australian Institute of Aboriginal and Torres Strait Islander Studies,62?020?533?641
+Australian Institute of Criminology,63257175248
+Australian Institute of Family Studies (AIFS),64?001?053?079
+Australian Institute of Health and Welfare  ,16?515?245?497
+Australian Institute of Marine Science,78?961?616?230
+Australian Law Reform Commission,88913413914
+Australian Learning and Teaching Council Limited ,30?109?826?628
+Australian Maritime Safety Authority,65?377?938?320
+Australian Military Forces Relief Trust Fund ,52?168?913?646
+Australian National Audit Office ,33?020?645?631
+Australian National Maritime Museum,35?023?590?988
+Australian National Preventive Health Agency (ANPHA),33?965?140?953
+Australian National University,52?234?063?906
+Australian Nuclear Science and Technology Organisation ,47?956?969?590
+Australian Office of Financial Management (AOFM),13?059?525?039
+Australian Pesticides and Veterinary Medicines Authority (APVMA),19?495?043?447
+Australian Postal Corporation,28?864?970?579
+Australian Prudential Regulation Authority (APRA),79?635?582?658
+Australian Public Service Commission (APS Commission),99?470?863?260
+Australian Radiation Protection and Nuclear Safety Agency (ARPANSA),61?321?195?155
+Australian Rail Track Corporation Limited ,75?081?455?754
+Australian Reinsurance Pool Corporation,74?807?136?872
+Australian Research Council,35?201?451?156
+Australian River Co. Limited,94?008?654?206
+Australian Secret Intelligence Service,49?667?785?014
+Australian Securities and Investments Commission,86?768?265?615
+Australian Security Intelligence Organisation,37?467?566?201
+Australian Skills Quality Authority (National Vocational Education and Training Regulator),72581678650
+Australian Solar Institute Limited ,65138300688
+Australian Sports Anti-Doping Authority (ASADA),91?592?527?503
+Australian Sports Commission,67374695240
+Australian Sports Foundation Limited ,27?008?613?858
+Australian Strategic Policy Institute Limited ,77?097?369?045
+Australian Taxation Office,51?824?753?556
+Australian Trade Commission (Austrade),11?764?698?227
+Australian Transaction Reports and Analysis Centre (AUSTRAC),32?770?513?371
+Australian Transport Safety Bureau (ATSB),86?267?354?017
+Australian War Memorial ,64?909?221?257
+Bundanon Trust,72?058?829?217
+Bureau of Meteorology,92?637?533?532
+Cancer Australia,21?075?951?918
+Central Land Council,71?979?619?393
+Civil Aviation Safety Authority,44?808?014?470
+Coal Mining Industry (Long Service Leave Funding) Corporation,12?039?670?644
+Comcare  ,41?640?788?304
+Commonwealth Grants Commission,64?703?642?210
+Commonwealth Scientific and Industrial Research Organisation,41?687?119?230
+Commonwealth Superannuation Corporation ,48882817243
+ComSuper,77?310?752?950
+Corporations and Markets Advisory Committee (CAMAC),41?574?479?010
+Cotton Research and Development Corporation,71?054?238?316
+CrimTrac Agency,17?193?904?699
+Defence Housing Australia,72?968?504?934
+"Department of Agriculture, Fisheries and Forestry ",24?113?085?695
+"Department of Broadband, Communications and the Digital Economy",51?491?646?726
+Department of Climate Change and Energy Efficiency,50?182?626?845
+"Department of Education, Employment and Workplace Relations",63?578?775?294
+"Department of Families, Housing, Community Services and Indigenous Affairs",36?342?015?855
+Department of Finance and Deregulation,61?970?632?495
+Department of Foreign Affairs and Trade,47?065?634?525
+Department of Health and Ageing,83?605?426?759
+Department of Human Services,90?794?605?008
+Department of Immigration and Citizenship,33?380?054?835
+Department of Infrastructure and Transport,86?267?354?017
+"Department of Innovation, Industry, Science and Research",74?599?608?295
+Department of Parliamentary Services,52?997?141?147
+"Department of Regional Australia, Regional Development and Local Government",37?862?725?624
+"Department of Resources, Energy and Tourism",46?252?861?927
+"Department of Sustainability, Environment, Water, Population and Communities",34?190?894?983
+Department of the House of Representatives,18?526?287?740
+Department of the Prime Minister and Cabinet,18?108?001?191
+Department of the Senate,23?991?641?527
+Department of the Treasury,92?802?414?793
+Department of Veterans' Affairs,23?964?290?824
+Director of National Parks ,13?051?694?963
+Equal Opportunity for Women in the Workplace Agency,47?641?643?874
+Export Finance and Insurance Corporation,96?874?024?697
+Fair Work Australia (FWA),93?614?579?199
+Family Court of Australia,63?684?208?971
+Federal Court of Australia,49?110?847?399
+Federal Magistrates Court of Australia,60?265?617?271
+Fisheries Research and Development Corporation,74?311?094?913
+Food Standards Australia New Zealand,20?537?066?246
+Future Fund Management Agency,53?156?699?293
+General Practice Education and Training Limited,95?095?433?140
+Geoscience Australia,80?091?799?039
+Grains Research and Development Corporation ,55?611?223?291
+Grape and Wine Research and Development Corporation,72?618?007?571
+Great Barrier Reef Marine Park Authority,12?949?356?885
+Health Workforce Australia,21?295?050?589
+HIH Claims Support Limited,92?096?857?635
+IIF Investments Pty Limited,55?082?153?884
+Indigenous Business Australia,25?192?932?833
+Indigenous Land Corporation,59?912?679?254
+Insolvency and Trustee Service Australia (ITSA),63?384?330?717
+Inspector-General of Taxation,51?248?702?319
+Interim Independent Hospital Pricing Authority,27598959960
+IP Australia,38?113?072?755
+Low Carbon Australia Limited,63?097?727?968
+Medibank Private Limited ,47?080?890?259
+Migration Review Tribunal and Refugee Review Tribunal ,50?760?799?564
+Murray-Darling Basin Authority,13?679?821?382
+National Archives of Australia,36?889?228?992
+National Australia Day Council Limited ,76?050?300?626
+National Blood Authority,87?361?602?478
+National Breast and Ovarian Cancer Centre,85?094?118?902
+National Capital Authority,75?149?374?427
+National Competition Council ,56?552?760?098
+National Film and Sound Archive,41?251?017?588
+National Gallery of Australia,27?855?975?449
+National Health and Medical Research Council (NHMRC),88?601?010?284
+National Library of Australia ,28?346?858?075
+National Museum of Australia ,70?592?297?967
+National Native Title Tribunal,70?238?042?351
+National Offshore Petroleum Safety Authority (NOPSA),22?385?178?289
+National Water Commission ,94?364?176?431
+NBN Co Limited,86?136?533?741
+Northern Land Council,56?327?515?336
+Office of National Assessments,87?904?367?991
+Office of Parliamentary Counsel,41?425?630?817
+Office of the Auditing and Assurance Standards Board ,80?959?780?601
+Office of the Australian Accounting Standards Board (AASB),92?702?019?575
+Office of the Australian Building and Construction Commissioner,68?003?725?098
+Office of the Australian Information Commissioner ,85249230937
+Office of the Commonwealth Ombudsman,53?003?678?148
+Office of the Director of Public Prosecutions,41?036?606?436
+Office of the Fair Work Ombudsman,71?141?751?477
+Office of the Inspector-General of Intelligence and Security,67?332?668?643
+Office of the Official Secretary to the Governor-General,67?582?329?284
+Office of the Renewable Energy Regulator,68?574?011?917
+Old Parliament House,30?620?774?963
+Organ and Tissue Authority (Australian Organ and Tissue Donation and Transplantation Authority),56?253?405?315
+Outback Stores Pty Ltd ,63120661234
+Private Health Insurance Administration Council ,50?831?782?014
+Private Health Insurance Ombudsman,61?673?137?709
+Productivity Commission,78?094?372?050
+Professional Services Review Scheme,45?307?308?260
+RAAF Welfare Recreational Company ,45?008?499?303
+Reserve Bank of Australia,50?008?559?486
+Royal Australian Air Force Veterans' Residences Trust Fund ,40?594?141?285
+Royal Australian Air Force Welfare Trust Fund ,24?616?803?717
+Royal Australian Mint,45?852?104?259
+Royal Australian Navy Central Canteens Board,50?616?294?781
+Royal Australian Navy Relief Trust Fund ,49?934?525?476
+Rural Industries Research and Development Corporation,25?203?754?319
+Safe Work Australia,81?840?374?163
+Screen Australia ,46?741?353?180
+"Seafarers Safety, Rehabilitation and Compensation Authority (Seacare Authority)",32?745?854?352
+Special Broadcasting Service Corporation,91?314?398?574
+Sugar Research and Development Corporation,41?343?997?980
+Sydney Harbour Federation Trust,14?178?614?905
+Tertiary Education Quality and Standards Agency,50658250012
+Tiwi Land Council,86?106?441?085
+Torres Strait Regional Authority,57?155?285?807
+Tourism Australia ,99?657?548?712
+Wheat Exports Australia,40?485?918?341
+Wine Australia Corporation ,59?728?300?326
+Wreck Bay Aboriginal Community Council,62?564?797?956
 

file:b/admin/import.php (new)
--- /dev/null
+++ b/admin/import.php
@@ -1,1 +1,34 @@
+<?php
 
+require_once '../include/common.inc.php';
+try {
+    $server->create_db('disclosr-agencies');
+} catch (SetteeRestClientException $e) {
+    setteErrorHandler($e);
+}
+$db = $server->get_db('disclosr-agencies');
+createAgencyDesignDoc();
+$conn = new PDO("pgsql:dbname=contractDashboard;user=postgres;password=snmc;host=localhost");
+$namesQ = 'select agency.abn, string_agg("agencyName",\'|\') as names from agency inner join agency_nametoabn on agency.abn::text = agency_nametoabn.abn group by agency.abn;';
+$abntonames = Array();
+foreach ($conn->query($namesQ) as $row) {
+    $abntonames[$row['abn']] = explode("|", $row['names']);
+}
+$result = $conn->query("select * from agency");
+while ($agency = $result->fetch(PDO::FETCH_ASSOC)) {
+    $agency['_id'] = md5($agency['abn']);
+    $agency['otherNames'] = $abntonames[$agency['abn']];
+    if (sizeof($abntonames[$agency['abn']]) == 1)
+        $agency['name'] = $abntonames[$agency['abn']][0];
+    $agency["lastScraped"] = "1/1/1970";
+    $agency["scrapeDepth"] = 1;
+    try {
+        $doc = $db->save($agency);
+        //print_r($doc);
+        echo $agency['abn'] . " imported \n<br>";
+    } catch (SetteeRestClientException $e) {
+        setteErrorHandler($e);
+    }
+}
+?>
+

--- /dev/null
+++ b/admin/refreshDesignDoc.php
@@ -1,1 +1,7 @@
+<?php
 
+require_once '../include/common.inc.php';
+$db = $server->get_db('disclosr-agencies');
+createAgencyDesignDoc();
+?>
+

--- /dev/null
+++ b/admin/resolveConflicts.php
@@ -1,1 +1,43 @@
+<?php
 
+include_once('../include/common.inc.php');
+include_header();
+// Include the diff class
+echo '<STYLE TYPE="text/css">
+<!--
+  @import url(../lib/php-diff/example/styles.css);
+-->
+</STYLE>
+    ';
+require_once dirname(__FILE__) . '/../lib/php-diff/lib/Diff.php';
+// Generate a side by side diff
+require_once dirname(__FILE__) . '/../lib/php-diff/lib/Diff/Renderer/Html/SideBySide.php';
+$renderer = new Diff_Renderer_Html_SideBySide;
+
+
+
+$db = $server->get_db('disclosr-agencies');
+$docs = Array();
+try {
+    $rows = $db->get_view("app", "getConflicts")->rows;
+    //print_r($rows);
+    foreach ($rows as $row) {
+        echo '<h2>' . $row->id . '</h2>';
+        echo "Comparing " . $row->value[0] . " and " . $row->value[1];
+        $docA = explode(",", json_encode($db->get($row->id . "?rev=" . $row->value[0])));
+        $docB = explode(",", json_encode($db->get($row->id . "?rev=" . $row->value[1])));
+        // Options for generating the diff
+        $options = array(
+                //'ignoreWhitespace' => true,
+                //'ignoreCase' => true,
+        );
+
+        // Initialize the diff class
+        $diff = new Diff($docA, $docB, $options);
+        echo $diff->Render($renderer);
+    }
+} catch (SetteeRestClientException $e) {
+    setteErrorHandler($e);
+}
+include_footer();
+?>

file:b/admin/verify.php (new)
--- /dev/null
+++ b/admin/verify.php
@@ -1,1 +1,56 @@
+<?php
 
+include_once('../include/common.inc.php');
+include_header();
+
+$db = $server->get_db('disclosr-agencies');
+$docs = Array();
+try {
+    $rows = $db->get_view("app", "byABN")->rows;
+    //print_r($rows);
+    foreach ($rows as $row) {
+        $docs["a" . $row->key] = $row->value;
+    }
+} catch (SetteeRestClientException $e) {
+    setteErrorHandler($e);
+}
+//print_r($docs);
+$row = 1;
+if (($handle = fopen("cacfma.csv", "r")) !== FALSE) {
+    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
+        $row++;
+        echo $data[0] . "   " . str_replace("?", "", $data[1]) . "<br />\n";
+        $name = $data[0];
+        $abn = trim(str_replace("?", "", $data[1]));
+        $aabn = "a".$abn;
+        if (isset($docs[$aabn])) {
+            echo "Existing agency ABN detected<br>";
+            if (!in_array($name, object_to_array($docs[$aabn]->otherNames)) && $name != $docs[$aabn]->name) {
+                $docs[$aabn]->otherNames[] = $name;
+                try {
+                    $docs[$aabn] = $db->save($docs[$aabn]);
+                    //print_r($doc);
+                    echo $abn . " additional names imported \n<br>";
+                } catch (SetteeRestClientException $e) {
+                    setteErrorHandler($e);
+                }
+            }
+        } else {
+            echo "New agency ABN detected<br>";
+            $agency['_id'] = md5($aabn);
+            $agency['name'] = $name;
+            $agency["abn"] = $abn;
+            try {
+                $doc = $db->save($agency);
+                print_r($doc);
+                echo $abn . " imported \n<br>";
+            } catch (SetteeRestClientException $e) {
+                setteErrorHandler($e);
+            }
+        }
+        echo "<hr>";
+    }
+    fclose($handle);
+}
+include_footer();
+?>

file:a/agencies.csv (deleted)
--- a/agencies.csv
+++ /dev/null
@@ -1,176 +1,1 @@
-agencyName,status,website,abn,contractListURL,grantsReportingURL,annualReportURL,consultanciesURL,legalExpenditureURL,recordsListURL,FOIDocumentsURL,infoPublicationSchemeURL
-Australian Institute of Family Studies,suspended,http://www.aifs.gov.au,64001053079,http://www.aifs.gov.au/institute/aifs/accountability.html,"",http://www.aifs.gov.au/institute/pubs/annualreports/annualreports.html,"","","","",""
-Comsuper,suspended,http://www.comsuper.gov.au/,77310752950,http://www.comsuper.gov.au/reports/murray.html,"",http://www.comsuper.gov.au/reports/annual_reports.html,"","","","",""
-Australian National Audit Office (ANAO),active,http://www.anao.gov.au,33020645631,http://www.anao.gov.au/director/tendersandcontracting/contracts.cfm,"",http://www.anao.gov.au/director/aboutus/currentannualreport.cfm,"","","","",""
-CRS Australia,active,http://www.crsaustralia.gov.au,65281415387,http://www.crsaustralia.gov.au/reporting.htm#contract_listings,"",http://www.crsaustralia.gov.au/plans_and_annual_reports.htm,"","","","",""
-Australian Competition and Consumer Commission,active,http://www.accc.gov.au,94410483623,http://www.accc.gov.au/content/index.phtml/itemId/860838,"",http://www.accc.gov.au/content/index.phtml/itemId/668577,http://www.accc.gov.au/content/index.phtml/itemId/402496,http://www.accc.gov.au/content/index.phtml/itemId/767987,"","",""
-Workplace Authority,suspended,http://www.workplaceauthority.gov.au,37243205024,http://www.workplaceauthority.gov.au/AboutUs/CorporateInfo/Pages/ContractsAndTenders.aspx,"",http://www.workplaceauthority.gov.au/AboutUs/CorporateInfo/Pages/AnnualReport.aspx,"","","","",""
-Attorney-General's Department,active,http://www.ag.gov.au/,92661124436,http://www.ag.gov.au/www/agd/agd.nsf/Page/Tendersandcontracts_SenateOrderContracts,http://www.ag.gov.au/www/agd/agd.nsf/Page/About_the_DepartmentGrants,http://www.ag.gov.au/www/agd/agd.nsf/Page/PublicationsAnnual_Reports,"","",http://www.ag.gov.au/www/agd/agd.nsf/Page/AbouttheDepartment_SenateContinuingOrderFileLists,http://www.ag.gov.au/www/agd/agd.nsf/Page/Freedom_of_Information,""
-Office of the Official Secretary to the Governor-General,active,http://www.gg.gov.au,67582329284,http://www.gg.gov.au/administration/category.php?id=7,"",http://www.gg.gov.au/administration/category.php?id=5,"","","","",""
-Federal Court of Australia,active,http://www.fedcourt.gov.au/,49110847399,http://www.fedcourt.gov.au/aboutct/contracts.html,"",http://www.fedcourt.gov.au/aboutct/ar.html,"","","","",""
-IP Australia,suspended,http://www.ipaustralia.gov.au,38113072755,http://www.ipaustralia.gov.au/about/files_contracts.shtml,"",http://www.innovation.gov.au/Section/AbouttheDepartment/Pages/AnnualReport200809.aspx,http://www.ipaustralia.gov.au/about/files_contracts.shtml,http://www.ipaustralia.gov.au/about/files_contracts.shtml,http://www.ipaustralia.gov.au/about/files_ipa.shtml,"",""
-National Native Title Tribunal,active,http://www.nntt.gov.au,70238042351,http://www.nntt.gov.au/About-The-Tribunal/Pages/Commonwealth-Reporting-Requirements.aspx,"",http://www.nntt.gov.au/About-The-Tribunal/Pages/Commonwealth-Reporting-Requirements.aspx,"",http://www.nntt.gov.au/About-The-Tribunal/Pages/Commonwealth-Reporting-Requirements.aspx,http://www.nntt.gov.au/About-The-Tribunal/Pages/Commonwealth-Reporting-Requirements.aspx,"",""
-"Department of Education, Employment and Workplace Relations",active,http://www.deewr.gov.au/Pages/default.aspx,63578775294,http://www.deewr.gov.au/Department/Publications/Pages/CorporatePublications.aspx,"",http://www.deewr.gov.au/Department/Publications/Pages/CorporatePublications.aspx,"","","","",""
-Australian Prudential Regulation Authority (APRA),active,http://www.apra.gov.au,79635582658,http://www.apra.gov.au/aboutAPRA/,"",http://www.apra.gov.au/aboutAPRA/,http://www.apra.gov.au/aboutAPRA/,http://www.apra.gov.au/aboutAPRA/,http://www.apra.gov.au/aboutAPRA/,"",""
-Australian Crime Commission,active,http://www.crimecommission.gov.au/index.htm,11259448410,http://www.crimecommission.gov.au/about/business_accountability/index.htm,"",http://www.crimecommission.gov.au/publications/annual_report/index.htm,"",http://www.crimecommission.gov.au/about/business_accountability/index.htm,http://www.crimecommission.gov.au/about/business_accountability/file_list.htm,"",""
-Australian Radiation Protection and Nuclear Safety Agency (ARPANSA),active,http://www.arpansa.gov.au,61321195155,http://www.arpansa.gov.au/AboutUs/Corporate/contractlist.cfm,"",http://www.arpansa.gov.au/AboutUs/corporate/annualreports.cfm,"",http://www.arpansa.gov.au/AboutUs/legal.cfm,http://www.arpansa.gov.au/AboutUs/FileList.cfm,"",""
-"Department of Innovation, Industry, Science and Research",active,http://www.innovation.gov.au/Pages/default.aspx,74599608295,http://www.innovation.gov.au/Section/AbouttheDepartment/Pages/SenateOrderContractsListingforthe2008-09FinancialYear.aspx,"",http://www.innovation.gov.au/General/Corp-MC/Pages/Publications.aspx#annual,"",http://www.innovation.gov.au/Section/AbouttheDepartment/Pages/DepartmentalExpenditureonLegalServices.aspx,http://www.innovation.gov.au/Section/AbouttheDepartment/Pages/SenateContinuingOrderNo8IndexedListofDepartmentalandAgencyFiles.aspx,"",""
-Wheat Exports Australia,active,http://www.wea.gov.au,40485918341,http://www.wea.gov.au/AboutUs/WEA%20Contracts.htm,"",http://www.wea.gov.au/Publications/AnnualReports/AnnualReports.htm,"","",http://www.wea.gov.au/Publications/File%20Index%20to%20June%2009.pdf,"",""
-Office of National Assessments,active,http://www.ona.gov.au/,87904367991,http://www.ona.gov.au/corporate.htm,"","","",http://www.ona.gov.au/corporate.htm,"","",""
-Old Parliament House,active,http://moadoph.gov.au/,30620774963,http://moadoph.gov.au/about/corporate-documents/,"",http://moadoph.gov.au/about/corporate-documents/,"","",http://moadoph.gov.au/about/corporate-documents/,"",""
-Murray-Darling Basin Authority,active,http://www.mdba.gov.au/,13679821382,http://www.mdba.gov.au/about/corporate_documents/contact_listings,"","","","","","",""
-Administrative Appeals Tribunal,active,http://www.aat.gov.au,90680970626,http://www.aat.gov.au/TendersAndContracts/Contracts.htm,"",http://www.aat.gov.au/CorporatePublications/AnnualReport.htm,"",http://www.aat.gov.au/CorporatePublications/LegalServices.htm,http://www.aat.gov.au/CorporatePublications/IndexedList.htm,"",""
-Aged Care Standards and Accreditation Agency Ltd,active,http://www.accreditation.org.au/,64079618652,"","",http://www.accreditation.org.au/about-us/annual-reports/,"","","","",""
-Airservices Australia,suspended,http://www.ano.gov.au,59698720886,"","","","","","","",""
-AusAid,active,http://www.ausaid.gov.au,62921558838,http://www.ausaid.gov.au/business/contracts_list.cfm,"",http://www.ausaid.gov.au/publications/pubout.cfm?ID=8691_5877_871_8496_1205&CFID=3328295&CFTOKEN=90652321,"","","",http://www.ausaid.gov.au/about/foi.cfm,""
-Austrade,active,http://www.austrade.gov.au,11764698227,http://www.austrade.gov.au/Contracts/default.aspx,"",http://www.austrade.gov.au/default.aspx?FolderID=1401,"","","","",""
-Australia Council for the Arts,suspended,http://www.australiacouncil.gov.au,38392626187,"","","","","","","",""
-Australian Antarctic Division,suspended,http://www.environment.gov.au,56428630676,"","","","","","","",""
-Australian Broadcasting Corporation,suspended,http://abc.gov.au,52429278345,"","","","","","","",""
-Australian Bureau of Statistics,active,http://www.abs.gov.au,26331428522,http://www.abs.gov.au/websitedbs/D3310114.nsf/51c9a3d36edfd0dfca256acb00118404/86158083b1e61cc5ca256ac5007eac24!OpenDocument,"",http://www.abs.gov.au/AUSSTATS/abs@.nsf/second+level+view?ReadForm&prodno=1001.0&viewtitle=Australian%20Bureau%20of%20Statistics%20--%20Annual%20Report~2009-10~Latest~27/10/2010&&tabname=Past%20Future%20Issues&prodno=1001.0&issue=2009-10&num=&view=&,"",http://www.abs.gov.au/websitedbs/D3310114.nsf/4a256353001af3ed4b2562bb00121564/f8961758d807999dca257214001e1281!OpenDocument,"",http://www.abs.gov.au/websitedbs/D3310114.nsf/4a256353001af3ed4b2562bb00121564/95e66d20b24927d7ca25747c002dc9ee!OpenDocument,""
-Australian Centre for International Agricultural Research,active,http://www.aciar.gov.au,34864955427,"","","","","","","",""
-Australian Commission for Law Enforcement Integrity,active,http://www.aclei.gov.au,78796734093,http://www.aclei.gov.au/www/aclei/aclei.nsf/Page/Accountability_and_Reporting,"","http://www.aclei.gov.au/www/aclei/aclei.nsf/Page/AccountabilityandReporting_Reports,SubmissionsandSpeeches","",http://www.aclei.gov.au/www/aclei/aclei.nsf/Page/Accountability_and_Reporting,http://www.aclei.gov.au/www/aclei/aclei.nsf/AllDocs/39D8AB36FD3CC755CA25734B007CC961?OpenDocument,http://www.aclei.gov.au/www/aclei/aclei.nsf/Page/FreedomofInformation_FreedomofInformation,""
-Australian Communications and Media Authority (ACMA),suspended,http://www.acma.gov.au,55386169386,"","","","","","","",""
-Australian Customs and Border Protection Service,active,http://www.customs.gov.au,66015286036,http://www.customs.gov.au/site/page4247.asp,"",http://www.customs.gov.au/site/page4283.asp,"","",http://www.customs.gov.au/site/page4530.asp,"",""
-Australian Electoral Commission,suspended,http://www.aec.gov.au,21133285851,"","","","","","","",""
-Australian Fair Pay Commission,suspended,http://www.fairpay.gov.au,14460763247,"","","","","","","",""
-Australian Federal Police,active,http://www.afp.gov.au,17864931143,http://www.afp.gov.au/about-the-afp/accountability-requirements/senate-order-contracts.aspx,http://www.afp.gov.au/about-the-afp/accountability-requirements/grants.aspx,http://www.afp.gov.au/media-centre/publications/annual-reports/afp.aspx,http://www.afp.gov.au/about-the-afp/accountability-requirements/consultancy-services.aspx,http://www.afp.gov.au/about-the-afp/accountability-requirements/afp-report-on-legal-services-expenditure.aspx,http://www.afp.gov.au/about-the-afp/accountability-requirements/harradine-report.aspx,"",""
-Australian Fisheries Management Authority,active,http://www.afma.gov.au,81098497517,http://www.afma.gov.au/resource-centre/publications-and-forms/corporate/external-reporting/,"",http://www.afma.gov.au/resource-centre/publications-and-forms/corporate/annual-report/,"",http://www.afma.gov.au/resource-centre/publications-and-forms/corporate/external-reporting/,http://www.afma.gov.au/resource-centre/publications-and-forms/corporate/external-reporting/,http://www.afma.gov.au/resource-centre/publications-and-forms/corporate/freedom-of-information/,""
-Australian Hearing Services,active,http://www.hearing.com.au/,83605426759,"","",http://www.hearing.com.au/annual-reports,"","","",http://www.centrelink.gov.au/internet/internet.nsf/legal/foi_table.htm,""
-Australian Human Rights Commission,active,http://www.hreoc.gov.au,47996232602,"","","","","","","",""
-Australian Industrial Registry,suspended,http://www.business.gov.au,83674573738,"","","","","","","",""
-Australian Institute of Criminology,active,http://www.aic.gov.au,63257175248,"","","","","","","",""
-Australian Institute of Health and Welfare,active,http://www.aihw.gov.au,16515245497,"","","","","","","",""
-Australian Institute of Marine Science,suspended,http://www.aims.gov.au,78961616230,"","","","","","","",""
-Australian Law Reform Commission,active,http://www.alrc.gov.au,88913413914,"","","","","","","",""
-Australian Maritime Safety Authority,suspended,http://www.amsa.gov.au,65377938320,"","","","","","","",""
-Australian National Maritime Museum,suspended,http://www.anmm.gov.au,35023590988,"","","","","","","",""
-Australian Nuclear Science and Technology Organisation (ANSTO),suspended,http://www.ansto.gov.au,47956969590,"","","","","","","",""
-Australian Office of Financial Management,active,http://www.aofm.gov.au,13059525039,"","","","","","","",""
-Australian Organ and Tissue Donation and Transplantation Authority,active,http://www.donatelife.gov.au,56253405315,"","","","","","","",""
-Australian Pesticides and Veterinary Medicines Authority,active,http://www.apvma.gov.au,19495043447,"","","","","","","",""
-Australian Public Service Commission,active,http://www.apsc.gov.au,99470863260,"","","","","","","",""
-Australian Research Council,suspended,http://www.arc.gov.au,35201451156,"","","","","","","",""
-Australian Reward Investment Alliance (ARIA),suspended,http://aria.gov.au,48882817243,"","","","","","","",""
-Australian Securities and Investments Commission,active,http://www.asic.gov.au,86768265615,"","","","","","","",""
-Australian Security Intelligence Organisation,active,http://blu.asio.gov.au,37467566201,"","","","","","","",""
-Australian Sports Anti-Doping Authority (ASADA),suspended,http://checksubstances.asada.gov.au,91592527503,"","","","","","","",""
-Australian Taxation Office,active,http://www.ato.gov.au,51824753556,"","","","","","","",""
-Australian Transaction Reports and Analysis Centre (AUSTRAC),active,http://www.austrac.gov.au,50008559486,"","","","","","","",""
-Australian Transport Safety Bureau,active,http://www.atsb.gov.au,65061156887,"","","","","","","",""
-Australian War Memorial,active,http://www.awm.gov.au,64909221257,"","","","","","","",""
-Bureau of Meteorology,suspended,http://www.bom.gov.au,92637533532,"","","","","","","",""
-Cancer Australia,active,http://www.canceraustralia.gov.au,21075951918,"","","","","","","",""
-Centrelink,active,http://www.centrelink.gov.au,29468422437,"","","","","","","",""
-Civil Aviation Safety Authority,suspended,http://www.casa.gov.au,44808014470,"","","","","","","",""
-Comcare,suspended,http://www.comcare.gov.au,41640788304,"","","","","","","",""
-Commonwealth Grants Commission,suspended,http://www.cgc.gov.au,86267354017,"","","","","","","",""
-Corporations and Markets Advisory Committee,active,http://www.camac.gov.au,85005260622,"","","","","","","",""
-Crimtrac,active,http://www.crimtrac.gov.au,17193904699,"","","","","","","",""
-CSIRO,suspended,http://www.csiro.au/,41687119230,http://www.csiro.au/org/pskc.html,"","","","","","",""
-Defence Housing Australia,active,http://www.dha.gov.au,72968504934,"","","","","","","",""
-Defence Materiel Organisation,active,http://www.defence.gov.au,68706814312,"","","","","","","",""
-"Department of Agriculture, Fisheries and Forestry",active,http://www.daff.gov.au/,24113085695,"","","","","","","",""
-"Department of Broadband, Communications and the Digital Economy",active,http://www.dbcde.gov.au,51491646726,"","","","","","","",""
-Department of Climate Change and Energy Efficiency,active,http://www.climatechange.gov.au,48072377158,"","","","","","","",""
-Department of Defence,active,http://www.defence.gov.au,68706814312,"","","","","","","",""
-"Department of Families, Housing, Community Services and Indigenous Affairs",active,http://www.fahcsia.gov.au/,36342015855,"","","","","","","",""
-Department of Finance and Deregulation,active,http://www.finance.gov.au,61970632495,"","","","","","","",""
-Department of Foreign Affairs and Trade,active,http://www.dfat.gov.au,47065634525,"","","","","","","",""
-Department of Health and Ageing,active,http://www.health.gov.au,83605426759,"","","","","","","",""
-Department of Human Services,active,http://www.centrelink.gov.au,29468422437,"","","","","","","",""
-Department of Immigration & Citizenship,active,http://www.eta.immi.gov.au,33380054835,"","","","","","","",""
-Department of Infrastructure and Transport,active,http://www.infrastructure.gov.au,86267354017,"","","","","","","",""
-Department of Parliamentary Services,active,http://www.aph.gov.au,52997141147,"","","","","","","",""
-"Department of Regional Australia, Regional Development and Local Government",active,http://www.regional.gov.au/,37862725624,"",http://www.regional.gov.au/department/grants/index.aspx,http://www.regional.gov.au/department/annual_report/index.aspx,"","",http://www.regional.gov.au/department/file_listing/index.aspx,http://www.regional.gov.au/department/foi/index.aspx,""
-"Department of Resources, Energy and Tourism",active,http://www.ret.gov.au,71278859567,"","","","","","","",""
-"Department of Sustainability, Environment, Water, Population and Communities",active,http://www.environment.gov.au,34190894983,"","","","","","","",""
-Department of the House of Representatives,active,http://www.aph.gov.au,18526287740,"","","","","","","",""
-Department of the Prime Minister and Cabinet,active,http://www.dpmc.gov.au,18108001191,"","","","","","","",""
-Department of the Senate,active,http://www.aph.gov.au,23991641527,"","","","","","","",""
-Department of the Treasury,active,http://www.treasury.gov.au,92802414793,"","","","","","","",""
-Director of National Parks,suspended,http://www.environment.gov.au,13051694963,"","","","","","","",""
-Equal Opportunity for Women in the Workplace Agency,suspended,http://www.eowa.gov.au,47641643874,"","","","","","","",""
-Export Finance and Insurance Corporation (EFIC),active,http://www.efic.gov.au,96874024697,"","","","","","","",""
-Fair Work Australia,active,http://www.fairwork.gov.au,93614579199,"","","","","","","",""
-Family Court of Australia,active,http://www.ag.gov.au,63684208971,"","","","","","","",""
-Federal Magistrates Court,active,http://www.fmc.gov.au,60265617271,"","","","","","","",""
-Food Standards Australia New Zealand,active,http://www.foodstandards.gov.au,20537066246,"","","","","","","",""
-Future Fund Management Agency,suspended,http://www.futurefund.gov.au/,53156699293,"","","","","","","",""
-Geoscience Australia,suspended,http://www.ga.gov.au,80091799039,"","","","","","","",""
-Grains Research and Development Corporation,active,http://www.grdc.com.au/,55611223291,"","","","","","","",""
-Great Barrier Reef Marine Park Authority,suspended,http://www.gbrmpa.gov.au,12949356885,"","","","","","","",""
-Insolvency and Trustee Service Australia (ITSA),active,http://www.itsa.gov.au,63384330717,"","","","","","","",""
-Inspector-General of Taxation,active,http://www.igt.gov.au,51248702319,"","","","","","","",""
-Medicare Australia,active,http://www.medicareaustralia.gov.au,75174030967,"","","","","","","",""
-Migration Review Tribunal and Refugee Review Tribunal (MRT-RRT),active,http://www.mrt-rrt.gov.au,50760799564,"","","","","","","",""
-National Archives of Australia,suspended,http://www.naa.gov.au,36889228992,"","","","","","","",""
-National Blood Authority,active,http://www.nba.gov.au,87361602478,"","","","","","","",""
-National Capital Authority,suspended,http://www.nationalcapital.gov.au,75149374427,"","","","","","","",""
-National Competition Council,active,http://www.ncc.gov.au,56552760098,"","","","","","","",""
-National Film and Sound Archive,active,http://www.nfsa.gov.au,41251017588,"","","","","","","",""
-National Gallery of Australia,suspended,http://nga.gov.au,27855975449,"","","","","","","",""
-National Health and Medical Research Council,active,http://www.nhmrc.gov.au,88601010284,"","","","","","","",""
-National Library of Australia,suspended,http://catalogue.nla.gov.au,28346858075,"","","","","","","",""
-National Museum of Australia,suspended,http://www.nma.gov.au,70592297967,"","","","","","","",""
-National Offshore Petroleum Safety Authority,suspended,http://www.nopsa.gov.au,22385178289,"","","","","","","",""
-National Water Commission,suspended,http://www.nwc.gov.au,94364176431,"","","","","","","",""
-Office of Parliamentary Counsel,active,http://www.opc.gov.au/,41425630817,http://www.opc.gov.au/about/list_contracts.htm,"",http://www.opc.gov.au/about/documents.htm,http://www.opc.gov.au/about/list_consultancy_contracts.html,http://www.opc.gov.au/about/legal_services.htm,http://www.opc.gov.au/about/list_docs.htm,"",""
-Office of the Auditing and Assurance Standards Board,active,http://www.auasb.gov.au,41127556389,"","","","","","","",""
-Office of the Australian Accounting Standards Board,active,http://www.aasb.com.au/Home.aspx,92702019575,"","",http://www.aasb.com.au/About-the-AASB/AASB-annual-reports.aspx,"","","","",""
-Office of the Australian Building and Construction Commissioner (ABCC),suspended,http://www.abcc.gov.au,68003725098,"","","","","","","",""
-Office of the Australian Information Commissioner,active,http://www.oic.qld.gov.au,70810284665,"","","","","","","",""
-Office of the Commonwealth Ombudsman,active,http://www.ombudsman.gov.au,53003678148,"","","","","","","",""
-Office of the Director of Public Prosecutions,active,http://www.cdpp.gov.au,41036606436,"","","","","","","",""
-Office of the Fair Work Ombudsman,active,http://www.fairwork.gov.au,43884188232,"","","","","","","",""
-Office of the Inspector-General of Intelligence and Security,active,http://www.igis.gov.au/,67332668643,"","",http://www.igis.gov.au/annual_report/index.cfm,"","","","",""
-Office of the Renewable Energy Regulator,suspended,http://www.environment.gov.au,68574011917,"","","","","","","",""
-Private Health Insurance Ombudsman,active,http://www.pc.gov.au,61673137709,"","","","","","","",""
-Productivity Commission,active,http://www.pc.gov.au,30004116223,"","","","","","","",""
-Professional Services Review,active,http://www.psr.gov.au,45307308260,"","","","","","","",""
-Reserve Bank of Australia,active,http://www.austrac.gov.au,50008559486,"","","","","","","",""
-Royal Australian Mint,active,http://mintissue.ramint.gov.au,45852104259,"","","","","","","",""
-Safe Work Australia,active,http://safeworkaustralia.gov.au,76116948344,"","","","","","","",""
-Seacare,suspended,http://www.seacare.gov.au/,32745854352,"","",http://www.seacare.gov.au/publications/corporate_publications/annual_reports2,"","",http://www.seacare.gov.au/publications/corporate_publications/harradine_reports2,"",""
-Social Security Appeals Tribunal,suspended,http://www.aat.gov.au,90680970626,"","","","","","","",""
-Sydney Harbour Federation Trust,suspended,http://www.harbourtrust.gov.au/,14178614905,"","","","","","","",""
-Therapeutic Goods Administration,active,http://www.tga.gov.au,40939406804,"","","","","","","",""
-Tourism Australia,suspended,http://www.ret.gov.au,99657548712,"","","","","","","",""
-Aboriginal and Torres Strait Islander Services,suspended,http://www.atsis.gov.au,13013281264,"","","","","","","",""
-Australia-Japan Foundation,suspended,http://www.dfat.gov.au,47065634525,"","","","","","","",""
-Australian Film Commission,suspended,http://afcarchive.screenaustralia.gov.au/,57859074040,"","",http://afcarchive.screenaustralia.gov.au/profile/annrpt/profilepage_12.aspx,"","",http://afcarchive.screenaustralia.gov.au/profile/afc_files/profilepage_21.aspx,"",""
-Australian Film Television and Radio School,suspended,http://www.planning.nsw.gov.au,29003234571,"","","","","","","",""
-Australian Institute of Aboriginal and Torres Strait Islander Studies (AIATSIS),suspended,http://www.aiatsis.gov.au,62020533641,"","","","","","","",""
-Biosecurity Australia,suspended,http://www.aph.gov.au,27009590729,"","","","","","","",""
-Child Support Agency,suspended,http://www.centrelink.gov.au,29468422437,"","","","","","","",""
-Dairy Adjustment Authority,suspended,http://www.daff.gov.au/agriculture-food/meat-wool-dairy/dairy/dairy_adjustment_authority,28714145393,"","","","","","","",""
-Department of Climate Change,suspended,http://www.climatechange.gov.au,83814086707,"","","","","","","",""
-"Department of Communications, Information Technology and the Arts",suspended,http://www.dbcde.gov.au,51491646726,"","","","","","","",""
-"Department of Education, Science and Training",suspended,http://www.dest.gov.au,51452193160,"","","","","","","",""
-Department of Employment and Workplace Relations,suspended,http://www.dest.gov.au,40376417416,"","","","","","","",""
-"Department of Families, Community Services & Indigenous Affairs",suspended,http://www.centrelink.gov.au,29468422437,"","","","","","","",""
-Department of Finance and Administration,suspended,http://www.finance.gov.au,61970632495,"","","","","","","",""
-Department of Immigration and Multicultural Affairs,suspended,http://www.immi.gov.au,33380054835,"","","","","","","",""
-"Department of Industry, Tourism and Resources",suspended,http://www.business.gov.au,51835430479,"","","","","","","",""
-"Department of Infrastructure, Transport, Regional Development and Local Government",suspended,http://www.business.gov.au,86267354017,"","","","","","","",""
-Department of the Environment and Water Resources,suspended,http://www.environment.gov.au,34190894983,"","","","","","","",""
-"Department of the Environment, Water, Heritage and the Arts",suspended,http://www.environment.gov.au,34190894983,"","","","","","","",""
-Department of Transport and Regional Services,suspended,http://www.infrastructure.gov.au,86267354017,"","","","","","","",""
-Emergency Management Australia,suspended,http://www.health.gov.au,83605426759,"","","","","","","",""
-Export Wheat Commission,suspended,http://australia.gov.au,40485918341,"","","","","","","",""
-Land and Water Australia,suspended,http://lwa.gov.au/,25602743013,"","","","","","","",""
-Office of Film and Literature Classification,suspended,http://www.acma.gov.au,16001170433,"","","","","","","",""
-Office of the Privacy Commissioner,suspended,http://www.privacy.gov.au,13152473225,"","","","","","","",""
-Office of Workplace Services,suspended,http://deewr.gov.au,71141751477,"","","","","","","",""
-Questacon,suspended,http://www.tenders.gov.au,74599608295,"","","","","","","",""
-Refugee Review Tribunal,suspended,http://www.mrt-rrt.gov.au,50760799564,"","","","","","","",""
-Screen Australia,suspended,http://www.screenaustralia.gov.au,46741353180,"","","","","","","",""
-The National Institute of Clinical Studies Ltd,suspended,http://www.nhmrc.gov.au/nics/index.htm,60095459804,"","","","","","","",""
-Workplace Ombudsman,suspended,http://www.fairwork.gov.au,43884188232,"","","","","","","",""
-Department of Immigration and Citizenship,,http://www.eta.immi.gov.au,33380054835,"","","","","","","",""
-Department of Education Employment and Workplace Relations,,http://www.dest.gov.au,0,"","","","","","","",""
-Department of Veterans' Affairs,active,"",0,"","","","","","","",""
-Department of Resources Energy and Tourism,,http://www.ret.gov.au,96127997719,"","","","","","","",""
-Department of Broadband Communications and the Digital Economy,,http://www.dbcde.gov.au,51491646726,"","","","","","","",""
-Department of Innovation Industry Science and Research,,http://australia.gov.au,0,"","","","","","","",""
-Department of Agriculture Fisheries and Forestry,,http://www.centrelink.gov.au,29468422437,"","","","","","","",""
+

--- /dev/null
+++ b/alaveteli/exportAgencies.csv.php
@@ -1,1 +1,92 @@
+<?php
 
+include_once("../include/common.inc.php");
+setlocale(LC_CTYPE, 'C');
+
+$headers = Array("#id", "name", "request_email", "short_name", "notes", "publication_scheme", "home_page", "tag_string");
+
+$db = $server->get_db('disclosr-agencies');
+
+$tag = Array();
+try {
+    $rows = $db->get_view("app", "byDeptStateName", null, true)->rows;
+    //print_r($rows);
+    foreach ($rows as $row) {
+        $tag[$row->id] = phrase_to_tag(dept_to_portfolio($row->key));
+    }
+} catch (SetteeRestClientException $e) {
+    setteErrorHandler($e);
+}
+
+$foiEmail = Array();
+try {
+    $rows = $db->get_view("app", "foiEmails", null, true)->rows;
+    //print_r($rows);
+    foreach ($rows as $row) {
+        $foiEmail[$row->key] = $row->value;
+    }
+} catch (SetteeRestClientException $e) {
+    setteErrorHandler($e);
+}
+
+$fp = fopen('php://output', 'w');
+if ($fp && $db) {
+    header('Content-Type: text/csv');
+    header('Content-Disposition: attachment; filename="export.' . date("c") . '.csv"');
+    header('Pragma: no-cache');
+    header('Expires: 0');
+    fputcsv($fp, $headers);
+    try {
+        $agencies = $db->get_view("app", "byCanonicalName", null, true)->rows;
+        //print_r($rows);
+        foreach ($agencies as $agency) {
+               // print_r($agency);
+               
+            if (isset($agency->value->foiEmail) && $agency->value->foiEmail != "null" && !isset($agency->value->status)) {
+                $row = Array();
+                $row["#id"] = $agency->id;
+                $row["name"] = trim($agency->value->name);
+                if (isset($agency->value->foiEmail)) {
+                    $row["request_email"] = $agency->value->foiEmail;
+                } else {
+                    if ($agency->value->orgType == "FMA-DepartmentOfState") {
+                        $row["request_email"] = "foi@" . GetDomain($agency->value->website);
+                    } else {
+                        $row["request_email"] = $foiEmail[$agency->value->parentOrg];
+                    }
+                }
+                if (isset($agency->value->shortName)) {
+                    $row["short_name"] = $agency->value->shortName;
+                } else {
+                    $out = Array();
+                    preg_match_all('/[A-Z]/', trim($agency->value->name), $out);
+                    $row["short_name"] = implode("", $out[0]);
+                }
+                $row["notes"] = "";
+                $row["publication_scheme"] = (isset($agency->value->infoPublicationSchemeURL) ? $agency->value->infoPublicationSchemeURL : "");
+                $row["home_page"] = (isset($agency->value->website) ? $agency->value->website : "");
+                if ($agency->value->orgType == "FMA-DepartmentOfState") {
+                    $row["tag_string"] = $tag[$agency->value->_id] . " " . $agency->value->orgType;
+                } else {
+                    $row["tag_string"] = $tag[$agency->value->parentOrg] . " " . $agency->value->orgType;
+                }
+
+                fputcsv($fp, array_values($row));
+
+                if (isset($agency->value->foiBodies)) {
+                    foreach ($agency->value->foiBodies as $foiBody) {
+                        $row['name'] = $foiBody;
+                        $row['short_name'] = "";
+                        fputcsv($fp, array_values($row));
+                    }
+                }
+            }
+        }
+    } catch (SetteeRestClientException $e) {
+        setteErrorHandler($e);
+    }
+
+    die;
+}
+?>
+

--- /dev/null
+++ b/alaveteli/exportCategories.rb.php
@@ -1,1 +1,23 @@
+<?php
+include_once("../include/common.inc.php");
+setlocale(LC_CTYPE, 'C');
+ header('Content-Type: text/csv');
+    header('Content-Disposition: attachment; filename="public_body_categories_en.rb"');
+    header('Pragma: no-cache');
+    header('Expires: 0');
+echo 'PublicBodyCategories.add(:en, ['.PHP_EOL;
+echo '    "Portfolios",'.PHP_EOL;
+$db = $server->get_db('disclosr-agencies');
 
+try {
+    $rows = $db->get_view("app", "byDeptStateName", null, true)->rows;
+    //print_r($rows);
+    foreach ($rows as $row) {
+        echo '        [ "'.phrase_to_tag(dept_to_portfolio($row->key)).'","'. dept_to_portfolio($row->key).'","part of the '.dept_to_portfolio($row->key).' portfolio" ],'.PHP_EOL;
+    }
+} catch (SetteeRestClientException $e) {
+    setteErrorHandler($e);
+}
+echo '])';
+?>
+

directory:b/couchdb/settee (new)
--- /dev/null
+++ b/couchdb/settee

file:a/exportAgencies.csv.php (deleted)
--- a/exportAgencies.csv.php
+++ /dev/null
@@ -1,65 +1,1 @@
-<?php
 
-include_once("./lib/common.inc.php");
-setlocale(LC_CTYPE, 'C');
-// source: http://stackoverflow.com/questions/81934/easy-way-to-export-a-sql-table-without-access-to-the-server-or-phpmyadmin#81951
-
-$unspsc = Array();
-$unspscresult = $conn->prepare('select * from "UNSPSCcategories" where "UNSPSC"::text like \'%00000\';');
-$unspscresult->execute();
-foreach ($unspscresult->fetchAll() as $row) {
-    $unspsc[$row['UNSPSC']] = $row['Title'];
-}
-
-$query = $conn->prepare('
-SELECT "CNID",contractnotice."agencyName",agency_nametoabn.abn as "agencyABN",
-EXTRACT(EPOCH FROM "publishDate") as "publishDate",
-EXTRACT(EPOCH FROM "contractStart") as "contractStart",
-EXTRACT(EPOCH FROM "contractEnd") as "contractEnd",
-value,description,category,
-"supplierName",(case when "supplierABN" != 0 THEN "supplierABN"::text ELSE "supplierName" END) as supplierID,
-(\'https://www.tenders.gov.au/?event=public.advancedsearch.keyword&keyword=CN\'::text || "CNID"::text) as sourceURL 
-FROM contractnotice join agency_nametoabn on contractnotice."agencyName"=agency_nametoabn."agencyName"  
-where "childCN" is null'
-        , array(PDO::ATTR_CURSOR => PDO::FETCH_ORI_NEXT));
-$query->execute();
-$errors = $conn->errorInfo();
-if ($errors[2] != "") {
-    die("Export terminated, db error" . print_r($errors, true));
-}
-
-$num_fields = $query->columnCount();
-$headers = Array();
-for ($i = 0; $i < $num_fields; $i++) { // for each column in query, make a CSV header
-    $meta = $query->getColumnMeta($i);
-    $headers[] = $meta['name'];
-}
-$fp = fopen('php://output', 'w');
-if ($fp && $query) {
-    header('Content-Type: text/csv');
-    header('Content-Disposition: attachment; filename="export.' . date("c") . '.csv"');
-    header('Pragma: no-cache');
-    header('Expires: 0');
-    fputcsv($fp, $headers);
-    while ($row = $query->fetch(PDO::FETCH_NUM, PDO::FETCH_ORI_NEXT)) {
-        foreach ($row as $key => &$colvalue) {
-
-            $colvalue = preg_replace('/[^[:print:]]/', '', utf8_encode($colvalue));
-            if ($headers[$key] == "publishDate" || $headers[$key] == "contractStart"
-                    || $headers[$key] == "contractEnd") {
-                $colvalue = date("Y-m-d", $colvalue);
-            }
-           /* if ($headers[$key] == "CNID") {
-                $colvalue = str_replace("A","", $colvalue);
-}*/
-            if ($headers[$key] == "cat1" || $headers[$key] == "cat2"
-                    || $headers[$key] == "cat3") {
-                $colvalue = $unspsc[$colvalue];
-            }
-        }
-        fputcsv($fp, array_values($row));
-    }
-    die;
-}
-?>
-

file:a/foundation.html (deleted)
--- a/foundation.html
+++ /dev/null
@@ -1,137 +1,1 @@
-<!DOCTYPE html>
 
-<!-- paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ -->
-<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]-->
-<!--[if IE 7]>    <html class="no-js lt-ie9 lt-ie8" lang="en"> <![endif]-->
-<!--[if IE 8]>    <html class="no-js lt-ie9" lang="en"> <![endif]-->
-<!--[if gt IE 8]><!--> <html lang="en"> <!--<![endif]-->
-<head>
-	<meta charset="utf-8" />
-
-	<!-- Set the viewport width to device width for mobile -->
-	<meta name="viewport" content="width=device-width" />
-
-	<title>Welcome to Foundation</title>
-  
-	<!-- Included CSS Files -->
-	<link rel="stylesheet" href="stylesheets/foundation.css">
-	<link rel="stylesheet" href="stylesheets/app.css">
-
-	<!--[if lt IE 9]>
-		<link rel="stylesheet" href="stylesheets/ie.css">
-	<![endif]-->
-
-
-	<!-- IE Fix for HTML5 Tags -->
-	<!--[if lt IE 9]>
-		<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
-	<![endif]-->
-
-</head>
-<body>
-
-	<!-- container -->
-	<div class="container">
-
-		<div class="row">
-			<div class="twelve columns">
-				<h2>Welcome to Foundation</h2>
-				<p>This is version 2.1.4 released on December 19, 2011</p>
-				<hr />
-			</div>
-		</div>
-
-		<div class="row">
-			<div class="eight columns">
-				<h3>The Grid</h3>
-
-				<!-- Grid Example -->
-				<div class="row">
-					<div class="twelve columns">
-						<div class="panel">
-							<p>This is a twelve column section in a row. Each of these includes a div.panel element so you can see where the columns are - it's not required at all for the grid.</p>
-						</div>
-					</div>
-				</div>
-				<div class="row">
-					<div class="six columns">
-						<div class="panel">
-							<p>Six columns</p>
-						</div>
-					</div>
-					<div class="six columns">
-						<div class="panel">
-							<p>Six columns</p>
-						</div>
-					</div>
-				</div>
-				<div class="row">
-					<div class="four columns">
-						<div class="panel">
-							<p>Four columns</p>
-						</div>
-					</div>
-					<div class="four columns">
-						<div class="panel">
-							<p>Four columns</p>
-						</div>
-					</div>
-					<div class="four columns">
-						<div class="panel">
-							<p>Four columns</p>
-						</div>
-					</div>
-				</div>
-
-				<h3>Tabs</h3>
-				<dl class="tabs">
-					<dd><a href="#simple1" class="active">Simple Tab 1</a></dd>
-					<dd><a href="#simple2">Simple Tab 2</a></dd>
-					<dd><a href="#simple3">Simple Tab 3</a></dd>
-				</dl>
-
-				<ul class="tabs-content">
-					<li class="active" id="simple1Tab">This is simple tab 1's content. Pretty neat, huh?</li>
-					<li id="simple2Tab">This is simple tab 2's content. Now you see it!</li>
-					<li id="simple3Tab">This is simple tab 3's content. It's, you know...okay.</li>
-				</ul>
-
-				<h3>Buttons</h3>
-
-				<p><a href="#" class="small blue button">Small Blue Button</a></p>
-				<p><a href="#" class="blue button">Medium Blue Button</a></p>
-				<p><a href="#" class="large blue button">Large Blue Button</a></p>
-
-				<p><a href="#" class="nice radius small blue button">Nice Blue Button</a></p>
-				<p><a href="#" class="nice radius blue button">Nice Blue Button</a></p>
-				<p><a href="#" class="nice radius large blue button">Nice Blue Button</a></p>
-
-			</div>
-
-			<div class="four columns">			
-				<h4>Getting Started</h4>
-				<p>We're stoked you want to try Foundation! To get going, this file (index.html) includes some basic styles you can modify, play around with, or totally destroy to get going.</p>
-
-				<h4>Other Resources</h4>
-				<p>Once you've exhausted the fun in this document, you should check out:</p>
-				<ul class="disc">
-					<li><a href="http://foundation.zurb.com/docs">Foundation Documentation</a><br />Everything you need to know about using the framework.</li>
-					<li><a href="http://github.com/zurb/foundation">Foundation on Github</a><br />Latest code, issue reports, feature requests and more.</li>
-					<li><a href="http://twitter.com/foundationzurb">@foundationzurb</a><br />Ping us on Twitter if you have questions. If you build something with this we'd love to see it (and send you a totally boss sticker).</li>
-				</ul>
-			</div>
-		</div>
-
-	</div>
-	<!-- container -->
-
-
-
-
-	<!-- Included JS Files -->
-	<script src="javascripts/foundation.js"></script>
-	<script src="javascripts/app.js"></script>
-
-</body>
-</html>
-

--- a/getAgency.php
+++ b/getAgency.php
@@ -1,57 +1,196 @@
 <?php
-function createAgencyDesignDoc()
-{
-	global $sag;
-	//See if the design doc exists, creating it if it doesn't
-	try {
-		//it does exist, so finish early
-		if ($sag->head('_design/app')->headers->_HTTP->status != "404") return true;
-	}
-	catch(Exception $e) {
-		//database issue
-		return false;
-	}
-	$ddoc = new StdClass();
-	$ddoc->_id = '_design/app';
-	$ddoc->views = new StdClass();
-	// by abn, by name
-	$ddoc->views->byABN = new StdClass();
-	$ddoc->views->byABN->map = "function(doc) {   emit(doc.ABN, doc); };";
-        $ddoc->views->byName = new StdClass();
-	$ddoc->views->byName->map = "function(doc) {   emit(doc.name, doc); };";
-	$ddoc->views->getActive = new StdClass();
-	$ddoc->views->getActive->map = 'function(doc) { if (doc.status == "active") {  emit(doc._id, doc); } };';
-	$ddoc->views->getSuspended = new StdClass();
-	$ddoc->views->getSuspended->map = 'function(doc) { if (doc.status == "suspended") {  emit(doc._id, doc); } };';
-	$ddoc->views->getScrapeRequired = new StdClass();
-	$ddoc->views->getScrapeRequired->map = "function(doc) {   emit(doc.ABN, doc); };";
-	try {
-		$sag->put('_design/app', $ddoc);
-	}
-	catch(Exception $e) {
-		/*
-		 * A 409 status code means there was a conflict, so another client
-		 * already created the design doc for us. This is fine.
-		*/
-		if ($e->getCode() != 409) return false;
-	}
-	return true;
+
+include_once('include/common.inc.php');
+include_header();
+
+function displayValue($key, $value, $mode) {
+    global $db, $schemas;
+    if ($mode == "view") {
+
+        echo "<tr>";
+
+        echo "<td>" . $schemas['agency']["properties"][$key]['x-title'] . "<br><small>" . $schemas['agency']["properties"][$key]['description'] . "</small></td><td>";
+        if (is_array($value)) {
+            echo "<ol>";
+            foreach ($value as $subkey => $subvalue) {
+                if (isset($schemas['agency']["properties"][$key]['x-itemprop'])) {
+                echo '<li itemprop="' . $schemas['agency']["properties"][$key]['x-itemprop'] . '">';
+            } else {
+                echo "<li>";
+            }
+                echo "$subvalue</li>";
+            }
+            echo "</ol></td></tr>";
+        } else {
+            if (isset($schemas['agency']["properties"][$key]['x-itemprop'])) {
+                echo '<span itemprop="' . $schemas['agency']["properties"][$key]['x-itemprop'] . '">';
+            } else {
+                echo "<span>";
+            }
+              if ((strpos($key, "URL") > 0 || $key == 'website') && $value != "") {
+                    echo "<a href='$value'>view</a></span>";
+                } else {
+            echo "$value</span>";
+                }
+        }
+        echo "</td></tr>";
+    }
+    if ($mode == "edit") {
+        if (is_array($value)) {
+            echo '<div class="row">
+						<div class="seven columns">
+							<fieldset>
+								<h5>' . $key . '</h5>';
+            foreach ($value as $subkey => $subvalue) {
+                echo "<label>$subkey</label><input  class='input-text' type='text' id='$key$subkey' name='$key" . '[' . $subkey . "]' value='$subvalue'/></tr>";
+            }
+            echo "</fieldset>
+						</div>
+					</div>";
+        } else {
+            if (strpos($key, "_") === 0) {
+                echo"<input type='hidden' id='$key' name='$key' value='$value'/>";
+            } else if ($key == "parentOrg") {
+                echo "<label for='$key'>$key</label><select  id='$key' name='$key'><option value=''> Select... </option>";
+                $rows = $db->get_view("app", "byDeptStateName")->rows;
+                //print_r($rows);
+                foreach ($rows as $row) {
+                    echo "<option value='{$row->value}'" . (($row->value == $value) ? "SELECTED" : "") . " >" . str_replace("Department of ", "", $row->key) . "</option>";
+                }
+                echo" </select>";
+            } else if (strpos($key, "has") === 0) {
+                echo "<label for='$key'><input type='checkbox' id='$key' name='$key' " . (($value == 'on' || $value == 'true') ? "checked='$value'" : "") . "> $key</label>";
+            } else {
+                echo "<label>$key</label><input  class='input-text' type='text' id='$key' name='$key' value='$value'/>";
+                if ((strpos($key, "URL") > 0 || $key == 'website') && $value != "") {
+                    echo "<a href='$value'>view</a>";
+                }
+                if ($key == 'abn') {
+                    echo "<a href='http://www.abr.business.gov.au/SearchByAbn.aspx?SearchText=$value'>view abn</a>";
+                }
+            }
+        }
+    }
+    // 
 }
-require_once 'sag/src/Sag.php';
-$sag = new Sag();
-$sag->setDatabase("disclosr-agencies", true);
-//get an agency record as json/html, search by name/abn/id
+
+function addDefaultFields($row) {
+    global $schemas;
+    $defaultFields = array_keys($schemas['agency']['properties']);
+    foreach ($defaultFields as $defaultField) {
+        if (!isset($row[$defaultField])) {
+            if ($schemas['agency']['properties'][$defaultField]['type'] == "string") {
+                if (strpos($defaultField, "has") === 0) {
+                    $row[$defaultField] = "false";
+                } else {
+                    $row[$defaultField] = "";
+                }
+            }
+            if ($schemas['agency']['properties'][$defaultField]['type'] == "array") {
+
+                $row[$defaultField] = Array("");
+            }
+        }
+    }
+    return $row;
+}
+
+$db = $server->get_db('disclosr-agencies');
+
+if (isset($_REQUEST['id'])) {
+    //get an agency record as json/html, search by name/abn/id
 // by name = startkey="Ham"&endkey="Ham\ufff0"
 // edit?
-createAgencyDesignDoc();
-$rows = $sag->get('/_design/app/_view/byABN?include_docs=true')->body->rows; // &endkey='.$searchVar
-foreach ($rows as $row) {
-	echo "<table>";
-	echo '<tr> <td colspan="2"><h3>' . $row->doc->agencyName. "</h3></td></tr>";
-	echo "<tr><th>Field Name</th><th>Field Value</th></tr>";
-	foreach ($row->doc as $key => $value) {
-		echo "<tr><td>$key</td><td>$value</td></tr>";
-	} // also show documents/URLs available
-	echo "</table>";
+
+    $row = $db->get($_REQUEST['id']);
+    //print_r($row);
+    if (sizeof($_POST) > 0) {
+        //print_r($_POST);
+        foreach ($_POST as $postkey => $postvalue) {
+            if ($postvalue == "") {
+                unset($_POST[$postkey]);
+            }
+            if (is_array($postvalue) && count($postvalue) == 1 && $postvalue[0] == "") {
+                unset($_POST[$postkey]);
+            }
+        }
+        if (isset($_POST['_id']) && $db->get_rev($_POST['_id']) == $_POST['_rev']) {
+            echo "Edited version was latest version, continue saving";
+            $newdoc = $_POST;
+            $newdoc['metadata']['lastModified'] = time();
+            $row = $db->save($newdoc);
+        } else {
+            echo "ALERT doc revised by someone else while editing. Document not saved.";
+        }
+    }
+
+    $mode = "view";
+    if ($mode == "edit") {
+        $row = addDefaultFields(object_to_array($row));
+    } else {
+         $row = object_to_array($row);
+    }
+    
+    if ($mode == "view") {
+        echo '<div itemscope itemtype ="http://schema.org/GovernmentOrganisation"><table width="100%">';
+        echo '<tr> <td colspan="2"><h3>' . $row['name'] . "</h3></td></tr>";
+        echo "<tr><th>Field Name</th><th>Field Value</th></tr>";
+    }
+    if ($mode == "edit") {
+        ?>
+        <input  id="addfield" type="button" value="Add Field"/>
+        <script>
+            window.onload = function() {
+                $(document).ready(function() {
+                    // put all your jQuery goodness in here.
+                    // http://charlie.griefer.com/blog/2009/09/17/jquery-dynamically-adding-form-elements/
+                    $('#addfield').click(function() {
+                        var field_name=window.prompt("fieldname?","");
+                        if (field_name !="") {
+                            $('#submitbutton').before($('<span></span>')
+                            .append("<label>"+field_name+"</label>")
+                            .append("<input  class='input-text' type='text' id='"+field_name+"' name='"+field_name+"'/>")
+                        );
+                        }
+                    });
+                });
+            };
+        </script>
+        <form id="editform" class="nice" method="post">
+        <?php
+
+    }
+    foreach ($row as $key => $value) {
+        echo displayValue($key, $value, $mode);
+    }
+    if ($mode == "view") {
+        echo "</table></div>";
+    }
+    if ($mode == "edit") {
+        echo '<input id="submitbutton" type="submit"/></form>';
+    }
+} else {
+
+    try {
+        /* $rows = $db->get_view("app", "showNamesABNs")->rows;
+          //print_r($rows);
+          foreach ($rows as $row) {
+          //   print_r($row);
+          echo '<li><a href="getAgency.php?id=' . $row->key . '">' .
+          (isset($row->value->name) && $row->value->name != "" ? $row->value->name : "NO NAME " . $row->value->abn)
+          . '</a></li>';
+          } */
+        $rows = $db->get_view("app", "byName")->rows;
+        //print_r($rows);
+        foreach ($rows as $row) {
+            //   print_r($row);
+            echo '<li itemscope itemtype="http://schema.org/GovernmentOrganization"><a href="getAgency.php?id=' . $row->value . '" itemprop="url"><span itemprop="name">' .
+            $row->key
+            . '</span></a></li>';
+        }
+    } catch (SetteeRestClientException $e) {
+        setteErrorHandler($e);
+    }
 }
-
+include_footer();
+?>

file:b/graph.php (new)
--- /dev/null
+++ b/graph.php
@@ -1,1 +1,93 @@
+<?php
+include_once('include/common.inc.php');
+//include_header();
+$format = "html";
+if (isset($_REQUEST['format'])) {
+    $format = $_REQUEST['format'];
+}
 
+function add_node($id, $label) {
+    global $format;
+    if ($format == "html") {
+        echo "nodes[\"$id\"] = graph.newNode({label: \"$label\"});" . PHP_EOL;
+    }
+     if ($format == "dot" && $label != "") {
+         echo "$id [label=\"$label\"];". PHP_EOL;
+     }
+}
+
+function add_edge($from, $to, $color) {
+    global $format;
+    if ($format == "html") {
+        echo "graph.newEdge(nodes[\"$from\"], nodes['$to'], {color: '$color'});" . PHP_EOL;
+    }
+    if ($format == "dot") {
+        echo "$from -> $to ".($color != ""? "[color=$color]":"").";". PHP_EOL;
+    }
+}
+
+if ($format == "html") {
+    ?>
+    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
+    <script src="lib/springy/springy.js"></script>
+    <script src="lib/springy/springyui.js"></script>
+    <script>
+        var graph = new Graph();
+        var nodes = [];
+    <?php
+}
+if ($format == "dot") {
+    echo 'digraph g {'. PHP_EOL;
+}
+$db = $server->get_db('disclosr-agencies');
+ add_node("fedg","Federal Government - Commonwealth of Australia");
+try {
+    $rows = $db->get_view("app", "byCanonicalName", null, true)->rows;
+//print_r($rows);
+    foreach ($rows as $row) {
+        add_node($row->id, $row->key);
+    }
+} catch (SetteeRestClientException $e) {
+    setteErrorHandler($e);
+}
+
+try {
+    $rows = $db->get_view("app", "byDeptStateName", null, true)->rows;
+//print_r($rows);
+    foreach ($rows as $row) {
+        add_edge("fedg", $row->value, 'yellow');
+    }
+} catch (SetteeRestClientException $e) {
+    setteErrorHandler($e);
+}
+
+try {
+    $rows = $db->get_view("app", "parentOrgs", null, true)->rows;
+//   print_r($rows);
+    foreach ($rows as $row) {
+        add_edge($row->key, $row->value, 'blue');
+    }
+} catch (SetteeRestClientException $e) {
+    setteErrorHandler($e);
+}
+if ($format == "html") {
+    ?>
+        window.onload = function() {
+            $(document).ready(function() {
+                var springy = $('#springydemo').springy({
+                    graph: graph
+                });
+            });
+        };
+    </script>
+
+    <canvas id="springydemo" width="1260" height="680" />
+    <?php
+}
+if ($format == "dot") {
+    echo "}";
+}
+//include_footer();
+?>
+
+

file:a/humans.txt (deleted)
--- a/humans.txt
+++ /dev/null
@@ -1,8 +1,1 @@
-/* Foundation was made by ZURB, an interaction design and design strategy firm in Campbell, CA */
-/* zurb.com */
-/* humanstxt.org */
 
-/* SITE */
-  Standards: HTML5, CSS3
-  Components: jQuery, Orbit, Reveal
-  Software: Coda, Textmate, Git

file:a/import.php (deleted)
--- a/import.php
+++ /dev/null
@@ -1,31 +1,1 @@
-<?php
-require_once 'sag/src/Sag.php';
-$sag = new Sag();
-$sag->setDatabase("disclosr-agencies", true);
-$file = "agencies.csv";
-$handle = fopen($file, "r");
-$fieldNames = Array();
-$line = 0;
-while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
-	if ($line == 0) {
-		$fieldNames = $data;
-	}
-	else {
-		$agency = Array();
-		$valueCount = 0;
-		foreach ($data as $value) {
-			if ($value != "") $agency[$fieldNames[$valueCount]] = $value;
-			$valueCount++;
-		}
-		$agency["lastScraped"] = "1/1/1970";
-		$agency["scrapeDepth"] = 1;
-		var_dump($agency);
-                $sag->post($agency);
-	}
-	$line++;
-	if ($line % 10000 == 0) echo "$line records... \n";
-}
-fclose($handle);
-echo "Found a total of $line records in $file.\n";
-?>
 

--- /dev/null
+++ b/include/common.inc.php
@@ -1,1 +1,68 @@
+<?php
 
+date_default_timezone_set("Australia/Sydney");
+
+$basePath = "";
+if (strstr($_SERVER['PHP_SELF'], "alaveteli/")
+        || strstr($_SERVER['PHP_SELF'], "admin/")
+        || strstr($_SERVER['PHP_SELF'], "lib/")
+        || strstr($_SERVER['PHP_SELF'], "include/"))
+    $basePath = "../";
+
+include_once ('couchdb.inc.php');
+include_once ('template.inc.php');
+
+# Convert a stdClass to an Array. http://www.php.net/manual/en/language.types.object.php#102735
+
+function object_to_array(stdClass $Class) {
+    # Typecast to (array) automatically converts stdClass -> array.
+    $Class = (array) $Class;
+
+    # Iterate through the former properties looking for any stdClass properties.
+    # Recursively apply (array).
+    foreach ($Class as $key => $value) {
+        if (is_object($value) && get_class($value) === 'stdClass') {
+            $Class[$key] = object_to_array($value);
+        }
+    }
+    return $Class;
+}
+
+# Convert an Array to stdClass. http://www.php.net/manual/en/language.types.object.php#102735
+
+function array_to_object(array $array) {
+    # Iterate through our array looking for array values.
+    # If found recurvisely call itself.
+    foreach ($array as $key => $value) {
+        if (is_array($value)) {
+            $array[$key] = array_to_object($value);
+        }
+    }
+
+    # Typecast to (object) will automatically convert array -> stdClass
+    return (object) $array;
+}
+
+function dept_to_portfolio($deptName) {
+    return trim(str_replace("Department of", "", str_replace("Department of the", "Department of", $deptName)));
+} 
+function phrase_to_tag ($phrase) {
+    return str_replace(" ","_",str_replace("'","",str_replace(",","",strtolower($phrase))));
+}
+function GetDomain($url)
+{
+$nowww = ereg_replace('www\.','',$url);
+$domain = parse_url($nowww);
+if(!empty($domain["host"]))
+    {
+     return $domain["host"];
+     } else
+     {
+     return $domain["path"];
+     }
+}
+
+?>
+
+
+

--- /dev/null
+++ b/include/couchdb.inc.php
@@ -1,1 +1,90 @@
+<?php
 
+include $basePath."schemas/schemas.inc.php";
+
+require ($basePath.'couchdb/settee/src/settee.php');
+
+function createAgencyDesignDoc() {
+    global $db;
+    $obj = new stdClass();
+    $obj->_id = "_design/" . urlencode("app");
+    $obj->language = "javascript";
+    $obj->views->all->map = "function(doc) {   emit(doc._id, doc); };";
+    $obj->views->byABN->map = "function(doc) {   emit(doc.abn, doc); };";
+        $obj->views->byCanonicalName->map = "function(doc) {  
+            if (doc.parentOrg || doc.orgType == 'FMA-DepartmentOfState') {
+        emit(doc.name, doc); 
+        }
+};";
+        $obj->views->byDeptStateName->map = "function(doc) {  
+            if (doc.orgType == 'FMA-DepartmentOfState') {
+        emit(doc.name, doc._id); 
+        }
+};";
+        $obj->views->parentOrgs->map = "function(doc) {
+            if (doc.parentOrg) {
+        emit(doc._id, doc.parentOrg);
+        }
+};";
+    $obj->views->byName->map = "function(doc) {  
+        emit(doc.name, doc._id); 
+ for (name in doc.otherNames) {
+if (doc.otherNames[name] != '' && doc.otherNames[name] != doc.name) {
+       	 emit(doc.otherNames[name], doc._id); 
+}
+        }
+};";
+    
+   $obj->views->foiEmails->map = "function(doc) {  
+        emit(doc._id, doc.foiEmail);
+};";
+    
+    $obj->views->byLastModified->map = "function(doc) {   emit(doc.metadata.lastModified, doc); }";
+    $obj->views->getActive->map = 'function(doc) { if (doc.status == "active") {  emit(doc._id, doc); } };';
+    $obj->views->getSuspended->map = 'function(doc) { if (doc.status == "suspended") {  emit(doc._id, doc); } };';
+    $obj->views->getScrapeRequired->map = "function(doc) {   emit(doc.abn, doc); };";
+    $obj->views->showNamesABNs->map = "function(doc) {   emit(doc._id, {name: doc.name, abn: doc.abn}); };";
+    $obj->views->getConflicts->map = "function(doc) {
+  if (doc._conflicts) {
+    emit(null, [doc._rev].concat(doc._conflicts));
+  }
+}";
+    // http://stackoverflow.com/questions/646628/javascript-startswith
+    $obj->views->score->map = 'if(!String.prototype.startsWith){
+    String.prototype.startsWith = function (str) {
+        return !this.indexOf(str);
+    }
+}
+
+function(doc) {
+count = 0;
+if (typeof(doc["status"]) == "undefined" || doc["status"] != "suspended") {
+for(var propName in doc) {
+      if(typeof(doc[propName]) != "undefined" && propName.startsWith("l")) {
+  	count++
+	}
+}
+  emit(count+doc._id, {id:doc._id, name: doc.name, score:count});
+  }
+}';
+
+    // allow safe updates (even if slightly slower due to extra: rev-detection check).
+    return $db->save($obj, true);
+}
+
+
+if( php_uname('n') == "vanille") {
+
+$server = new SetteeServer('http://192.168.178.21:5984');
+} else 
+    if( php_uname('n') == "KYUUBEY") {
+
+$server = new SetteeServer('http://192.168.1.148:5984');
+} else {
+    $server = new SetteeServer('http://127.0.0.1:5984');
+}
+function setteErrorHandler($e) {
+    echo $e->getMessage() . "<br>" . PHP_EOL;
+}
+?>
+

--- /dev/null
+++ b/include/template.inc.php
@@ -1,1 +1,78 @@
+<?php
 
+function include_header() {
+    global $basePath;
+    ?>
+    <!DOCTYPE html>
+
+    <!-- paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ -->
+    <!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]-->
+    <!--[if IE 7]>    <html class="no-js lt-ie9 lt-ie8" lang="en"> <![endif]-->
+    <!--[if IE 8]>    <html class="no-js lt-ie9" lang="en"> <![endif]-->
+    <!--[if gt IE 8]><!--> <html lang="en"> <!--<![endif]-->
+        <head>
+            <meta charset="utf-8" />
+
+            <!-- Set the viewport width to device width for mobile -->
+            <meta name="viewport" content="width=device-width" />
+
+            <title>Disclosr</title>
+
+            <!-- Included CSS Files -->
+            <link rel="stylesheet" href="<?php echo $basePath ?>stylesheets/foundation.css">
+            <link rel="stylesheet" href="<?php echo $basePath ?>stylesheets/app.css">
+
+            <!--[if lt IE 9]>
+                    <link rel="stylesheet" href="<?php echo $basePath ?>stylesheets/ie.css">
+            <![endif]-->
+
+
+            <!-- IE Fix for HTML5 Tags -->
+            <!--[if lt IE 9]>
+                    <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+            <![endif]-->
+
+        </head>
+        <body>
+
+            <!-- navBar -->
+            <div id="navbar" class="container">
+                <div class="row">
+                    <div class="four columns">
+                        <h1><a href="/">Disclosr</a></h1>
+                    </div>
+                    <div class="eight columns hide-on-phones">
+                        <strong class="right">
+                            <a href="getAgency.php">Agencies</a>
+                            <a href="about.php">About/FAQ</a>
+                        </strong>
+                    </div>
+                </div>
+            </div>
+            <!-- /navBar -->
+
+            <!-- container -->
+            <div class="container">
+            <?php }
+
+            function include_footer() { 
+                global $basePath;
+                ?>
+                
+            </div>
+            <!-- container -->
+
+
+
+
+            <!-- Included JS Files -->
+            <script src="<?php echo $basePath; ?>javascripts/foundation.js"></script>
+            <script src="<?php echo $basePath; ?>javascripts/app.js"></script>
+            <script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
+
+        </body>
+    </html>
+
+<?php }
+?>
+

file:a/lastUpdated.php (deleted)
--- a/lastUpdated.php
+++ /dev/null
@@ -1,2 +1,1 @@
-for each agency, record when last changed (number of days too) and show a couple of URLs that were in that change
 

file:b/lib/FeedItem.php (new)
--- /dev/null
+++ b/lib/FeedItem.php
@@ -1,1 +1,168 @@
+<?php

+ /**

+ * Univarsel Feed Writer

+ * 

+ * FeedItem class - Used as feed element in FeedWriter class

+ *

+ * @package         UnivarselFeedWriter

+ * @author          Anis uddin Ahmad <anisniit@gmail.com>

+ * @link            http://www.ajaxray.com/projects/rss

+ */

+ class FeedItem

+ {

+	private $elements = array();    //Collection of feed elements

+	private $version;

+	

+	/**

+	* Constructor 

+	* 

+	* @param    contant     (RSS1/RSS2/ATOM) RSS2 is default. 

+	*/ 

+	function __construct($version = RSS2)

+	{    

+		$this->version = $version;

+	}

+	

+	/**

+	* Add an element to elements array

+	* 

+	* @access   public

+	* @param    srting  The tag name of an element

+	* @param    srting  The content of tag

+	* @param    array   Attributes(if any) in 'attrName' => 'attrValue' format

+	* @return   void

+	*/

+	public function addElement($elementName, $content, $attributes = null)

+	{

+		$this->elements[$elementName]['name']       = $elementName;

+		$this->elements[$elementName]['content']    = $content;

+		$this->elements[$elementName]['attributes'] = $attributes;

+	}

+	

+	/**

+	* Set multiple feed elements from an array. 

+	* Elements which have attributes cannot be added by this method

+	* 

+	* @access   public

+	* @param    array   array of elements in 'tagName' => 'tagContent' format.

+	* @return   void

+	*/

+	public function addElementArray($elementArray)

+	{

+		if(! is_array($elementArray)) return;

+		foreach ($elementArray as $elementName => $content) 

+		{

+			$this->addElement($elementName, $content);

+		}

+	}

+	

+	/**

+	* Return the collection of elements in this feed item

+	* 

+	* @access   public

+	* @return   array

+	*/

+	public function getElements()

+	{

+		return $this->elements;

+	}

+	

+	// Wrapper functions ------------------------------------------------------

+	

+	/**

+	* Set the 'dscription' element of feed item

+	* 

+	* @access   public

+	* @param    string  The content of 'description' element

+	* @return   void

+	*/

+	public function setDescription($description) 

+	{

+		$tag = ($this->version == ATOM)? 'summary' : 'description'; 

+		$this->addElement($tag, $description);

+	}

+	

+	/**

+	* @desc     Set the 'title' element of feed item

+	* @access   public

+	* @param    string  The content of 'title' element

+	* @return   void

+	*/

+	public function setTitle($title) 

+	{

+		$this->addElement('title', $title);  	

+	}

+	

+	/**

+	* Set the 'date' element of feed item

+	* 

+	* @access   public

+	* @param    string  The content of 'date' element

+	* @return   void

+	*/

+	public function setDate($date) 

+	{

+		if(! is_numeric($date))

+		{

+			$date = strtotime($date);

+		}

+		

+		if($this->version == ATOM)

+		{

+			$tag    = 'updated';

+			$value  = date(DATE_ATOM, $date);

+		}        

+		elseif($this->version == RSS2) 

+		{

+			$tag    = 'pubDate';

+			$value  = date(DATE_RSS, $date);

+		}

+		else                                

+		{

+			$tag    = 'dc:date';

+			$value  = date("Y-m-d", $date);

+		}

+		

+		$this->addElement($tag, $value);    

+	}

+	

+	/**

+	* Set the 'link' element of feed item

+	* 

+	* @access   public

+	* @param    string  The content of 'link' element

+	* @return   void

+	*/

+	public function setLink($link) 

+	{

+		if($this->version == RSS2 || $this->version == RSS1)

+		{

+			$this->addElement('link', $link);

+		}

+		else

+		{

+			$this->addElement('link','',array('href'=>$link));

+			$this->addElement('id', FeedWriter::uuid($link,'urn:uuid:'));

+		} 

+		

+	}

+	

+	/**

+	* Set the 'encloser' element of feed item

+	* For RSS 2.0 only

+	* 

+	* @access   public

+	* @param    string  The url attribute of encloser tag

+	* @param    string  The length attribute of encloser tag

+	* @param    string  The type attribute of encloser tag

+	* @return   void

+	*/

+	public function setEncloser($url, $length, $type)

+	{

+		$attributes = array('url'=>$url, 'length'=>$length, 'type'=>$type);

+		$this->addElement('enclosure','',$attributes);

+	}

+	

+ } // end of class FeedItem

+?>

 

--- /dev/null
+++ b/lib/FeedWriter.php
@@ -1,1 +1,435 @@
-
+<?php

+// RSS 0.90  Officially obsoleted by 1.0

+// RSS 0.91, 0.92, 0.93 and 0.94  Officially obsoleted by 2.0

+// So, define constants for RSS 1.0, RSS 2.0 and ATOM 	

+

+	define('RSS1', 'RSS 1.0', true);

+	define('RSS2', 'RSS 2.0', true);

+	define('ATOM', 'ATOM', true);

+

+ /**

+ * Univarsel Feed Writer class

+ *

+ * Genarate RSS 1.0, RSS2.0 and ATOM Feed

+ *                             

+ * @package     UnivarselFeedWriter

+ * @author      Anis uddin Ahmad <anisniit@gmail.com>

+ * @link        http://www.ajaxray.com/projects/rss

+ */

+ class FeedWriter

+ {

+	 private $channels      = array();  // Collection of channel elements

+	 private $items         = array();  // Collection of items as object of FeedItem class.

+	 private $data          = array();  // Store some other version wise data

+	 private $CDATAEncoding = array();  // The tag names which have to encoded as CDATA

+	 

+	 private $version   = null; 

+	

+	/**

+	* Constructor

+	* 

+	* @param    constant    the version constant (RSS1/RSS2/ATOM).       

+	*/ 

+	function __construct($version = RSS2)

+	{	

+		$this->version = $version;

+			

+		// Setting default value for assential channel elements

+		$this->channels['title']        = $version . ' Feed';

+		$this->channels['link']         = 'http://www.ajaxray.com/blog';

+				

+		//Tag names to encode in CDATA

+		$this->CDATAEncoding = array('description', 'content:encoded', 'summary');

+	}

+

+	// Start # public functions ---------------------------------------------

+	

+	/**

+	* Set a channel element

+	* @access   public

+	* @param    srting  name of the channel tag

+	* @param    string  content of the channel tag

+	* @return   void

+	*/

+	public function setChannelElement($elementName, $content)

+	{

+		$this->channels[$elementName] = $content ;

+	}

+	

+	/**

+	* Set multiple channel elements from an array. Array elements 

+	* should be 'channelName' => 'channelContent' format.

+	* 

+	* @access   public

+	* @param    array   array of channels

+	* @return   void

+	*/

+	public function setChannelElementsFromArray($elementArray)

+	{

+		if(! is_array($elementArray)) return;

+		foreach ($elementArray as $elementName => $content) 

+		{

+			$this->setChannelElement($elementName, $content);

+		}

+	}

+	

+	/**

+	* Genarate the actual RSS/ATOM file

+	* 

+	* @access   public

+	* @return   void

+	*/ 

+	public function genarateFeed()

+	{

+		header("Content-type: text/xml");

+		

+		$this->printHead();

+		$this->printChannels();

+		$this->printItems();

+		$this->printTale();

+	}

+	

+	/**

+	* Create a new FeedItem.

+	* 

+	* @access   public

+	* @return   object  instance of FeedItem class

+	*/

+	public function createNewItem()

+	{

+		$Item = new FeedItem($this->version);

+		return $Item;

+	}

+	

+	/**

+	* Add a FeedItem to the main class

+	* 

+	* @access   public

+	* @param    object  instance of FeedItem class

+	* @return   void

+	*/

+	public function addItem($feedItem)

+	{

+		$this->items[] = $feedItem;    

+	}

+	

+	

+	// Wrapper functions -------------------------------------------------------------------

+	

+	/**

+	* Set the 'title' channel element

+	* 

+	* @access   public

+	* @param    srting  value of 'title' channel tag

+	* @return   void

+	*/

+	public function setTitle($title)

+	{

+		$this->setChannelElement('title', $title);

+	}

+	

+	/**

+	* Set the 'description' channel element

+	* 

+	* @access   public

+	* @param    srting  value of 'description' channel tag

+	* @return   void

+	*/

+	public function setDescription($desciption)

+	{

+		$this->setChannelElement('description', $desciption);

+	}

+	

+	/**

+	* Set the 'link' channel element

+	* 

+	* @access   public

+	* @param    srting  value of 'link' channel tag

+	* @return   void

+	*/

+	public function setLink($link)

+	{

+		$this->setChannelElement('link', $link);

+	}

+	

+	/**

+	* Set the 'image' channel element

+	* 

+	* @access   public

+	* @param    srting  title of image

+	* @param    srting  link url of the imahe

+	* @param    srting  path url of the image

+	* @return   void

+	*/

+	public function setImage($title, $link, $url)

+	{

+		$this->setChannelElement('image', array('title'=>$title, 'link'=>$link, 'url'=>$url));

+	}

+	

+	/**

+	* Set the 'about' channel element. Only for RSS 1.0

+	* 

+	* @access   public

+	* @param    srting  value of 'about' channel tag

+	* @return   void

+	*/

+	public function setChannelAbout($url)

+	{

+		$this->data['ChannelAbout'] = $url;    

+	}

+	

+  /**

+  * Genarates an UUID

+  * @author     Anis uddin Ahmad <admin@ajaxray.com>

+  * @param      string  an optional prefix

+  * @return     string  the formated uuid

+  */

+  public function uuid($key = null, $prefix = '') 

+  {

+	$key = ($key == null)? uniqid(rand()) : $key;

+	$chars = md5($key);

+	$uuid  = substr($chars,0,8) . '-';

+	$uuid .= substr($chars,8,4) . '-';

+	$uuid .= substr($chars,12,4) . '-';

+	$uuid .= substr($chars,16,4) . '-';

+	$uuid .= substr($chars,20,12);

+

+	return $prefix . $uuid;

+  }

+	// End # public functions ----------------------------------------------

+	

+	// Start # private functions ----------------------------------------------

+	

+	/**

+	* Prints the xml and rss namespace

+	* 

+	* @access   private

+	* @return   void

+	*/

+	private function printHead()

+	{

+		$out  = '<?xml version="1.0" encoding="utf-8"?>' . "\n";

+		

+		if($this->version == RSS2)

+		{

+			$out .= '<rss version="2.0"

+					xmlns:content="http://purl.org/rss/1.0/modules/content/"

+					xmlns:wfw="http://wellformedweb.org/CommentAPI/"

+				  >' . PHP_EOL;

+		}    

+		elseif($this->version == RSS1)

+		{

+			$out .= '<rdf:RDF 

+					 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"

+					 xmlns="http://purl.org/rss/1.0/"

+					 xmlns:dc="http://purl.org/dc/elements/1.1/"

+					>' . PHP_EOL;;

+		}

+		else if($this->version == ATOM)

+		{

+			$out .= '<feed xmlns="http://www.w3.org/2005/Atom">' . PHP_EOL;;

+		}

+		echo $out;

+	}

+	

+	/**

+	* Closes the open tags at the end of file

+	* 

+	* @access   private

+	* @return   void

+	*/

+	private function printTale()

+	{

+		if($this->version == RSS2)

+		{

+			echo '</channel>' . PHP_EOL . '</rss>'; 

+		}    

+		elseif($this->version == RSS1)

+		{

+			echo '</rdf:RDF>';

+		}

+		else if($this->version == ATOM)

+		{

+			echo '</feed>';

+		}

+	  

+	}

+

+	/**

+	* Creates a single node as xml format

+	* 

+	* @access   private

+	* @param    srting  name of the tag

+	* @param    mixed   tag value as string or array of nested tags in 'tagName' => 'tagValue' format

+	* @param    array   Attributes(if any) in 'attrName' => 'attrValue' format

+	* @return   string  formatted xml tag

+	*/

+	private function makeNode($tagName, $tagContent, $attributes = null)

+	{        

+		$nodeText = '';

+		$attrText = '';

+

+		if(is_array($attributes))

+		{

+			foreach ($attributes as $key => $value) 

+			{

+				$attrText .= " $key=\"$value\" ";

+			}

+		}

+		

+		if(is_array($tagContent) && $this->version == RSS1)

+		{

+			$attrText = ' rdf:parseType="Resource"';

+		}

+		

+		

+		$attrText .= (in_array($tagName, $this->CDATAEncoding) && $this->version == ATOM)? ' type="html" ' : '';

+		$nodeText .= (in_array($tagName, $this->CDATAEncoding))? "<{$tagName}{$attrText}><![CDATA[" : "<{$tagName}{$attrText}>";

+		 

+		if(is_array($tagContent))

+		{ 

+			foreach ($tagContent as $key => $value) 

+			{

+				$nodeText .= $this->makeNode($key, $value);

+			}

+		}

+		else

+		{

+			$nodeText .= (in_array($tagName, $this->CDATAEncoding))? $tagContent : htmlentities($tagContent);

+		}           

+			

+		$nodeText .= (in_array($tagName, $this->CDATAEncoding))? "]]></$tagName>" : "</$tagName>";

+

+		return $nodeText . PHP_EOL;

+	}

+	

+	/**

+	* @desc     Print channels

+	* @access   private

+	* @return   void

+	*/

+	private function printChannels()

+	{

+		//Start channel tag

+		switch ($this->version) 

+		{

+		   case RSS2: 

+				echo '<channel>' . PHP_EOL;        

+				break;

+		   case RSS1: 

+				echo (isset($this->data['ChannelAbout']))? "<channel rdf:about=\"{$this->data['ChannelAbout']}\">" : "<channel rdf:about=\"{$this->channels['link']}\">";

+				break;

+		}

+		

+		//Print Items of channel

+		foreach ($this->channels as $key => $value) 

+		{

+			if($this->version == ATOM && $key == 'link') 

+			{

+				// ATOM prints link element as href attribute

+				echo $this->makeNode($key,'',array('href'=>$value));

+				//Add the id for ATOM

+				echo $this->makeNode('id',$this->uuid($value,'urn:uuid:'));

+			}

+			else

+			{

+				echo $this->makeNode($key, $value);

+			}    

+			

+		}

+		

+		//RSS 1.0 have special tag <rdf:Seq> with channel 

+		if($this->version == RSS1)

+		{

+			echo "<items>" . PHP_EOL . "<rdf:Seq>" . PHP_EOL;

+			foreach ($this->items as $item) 

+			{

+				$thisItems = $item->getElements();

+				echo "<rdf:li resource=\"{$thisItems['link']['content']}\"/>" . PHP_EOL;

+			}

+			echo "</rdf:Seq>" . PHP_EOL . "</items>" . PHP_EOL . "</channel>" . PHP_EOL;

+		}

+	}

+	

+	/**

+	* Prints formatted feed items

+	* 

+	* @access   private

+	* @return   void

+	*/

+	private function printItems()

+	{    

+		foreach ($this->items as $item) 

+		{

+			$thisItems = $item->getElements();

+			

+			//the argument is printed as rdf:about attribute of item in rss 1.0 

+			echo $this->startItem($thisItems['link']['content']);

+			

+			foreach ($thisItems as $feedItem ) 

+			{

+				echo $this->makeNode($feedItem['name'], $feedItem['content'], $feedItem['attributes']); 

+			}

+			echo $this->endItem();

+		}

+	}

+	

+	/**

+	* Make the starting tag of channels

+	* 

+	* @access   private

+	* @param    srting  The vale of about tag which is used for only RSS 1.0

+	* @return   void

+	*/

+	private function startItem($about = false)

+	{

+		if($this->version == RSS2)

+		{

+			echo '<item>' . PHP_EOL; 

+		}    

+		elseif($this->version == RSS1)

+		{

+			if($about)

+			{

+				echo "<item rdf:about=\"$about\">" . PHP_EOL;

+			}

+			else

+			{

+				die('link element is not set .\n It\'s required for RSS 1.0 to be used as about attribute of item');

+			}

+		}

+		else if($this->version == ATOM)

+		{

+			echo "<entry>" . PHP_EOL;

+		}    

+	}

+	

+	/**

+	* Closes feed item tag

+	* 

+	* @access   private

+	* @return   void

+	*/

+	private function endItem()

+	{

+		if($this->version == RSS2 || $this->version == RSS1)

+		{

+			echo '</item>' . PHP_EOL; 

+		}    

+		else if($this->version == ATOM)

+		{

+			echo "</entry>" . PHP_EOL;

+		}

+	}

+	

+

+	

+	// End # private functions ----------------------------------------------

+	

+ } // end of class FeedWriter

+ 

+// autoload classes

+function __autoload($class_name) 

+{

+	require_once $class_name . '.php';

+}

directory:b/lib/php-diff (new)
--- /dev/null
+++ b/lib/php-diff

directory:b/lib/springy (new)
--- /dev/null
+++ b/lib/springy

--- /dev/null
+++ b/nbproject/project.properties
@@ -1,1 +1,8 @@
+include.path=${php.global.include.path}
+php.version=PHP_5
+source.encoding=UTF-8
+src.dir=.
+tags.asp=false
+tags.short=true
+web.root=.
 

--- /dev/null
+++ b/nbproject/project.xml
@@ -1,1 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://www.netbeans.org/ns/project/1">
+    <type>org.netbeans.modules.php.project</type>
+    <configuration>
+        <data xmlns="http://www.netbeans.org/ns/php-project/1">
+            <name>disclosr</name>
+        </data>
+    </configuration>
+</project>
 

file:a/robots.txt -> file:b/robots.txt
--- a/robots.txt
+++ b/robots.txt
@@ -2,3 +2,4 @@
 # www.google.com/support/webmasters/bin/answer.py?hl=en&answer=156449
 
 User-agent: *
+Disallow: /admin/

--- a/rss.xml.php
+++ b/rss.xml.php
@@ -1,2 +1,30 @@
+<?php
+
 // Agency X updated Y,  new files, diff of plain text/link text,
 // feed for just one agency or all
+// This is a minimum example of using the Universal Feed Generator Class
+include("lib/FeedWriter.php");
+//Creating an instance of FeedWriter class.
+$TestFeed = new FeedWriter(RSS2);
+//Setting the channel elements
+//Use wrapper functions for common channelelements
+$TestFeed->setTitle('Last Modified - All');
+$TestFeed->setLink('http://disclosr.lambdacomplex.org/rss.xml.php');
+$TestFeed->setDescription('This is test of creating a RSS 2.0 feed Universal Feed Writer');
+//Retriving informations from database
+$rows = $db->get_view("app", "byLastModified")->rows;
+//print_r($rows);
+foreach ($rows as $row) {
+    //Create an empty FeedItem
+    $newItem = $TestFeed->createNewItem();
+    //Add elements to the feed item
+    $newItem->setTitle($row['name']);
+    $newItem->setLink($row['id']);
+    $newItem->setDate(date("c", $row['metadata']['lastModified']));
+    $newItem->setDescription($row['name']);
+    //Now add the feed item
+    $TestFeed->addItem($newItem);
+}
+//OK. Everything is done. Now genarate the feed.
+$TestFeed->genarateFeed();
+?>

directory:a/sag (deleted)
--- a/sag
+++ /dev/null

--- /dev/null
+++ b/schemas/agency.json.php
@@ -1,1 +1,47 @@
+<?php
 
+$schemas['agency'] = Array(
+    "description" => "Representation of government agency and online transparency measures",
+    "type" => "object",
+    "properties" => Array(
+        "name" => Array("type" => "string", "required" => true, "x-itemprop" => "name", "x-title" => "Name", "description" => "Name, most recent and broadest"),
+        "shortName" => Array("type" => "string", "required" => false, "x-title" => "Short Name", "description" => "Name shortened, usually to an acronym"),
+        "foiEmail" => Array("type" => "string", "required" => false, "x-title" => "FOI Contact Email", "description" => "FOI contact email if not foi@"),
+        "sameAs" => Array("type" => "array", "required" => false, "x-itemprop"=>"http://www.w3.org/2002/07/owl#sameAs","x-title" => "Same As", "description" => "Same as other URLs/URIs for this entity",
+            "items" => Array("type" => "string")),
+        "otherNames" => Array("type" => "array", "required" => true, "x-title" => "Past/Other Names", "description" => "Other names for organisation",
+            "items" => Array("type" => "string")),
+        "foiBodies" => Array("type" => "array", "required" => true, "x-title" => "FOI Bodies","x-itemprop"=>"members",  "description" => "Organisational units within this agency that are subject to FOI Act but are not autonomous",
+            "items" => Array("type" => "string")),
+        "orgType" => Array("type" => "string", "required" => true, "x-title" => "Organisation Type", "description" => "Org type based on legal formation via FMA/CAC legislation etc."),
+        "parentOrg" => Array("type" => "string", "required" => true, "x-title" => "Parent Organisation", "description" => "Parent organisation, usually a department of state"),
+        "website" => Array("type" => "string", "required" => true, "x-title" => "Website", "x-itemprop" => "url", "description" => "Website URL"),
+        "abn" => Array("type" => "string", "required" => true, "x-title" => "Australian Business Number", "description" => "ABN from business register"),
+        "contractListURL" => Array("type" => "string", "required" => true, "x-title" => "Contract Listing", "description" => "Departmental and agency contracts, <a href='http://www.aph.gov.au/senate/pubs/standing_orders/d05.htm'>mandated by the Senate</a>"),
+        "grantsReportingURL" => Array("type" => "string", "required" => true, "x-title" => "Grants Awarded",
+            "description" => "Departmental and agency grants <a href='http://www.aph.gov.au/senate/pubs/standing_orders/d05.htm'>mandated by the Senate</a> and <a href='http://www.finance.gov.au/publications/fmg-series/23-commonwealth-grant-guidelines.html'>Commonwealth grants guidelines</a> "),
+        "annualReportURL" => Array("type" => "string", "required" => true, "x-title" => "Annual Report(s)", "description" => ""),
+        "consultanciesURL" => Array("type" => "string", "required" => true, "x-title" => "Consultants Hired", "description" => ""),
+        "legalExpenditureURL" => Array("type" => "string", "required" => true, "x-title" => "Legal Services Expenditure", "description" => "Legal Services Expenditure mandated by Legal Services Directions 2005"),
+        "recordsListURL" => Array("type" => "string", "required" => true, "x-title" => "Files/Records Held", "description" => "Indexed lists of departmental and agency files, <a href='http://www.aph.gov.au/senate/pubs/standing_orders/d05.htm'>mandated by the Senate</a>"),
+        "FOIDocumentsURL" => Array("type" => "string", "required" => true, "x-title" => "FOI Documents Released", "description" => ""),
+        "infoPublicationSchemeURL" => Array("type" => "string", "required" => true, "x-title" => "Information Publication Scheme", "description" => ""),
+        "appointmentsURL" => Array("type" => "string", "required" => true, "x-title" => "Agency Appointments/Boards", "description" => "Departmental and agency appointments and vacancies , <a href='http://www.aph.gov.au/senate/pubs/standing_orders/d05.htm'>mandated by the Senate</a>"),
+        "advertisingURL" => Array("type" => "string", "required" => true, "x-title" => "Approved Advertising Campaigns", "description" => " Agency advertising and public information projects, <a href='http://www.aph.gov.au/senate/pubs/standing_orders/d05.htm'>mandated by the Senate</a> "),
+        "hasRSS" => Array("type" => "string", "required" => true, "x-title" => "Has RSS", "description" => ""),
+        "hasMailingList" => Array("type" => "string", "required" => true, "x-title" => "Has Mailing List", "description" => ""),
+        "hasTwitter" => Array("type" => "string", "required" => true, "x-title" => "Has Twitter", "description" => ""),
+        "hasFacebook" => Array("type" => "string", "required" => true, "x-title" => "Has Facebook", "description" => ""),
+        "hasYouTube" => Array("type" => "string", "required" => true, "x-title" => "Has YouTube", "description" => ""),
+        "hasFlickr" => Array("type" => "string", "required" => true, "x-title" => "Has Flickr", "description" => ""),
+        "hasCCBY" => Array("type" => "string", "required" => true, "x-title" => "Has CC-BY", "description" => "Has any page licenced Creative Commons - Attribution"),
+    ),
+        /* "org":{"type":"object",
+          "properties":{
+          "organizationName":{"type":"string"},
+          "organizationUnit":{"type":"string"}},
+          }
+          } */
+);
+?>
+

--- /dev/null
+++ b/schemas/schemas.inc.php
@@ -1,1 +1,5 @@
+<?php
+$schemas = Array();
+include("agency.json.php")
+?>
 

file:b/score.php (new)
--- /dev/null
+++ b/score.php
@@ -1,1 +1,19 @@
+<?php
 
+include_once('include/common.inc.php');
+include_header();
+
+$db = $server->get_db('disclosr-agencies');
+
+try {
+    $rows = $db->get_view("score", "score", null, true)->rows;
+    //print_r($rows);
+    foreach ($rows as $row) {
+        echo '<a href="getAgency.php?id='.$row->value->id.'">'.$row->value->name." ".$row->value->score."</a><br>";
+    }
+} catch (SetteeRestClientException $e) {
+    setteErrorHandler($e);
+}
+
+include_footer();
+?>

file:a/scrape.py (deleted)
--- a/scrape.py
+++ /dev/null
@@ -1,64 +1,1 @@
-#http://packages.python.org/CouchDB/client.html
-import couchdb
-import urllib2
-from BeautifulSoup import BeautifulSoup
-import re
 
-couch = couchdb.Server() # Assuming localhost:5984
-# If your CouchDB server is running elsewhere, set it up like this:
-# couch = couchdb.Server('http://example.com:5984/')
-
-# select database
-agencydb = couch['disclosr-agencies']
-
-for row in agencydb.view('app/getScrapeRequired'): #not recently scraped agencies view?
-    agency = agencydb.get(row.id)
-    print agency['agencyName']
-
-#http://diveintopython.org/http_web_services/etags.html
-class NotModifiedHandler(urllib2.BaseHandler):  
-    def http_error_304(self, req, fp, code, message, headers):
-        addinfourl = urllib2.addinfourl(fp, headers, req.get_full_url())
-        addinfourl.code = code
-        return addinfourl
-
-def scrapeAndStore(URL, depth, agency):
-    URL = "http://www.hole.fi/jajvirta/weblog/"
-    req = urllib2.Request(URL)
-    
-    #if there is a previous version sotred in couchdb, load caching helper tags
-    if etag:
-        req.add_header("If-None-Match", etag)
-    if last_modified:
-        req.add_header("If-Modified-Since", last_modified)
-     
-    opener = urllib2.build_opener(NotModifiedHandler())
-    url_handle = opener.open(req)
-    headers = url_handle.info() # the addinfourls have the .info() too
-    etag = headers.getheader("ETag")
-    last_modified = headers.getheader("Last-Modified") 
-    web_server = headers.getheader("Server") 
-    file_size = headers.getheader("Content-Length") 
-    mime_type = headers.getheader("Content-Type") 
-     
-    if hasattr(url_handle, 'code') and url_handle.code == 304:
-        print "the web page has not been modified"
-    else:
-        print "error %s in downloading %s", url_handle.code, URL
-        #record/alert error to error database
-    
-    #do scraping
-    html = ?
-    # http://www.crummy.com/software/BeautifulSoup/documentation.html
-    soup = BeautifulSoup(html)
-links = soup.findAll('a') # soup.findAll('a', id=re.compile("^p-"))
-for link in links:
-    print link['href']
-    #for each unique link
-    #if html mimetype
-    # go down X levels,
-    # diff with last stored attachment, store in document
-    #if not
-    #   remember to save parentURL and title (link text that lead to document)
-    
-    #store as attachment epoch-filename

--- a/stylesheets/app.css
+++ b/stylesheets/app.css
@@ -1,31 +1,72 @@
 /* Foundation v2.1.4 http://foundation.zurb.com */
 /* Artfully masterminded by ZURB  */
 
-/* -------------------------------------------------- 
-   Table of Contents
------------------------------------------------------
-:: Shared Styles
-:: Page Name 1
-:: Page Name 2
-*/
+/* ZURB bar copy*/
+#navbar {
+  background: #222222;
+  border-bottom: solid 4px #00a5ff;
+  padding: 15px 20px 13px 20px; }
+  
+@media handheld, only screen and (max-width: 767px) {
+  #navbar {
+    padding-left: 20px;
+    padding-right: 20px; }
+}
+
+#navbar h1, #navbar h2 {
+  margin-bottom: 0;
+  line-height: 1; }
+#navbar h1 {
+  color: white;
+  font-size: 16px;
+  font-size: 1.6rem;
+  font-weight: 800; }
+#navbar a { color: #fff; font-weight: bold; }
+
+#navbar strong { display: block; margin: 0; padding: 0; height: 14px; line-height: 14px; position: relative; bottom: 4px; }
+#navbar strong a {
+  line-height: 14px;
+  color: #fff;
+  font-weight: 500;
+  padding-right: 12px;
+}
+#navbar strong a.button { padding: 4px 10px; font-weight: bold; }
+
+/* other zurb copied css */
+.row { max-width: 1200px; }
+
+div.foundation-header { margin: 0 0 40px 0; padding: 30px 0 0 0; border-bottom: solid 1px #ccc; }
+div.foundation-header h1 { margin-bottom: 0; padding: 0; }
+div.foundation-header h1 a { color: #181818; }
+div.foundation-header h1 a:hover { color: #181818; }
+div.foundation-header .subheader { margin-bottom: 9px; }
+
+div.highlight { margin-bottom: 12px; }
+
+img.beta { position: absolute; top: 0px; right: 0px; }
+
+/* Footer */
+footer.row {
+  margin-top: 80px;
+  border-top: solid 1px #e6e6e6;
+  padding-top: 20px; }
+footer.row h6 {
+  color: #6f6f6f;
+  font-size: 14px;
+  font-size: 1.4rem;
+  margin-bottom: 4px; }
+footer.row p {
+  color: #626262;
+  font-size: 12px;
+  font-size: 1.2rem;
+  line-height: 18px; }
+footer.row a {
+  color: #222222; }
+footer.row a:hover {
+  text-decoration: underline; }
+  
 
 
-/* -----------------------------------------
-   Shared Styles
------------------------------------------ */
+.row.display { background: #f4f4f4; margin-bottom: 10px; border-radius: 3px; -webkit-border-radius: 3px; -moz-border-radius: 3px; }
+.row.display .column, .row.display .columns { background: #e7e7e7; font-size: 11px; text-indent: 3px; padding-top: 6px; padding-bottom: 6px; border-radius: 3px; -webkit-border-radius: 3px; -moz-border-radius: 3px; }
 
-
-
-/* -----------------------------------------
-   Page Name 1
------------------------------------------ */
-
-
-
-
-/* -----------------------------------------
-   Page Name 2
------------------------------------------ */
-
-
-

--- /dev/null
+++ b/unimplemented/foundation.html
@@ -1,1 +1,137 @@
+<!DOCTYPE html>
 
+<!-- paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ -->
+<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]-->
+<!--[if IE 7]>    <html class="no-js lt-ie9 lt-ie8" lang="en"> <![endif]-->
+<!--[if IE 8]>    <html class="no-js lt-ie9" lang="en"> <![endif]-->
+<!--[if gt IE 8]><!--> <html lang="en"> <!--<![endif]-->
+<head>
+	<meta charset="utf-8" />
+
+	<!-- Set the viewport width to device width for mobile -->
+	<meta name="viewport" content="width=device-width" />
+
+	<title>Welcome to Foundation</title>
+  
+	<!-- Included CSS Files -->
+	<link rel="stylesheet" href="stylesheets/foundation.css">
+	<link rel="stylesheet" href="stylesheets/app.css">
+
+	<!--[if lt IE 9]>
+		<link rel="stylesheet" href="stylesheets/ie.css">
+	<![endif]-->
+
+
+	<!-- IE Fix for HTML5 Tags -->
+	<!--[if lt IE 9]>
+		<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
+	<![endif]-->
+
+</head>
+<body>
+
+	<!-- container -->
+	<div class="container">
+
+		<div class="row">
+			<div class="twelve columns">
+				<h2>Welcome to Foundation</h2>
+				<p>This is version 2.1.4 released on December 19, 2011</p>
+				<hr />
+			</div>
+		</div>
+
+		<div class="row">
+			<div class="eight columns">
+				<h3>The Grid</h3>
+
+				<!-- Grid Example -->
+				<div class="row">
+					<div class="twelve columns">
+						<div class="panel">
+							<p>This is a twelve column section in a row. Each of these includes a div.panel element so you can see where the columns are - it's not required at all for the grid.</p>
+						</div>
+					</div>
+				</div>
+				<div class="row">
+					<div class="six columns">
+						<div class="panel">
+							<p>Six columns</p>
+						</div>
+					</div>
+					<div class="six columns">
+						<div class="panel">
+							<p>Six columns</p>
+						</div>
+					</div>
+				</div>
+				<div class="row">
+					<div class="four columns">
+						<div class="panel">
+							<p>Four columns</p>
+						</div>
+					</div>
+					<div class="four columns">
+						<div class="panel">
+							<p>Four columns</p>
+						</div>
+					</div>
+					<div class="four columns">
+						<div class="panel">
+							<p>Four columns</p>
+						</div>
+					</div>
+				</div>
+
+				<h3>Tabs</h3>
+				<dl class="tabs">
+					<dd><a href="#simple1" class="active">Simple Tab 1</a></dd>
+					<dd><a href="#simple2">Simple Tab 2</a></dd>
+					<dd><a href="#simple3">Simple Tab 3</a></dd>
+				</dl>
+
+				<ul class="tabs-content">
+					<li class="active" id="simple1Tab">This is simple tab 1's content. Pretty neat, huh?</li>
+					<li id="simple2Tab">This is simple tab 2's content. Now you see it!</li>
+					<li id="simple3Tab">This is simple tab 3's content. It's, you know...okay.</li>
+				</ul>
+
+				<h3>Buttons</h3>
+
+				<p><a href="#" class="small blue button">Small Blue Button</a></p>
+				<p><a href="#" class="blue button">Medium Blue Button</a></p>
+				<p><a href="#" class="large blue button">Large Blue Button</a></p>
+
+				<p><a href="#" class="nice radius small blue button">Nice Blue Button</a></p>
+				<p><a href="#" class="nice radius blue button">Nice Blue Button</a></p>
+				<p><a href="#" class="nice radius large blue button">Nice Blue Button</a></p>
+
+			</div>
+
+			<div class="four columns">			
+				<h4>Getting Started</h4>
+				<p>We're stoked you want to try Foundation! To get going, this file (index.html) includes some basic styles you can modify, play around with, or totally destroy to get going.</p>
+
+				<h4>Other Resources</h4>
+				<p>Once you've exhausted the fun in this document, you should check out:</p>
+				<ul class="disc">
+					<li><a href="http://foundation.zurb.com/docs">Foundation Documentation</a><br />Everything you need to know about using the framework.</li>
+					<li><a href="http://github.com/zurb/foundation">Foundation on Github</a><br />Latest code, issue reports, feature requests and more.</li>
+					<li><a href="http://twitter.com/foundationzurb">@foundationzurb</a><br />Ping us on Twitter if you have questions. If you build something with this we'd love to see it (and send you a totally boss sticker).</li>
+				</ul>
+			</div>
+		</div>
+
+	</div>
+	<!-- container -->
+
+
+
+
+	<!-- Included JS Files -->
+	<script src="javascripts/foundation.js"></script>
+	<script src="javascripts/app.js"></script>
+
+</body>
+</html>
+

--- /dev/null
+++ b/unimplemented/humans.txt
@@ -1,1 +1,8 @@
+/* Foundation was made by ZURB, an interaction design and design strategy firm in Campbell, CA */
+/* zurb.com */
+/* humanstxt.org */
 
+/* SITE */
+  Standards: HTML5, CSS3
+  Components: jQuery, Orbit, Reveal
+  Software: Coda, Textmate, Git

--- /dev/null
+++ b/unimplemented/lastUpdated.php
@@ -1,1 +1,2 @@
+for each agency, record when last changed (number of days too) and show a couple of URLs that were in that change
 

--- /dev/null
+++ b/unimplemented/scrape.py
@@ -1,1 +1,64 @@
+#http://packages.python.org/CouchDB/client.html
+import couchdb
+import urllib2
+from BeautifulSoup import BeautifulSoup
+import re
 
+couch = couchdb.Server() # Assuming localhost:5984
+# If your CouchDB server is running elsewhere, set it up like this:
+# couch = couchdb.Server('http://example.com:5984/')
+
+# select database
+agencydb = couch['disclosr-agencies']
+
+for row in agencydb.view('app/getScrapeRequired'): #not recently scraped agencies view?
+    agency = agencydb.get(row.id)
+    print agency['agencyName']
+
+#http://diveintopython.org/http_web_services/etags.html
+class NotModifiedHandler(urllib2.BaseHandler):  
+    def http_error_304(self, req, fp, code, message, headers):
+        addinfourl = urllib2.addinfourl(fp, headers, req.get_full_url())
+        addinfourl.code = code
+        return addinfourl
+
+def scrapeAndStore(URL, depth, agency):
+    URL = "http://www.hole.fi/jajvirta/weblog/"
+    req = urllib2.Request(URL)
+    
+    #if there is a previous version sotred in couchdb, load caching helper tags
+    if etag:
+        req.add_header("If-None-Match", etag)
+    if last_modified:
+        req.add_header("If-Modified-Since", last_modified)
+     
+    opener = urllib2.build_opener(NotModifiedHandler())
+    url_handle = opener.open(req)
+    headers = url_handle.info() # the addinfourls have the .info() too
+    etag = headers.getheader("ETag")
+    last_modified = headers.getheader("Last-Modified") 
+    web_server = headers.getheader("Server") 
+    file_size = headers.getheader("Content-Length") 
+    mime_type = headers.getheader("Content-Type") 
+     
+    if hasattr(url_handle, 'code') and url_handle.code == 304:
+        print "the web page has not been modified"
+    else:
+        print "error %s in downloading %s", url_handle.code, URL
+        #record/alert error to error database
+    
+    #do scraping
+    html = ?
+    # http://www.crummy.com/software/BeautifulSoup/documentation.html
+    soup = BeautifulSoup(html)
+links = soup.findAll('a') # soup.findAll('a', id=re.compile("^p-"))
+for link in links:
+    print link['href']
+    #for each unique link
+    #if html mimetype
+    # go down X levels,
+    # diff with last stored attachment, store in document
+    #if not
+    #   remember to save parentURL and title (link text that lead to document)
+    
+    #store as attachment epoch-filename

--- /dev/null
+++ b/unimplemented/validation.php

--- /dev/null
+++ b/unimplemented/webservers.php
@@ -1,1 +1,1 @@
-
+for each agency, find a scrapped document and read the webserver off it

file:a/validation.php (deleted)
--- a/validation.php
+++ /dev/null

file:a/webservers.php (deleted)
--- a/webservers.php
+++ /dev/null
@@ -1,1 +1,1 @@
-for each agency, find a scrapped document and read the webserver off it
+