Handle more http edge cases in scraper
Handle more http edge cases in scraper


Former-commit-id: 994d782d8883843a55bf2558f8e6a6c9ffbcebde

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

--- a/.gitmodules
+++ b/.gitmodules
@@ -1,4 +1,16 @@
-[submodule "sag"]
-	path = sag
-	url = git://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
+[submodule "javascripts/flot"]
+	path = javascripts/flot
+	url = https://github.com/paradoxxxzero/flot.git
 

file:b/about.php (new)
--- /dev/null
+++ b/about.php
@@ -1,1 +1,62 @@
+<?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.<br>
+
+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<br>
+
+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.<br>
+
+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.<br>
+
+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).<br>
+
+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.<br>
+
+<h2>Webpage Assessment</h2>
+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).<br>
+Some rules about leniency:<br>
+<ul>
+    <li>An empty FOI disclosure log counts, a page outlining what the FOI Act is does not.</li>
+    <li>A disclosure log in PDF or Word format counts :(</li>
+    <li>An empty File/Record list counts (although that's very minimalistic that you have no files, electronic or paper)</li>
+    <li>Only a current information publication scheme page counts, not a s.9 FOI Act page or an organisation chart.</li>
+    <li>If there isn't a page easily listing all current and past Annual Reports, the most current one (html, pdf) counts.</li>
+    <li>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. </li>
+
+<h2>Open Government Scoring</h2>
++1 point for every true Has... attribute<br>
+-1 point for every false Has... (ie. Has Not) attribute</br>
+
+Don't like this? Make your own score, suggest a better scoring mechanism.</br>
+
+<?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
 

--- /dev/null
+++ b/admin/exportAll.csv.php
@@ -1,1 +1,63 @@
+<?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');
+$headers = Array();
+  try {
+    $rows = $db->get_view("app", "fieldNames?group=true", null, true)->rows;
+
+    $dataValues = Array();
+    foreach ($rows as $row) {
+        $headers[] = $row->key;
+    }
+} catch (SetteeRestClientException $e) {
+    setteErrorHandler($e);
+}
+
+$fp = fopen('php://output', 'w');
+if ($fp && $db) {
+    header('Content-Type: text/csv; charset=utf-8');
+   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->status)) {
+                $row = Array();
+                $agencyArray = object_to_array($agency->value);
+                foreach ($headers as $fieldName) {
+                    if (isset($agencyArray[$fieldName])) {
+                        if (is_array($agencyArray[$fieldName])) {
+                            $row[] = implode(";",$agencyArray[$fieldName]);
+                        } else {
+                        $row[] = $agencyArray[$fieldName];
+                        }
+                    } else {
+                        $row[] = "";
+                    }
+                }
+
+                fputcsv($fp, array_values($row));
+
+               
+            }
+        }
+    } catch (SetteeRestClientException $e) {
+        setteErrorHandler($e);
+    }
+
+    die;
+}
+?>
+

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,107 @@
+<?php
 
+include_once("../include/common.inc.php");
+
+function shortName($name) {
+    $name = trim($name);
+    if (strstr($name,"Minister ") || strstr($name,"Treasurer") || strstr($name,"Parliamentary Secretary")) {
+        $badWords = Array ("Assisting the Prime Minister on","Assisting on"," the "," of "," for "," on "," and "," to ",","," ","'","`");
+        return str_replace($badWords,"",$name);
+    }
+            
+    else {
+    $out = Array();
+    preg_match_all('/[A-Z]/', $name, $out);
+    return implode("", $out[0]);
+    }
+}
+
+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);
+    die();
+}
+
+$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);
+    die();
+}
+
+$fp = fopen('php://output', 'w');
+if ($fp && $db) {
+    header('Content-Type: text/csv; charset=utf-8');
+    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 {
+                    $row["short_name"] = shortName($agency->value->name);
+                }
+                $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'] = iconv("UTF-8", "ASCII//TRANSLIT",$foiBody);
+                        $row["short_name"] = shortName($foiBody);
+                        fputcsv($fp, array_values($row));
+                    }
+                }
+            }
+        }
+    } catch (SetteeRestClientException $e) {
+        setteErrorHandler($e);
+    }
+
+    die;
+}
+?>
+

--- /dev/null
+++ b/alaveteli/exportCategories.rb.php
@@ -1,1 +1,24 @@
+<?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 '])';
+?>
+

file:b/charts.php (new)
--- /dev/null
+++ b/charts.php
@@ -1,1 +1,102 @@
+<?php
+include_once('include/common.inc.php');
+include_header();
+$db = $server->get_db('disclosr-agencies');
+ 
 
+?>
+<div class="foundation-header">
+    <h1><a href="about.php">Charts</a></h1>
+    <h4 class="subheader">Lorem ipsum.</h4>
+</div>
+<div id="placeholder" style="width:900px;height:600px;"></div>
+<script id="source">
+window.onload = function() {
+            $(document).ready(function() {
+    var d1 = [];
+    var labels = [];
+    <?php
+    try {
+    $rows = $db->get_view("app", "scoreHas?group=true", null, true)->rows;
+
+    /*foreach ($rows as $key => $row) {
+        echo "       d1.push([$key, {$row->value}]);".PHP_EOL;
+        echo "        labels.push('{$row->key}');".PHP_EOL;
+    }*/
+    $dataValues = Array();
+    foreach ($rows as $row) {
+        $dataValues[$row->value] = $row->key;
+    }
+    $i = 0;
+    ksort($dataValues);
+    foreach($dataValues as $value => $key) {
+        
+        echo "       d1.push([$i, $value]);".PHP_EOL;
+        echo "        labels.push('$key');".PHP_EOL;
+        $i++;
+    }
+} catch (SetteeRestClientException $e) {
+    setteErrorHandler($e);
+}
+?>
+    
+        $.plot($("#placeholder"), [ d1], {
+             grid: { hoverable: true },
+             
+            series: {
+                bars: { show: true, barWidth: 0.6 }
+            },
+            xaxis: {
+                 tickFormatter: function formatter(val, axis) {
+                     if (labels[val]) {
+                         return(labels[val]);
+                     
+                 } else {
+                     return "";
+                 }
+           
+        },
+                labelAngle: 90
+            }
+        });
+    
+var previousPoint = null;
+$("#placeholder").bind("plothover", function (event, pos, item) {
+    if (item) {
+        if (previousPoint != item.datapoint) {
+            previousPoint = item.datapoint;
+
+            $("#tooltip").remove();
+            var x = item.datapoint[0],
+                y = item.datapoint[1] - item.datapoint[2];
+
+            showTooltip(item.pageX, item.pageY, y );
+        }
+    }
+    else {
+        $("#tooltip").remove();
+        previousPoint = null;            
+    }
+});
+
+    
+    
+});
+};
+ function showTooltip(x, y, contents) {
+        $('<div id="tooltip">' + contents + '</div>').css( {
+            position: 'absolute',
+            display: 'none',
+            top: y + 5,
+            left: x + 5,
+            border: '1px solid #fdd',
+            padding: '2px',
+            'background-color': '#fee',
+            opacity: 0.80
+        }).appendTo("body").fadeIn(200);
+    }
+</script>
+
+<?php
+include_footer();
+?>

--- /dev/null
+++ b/couchdb/SetteeDatabase.class.php
@@ -1,1 +1,306 @@
-
+<?php
+
+/**
+* Databaase class.
+*/
+class SetteeDatabase {
+
+  /**
+  * Base URL of the CouchDB REST API
+  */
+  private $conn_url;
+  
+  /**
+  * HTTP REST Client instance
+  */
+  protected $rest_client;
+  
+  /**
+  * Name of the database
+  */
+  private $dbname;
+  
+  /**
+  * Default constructor
+  */ 
+  function __construct($conn_url, $dbname) {
+    $this->conn_url = $conn_url;
+    $this->dbname = $dbname;
+    $this->rest_client = SetteeRestClient::get_instance($this->conn_url);
+  }
+
+
+  /**
+  * Get UUID from CouchDB
+  *
+  * @return
+  *     CouchDB-generated UUID string
+  *
+  */
+  function gen_uuid() {
+    $ret = $this->rest_client->http_get('_uuids');
+    return $ret['decoded']->uuids[0]; // should never be empty at this point, so no checking
+  }
+
+ /**
+  * Create or update a document database
+  *
+  * @param $document
+  *     PHP object, a PHP associative array, or a JSON String representing the document to be saved. PHP Objects and arrays are JSON-encoded automatically.
+  *
+  * <p>If $document has a an "_id" property set, it will be used as document's unique id (even for "create" operation).
+  * If "_id" is missing, CouchDB will be used to generate a UUID.
+  *
+  * <p>If $document has a "_rev" property (revision), document will be updated, rather than creating a new document.
+  * You have to provide "_rev" if you want to update an existing document, otherwise operation will be assumed to be
+  * one of creation and you will get a duplicate document exception from CouchDB. Also, you may not provide "_rev" but
+  * not provide "_id" since that is an invalid input.
+  *
+  * @param $allowRevAutoDetection
+  *   Default: false. When true and _rev is missing from the document, save() function will auto-detect latest revision
+  * for a document and use it. This option is "false" by default because it involves an extra http HEAD request and
+  * therefore can make save() operation slightly slower if such auto-detection is not required.
+  *
+  * @return
+  *     document object with the database id (uuid) and revision attached;
+  *
+  *  @throws SetteeCreateDatabaseException
+  */
+  function save($document, $allowRevAutoDetection = false) {
+    if (is_string($document)) {
+      $document = json_decode($document);
+    }
+
+    // Allow passing of $document as an array (for syntactic simplicity and also because in JSON world it does not matter) 
+    if(is_array($document)) {
+      $document = (object) $document;
+    }
+
+    if (empty($document->_id) && empty($document->_rev)) {
+      $id = $this->gen_uuid();
+    }
+    elseif (empty($document->_id) && !empty($document->_rev)) {
+      throw new SetteeWrongInputException("Error: You can not save a document with a revision provided, but missing id");
+    }
+    else {
+      $id = $document->_id;
+
+      if ($allowRevAutoDetection) {
+        try {
+          $rev = $this->get_rev($id);
+        } catch (SetteeRestClientException $e) {
+          // auto-detection may fail legitimately, if a document has never been saved before (new doc), so skipping error
+        }
+        if (!empty($rev)) {
+          $document->_rev = $rev;
+        }
+      }
+    }
+    
+    $full_uri = $this->dbname . "/" . $this->safe_urlencode($id);
+    $document_json = json_encode($document, JSON_NUMERIC_CHECK);
+    
+    $ret = $this->rest_client->http_put($full_uri, $document_json);
+
+    $document->_id = $ret['decoded']->id;
+    $document->_rev = $ret['decoded']->rev;
+
+    return $document;
+  }
+
+  /**
+   * @param  $doc
+   * @param  $name
+   * @param  $content
+   *    Content of the attachment in a string-buffer format. This function will automatically base64-encode content for
+   *    you, so you don't have to do it.
+   * @param  $mime_type
+   *    Optional. Will be auto-detected if not provided
+   * @return void
+   */
+  public function add_attachment($doc, $name, $content, $mime_type = null) {
+    if (empty($doc->_attachments) || !is_object($doc->_attachments)) {
+      $doc->_attachments = new stdClass();
+    }
+
+    if (empty($mime_type)) {
+      $mime_type = $this->rest_client->content_mime_type($content);
+    }
+
+    $doc->_attachments->$name = new stdClass();
+    $doc->_attachments->$name->content_type = $mime_type;
+    $doc->_attachments->$name->data = base64_encode($content);
+  }  
+
+  /**
+   * @param  $doc
+   * @param  $name
+   * @param  $file
+   *    Full path to a file (e.g. as returned by PHP's realpath function).
+   * @param  $mime_type
+   *    Optional. Will be auto-detected if not provided
+   * @return void
+   */
+  public function add_attachment_file($doc, $name, $file, $mime_type = null) {
+    $content = file_get_contents($file);
+    $this->add_attachment($doc, $name, $content, $mime_type);
+  }
+
+  /**
+   *
+   * Retrieve a document from CouchDB
+   *
+   * @throws SetteeWrongInputException
+   * 
+   * @param  $id
+   *    Unique ID (usually: UUID) of the document to be retrieved.
+   * @return
+   *    database document in PHP object format.
+   */
+  function get($id) {
+    if (empty($id)) {
+      throw new SetteeWrongInputException("Error: Can't retrieve a document without a uuid.");
+    }
+
+    $full_uri = $this->dbname . "/" . $this->safe_urlencode($id);
+$full_uri = str_replace("%3Frev%3D","?rev=",$full_uri);
+    $ret = $this->rest_client->http_get($full_uri);
+    return $ret['decoded'];
+  }
+
+    /**
+   *
+   * Get the latest revision of a document with document id: $id in CouchDB.
+   *
+   * @throws SetteeWrongInputException
+   *
+   * @param  $id
+   *    Unique ID (usually: UUID) of the document to be retrieved.
+   * @return
+   *    database document in PHP object format.
+   */
+  function get_rev($id) {
+    if (empty($id)) {
+      throw new SetteeWrongInputException("Error: Can't query a document without a uuid.");
+    }
+
+    $full_uri = $this->dbname . "/" . $this->safe_urlencode($id);
+    $headers = $this->rest_client->http_head($full_uri);
+	if (empty($headers['Etag'])) {
+	  throw new SetteeRestClientException("Error: could not retrieve revision. Server unexpectedly returned empty Etag");
+	}
+    $etag = str_replace('"', '', $headers['Etag']);
+    return $etag;
+  }
+  
+  /**
+  * Delete a document
+  *
+  * @param $document
+  *    a PHP object or JSON representation of the document that has _id and _rev fields.
+  *
+  * @return void 
+  */  
+  function delete($document) {
+    if (!is_object($document)) {
+      $document = json_decode($document);
+    }
+
+    $full_uri = $this->dbname . "/" . $this->safe_urlencode($document->_id) . "?rev=" . $document->_rev;
+    $this->rest_client->http_delete($full_uri);
+  }
+
+  
+  /*-----------------  View-related functions --------------*/
+
+  /**
+   * Create a new view or update an existing one.
+   *
+   * @param  $design_doc
+   * @param  $view_name
+   * @param  $map_src
+   *    Source code of the map function in Javascript
+   * @param  $reduce_src
+   *    Source code of the reduce function  in Javascript (optional)
+   * @return void
+   */
+  function save_view($design_doc, $view_name, $map_src, $reduce_src = null) {
+    $obj = new stdClass();
+    $obj->_id = "_design/" . urlencode($design_doc);
+    $view_name = urlencode($view_name);
+    $obj->views->$view_name->map = $map_src;
+    if (!empty($reduce_src)) {
+      $obj->views->$view_name->reduce = $reduce_src;
+    }
+
+    // allow safe updates (even if slightly slower due to extra: rev-detection check).
+    return $this->save($obj, true);
+  }
+
+  /**
+   * Create a new view or update an existing one.
+   *
+   * @param  $design_doc
+   * @param  $view_name
+   * @param  $key
+   *    key parameter to a view. Can be a single value or an array (for a range). If passed an array, function assumes
+   *    that first element is startkey, second: endkey.
+   * @param  $descending
+   *    return results in descending order. Please don't forget that if you are using a startkey/endkey, when you change
+   *  order you also need to swap startkey and endkey values!
+   * 
+   * @return void
+   */
+  function get_view($design_doc, $view_name, $key = null, $descending = false) {
+    $id = "_design/" . urlencode($design_doc);
+    $view_name = urlencode($view_name);
+    $id .= "/_view/$view_name";
+
+    $data = array();
+    if (!empty($key)) {
+      if (is_string($key)) {
+        $data = "key=" . '"' . $key . '"';
+      }
+      elseif (is_array($key)) {
+        list($startkey, $endkey) = $key;
+        $data = "startkey=" . '"' . $startkey . '"&' . "endkey=" . '"' . $endkey . '"';
+      }
+
+      if ($descending) {
+        $data .= "&descending=true";
+      }
+    }
+
+
+
+    if (empty($id)) {
+      throw new SetteeWrongInputException("Error: Can't retrieve a document without a uuid.");
+    }
+
+    $full_uri = $this->dbname . "/" . $this->safe_urlencode($id);
+$full_uri = str_replace("%253Fgroup%253Dtrue","?group=true",$full_uri);
+    $ret = $this->rest_client->http_get($full_uri, $data);
+    return $ret['decoded'];
+    
+  }
+
+  /**
+   * @param  $id
+   * @return
+   *    return a properly url-encoded id.
+   */
+  private function safe_urlencode($id) {
+    //-- System views like _design can have "/" in their URLs.
+    $id = rawurlencode($id);
+    if (substr($id, 0, 1) == '_') {
+      $id = str_replace('%2F', '/', $id);
+    }
+    return $id;
+  }
+  
+  /** Getter for a database name */
+  function get_name() {
+    return $this->dbname;
+  }
+
+}

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

--- a/getAgency.php
+++ b/getAgency.php
@@ -1,57 +1,192 @@
 <?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 {
+                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") {
+               
+                    $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 = "edit";
+    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();
+?>
+
+

 Binary files /dev/null and b/images/misc/button-gloss.png differ
 Binary files /dev/null and b/images/misc/button-overlay.png differ
 Binary files /dev/null and b/images/misc/custom-form-sprites.png differ
 Binary files /dev/null and b/images/misc/input-bg.png differ
 Binary files /dev/null and b/images/misc/modal-gloss.png differ
 Binary files /dev/null and b/images/misc/table-sorter.png differ
 Binary files /dev/null and b/images/orbit/bullets.jpg differ
 Binary files /dev/null and b/images/orbit/left-arrow.png differ
 Binary files /dev/null and b/images/orbit/loading.gif differ
 Binary files /dev/null and b/images/orbit/mask-black.png differ
 Binary files /dev/null and b/images/orbit/pause-black.png differ
 Binary files /dev/null and b/images/orbit/right-arrow.png differ
 Binary files /dev/null and b/images/orbit/rotator-black.png differ
 Binary files /dev/null and b/images/orbit/timer-black.png differ
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,64 @@
+<?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,135 @@
+<?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) { 
+        if (typeof(doc["status"]) == "undefined" || doc["status"] != "suspended") {
+        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) {   
+
+var lastScrape = Date.parse(doc.metadata.lastScraped);
+
+var today = new Date();
+
+if (!lastScrape || lastScrape.getTime() + 1000 != today.getTime()) {
+ emit(doc._id, 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->scoreHas->map = 'if(!String.prototype.startsWith){
+    String.prototype.startsWith = function (str) {
+        return !this.indexOf(str);
+    }
+}
+if(!String.prototype.endsWith){
+	String.prototype.endsWith = function(suffix) {
+	    return this.indexOf(suffix, this.length - suffix.length) !== -1;
+	};
+}
+function(doc) {
+if (typeof(doc["status"]) == "undefined" || doc["status"] != "suspended") {
+for(var propName in doc) {
+      if(typeof(doc[propName]) != "undefined" && (propName.startsWith("has") || propName.endsWith("URL"))) {
+  	emit(propName, 1);
+	}
+}
+  emit("total", 1);
+  }
+}';
+        $obj->views->scoreHas->map = 'if(!String.prototype.startsWith){
+    String.prototype.startsWith = function (str) {
+        return !this.indexOf(str);
+    }
+}
+if(!String.prototype.endsWith){
+	String.prototype.endsWith = function(suffix) {
+	    return this.indexOf(suffix, this.length - suffix.length) !== -1;
+	};
+}
+function(doc) {
+if (typeof(doc["status"]) == "undefined" || doc["status"] != "suspended") {
+for(var propName in doc) {
+      if(typeof(doc[propName]) != "undefined" && (propName.startsWith("has") || propName.endsWith("URL"))) {
+  	emit(propName, 1);
+	}
+}
+  emit("total", 1);
+  }
+}';
+    $obj->views->scoreHas->reduce = 'function (key, values, rereduce) {
+    return sum(values);
+}';
+        $obj->views->fieldNames->map = '
+function(doc) {
+for(var propName in doc) {
+     	emit(propName, doc._id);
+	}
+  
+}';
+    $obj->views->fieldNames->reduce = 'function (key, values, rereduce) {
+    return values.length;
+}';
+    // 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,79 @@
+<?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>
+            
+    <!--<script language="javascript" type="text/javascript" src="javascripts/jquery.js"></script>-->
+    <script language="javascript" type="text/javascript" src="javascripts/flot/jquery.flot.js"></script>
+
+        </body>
+    </html>
+
+<?php }

--- /dev/null
+++ b/javascripts/app.js
@@ -1,1 +1,95 @@
+/* Foundation v2.1.4 http://foundation.zurb.com */
+$(document).ready(function () {
 
+	/* Use this js doc for all application specific JS */
+
+	/* TABS --------------------------------- */
+	/* Remove if you don't need :) */
+
+	function activateTab($tab) {
+		var $activeTab = $tab.closest('dl').find('a.active'),
+				contentLocation = $tab.attr("href") + 'Tab';
+
+		//Make Tab Active
+		$activeTab.removeClass('active');
+		$tab.addClass('active');
+
+    	//Show Tab Content
+		$(contentLocation).closest('.tabs-content').children('li').hide();
+		$(contentLocation).show();
+	}
+
+	$('dl.tabs').each(function () {
+		//Get all tabs
+		var tabs = $(this).children('dd').children('a');
+		tabs.click(function (e) {
+			activateTab($(this));
+		});
+	});
+
+	if (window.location.hash) {
+		activateTab($('a[href="' + window.location.hash + '"]'));
+	}
+
+	/* ALERT BOXES ------------ */
+	$(".alert-box").delegate("a.close", "click", function(event) {
+    event.preventDefault();
+	  $(this).closest(".alert-box").fadeOut(function(event){
+	    $(this).remove();
+	  });
+	});
+
+
+	/* PLACEHOLDER FOR FORMS ------------- */
+	/* Remove this and jquery.placeholder.min.js if you don't need :) */
+
+	//$('input, textarea').placeholder();
+
+
+
+	/* UNCOMMENT THE LINE YOU WANT BELOW IF YOU WANT IE6/7/8 SUPPORT AND ARE USING .block-grids */
+//	$('.block-grid.two-up>li:nth-child(2n+1)').css({clear: 'left'});
+//	$('.block-grid.three-up>li:nth-child(3n+1)').css({clear: 'left'});
+//	$('.block-grid.four-up>li:nth-child(4n+1)').css({clear: 'left'});
+//	$('.block-grid.five-up>li:nth-child(5n+1)').css({clear: 'left'});
+
+
+
+	/* DROPDOWN NAV ------------- */
+
+	var currentFoundationDropdown = null;
+	$('.nav-bar li a, .nav-bar li a:after').each(function() {
+		$(this).data('clicks', 0);
+	});
+	$('.nav-bar li a, .nav-bar li a:after').live('click', function(e) {
+		e.preventDefault();
+		if (currentFoundationDropdown !== $(this).index() || currentFoundationDropdown === null) {
+			$(this).data('clicks', 0);
+			currentFoundationDropdown = $(this).index();
+		}
+		$(this).data('clicks', ($(this).data('clicks') + 1));
+		var f = $(this).siblings('.flyout');
+		if (!f.is(':visible') && $(this).parent('.has-flyout').length > 1) {
+			$('.nav-bar li .flyout').hide();
+			f.show();
+		} else if (($(this).data('clicks') > 1) || ($(this).parent('.has-flyout').length < 1)) {
+			window.location = $(this).attr('href');
+		}
+	});
+	$('.nav-bar').live('click', function(e) {
+		e.stopPropagation();
+		if ($(e.target).parents().is('.flyout') || $(e.target).is('.flyout')) {
+			e.preventDefault();
+		}
+	});
+	// $('body').bind('touchend', function(e) {
+	// 	if (!$(e.target).parents().is('.nav-bar') || !$(e.target).is('.nav-bar')) {
+	// 		$('.nav-bar li .flyout').is(':visible').hide();
+	// 	}
+	// });
+
+	/* DISABLED BUTTONS ------------- */
+	/* Gives elements with a class of 'disabled' a return: false; */
+
+});
+

directory:b/javascripts/flot (new)
--- /dev/null
+++ b/javascripts/flot

--- /dev/null
+++ b/javascripts/foundation.js
@@ -1,1 +1,14 @@
+/* Foundation v2.1.4 http://foundation.zurb.com */
+/*! jQuery v1.7.1 jquery.com | jquery.org/license */
+(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement){cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close()}d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1){for(h in a.converters){typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h])}}l=k,k=d[g];if(k==="*"){k=l}else{if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g){i in d&&(c[g[i]]=d[i])}while(f[0]==="*"){f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"))}if(h){for(i in e){if(e[i]&&e[i].test(h)){f.unshift(i);break}}}if(f[0] in d){j=f[0]}else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b)){f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)})}else{if(!c&&b!=null&&typeof b=="object"){for(var e in b){ca(a+"["+e+"]",b[e],c,d)}}else{d(a,b)}}}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c){c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d])}e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++){l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)))}(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++){h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border"){for(;g<h;g++){c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0}}return d+"px"}d=bz(a,b,b);if(d<0||d==null){d=a.style[b]||0}d=parseFloat(d)||0;if(c){for(;g<h;g++){d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0)}}return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio"){a.defaultChecked=a.checked}}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object"){b.outerHTML=a.outerHTML}else{if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option"){b.selected=a.defaultSelected}else{if(c==="input"||c==="textarea"){b.defaultValue=a.defaultValue}}}else{a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value)}}b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i){for(d=0,e=i[c].length;d<e;d++){f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}}}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement){while(b.length){c.createElement(b.pop())}}return c}function T(a,b,c){b=b||0;if(f.isFunction(b)){return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c})}if(b.nodeType){return f.grep(a,function(a,d){return a===b===c})}if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b)){return f.filter(b,d,!c)}b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return !a||!a.parentNode||a.parentNode.nodeType===11}function K(){return !0}function J(){return !1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b])){continue}if(b!=="toJSON"){return !1}}return !0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else{d=b}}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++){b[a[c]]=!0}return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a){return this}if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2]){return f.find(a)}this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return !d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a)){return f.ready(a)}a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++){if((a=arguments[j])!=null){for(c in a){d=i[c],f=a[c];if(i===f){continue}l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}}}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body){return setTimeout(e.ready,1)}e.isReady=!0;if(a!==!0&&--e.readyWait>0){return}A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete"){return setTimeout(e.ready,1)}if(c.addEventListener){c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1)}else{if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval" in a},isNumeric:function(a){return !isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a)){return !1}try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf")){return !1}}catch(c){return !1}var d;for(d in a){}return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a){return !1}return !0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b){return null}b=e.trim(b);if(a.JSON&&a.JSON.parse){return a.JSON.parse(b)}if(n.test(b.replace(o,"@").replace(p,"]").replace(q,""))){return(new Function("return "+b))()}e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a){if(c.apply(a[f],d)===!1){break}}}else{for(;g<h;){if(c.apply(a[g++],d)===!1){break}}}}else{if(i){for(f in a){if(c.call(a[f],f,a[f])===!1){break}}}else{for(;g<h;){if(c.call(a[g],g,a[g++])===!1){break}}}}return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H){return H.call(b,a,c)}d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++){if(c in b&&b[c]===a){return c}}}return -1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number"){for(var f=c.length;e<f;e++){a[d++]=c[e]}}else{while(c[e]!==b){a[d++]=c[e++]}}a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++){e=!!b(a[f],f),c!==e&&d.push(a[f])}return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k){for(;i<j;i++){f=c(a[i],i,d),f!=null&&(h[h.length]=f)}}else{for(g in a){f=c(a[g],g,d),f!=null&&(h[h.length]=f)}}return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a)){return b}var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c){e.access(a,j,c[j],f,g,d)}return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++){g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h)}return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++){g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)}},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++){if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++){for(var f=0;f<c.length;f++){if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique){break}}}}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++){if(a===c[b]){return !0}}}return !1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return !c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return !d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return !!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null){a=h}else{for(var b in h){a[b]=h[b]}}return a}},i=h.promise({}),j;for(j in g){i[j]=g[j].fire,i[j+"With"]=g[j].fireWith}i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++){b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g}g||j.resolveWith(j,b)}else{j!==a&&j.resolveWith(j,d?[a]:[])}return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e){return{}}g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent){for(o in {submit:1,change:1,focusin:1}){n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p}}k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div><table "+n+" cellpadding='0' cellspacing='0'><tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return !!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b){return}n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function"){e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c)}g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c]){return g.events}k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k]){return}if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++){delete d[b[e]]}if(!(c?m:f.isEmptyObject)(d)){return}}}if(!c){delete j[k].data;if(!m(j[k])){return}}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b){return b!==!0&&a.getAttribute("classid")===b}}return !0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++){g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]))}f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object"){return this.each(function(){f.data(this,a)})}d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b){return f.queue(this[0],a)}return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--){if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0)){h++,l.add(m)}}m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a)){return this.each(function(b){f(this).addClass(a.call(this,b,this.className))})}if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1){if(!e.className&&b.length===1){e.className=a}else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++){~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ")}e.className=f.trim(g)}}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a)){return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))})}if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className){if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++){h=h.replace(" "+c[i]+" "," ")}g.className=f.trim(h)}else{g.className=""}}}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a)){return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)})}return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++]){i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}}else{if(c==="undefined"||c==="boolean"){this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""}}})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++){if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1){return !0}}return !1},val:function(a){var c,d,e,g=this[0];if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set" in c)||c.set(this,h,"value")===b){this.value=h}}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get" in c&&(d=c.get(g,"value"))!==b){return d}d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return !b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0){return null}c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j){return b}h.push(b)}}if(j&&!h.length&&i.length){return f(i[g]).val()}return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn){return f(a)[c](d)}if(typeof a.getAttribute=="undefined"){return f.prop(a,c,d)}i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set" in h&&i&&(g=h.set(a,d,c))!==b){return g}a.setAttribute(c,""+d);return d}if(h&&"get" in h&&i&&(g=h.get(a,c))!==null){return g}g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++){e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode){f.error("type property can't be changed")}else{if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button")){return w.get(a,b)}return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button")){return w.set(a,b,c)}a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set" in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get" in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b)){return a.checked=f.inArray(f(a).val(),b)>=0}}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1){a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o){f.event.remove(a,j+b[h],c,d,!0)}continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++){s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s))}r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered)){return}h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h]){return}c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j){j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0)}return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1){return}r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode){r.push([m,s]),n=m}n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++){m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault()}c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++){r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r)}q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace)){c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando]){return a}var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;){e=i[--d],a[e]=g[e]}a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event)){return new f.Event(a,b)}a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d)){a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b}return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form")){return !1}f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form")){return !1}f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio"){f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))})}return !1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox"){return a.handleObj.handler.apply(this,arguments)}},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a){this.on(i,c,d,a[i],g)}return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1){e=J}else{if(!e){return this}}g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a){this.off(g,c,a[g])}return this}if(c===!1||typeof c=="function"){d=c,c=b}d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){return f.event.trigger(a,b,this[0],!0)}},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length){b[d++].guid=c}return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else{if(m.filter(b,[j]).length>0){k=j;break}}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9){return[]}if(!b||typeof b!="string"){return e}var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b)){if(w.length===2&&o.relative[w[0]]){j=y(w[0]+w[1],d,f)}else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length){b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}}}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length){q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}}else{k=w=[]}}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]"){if(!u){e.push.apply(e,k)}else{if(d&&d.nodeType===1){for(t=0;k[t]!=null;t++){k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t])}}else{for(t=0;k[t]!=null;t++){k[t]&&k[t].nodeType===1&&e.push(j[t])}}}}else{s(k,e)}l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h){for(var b=1;b<a.length;b++){a[b]===a[b-1]&&a.splice(b--,1)}}}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a){return[]}for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter){if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\"){continue}s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f){g=i=!0}else{if(f===!0){continue}}}if(f){for(n=0;(j=s[n])!=null;n++){j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0))}}if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g){return[]}break}}}if(a===q){if(g==null){m.error(a)}else{break}}q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string"){return a.textContent}if(typeof a.innerText=="string"){return a.innerText.replace(k,"")}for(a=a.firstChild;a;a=a.nextSibling){e+=n(a)}}else{if(d===3||d===4){return a.nodeValue}}}else{for(b=0;c=a[b];b++){c.nodeType!==8&&(e+=n(c))}}return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++){if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1){}a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++){c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b)}d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++){d[e].getAttribute("name")===a[1]&&c.push(d[e])}return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined"){return b.getElementsByTagName(a[1])}}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f){return a}for(var g=0,h;(h=b[g])!=null;g++){h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1))}return !1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else{a[2]&&m.error(a[0])}a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not"){if((a.exec(b[3])||"").length>1||/^\w/.test(b[3])){b[3]=m(b[3],null,null,c)}else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return !1}}else{if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0])){return !0}}return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return !!a.firstChild},empty:function(a){return !a.firstChild},has:function(a,b,c){return !!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f){return f(a,c,b,d)}if(e==="contains"){return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0}if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++){if(g[h]===a){return !1}}return !0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling){if(l.nodeType===1){return !1}}if(k==="first"){return !0}l=a;case"last":while(l=l.nextSibling){if(l.nodeType===1){return !1}}return !0;case"nth":c=b[2],e=b[3];if(c===1&&e===0){return !0}f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling){l.nodeType===1&&(l.nodeIndex=++i)}g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f){return f(a,c,b,d)}}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match){o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q))}var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]"){Array.prototype.push.apply(d,a)}else{if(typeof a.length=="number"){for(var e=a.length;c<e;c++){d.push(a[c])}}else{for(;a[c];c++){d.push(a[c])}}}return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition){return a.compareDocumentPosition?-1:1}return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex){return a.sourceIndex-b.sourceIndex}var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i){return v(a,b)}if(!g){return -1}if(!i){return 1}while(j){e.unshift(j),j=j.parentNode}j=i;while(j){f.unshift(j),j=j.parentNode}c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++){if(e[k]!==f[k]){return v(e[k],f[k])}}return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b){return c}var d=a.nextSibling;while(d){if(d===b){return -1}d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++){c[e].nodeType===1&&d.push(c[e])}c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1]){return s(e.getElementsByTagName(b),f)}if(h[2]&&o.find.CLASS&&e.getElementsByClassName){return s(e.getElementsByClassName(h[2]),f)}}if(e.nodeType===9){if(b==="body"&&e.body){return s([e.body],f)}if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode){return s([],f)}if(i.id===h[3]){return s([i],f)}}try{return s(e.querySelectorAll(b),f)}catch(j){}}else{if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p){return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}}catch(r){}finally{l||k.removeAttribute("id")}}}}return a(b,e,f,g)};for(var e in a){m[e]=a[e]}b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a)){try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11){return f}}}catch(g){}}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1){return}o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c){return b.getElementsByClassName(a[1])}},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return !!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return !1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a)){f+=d[0],a=a.replace(o.match.PSEUDO,"")}a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++){m(a,g[h],e,c)}return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string"){return f(a).filter(function(){for(c=0,d=b.length;c<d;c++){if(f.contains(b[c],this)){return !0}}})}var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0){for(h=g;h<e.length;h++){for(i=0;i<g;i++){if(e[i]===e[h]){e.splice(h--,1);break}}}}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++){if(f.contains(this,b[a])){return !0}}})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return !!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++){f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h})}g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11){break}}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a){return this[0]&&this[0].parentNode?this.prevAll().length:-1}if(typeof a=="string"){return f.inArray(this[0],f(a))}return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d))){g.nodeType===1&&e.push(g),g=g[c]}return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c]){if(a.nodeType===1&&++e===b){break}}return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling){a.nodeType===1&&a!==b&&c.push(a)}return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a)){return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))})}if(typeof a!="object"&&a!==b){return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a))}return f.text(this)},wrapAll:function(a){if(f.isFunction(a)){return this.each(function(b){f(this).wrapAll(a.call(this,b))})}if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1){a=a.firstChild}return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a)){return this.each(function(b){f(this).wrapInner(a.call(this,b))})}return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)})}if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)})}if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++){if(!a||f.filter(a,[d]).length){!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d)}}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild){b.removeChild(b.firstChild)}}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null}if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++){this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}}catch(e){this.empty().append(a)}}else{f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a)}return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a)){return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))})}typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j)){return this.each(function(){f(this).domManip(a,c,d,!0)})}if(f.isFunction(j)){return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)})}if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++){d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g){e[g]&&bk(d[g],e[g])}}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g){bj(d[g],e[g])}}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k){continue}if(typeof k=="string"){if(!_.test(k)){k=b.createTextNode(k)}else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--){o=o.lastChild}if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i){f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}}var r;if(!f.support.appendChecked){if(k[0]&&typeof(r=k.length)=="number"){for(i=0;i<r;i++){bn(k[i])}}else{bn(k)}}k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return !a.type||be.test(a.type)};for(j=0;h[j];j++){if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript")){e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j])}else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()]){continue}c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events){e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle)}b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b){return this}return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get" in k&&(g=k.get(a,!1,e))!==b){return g}return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d)){return}h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set" in k)||(d=k.set(a,d))!==b){try{j[c]=d}catch(l){}}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get" in g&&(e=g.get(a,!0,d))!==b){return e}if(bz){return bz(a,c)}},swap:function(a,b,c){var d={};for(var e in b){d[e]=a.style[e],a.style[e]=b[e]}c.call(a);for(e in b){a.style[e]=d[e]}}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0){return bC(a,b,d)}f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b)){return b}b=parseFloat(b);if(b>=0){return b+"px"}}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter){return}}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return !f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS){return bS.apply(this,arguments)}if(!this.length){return this}var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified")){f.lastModified[k]=y}if(z=v.getResponseHeader("Etag")){f.etag[k]=z}}if(a===304){w="notmodified",o=!0}else{try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}}else{u=w;if(!w||a){w="error",a<0&&(a=0)}}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n)){o[c[1].toLowerCase()]=c[2]}}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2){for(b in a){j[b]=[j[b],a[b]]}}else{b=a[v.status],v.then(b,b)}}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2){return !1}t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers){v.setRequestHeader(u,d.headers[u])}if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return !1}for(u in {success:1,error:1,complete:1}){v[u](d[u])}p=b$(bU,d,c,v);if(!p){w(-1,"No Transport")}else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2){w(-1,z)}else{throw z}}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a)){f.each(a,function(){e(this.name,this.value)})}else{for(var g in a){ca(g,a[g],c,e)}}return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState)){d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")}},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch){ch[a](0,1)}}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return !this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials" in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields){for(j in c.xhrFields){h[j]=c.xhrFields[j]}}c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e){h.setRequestHeader(j,e[j])}}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e){h.readyState!==4&&h.abort()}else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0){return this.animate(cu("show",3),a,b,c)}for(var g=0,h=this.length;g<h;g++){d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)))}for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none"){d.style.display=f._data(d,"olddisplay")||""}}}return this},hide:function(a,b,c){if(a||a===0){return this.animate(cu("hide",3),a,b,c)}var d,e,g=0,h=this.length;for(;g<h;g++){d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e))}for(g=0;g<h;g++){this[g].style&&(this[g].style.display="none")}return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d){return b.complete.call(this)}c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a){j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""))}return !0}var e=f.speed(b,c,d);if(f.isEmptyObject(a)){return this.each(e.complete,[!1])}a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null){for(b in g){g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b)}}else{g[b=a+".run"]&&g[b].stop&&h(this,g,b)}for(b=e.length;b--;){e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1))}(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0){d.queue="fx"}d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+0.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties){i.animatedProperties[b]!==!0&&(g=!1)}if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show){for(b in i.animatedProperties){f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0)}}d=i.complete,d&&(i.complete=!1,d.call(h))}return !1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return !0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++){a=b[c],!a()&&b[c]===a&&b.splice(c--,1)}b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect" in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a){return this.each(function(b){f.offset.setOffset(this,a,b)})}if(!b||!b.ownerDocument){return null}if(b===b.ownerDocument.body){return f.offset.bodyOffset(b)}try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b)){return c?{top:c.top,left:c.left}:{top:0,left:0}}var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a){return this.each(function(b){f.offset.setOffset(this,a,b)})}if(!b||!b.ownerDocument){return null}if(b===b.ownerDocument.body){return f.offset.bodyOffset(b)}var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed"){break}c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static"){l+=i.offsetTop,m+=i.offsetLeft}f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using" in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0]){return null}var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static"){a=a.offsetParent}return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e){return null}g=cy(e);return g?"pageXOffset" in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e){return a==null?null:this}if(f.isFunction(a)){return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))})}if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9){return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c])}if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);(function(a){a("a[data-reveal-id]").live("click",function(c){c.preventDefault();var b=a(this).attr("data-reveal-id");a("#"+b).reveal(a(this).data())});a.fn.reveal=function(b){var c={animation:"fadeAndPop",animationSpeed:300,closeOnBackgroundClick:true,dismissModalClass:"close-reveal-modal"};var b=a.extend({},c,b);return this.each(function(){var l=a(this),g=parseInt(l.css("top")),i=l.height()+g,h=false,e=a(".reveal-modal-bg");if(e.length==0){e=a('<div class="reveal-modal-bg" />').insertAfter(l);e.fadeTo("fast",0.8)}function k(){e.unbind("click.modalEvent");a("."+b.dismissModalClass).unbind("click.modalEvent");if(!h){m();if(b.animation=="fadeAndPop"){l.css({top:a(document).scrollTop()-i,opacity:0,visibility:"visible"});e.fadeIn(b.animationSpeed/2);l.delay(b.animationSpeed/2).animate({top:a(document).scrollTop()+g+"px",opacity:1},b.animationSpeed,j)}if(b.animation=="fade"){l.css({opacity:0,visibility:"visible",top:a(document).scrollTop()+g});e.fadeIn(b.animationSpeed/2);l.delay(b.animationSpeed/2).animate({opacity:1},b.animationSpeed,j)}if(b.animation=="none"){l.css({visibility:"visible",top:a(document).scrollTop()+g});e.css({display:"block"});j()}}l.unbind("reveal:open",k)}l.bind("reveal:open",k);function f(){if(!h){m();if(b.animation=="fadeAndPop"){e.delay(b.animationSpeed).fadeOut(b.animationSpeed);l.animate({top:a(document).scrollTop()-i+"px",opacity:0},b.animationSpeed/2,function(){l.css({top:g,opacity:1,visibility:"hidden"});j()})}if(b.animation=="fade"){e.delay(b.animationSpeed).fadeOut(b.animationSpeed);l.animate({opacity:0},b.animationSpeed,function(){l.css({opacity:1,visibility:"hidden",top:g});j()})}if(b.animation=="none"){l.css({visibility:"hidden",top:g});e.css({display:"none"})}}l.unbind("reveal:close",f)}l.bind("reveal:close",f);l.trigger("reveal:open");var d=a("."+b.dismissModalClass).bind("click.modalEvent",function(){l.trigger("reveal:close")});if(b.closeOnBackgroundClick){e.css({cursor:"pointer"});e.bind("click.modalEvent",function(){l.trigger("reveal:close")})}a("body").keyup(function(n){if(n.which===27){l.trigger("reveal:close")}});function j(){h=false}function m(){h=true}})}})(jQuery);(function(b){var a={defaults:{animation:"horizontal-push",animationSpeed:600,timer:true,advanceSpeed:4000,pauseOnHover:false,startClockOnMouseOut:false,startClockOnMouseOutAfter:1000,directionalNav:true,captions:true,captionAnimation:"fade",captionAnimationSpeed:600,bullets:false,bulletThumbs:false,bulletThumbLocation:"",afterSlideChange:b.noop,fluid:true,centerBullets:true},activeSlide:0,numberSlides:0,orbitWidth:null,orbitHeight:null,locked:null,timerRunning:null,degrees:0,wrapperHTML:'<div class="orbit-wrapper" />',timerHTML:'<div class="timer"><span class="mask"><span class="rotator"></span></span><span class="pause"></span></div>',captionHTML:'<div class="orbit-caption"></div>',directionalNavHTML:'<div class="slider-nav"><span class="right">Right</span><span class="left">Left</span></div>',bulletHTML:'<ul class="orbit-bullets"></ul>',init:function(f,e){var c,g=0,d=this;this.clickTimer=b.proxy(this.clickTimer,this);this.addBullet=b.proxy(this.addBullet,this);this.resetAndUnlock=b.proxy(this.resetAndUnlock,this);this.stopClock=b.proxy(this.stopClock,this);this.startTimerAfterMouseLeave=b.proxy(this.startTimerAfterMouseLeave,this);this.clearClockMouseLeaveTimer=b.proxy(this.clearClockMouseLeaveTimer,this);this.rotateTimer=b.proxy(this.rotateTimer,this);this.options=b.extend({},this.defaults,e);if(this.options.timer==="false"){this.options.timer=false}if(this.options.captions==="false"){this.options.captions=false}if(this.options.directionalNav==="false"){this.options.directionalNav=false}this.$element=b(f);this.$wrapper=this.$element.wrap(this.wrapperHTML).parent();this.$slides=this.$element.children("img, a, div");this.$element.bind("orbit.next",function(){d.shift("next")});this.$element.bind("orbit.prev",function(){d.shift("prev")});this.$element.bind("orbit.goto",function(i,h){d.shift(h)});this.$element.bind("orbit.start",function(i,h){d.startClock()});this.$element.bind("orbit.stop",function(i,h){d.stopClock()});c=this.$slides.filter("img");if(c.length===0){this.loaded()}else{c.bind("imageready",function(){g+=1;if(g===c.length){d.loaded()}})}},loaded:function(){this.$element.addClass("orbit").css({width:"1px",height:"1px"});this.setDimentionsFromLargestSlide();this.updateOptionsIfOnlyOneSlide();this.setupFirstSlide();if(this.options.timer){this.setupTimer();this.startClock()}if(this.options.captions){this.setupCaptions()}if(this.options.directionalNav){this.setupDirectionalNav()}if(this.options.bullets){this.setupBulletNav();this.setActiveBullet()}},currentSlide:function(){return this.$slides.eq(this.activeSlide)},setDimentionsFromLargestSlide:function(){var d=this,c;d.$element.add(d.$wrapper).width(this.$slides.first().width());d.$element.add(d.$wrapper).height(this.$slides.first().height());d.orbitWidth=this.$slides.first().width();d.orbitHeight=this.$slides.first().height();c=this.$slides.first().clone();this.$slides.each(function(){var e=b(this),g=e.width(),f=e.height();if(g>d.$element.width()){d.$element.add(d.$wrapper).width(g);d.orbitWidth=d.$element.width()}if(f>d.$element.height()){d.$element.add(d.$wrapper).height(f);d.orbitHeight=d.$element.height();c=b(this).clone()}d.numberSlides+=1});if(this.options.fluid){if(typeof this.options.fluid==="string"){c=b('<img src="http://placehold.it/'+this.options.fluid+'" />')}d.$element.prepend(c);c.addClass("fluid-placeholder");d.$element.add(d.$wrapper).css({width:"inherit"});d.$element.add(d.$wrapper).css({height:"inherit"});b(window).bind("resize",function(){d.orbitWidth=d.$element.width();d.orbitHeight=d.$element.height()})}},lock:function(){this.locked=true},unlock:function(){this.locked=false},updateOptionsIfOnlyOneSlide:function(){if(this.$slides.length===1){this.options.directionalNav=false;this.options.timer=false;this.options.bullets=false}},setupFirstSlide:function(){var c=this;this.$slides.first().css({"z-index":3}).fadeIn(function(){c.$slides.css({display:"block"})})},startClock:function(){var c=this;if(!this.options.timer){return false}if(this.$timer.is(":hidden")){this.clock=setInterval(function(){this.$element.trigger("orbit.next")},this.options.advanceSpeed)}else{this.timerRunning=true;this.$pause.removeClass("active");this.clock=setInterval(this.rotateTimer,this.options.advanceSpeed/180)}},rotateTimer:function(){var c="rotate("+this.degrees+"deg)";this.degrees+=2;this.$rotator.css({"-webkit-transform":c,"-moz-transform":c,"-o-transform":c});if(this.degrees>180){this.$rotator.addClass("move");this.$mask.addClass("move")}if(this.degrees>360){this.$rotator.removeClass("move");this.$mask.removeClass("move");this.degrees=0;this.$element.trigger("orbit.next")}},stopClock:function(){if(!this.options.timer){return false}else{this.timerRunning=false;clearInterval(this.clock);this.$pause.addClass("active")}},setupTimer:function(){this.$timer=b(this.timerHTML);this.$wrapper.append(this.$timer);this.$rotator=this.$timer.find(".rotator");this.$mask=this.$timer.find(".mask");this.$pause=this.$timer.find(".pause");this.$timer.click(this.clickTimer);if(this.options.startClockOnMouseOut){this.$wrapper.mouseleave(this.startTimerAfterMouseLeave);this.$wrapper.mouseenter(this.clearClockMouseLeaveTimer)}if(this.options.pauseOnHover){this.$wrapper.mouseenter(this.stopClock)}},startTimerAfterMouseLeave:function(){var c=this;this.outTimer=setTimeout(function(){if(!c.timerRunning){c.startClock()}},this.options.startClockOnMouseOutAfter)},clearClockMouseLeaveTimer:function(){clearTimeout(this.outTimer)},clickTimer:function(){if(!this.timerRunning){this.startClock()}else{this.stopClock()}},setupCaptions:function(){this.$caption=b(this.captionHTML);this.$wrapper.append(this.$caption);this.setCaption()},setCaption:function(){var d=this.currentSlide().attr("data-caption"),c;if(!this.options.captions){return false}if(d){c=b(d).html();this.$caption.attr("id",d).html(c);switch(this.options.captionAnimation){case"none":this.$caption.show();break;case"fade":this.$caption.fadeIn(this.options.captionAnimationSpeed);break;case"slideOpen":this.$caption.slideDown(this.options.captionAnimationSpeed);break}}else{switch(this.options.captionAnimation){case"none":this.$caption.hide();break;case"fade":this.$caption.fadeOut(this.options.captionAnimationSpeed);break;case"slideOpen":this.$caption.slideUp(this.options.captionAnimationSpeed);break}}},setupDirectionalNav:function(){var c=this;this.$wrapper.append(this.directionalNavHTML);this.$wrapper.find(".left").click(function(){c.stopClock();c.$element.trigger("orbit.prev")});this.$wrapper.find(".right").click(function(){c.stopClock();c.$element.trigger("orbit.next")})},setupBulletNav:function(){this.$bullets=b(this.bulletHTML);this.$wrapper.append(this.$bullets);this.$slides.each(this.addBullet);this.$element.addClass("with-bullets");if(this.options.centerBullets){this.$bullets.css("margin-left",-this.$bullets.width()/2)}},addBullet:function(g,e){var d=g+1,h=b("<li>"+(d)+"</li>"),c,f=this;if(this.options.bulletThumbs){c=b(e).attr("data-thumb");if(c){h.addClass("has-thumb").css({background:"url("+this.options.bulletThumbLocation+c+") no-repeat"})}}this.$bullets.append(h);h.data("index",g);h.click(function(){f.stopClock();f.$element.trigger("orbit.goto",[h.data("index")])})},setActiveBullet:function(){if(!this.options.bullets){return false}else{this.$bullets.find("li").removeClass("active").eq(this.activeSlide).addClass("active")}},resetAndUnlock:function(){this.$slides.eq(this.prevActiveSlide).css({"z-index":1});this.unlock();this.options.afterSlideChange.call(this,this.$slides.eq(this.prevActiveSlide),this.$slides.eq(this.activeSlide))},shift:function(d){var c=d;this.prevActiveSlide=this.activeSlide;if(this.prevActiveSlide==c){return false}if(this.$slides.length=="1"){return false}if(!this.locked){this.lock();if(d=="next"){this.activeSlide++;if(this.activeSlide==this.numberSlides){this.activeSlide=0}}else{if(d=="prev"){this.activeSlide--;if(this.activeSlide<0){this.activeSlide=this.numberSlides-1}}else{this.activeSlide=d;if(this.prevActiveSlide<this.activeSlide){c="next"}else{if(this.prevActiveSlide>this.activeSlide){c="prev"}}}}this.setActiveBullet();this.$slides.eq(this.prevActiveSlide).css({"z-index":2});if(this.options.animation=="fade"){this.$slides.eq(this.activeSlide).css({opacity:0,"z-index":3}).animate({opacity:1},this.options.animationSpeed,this.resetAndUnlock)}if(this.options.animation=="horizontal-slide"){if(c=="next"){this.$slides.eq(this.activeSlide).css({left:this.orbitWidth,"z-index":3}).animate({left:0},this.options.animationSpeed,this.resetAndUnlock)}if(c=="prev"){this.$slides.eq(this.activeSlide).css({left:-this.orbitWidth,"z-index":3}).animate({left:0},this.options.animationSpeed,this.resetAndUnlock)}}if(this.options.animation=="vertical-slide"){if(c=="prev"){this.$slides.eq(this.activeSlide).css({top:this.orbitHeight,"z-index":3}).animate({top:0},this.options.animationSpeed,this.resetAndUnlock)}if(c=="next"){this.$slides.eq(this.activeSlide).css({top:-this.orbitHeight,"z-index":3}).animate({top:0},this.options.animationSpeed,this.resetAndUnlock)}}if(this.options.animation=="horizontal-push"){if(c=="next"){this.$slides.eq(this.activeSlide).css({left:this.orbitWidth,"z-index":3}).animate({left:0},this.options.animationSpeed,this.resetAndUnlock);this.$slides.eq(this.prevActiveSlide).animate({left:-this.orbitWidth},this.options.animationSpeed)}if(c=="prev"){this.$slides.eq(this.activeSlide).css({left:-this.orbitWidth,"z-index":3}).animate({left:0},this.options.animationSpeed,this.resetAndUnlock);this.$slides.eq(this.prevActiveSlide).animate({left:this.orbitWidth},this.options.animationSpeed)}}if(this.options.animation=="vertical-push"){if(c=="next"){this.$slides.eq(this.activeSlide).css({top:-this.orbitHeight,"z-index":3}).animate({top:0},this.options.animationSpeed,this.resetAndUnlock);this.$slides.eq(this.prevActiveSlide).animate({top:this.orbitHeight},this.options.animationSpeed)}if(c=="prev"){this.$slides.eq(this.activeSlide).css({top:this.orbitHeight,"z-index":3}).animate({top:0},this.options.animationSpeed,this.resetAndUnlock);this.$slides.eq(this.prevActiveSlide).animate({top:-this.orbitHeight},this.options.animationSpeed)}}this.setCaption()}}};b.fn.orbit=function(c){return this.each(function(){var d=b.extend({},a);d.init(this,c)})}})(jQuery);
+/*!
+ * jQuery imageready Plugin
+ * http://www.zurb.com/playground/
+ *
+ * Copyright 2011, ZURB
+ * Released under the MIT License
+ */
+(function(c){var b={};c.event.special.imageready={setup:function(f,e,d){b=f||b},add:function(d){var e=c(this),f;if(this.nodeType===1&&this.tagName.toLowerCase()==="img"&&this.src!==""){if(b.forceLoad){f=e.attr("src");e.attr("src","");a(this,d.handler);e.attr("src",f)}else{if(this.complete||this.readyState===4){d.handler.apply(this,arguments)}else{a(this,d.handler)}}}},teardown:function(d){c(this).unbind(".imageready")}};function a(d,f){var e=c(d);e.bind("load.imageready",function(){f.apply(d,arguments);e.unbind("load.imageready")})}}(jQuery));new function(a){a.fn.placeholder=function(b){b=b||{};var j=b.dataKey||"placeholderValue";var f=b.attr||"placeholder";var h=b.className||"placeholder";var k=b.values||[];var c=b.blockSubmit||false;var e=b.blankSubmit||false;var g=b.onSubmit||false;var i=b.value||"";var d=b.cursor_position||0;return this.filter(":input").each(function(l){a.data(this,j,k[l]||a(this).attr(f))}).each(function(){if(a.trim(a(this).val())===""){a(this).addClass(h).val(a.data(this,j))}}).focus(function(){if(a.trim(a(this).val())===a.data(this,j)){a(this).removeClass(h).val(i)}if(a.fn.setCursorPosition){a(this).setCursorPosition(d)}}).blur(function(){if(a.trim(a(this).val())===i){a(this).addClass(h).val(a.data(this,j))}}).each(function(l,m){if(c){new function(n){a(n.form).submit(function(){return a.trim(a(n).val())!=a.data(n,j)})}(m)}else{if(e){new function(n){a(n.form).submit(function(){if(a.trim(a(n).val())==a.data(n,j)){a(n).removeClass(h).val("")}return true})}(m)}else{if(g){new function(n){a(n.form).submit(g)}(m)}}}})}}(jQuery);jQuery(document).ready(function(b){function a(c){b("form.custom input:"+c).each(function(){var e=b(this).hide(),d=e.next("span.custom."+c);if(d.length===0){d=b('<span class="custom '+c+'"></span>').insertAfter(e)}d.toggleClass("checked",e.is(":checked"))})}a("checkbox");a("radio");b("form.custom select").each(function(){var e=b(this),g=e.next("div.custom.dropdown"),c=e.find("option"),d=0,f;if(g.length===0){g=b('<div class="custom dropdown"><a href="#" class="selector"></a><ul></ul></div>"');c.each(function(){f=b("<li>"+b(this).html()+"</li>");g.find("ul").append(f)});g.prepend('<a href="#" class="current">'+c.first().html()+"</a>");e.after(g);e.hide()}c.each(function(h){if(this.selected){g.find("li").eq(h).addClass("selected");g.find(".current").html(b(this).html())}});g.find("li").each(function(){g.addClass("open");if(b(this).outerWidth()>d){d=b(this).outerWidth()}g.removeClass("open")});g.css("width",d+18+"px");g.find("ul").css("width",d+16+"px")})});(function(b){function a(d){var f=d.prev(),e=f[0];e.checked=((e.checked)?false:true);d.toggleClass("checked");f.trigger("change")}function c(d){var f=d.prev(),e=f[0];b('input:radio[name="'+f.attr("name")+'"]').each(function(){b(this).next().removeClass("checked")});e.checked=((e.checked)?false:true);d.toggleClass("checked");f.trigger("change")}b(document).on("click","form.custom span.custom.checkbox",function(d){d.preventDefault();d.stopPropagation();a(b(this))});b(document).on("click","form.custom span.custom.radio",function(d){d.preventDefault();d.stopPropagation();c(b(this))});b(document).on("click","form.custom label",function(e){var d=b("#"+b(this).attr("for")),g,f;if(d.length!==0){if(d.attr("type")==="checkbox"){e.preventDefault();g=b(this).find("span.custom.checkbox");a(g)}else{if(d.attr("type")==="radio"){e.preventDefault();f=b(this).find("span.custom.radio");c(f)}}}});b(document).on("click","form.custom div.custom.dropdown a.current, form.custom div.custom.dropdown a.selector",function(d){var f=b(this),e=f.closest("div.custom.dropdown");d.preventDefault();e.toggleClass("open");if(e.hasClass("open")){b(document).bind("click.customdropdown",function(g){e.removeClass("open");b(document).unbind(".customdropdown")})}else{b(document).unbind(".customdropdown")}});b(document).on("click","form.custom div.custom.dropdown li",function(g){var h=b(this),e=h.closest("div.custom.dropdown"),f=e.prev(),d=0;g.preventDefault();g.stopPropagation();h.closest("ul").find("li").removeClass("selected");h.addClass("selected");e.removeClass("open").find("a.current").html(h.html());h.closest("ul").find("li").each(function(i){if(h[0]==this){d=i}});f[0].selectedIndex=d;f.trigger("change")})})(jQuery);
+/*! http://mths.be/placeholder v1.8.5 by @mathias */
+(function(j,i,l){var k="placeholder" in i.createElement("input"),h="placeholder" in i.createElement("textarea");if(k&&h){l.fn.placeholder=function(){return this};l.fn.placeholder.input=l.fn.placeholder.textarea=true}else{l.fn.placeholder=function(){return this.filter((k?"textarea":":input")+"[placeholder]").bind("focus.placeholder",o).bind("blur.placeholder",m).trigger("blur.placeholder").end()};l.fn.placeholder.input=k;l.fn.placeholder.textarea=h;l(function(){l("form").bind("submit.placeholder",function(){var a=l(".placeholder",this).each(o);setTimeout(function(){a.each(m)},10)})});l(j).bind("unload.placeholder",function(){l(".placeholder").val("")})}function n(b){var c={},a=/^jQuery\d+$/;l.each(b.attributes,function(d,e){if(e.specified&&!a.test(e.name)){c[e.name]=e.value}});return c}function o(){var a=l(this);if(a.val()===a.attr("placeholder")&&a.hasClass("placeholder")){if(a.data("placeholder-password")){a.hide().next().show().focus().attr("id",a.removeAttr("id").data("placeholder-id"))}else{a.val("").removeClass("placeholder")}}}function m(){var a,b=l(this),e=b,c=this.id;if(b.val()===""){if(b.is(":password")){if(!b.data("placeholder-textinput")){try{a=b.clone().attr({type:"text"})}catch(d){a=l("<input>").attr(l.extend(n(this),{type:"text"}))}a.removeAttr("name").data("placeholder-password",true).data("placeholder-id",c).bind("focus.placeholder",o);b.data("placeholder-textinput",a).data("placeholder-id",c).before(a)}b=b.removeAttr("id").hide().prev().attr("id",c).show()}b.addClass("placeholder").val(b.attr("placeholder"))}else{b.removeClass("placeholder")}}}(this,document,jQuery));
 

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:b/robots.txt (new)
--- /dev/null
+++ b/robots.txt
@@ -1,1 +1,5 @@
+# www.robotstxt.org/
+# 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();
+?>

--- /dev/null
+++ b/schemas/agency.json.php
@@ -1,1 +1,60 @@
+<?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" => "FOI Disclosure Log URL"),
+   "FOIDocumentsRSSURL" => Array("type" => "string", "required" => false, "x-title" => "RSS Feed of FOI Documents Released", "description" => "FOI Disclosure Log in RSS format"),
+        "hasFOIPDF" => Array("type" => "array", "required" => false, "x-title" => "Has FOI Documents Released in PDF", "description" => "FOI Disclosure Log contains any PDFs",
+            "items" => Array("type" => "string")),
+         "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" => "array", "required" => true, "x-title" => "Has RSS", "description" => ""),
+        "hasMailingList" => Array("type" => "array", "required" => true, "x-title" => "Has Mailing List", "description" => "",
+            "items" => Array("type" => "string")),
+        "hasTwitter" => Array("type" => "array", "required" => true, "x-title" => "Has Twitter", "description" => "",
+            "items" => Array("type" => "string")),
+        "hasFacebook" => Array("type" => "array", "required" => true, "x-title" => "Has Facebook", "description" => "",
+            "items" => Array("type" => "string")),
+        "hasYouTube" => Array("type" => "array", "required" => true, "x-title" => "Has YouTube", "description" => "",
+            "items" => Array("type" => "string")),
+        "hasFlickr" => Array("type" => "array", "required" => true, "x-title" => "Has Flickr", "description" => "",
+            "items" => Array("type" => "string")),
+        "hasCCBY" => Array("type" => "array", "required" => true, "x-title" => "Has CC-BY", "description" => "Has any page licenced Creative Commons - Attribution",
+            "items" => Array("type" => "string")),
+         "hasRestrictiveLicence" => Array("type" => "array","required" => true, "x-title" => "Has Restrictive Licence", "description" => "Has any page licenced under terms more restrictive than Crown Copyright",
+            "items" => Array("type" => "string")),
+           "hasCrownCopyright" => Array("type" => "array", "required" => true, "x-title" => "Has Standard Crown Copyright licence", "description" => "Has any page still licenced under the former Commonwealth Copyright Administration",
+            "items" => Array("type" => "string")),
+    ),
+        /* "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 -> file:b/scrape.py
--- a/scrape.py
+++ b/scrape.py
@@ -3,17 +3,65 @@
 import urllib2
 from BeautifulSoup import BeautifulSoup
 import re
+import hashlib
+from urlparse import urljoin
+import time
+import os
+import mimetypes
+import re
+import urllib
+import urlparse
 
-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/')
+def canonurl(url):
+    r"""Return the canonical, ASCII-encoded form of a UTF-8 encoded URL, or ''
+    if the URL looks invalid.
+    >>> canonurl('\xe2\x9e\xa1.ws')  # tinyarro.ws
+    'http://xn--hgi.ws/'
+    """
+    # strip spaces at the ends and ensure it's prefixed with 'scheme://'
+    url = url.strip()
+    if not url:
+        return ''
+    if not urlparse.urlsplit(url).scheme:
+        url = 'http://' + url
 
-# select database
-agencydb = couch['disclosr-agencies']
+    # turn it into Unicode
+    #try:
+    #    url = unicode(url, 'utf-8')
+    #except UnicodeDecodeError:
+    #    return ''  # bad UTF-8 chars in URL
 
-for row in agencydb.view('app/getScrapeRequired'): #not recently scraped agencies view?
-    agency = agencydb.get(row.id)
-    print agency['agencyName']
+    # parse the URL into its components
+    parsed = urlparse.urlsplit(url)
+    scheme, netloc, path, query, fragment = parsed
+
+    # ensure scheme is a letter followed by letters, digits, and '+-.' chars
+    if not re.match(r'[a-z][-+.a-z0-9]*$', scheme, flags=re.I):
+        return ''
+    scheme = str(scheme)
+
+    # ensure domain and port are valid, eg: sub.domain.<1-to-6-TLD-chars>[:port]
+    match = re.match(r'(.+\.[a-z0-9]{1,6})(:\d{1,5})?$', netloc, flags=re.I)
+    if not match:
+        return ''
+    domain, port = match.groups()
+    netloc = domain + (port if port else '')
+    netloc = netloc.encode('idna')
+
+    # ensure path is valid and convert Unicode chars to %-encoded
+    if not path:
+        path = '/'  # eg: 'http://google.com' -> 'http://google.com/'
+    path = urllib.quote(urllib.unquote(path.encode('utf-8')), safe='/;')
+
+    # ensure query is valid
+    query = urllib.quote(urllib.unquote(query.encode('utf-8')), safe='=&?/')
+
+    # ensure fragment is valid
+    fragment = urllib.quote(urllib.unquote(fragment.encode('utf-8')))
+
+    # piece it all back together, truncating it to a maximum of 4KB
+    url = urlparse.urlunsplit((scheme, netloc, path, query, fragment))
+    return url[:4096]
 
 #http://diveintopython.org/http_web_services/etags.html
 class NotModifiedHandler(urllib2.BaseHandler):  
@@ -22,43 +70,129 @@
         addinfourl.code = code
         return addinfourl
 
-def scrapeAndStore(URL, depth, agency):
-    URL = "http://www.hole.fi/jajvirta/weblog/"
-    req = urllib2.Request(URL)
+def fetchURL(docsdb, url, fieldName, agencyID, scrape_again=True):
+    url = canonurl(url)
+    hash = hashlib.md5(url).hexdigest().encode("utf-8")
+    req = urllib2.Request(url)
+    print "Fetching %s" % url
+    if url.startswith("mailto") or url.startswith("javascript") or url.startswith("#") or url == None or url == "":
+		print "Not a valid HTTP url"
+		return (None,None)
+    doc = docsdb.get(hash) 
+    if doc == None:
+	doc = {'_id': hash, 'agencyID': agencyID, 'url': url, 'fieldName':fieldName}
+    else:
+	if (('page_scraped' in doc) and (time.time() - doc['page_scraped']) < 999999):
+		print "Uh oh, trying to scrape URL again too soon!"
+		last_attachment_fname = doc["_attachments"].keys()[-1]
+		last_attachment = docsdb.get_attachment(doc,last_attachment_fname)
+		return (doc['mime_type'],last_attachment)
+	if scrape_again == False:
+		print "Not scraping this URL again as requested"
+		return (None,None)
+
+    time.sleep(3) # wait 3 seconds to give webserver time to recover
     
-    #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)
+    #if there is a previous version stored in couchdb, load caching helper tags
+    if doc.has_key('etag'):
+        req.add_header("If-None-Match", doc['etag'])
+    if doc.has_key('last_modified'):
+        req.add_header("If-Modified-Since", doc['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
+    try:
+     url_handle = opener.open(req)
+     headers = url_handle.info() # the addinfourls have the .info() too
+     doc['etag'] = headers.getheader("ETag")
+     doc['last_modified'] = headers.getheader("Last-Modified") 
+     doc['date'] = headers.getheader("Date") 
+     doc['page_scraped'] = time.time() 
+     doc['web_server'] = headers.getheader("Server") 
+     doc['powered_by'] = headers.getheader("X-Powered-By") 
+     doc['file_size'] = headers.getheader("Content-Length") 
+     content_type = headers.getheader("Content-Type")
+     if content_type != None:
+    	doc['mime_type'] = content_type.split(";")[0]
+     else:
+	(type,encoding) = mimetypes.guess_type(url)
+	doc['mime_type'] = type
+     if hasattr(url_handle, 'code'): 
+        if url_handle.code == 304:
+            print "the web page has not been modified"
+	    return (None,None)
+        else: 
+            content = url_handle.read()
+	    docsdb.save(doc)
+	    doc = docsdb.get(hash) # need to get a _rev
+	    docsdb.put_attachment(doc, content, str(time.time())+"-"+os.path.basename(url), doc['mime_type']) 
+	    return (doc['mime_type'], content)
+	    #store as attachment epoch-filename
+    except urllib2.URLError as e:
+    	error = ""
+	if hasattr(e, 'reason'):
+		error = "error %s in downloading %s" % (str(e.reason), url)
+	elif hasattr(e, 'code'):
+		error = "error %s in downloading %s" % (e.code, url)
+        print error
+	doc['error'] = error
+        docsdb.save(doc)
+        return (None,None)
+
+
+
+def scrapeAndStore(docsdb, url, depth, fieldName, agencyID):
+    (mime_type,content) = fetchURL(docsdb, url, fieldName, agencyID)
+    if content != None and depth > 0:
+	if mime_type == "text/html" or mime_type == "application/xhtml+xml" or mime_type =="application/xml":
+            # http://www.crummy.com/software/BeautifulSoup/documentation.html
+            soup = BeautifulSoup(content)
+	    navIDs = soup.findAll(id=re.compile('nav|Nav|menu|bar'))
+	    for nav in navIDs:
+		print "Removing element", nav['id']
+		nav.extract()
+	    navClasses = soup.findAll(attrs={'class' : re.compile('nav|menu|bar')})
+	    for nav in navClasses:
+		print "Removing element", nav['class']
+		nav.extract()
+            links = soup.findAll('a') # soup.findAll('a', id=re.compile("^p-"))
+	    linkurls = set([])
+            for link in links:
+            	if link.has_key("href"):
+			if link['href'].startswith("http"):
+				# lets not do external links for now
+				# linkurls.add(link['href'])
+				None
+			if link['href'].startswith("mailto"):
+				# not http
+				None
+			if link['href'].startswith("javascript"):
+				# not http
+				None
+			else:
+                		linkurls.add(urljoin(url,link['href'].replace(" ","%20")))
+            for linkurl in linkurls:
+		#print linkurl
+		scrapeAndStore(docsdb, linkurl, depth-1, fieldName, agencyID)    
+
+couch = couchdb.Server('http://127.0.0.1:5984/')
+
+# select database
+agencydb = couch['disclosr-agencies']
+docsdb = couch['disclosr-documents']
+
+for row in agencydb.view('app/getScrapeRequired'): #not recently scraped agencies view?
+    agency = agencydb.get(row.id)
+    print agency['name']
+    for key in agency.keys():
+	if key == 'website':
+    		scrapeAndStore(docsdb, agency[key],0,key,agency['_id'])
+	if key.endswith('URL'):
+		print key 
+		depth = 1
+		if 'scrapeDepth' in agency.keys():
+			depth = agency['scrapeDepth']
+   		scrapeAndStore(docsdb, agency[key],depth,key,agency['_id'])
+
+    agency['metadata']['lastScraped'] = time.time()
+    agencydb.save(agency)
+

--- /dev/null
+++ b/stylesheets/app.css
@@ -1,1 +1,72 @@
+/* Foundation v2.1.4 http://foundation.zurb.com */
+/* Artfully masterminded by ZURB  */
 
+/* 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; }
+  
+
+
+.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; }
+

--- /dev/null
+++ b/stylesheets/foundation.css
@@ -1,1 +1,1206 @@
-
+/* Foundation v2.1.4 http://foundation.zurb.com */
+/* Artfully Masterminded by ZURB */
+
+/* -------------------------------------------------- 
+    Table of Contents
+-----------------------------------------------------
+:: Reset & Standards
+:: Links
+:: Lists
+:: Tables
+:: Misc
+*/
+
+
+/*	--------------------------------------------------
+	:: Global Reset & Standards
+	-------------------------------------------------- */
+	
+	/* 
+		Eric Meyer's CSS Reset
+		http://meyerweb.com/eric/tools/css/reset/ 
+		v2.0 | 20110126
+   		License: none (public domain)
+	*/
+	
+	html, body, div, span, applet, object, iframe,
+	h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+	a, abbr, acronym, address, big, cite, code,
+	del, dfn, em, img, ins, kbd, q, s, samp,
+	small, strike, strong, sub, sup, tt, var,
+	b, u, i, center,
+	dl, dt, dd, ol, ul, li,
+	fieldset, form, label, legend,
+	table, caption, tbody, tfoot, thead, tr, th, td,
+	article, aside, canvas, details, embed, 
+	figure, figcaption, footer, header, hgroup, 
+	menu, nav, output, ruby, section, summary,
+	time, mark, audio, video {
+		margin: 0;
+		padding: 0;
+		border: 0;
+		font: inherit;
+		vertical-align: baseline;
+	}
+	html {
+		font-size: 62.5%; 
+	}
+	/* HTML5 display-role reset for older browsers */
+	article, aside, details, figcaption, figure, 
+	footer, header, hgroup, menu, nav, section {
+		display: block;
+	}
+	body {
+		line-height: 1;
+	}
+	ol, ul {
+		list-style: none;
+	}
+	blockquote, q {
+		quotes: none;
+	}
+	blockquote:before, blockquote:after,
+	q:before, q:after {
+		content: '';
+		content: none;
+	}
+	table {
+		border-collapse: collapse;
+		border-spacing: 0;
+	}
+	
+	
+	
+	body { background: #fff; font-family: "Helvetica Neue", "HelveticaNeue", Helvetica, Arial, "Lucida Grande", sans-serif; font-size: 13px; line-height: 18px; color: #555; position: relative; -webkit-font-smoothing: antialiased; }
+	
+
+
+/*	--------------------------------------------------
+	:: Links
+	-------------------------------------------------- */
+	a { color: #2a85e8; text-decoration: none; line-height: inherit; }
+	a:hover { color: #11639d; }
+	a:focus { color: #cc4714; outline: none; }
+	p a, p a:visited { line-height: inherit; }
+	
+
+/*	--------------------------------------------------
+	:: Lists
+	-------------------------------------------------- */
+	ul, ol { margin-bottom: 18px; }
+	ul { list-style: none outside; }
+	ol { list-style: decimal; }
+	ol, ul.square, ul.circle, ul.disc { margin-left: 30px; }
+	ul.square { list-style: square outside; }
+	ul.circle { list-style: circle outside; }
+	ul.disc { list-style: disc outside; }
+	li { margin-bottom: 12px; }
+	ul.large li { line-height: 21px; }
+	
+
+/*	--------------------------------------------------
+	:: Tables
+	-------------------------------------------------- */
+	table { background: #fff; -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; margin: 0 0 18px; border: 1px solid #ddd;  }
+	
+	table thead, table tfoot { background: #f5f5f5; }
+	table thead tr th,
+	table tfoot tr th,
+	table tbody tr td,
+	table tr td,
+	table tfoot tr td { font-size: 12px; line-height: 18px; text-align: left; }
+	table thead tr th,
+	table tfoot tr td { padding: 8px 10px 9px; font-size: 14px; font-weight: bold; color: #222; }
+	table thead tr th:first-child, table tfoot tr td:first-child { border-left: none; }
+	table thead tr th:last-child, table tfoot tr td:last-child { border-right: none; }
+
+	table tbody tr.even,
+	table tbody tr.alt { background: #f9f9f9; }
+	table tbody tr:nth-child(even) { background: #f9f9f9; }
+	table tbody tr td { color: #333; padding: 9px 10px; vertical-align: top; border: none; }
+
+/* -------------------------------------------------- 
+	:: Misc
+---------------------------------------------------*/
+	.left       { float: left; }
+	.right      { float: right; }
+	.hide     	{ display: none; }
+	.highlight 	{ background: #ff0; }
+	
+/* Arfully Masterminded by ZURB */
+
+/*	--------------------------------------------------
+    :: Typography
+	-------------------------------------------------- */
+	h1, h2, h3, h4, h5, h6 { color: #181818; font-weight: bold; line-height: 1.25 }
+	h1 a, h2 a, h3 a, h4 a, h5 a, h6 a { font-weight: inherit; }
+	h1 { font-size: 46px; font-size: 4.6rem; margin-bottom: 12px;}
+	h2 { font-size: 35px; font-size: 3.5rem; margin-bottom: 9px; }
+	h3 { font-size: 28px; font-size: 2.8rem; margin-bottom: 9px; }
+	h4 { font-size: 21px; font-size: 2.1rem; margin-bottom: 3px; }
+	h5 { font-size: 18px; font-size: 1.8rem; font-weight: normal; margin-bottom: 3px;  }
+	h6 { font-size: 15px; font-size: 1.5rem; font-weight: normal; }
+
+	.subheader { color: #777; font-weight: 300; margin-bottom: 24px; }
+
+	p { line-height: 17px; margin: 0 0 18px; }
+	p img { margin: 0; }
+	p.lead { font-size: 18px; font-size: 1.8rem; line-height: 24px;  }
+	
+	em, i { font-style: italic; line-height: inherit; }
+	strong, b { font-weight: bold; line-height: inherit; }
+	small { font-size: 60%; line-height: inherit; }
+	
+	h1 small, h2 small, h3 small, h4 small, h5 small { color: #777; }
+	
+	/*	Blockquotes  */
+	blockquote, blockquote p { line-height: 20px; color: #777; }
+	blockquote { margin: 0 0 18px; padding: 9px 20px 0 19px; border-left: 1px solid #ddd; }
+	blockquote cite { display: block; font-size: 12px; font-size: 1.2rem; color: #555; }
+	blockquote cite:before { content: "\2014 \0020"; }
+	blockquote cite a, blockquote cite a:visited { color: #555; }
+	
+	hr { border: solid #ddd; border-width: 1px 0 0; clear: both; margin: 12px 0 18px; height: 0; }
+	
+	abbr, acronym { text-transform: uppercase; font-size: 90%; color: #222; border-bottom: 1px solid #ddd; cursor: help; }
+	abbr { text-transform: none; }
+
+	/**
+ 	 * Print styles.
+	 *
+	 * Inlined to avoid required HTTP connection: www.phpied.com/delay-loading-your-print-css/
+	 * Credit to Paul Irish and HTML5 Boilerplate (html5boilerplate.com)
+	 */
+	.print-only { display: none !important; }
+	@media print {
+		* { background: transparent !important; color: black !important; text-shadow: none !important; filter:none !important;
+		-ms-filter: none !important; } /* Black prints faster: sanbeiji.com/archives/953 */
+		p a, p a:visited { color: #444 !important; text-decoration: underline; }
+		p a[href]:after { content: " (" attr(href) ")"; }
+		abbr[title]:after { content: " (" attr(title) ")"; }
+		.ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { content: ""; }  /* Don't show links for images, or javascript/internal links */
+		pre, blockquote { border: 1px solid #999; page-break-inside: avoid; }
+		thead { display: table-header-group; } /* css-discuss.incutio.com/wiki/Printing_Tables */
+		tr, img { page-break-inside: avoid; }
+		@page { margin: 0.5cm; }
+		p, h2, h3 { orphans: 3; widows: 3; }
+		h2, h3{ page-break-after: avoid; }
+		.hide-on-print { display: none !important; }
+		.print-only { display: block !important; }
+	}
+/* Arfully Masterminded by ZURB */
+
+/* --------------------------------------------------
+	:: Grid
+	
+	This is the mobile-friendly, responsive grid that
+	lets Foundation work much of its magic.
+	
+	-------------------------------------------------- */
+
+	.container { padding: 0 20px; }
+	
+	.row { width: 100%; max-width: 980px; min-width: 727px; margin: 0 auto; }
+	/* To fix the grid into a certain size, set max-width to width */
+	.row .row { min-width: 0; }
+	
+	.column, .columns { margin-left: 4.4%; float: left; min-height: 1px; position: relative; }
+	.column:first-child, .columns:first-child { margin-left: 0; }
+	
+	.row .one.columns 		{ width: 4.3%; }
+	.row .two.columns 		{ width: 13%; }
+	.row .three.columns 	{ width: 21.68%; }
+	.row .four.columns 		{ width: 30.37%; }
+	.row .five.columns 		{ width: 39.1%; }
+	.row .six.columns 		{ width: 47.8%; }
+	.row .seven.columns 	{ width: 56.5%; }
+	.row .eight.columns 	{ width: 65.2%; }
+	.row .nine.columns 		{ width: 73.9%; }
+	.row .ten.columns 		{ width: 82.6%; }
+	.row .eleven.columns 	{ width: 91.3%; }
+	.row .twelve.columns 	{ width: 100%; }
+	
+	.row .offset-by-one 	{ margin-left: 13.1%;  }
+	.row .offset-by-two 	{ margin-left: 21.8%;  }
+	.row .offset-by-three 	{ margin-left: 30.5%;  }
+	.row .offset-by-four 	{ margin-left: 39.2%;  }
+	.row .offset-by-five 	{ margin-left: 47.9%;  }
+	.row .offset-by-six 	{ margin-left: 56.6%;  }
+	.row .offset-by-seven 	{ margin-left: 65.3%;  }
+	.row .offset-by-eight 	{ margin-left: 74.0%;  }
+	.row .offset-by-nine 	{ margin-left: 82.7%;  }
+	.row .offset-by-ten 	{ margin-left: 91.4%;  }
+	
+	.row .centered { float: none; margin: 0 auto; }
+
+	.row .offset-by-one:first-child 	{ margin-left: 8.7%;  }
+	.row .offset-by-two:first-child 	{ margin-left: 17.4%;  }
+	.row .offset-by-three:first-child 	{ margin-left: 26.1%;  }
+	.row .offset-by-four:first-child 	{ margin-left: 34.8%;  }
+	.row .offset-by-five:first-child 	{ margin-left: 43.5%;  }
+	.row .offset-by-six:first-child 	{ margin-left: 52.2%;  }
+	.row .offset-by-seven:first-child 	{ margin-left: 60.9%;  }
+	.row .offset-by-eight:first-child 	{ margin-left: 69.6%;  }
+	.row .offset-by-nine:first-child 	{ margin-left: 78.3%;  }
+	.row .offset-by-ten:first-child 	{ margin-left: 87%;  }
+	.row .offset-by-eleven:first-child 	{ margin-left: 95.7%;  }
+	
+	/* Source Ordering */
+	.push-two 		{ left: 17.4% }
+	.push-three 	{ left: 26.1%; }
+	.push-four 		{ left: 34.8%; }
+	.push-five 		{ left: 43.5%; }
+	.push-six 		{ left: 52.2%; }
+	.push-seven 	{ left: 60.9%; }
+	.push-eight 	{ left: 69.6%; }
+	.push-nine 		{ left: 78.3%; }
+	.push-ten 		{ left: 87%; }
+	
+	.pull-two 		{ right: 17.4% }
+	.pull-three 	{ right: 26.1%; }
+	.pull-four 		{ right: 34.8%; }
+	.pull-five 		{ right: 43.5%; }
+	.pull-six 		{ right: 52.2%; }
+	.pull-seven 	{ right: 60.9%; }
+	.pull-eight 	{ right: 69.6%; }
+	.pull-nine 		{ right: 78.3%; }
+	.pull-ten 		{ right: 87%; }
+	
+	
+	
+	img, object, embed { max-width: 100%; height: auto; }
+	img { -ms-interpolation-mode: bicubic; }
+	 
+	 /* Nicolas Gallagher's micro clearfix */
+	 .row:before, .row:after, .clearfix:before, .clearfix:after { content:""; display:table; }
+	 .row:after, .clearfix:after { clear: both; }
+	 .row, .clearfix { zoom: 1; }
+	 
+	 
+	
+	
+/*	--------------------------------------------------
+	:: Block grids
+	
+	These are 2-up, 3-up, 4-up and 5-up ULs, suited
+	for repeating blocks of content. Add 'mobile' to
+	them to switch them just like the layout grid
+	(one item per line) on phones
+	
+	For IE7/8 compatibility block-grid items need to be
+	the same height. You can optionally uncomment the
+	lines below to support arbitrary height, but know
+	that IE7/8 do not support :nth-child.
+	-------------------------------------------------- */
+	
+	.block-grid { display: block; overflow: hidden; }
+	.block-grid>li { display: block; height: auto; float: left; }
+	
+	.block-grid.two-up { margin-left: -4% }
+	.block-grid.two-up>li { margin-left: 4%; width: 46%; }
+/* 	.block-grid.two-up>li:nth-child(2n+1) {clear: left;} */
+	
+	.block-grid.three-up { margin-left: -2% }
+	.block-grid.three-up>li { margin-left: 2%; width: 31.3%; }
+/* 	.block-grid.three-up>li:nth-child(3n+1) {clear: left;} */
+	
+	.block-grid.four-up { margin-left: -2% }
+	.block-grid.four-up>li { margin-left: 2%; width: 23%; }
+/* 	.block-grid.four-up>li:nth-child(4n+1) {clear: left;} */
+	
+	.block-grid.five-up { margin-left: -1.5% }
+	.block-grid.five-up>li { margin-left: 1.5%; width: 18.5%; }
+/* 	.block-grid.five-up>li:nth-child(5n+1) {clear: left;} */
+
+/* Artfully masterminded by ZURB  */
+
+
+
+/* --------------------------------------------------
+   Table of Contents
+-----------------------------------------------------
+:: Buttons
+:: Alerts
+:: Notices/Alerts
+:: Tabs
+:: Pagination
+:: Lists
+:: Panels
+:: Nav
+:: Video
+:: Microformats
+*/
+
+
+
+
+/*	--------------------------------------------------
+	Buttons
+	-------------------------------------------------- */
+
+	.button {
+		background: #00a6fc;
+		display: inline-block;
+		text-align: center;
+		padding: 9px 34px 11px;
+		color: #fff;
+		text-decoration: none;
+		font-weight: bold;
+		line-height: 1;
+		font-family: "Helvetica Neue", "Helvetica", Arial, Verdana, sans-serif;
+		position: relative;
+		cursor: pointer;
+		border: none;
+	}
+	
+  	/* Don't use native buttons on iOS */
+	input[type=submit].button { -webkit-appearance: none; }
+	
+	.button.nice { 
+		background: #00a6fc url(../images/misc/button-gloss.png) repeat-x 0 -34px;
+		-moz-box-shadow: inset 0 1px 0 rgba(255,255,255,.5);
+		-webkit-box-shadow: inset 0 1px 0 rgba(255,255,255,.5);
+		text-shadow: 0 -1px 1px rgba(0,0,0,0.28);
+		background: #00a6fc url(../images/misc/button-gloss.png) repeat-x 0 -34px, -moz-linear-gradient(top, rgba(255,255,255,.4) 0%, transparent 100%);
+		background: #00a6fc url(../images/misc/button-gloss.png) repeat-x 0 -34px, -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,.4)), color-stop(100%,transparent));
+		border: 1px solid #0593dc;
+		-webkit-transition: background-color .15s ease-in-out;
+		-moz-transition: background-color .15s ease-in-out;
+		-o-transition: background-color .15s ease-in-out;
+	}
+
+	.button.radius {
+		-moz-border-radius: 3px;
+		-webkit-border-radius: 3px;
+		border-radius: 3px;
+	}
+	.button.round {
+		-moz-border-radius: 1000px;
+		-webkit-border-radius: 1000px;
+		border-radius: 1000px;
+	}
+
+	.button.full-width {
+		width: 100%;
+		padding-left: 0 !important;
+		padding-right: 0 !important;
+		text-align: center;
+	}
+
+	.button.left-align {
+		text-align: left;
+		text-indent: 12px;
+	}
+	
+	/* Sizes ---------- */
+	.small.button 			{ font-size: 11px; padding: 8px 20px 10px; width: auto; }
+	.medium.button 			{ font-size: 13px; width: auto; }
+	.large.button 			{ font-size: 18px; padding: 11px 48px 13px; width: auto; }
+
+	/* Nice Sizes ---------- */
+	.nice.small.button 		{ background-position: 0 -36px; }
+	.nice.large.button 		{ background-position: 0 -30px; }
+
+	/* Colors ---------- */
+	.blue.button			{ background-color: #00a6fc;  }
+	.red.button				{ background-color: #e91c21; }
+	.white.button			{ background-color: #e9e9e9; color: #333; }
+	.black.button			{ background-color: #141414; }
+	
+	/* Nice Colors ---------- */
+	.nice.blue.button		{ border: 1px solid #0593dc;  }
+	.nice.red.button		{ border: 1px solid #b90b0b;  }
+	.nice.white.button		{ border: 1px solid #cacaca; text-shadow: none !important; }
+	.nice.black.button		{ border: 1px solid #000; }
+	
+	/* Hovers ---------- */
+	.button:hover, .button:focus 				{ background-color: #0192dd; color: #fff; }
+	.blue.button:hover, .blue.button:focus		{ background-color: #0192dd; 	}
+	.red.button:hover, .red.button:focus 		{ background-color: #d01217; 	}
+	.white.button:hover, .white.button:focus	{ background-color: #dadada; color: #333; }
+	.black.button:hover, .black.button:focus	{ background-color: #000; }
+	
+	/* Disabled ---------- */
+	.button.disabled, .button[disabled] { opacity: 0.6; cursor: default; }
+
+
+
+/*	--------------------------------------------------
+	Alerts
+	-------------------------------------------------- */
+
+	div.alert-box { display: block; padding: 6px 7px; font-weight: bold; font-size: 13px; background: #eee; border: 1px solid rgba(0,0,0,0.1); margin-bottom: 12px; border-radius: 3px; -webkit-border-radius: 3px; -moz-border-radius: 3px; text-shadow: 0 1px rgba(255,255,255,0.9); position: relative; }
+	.alert-box.success { background-color: #7fae00; color: #fff; text-shadow: 0 -1px rgba(0,0,0,0.3); }
+	.alert-box.warning { background-color: #c08c00; color: #fff; text-shadow: 0 -1px rgba(0,0,0,0.3); }
+	.alert-box.error { background-color: #c00000; color: #fff; text-shadow: 0 -1px rgba(0,0,0,0.3); }
+	
+	.alert-box a.close { color: #000; position: absolute; right: 4px; top: 0; font-size: 18px; opacity: 0.2; padding: 4px; }
+	.alert-box a.close:hover,.alert-box a.close:focus { opacity: 0.4; }
+
+
+/*    --------------------------------------------------
+    Tabs
+    -------------------------------------------------- */
+    dl.tabs { display: block; margin: 0 0 20px 0; padding: 0; height: 30px; border-bottom: solid 1px #ddd; }
+    dl.tabs dt { display: block; width: auto; height: 30px; padding: 0 9px 0 20px; line-height: 30px; float: left; color: #999; font-size: 11px; text-transform: uppercase; cursor: default; }
+    dl.tabs dt:first-child { padding: 0 9px 0 0; }
+    dl.tabs dd { display: block; width: auto; height: 30px; padding: 0; float: left; }
+    dl.tabs dd a { display: block; width: auto; height: 29px; padding: 0 9px; line-height: 30px; border: solid 1px #ddd; margin: 0 -1px 0 0; color: #555; background: #eee; }
+    dl.tabs dd a.active { background: #fff; border-width: 1px 1px 0 1px; height: 30px; }
+
+		.nice.tabs { border-bottom: solid 1px #eee; margin: 0 0 30px 0; height:43px; }
+		.nice.tabs dd a { padding: 7px 18px 9px; font-size: 15px; font-size: 1.5rem; color: #555555; background: none; border: none; }
+		.nice.tabs dd a.active { font-weight: bold; color: #333; background: #fff; border-left: 1px solid #eee; border-right: 1px solid #eee; border-top: 3px solid #00a6fc; margin: 0 10px; position: relative; top: -5px; }
+		.nice.tabs dd:first-child a.active { margin-left: 0; }
+		
+	dl.tabs.vertical { height: auto; }
+	dl.tabs.vertical dt, dl.tabs.vertical dd, dl.nice.tabs.vertical dt, dl.nice.tabs.vertical dd { float: none; height: auto; }
+	dl.tabs.vertical dd a { display: block; width: auto; height: auto; padding: 15px 20px; line-height: 1; border: solid 0 #ccc; border-width: 1px 1px 0; margin: 0; color: #555; background: #eee; font-size: 15px; font-size: 1.5rem; }
+	dl.tabs.vertical dd a.active { height: auto; margin: 0; border-width: 1px 0 0; background: #fff; }
+	
+		.nice.tabs.vertical { border-bottom: solid 1px #eee; height: auto; }
+		.nice.tabs.vertical dd a { padding: 15px 20px; border: none; border-left: 1px solid #eee; border-right: 1px solid #eee; border-top: 1px solid #eee; background: #fff; }
+		.nice.tabs.vertical dd a.active { border: none; background: #00a6fc; color: #fff; margin: 0; position: static; top: 0; height: auto; }
+		.nice.tabs.vertical dd:first-child a.active { margin: 0; }
+    
+    ul.tabs-content { margin: 0; display: block; }
+    ul.tabs-content>li { display:none; }
+    ul.tabs-content>li.active { display: block; }
+    
+    dl.contained, dl.nice.contained { margin-bottom: 0; }
+    dl.contained.tabs dd a { padding: 0 14px; }
+    dl.nice.contained.tabs dd a { padding: 7px 18px 9px; }
+
+    ul.contained.tabs-content { padding: 0; }
+	ul.contained.tabs-content>li { padding: 20px; border: solid 0 #ddd; border-width: 0 1px 1px 1px; }
+	ul.nice.contained.tabs-content>li { border-color: #eee; }
+	
+/*  --------------------------------------------------
+    Pagination
+    -------------------------------------------------- */
+    ul.pagination { display: block; height: 24px; margin-left: -5px; }
+    ul.pagination li { float: left; display: block; height: 24px; color: #999; font-size: 15px; margin-left: 5px; }
+    ul.pagination li a { display: block; padding: 6px 7px 4px; color: #555; }
+    ul.pagination li.current a, ul.pagination li:hover a, ul.pagination li a:focus { border-bottom: solid 2px #00a6fc; color: #141414; }
+    ul.pagination li.unavailable a { cursor: default; color: #999; }
+    ul.pagination li.unavailable:hover a, ul.pagination li.unavailable a:focus { border-bottom: none; }
+    
+/*  --------------------------------------------------
+    Lists
+    -------------------------------------------------- */
+    ul.nice, ol.nice { list-style: none; margin: 0; }
+    ul.nice li, ol.nice li { padding-left: 13px; position: relative }
+    ul.nice li span.bullet, ol.nice li span.number { position: absolute; left: 0; top: 0; color: #ccc; }
+
+/*	--------------------------------------------------
+	Panels
+	-------------------------------------------------- */
+	div.panel {
+		padding: 20px 20px 2px 20px;
+		background: #efefef;
+		background: -moz-linear-gradient(top, #FFFFFF 0%, #F4F4F4 100%);
+		background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#FFFFFF), color-stop(100%,#F4F4F4));
+		filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#FFFFFF', endColorstr='#F4F4F4',GradientType=0 );
+		box-shadow: 0 2px 5px rgba(0,0,0,0.15);
+		-webkit-box-shadow: 0 2px 5px rgba(0,0,0,0.15);
+		-moz-box-shadow: 0 2px 5px rgba(0,0,0,0.25);
+		margin: 0 0 20px 0;
+	}
+
+/*	--------------------------------------------------
+   	Nav Bar with Dropdowns
+	-------------------------------------------------- */
+	
+	.nav-bar { height: 45px; background: #fff; margin-top: 20px; border: 1px solid #ddd; }	
+	.nav-bar>li { float: left; display: block; position: relative; padding: 0; margin: 0; border-right: 1px solid #ddd; line-height: 45px; }
+	.nav-bar>li>a { position: relative; font-size: 14px; padding: 0 20px; display: block; text-decoration: none; font-size: 15px; font-size: 1.5rem; }
+	.nav-bar>li>input { margin: 0 16px; }
+	.nav-bar>li ul { margin-bottom: 0; }
+	.nav-bar>li li { line-height: 1.3; }
+	.nav-bar>li.has-flyout>a { padding-right: 36px; }
+	.nav-bar>li.has-flyout>a:after { content: ""; width: 0; height: 0; border-left: 4px solid transparent; border-right: 4px solid transparent; border-top: 4px solid #2a85e8; display: block; position: absolute; right: 18px; bottom: 20px; }
+	.nav-bar>li:hover>a { color: #141414; z-index: 2; }
+	.nav-bar>li:hover>a:after { border-top-color: #141414; }
+
+	.flyout { background: #fff; margin: 0; padding: 20px; border: 1px solid #ddd; position: absolute; top: 45px; left: -1px; width: 400px; z-index: 10; }
+	.flyout.small { width: 200px; }
+	.flyout.large { width: 600px; }
+	.flyout.right { left: auto; right: 0; }
+	.flyout p:last-child { margin-bottom: 0; }
+	.nav-bar>li .flyout { display: none; }
+	.nav-bar>li:hover .flyout { display: block; }
+
+
+/*	--------------------------------------------------
+   	Video
+   	Mad props to http://www.alistapart.com/articles/creating-intrinsic-ratios-for-video/
+	-------------------------------------------------- */
+	
+	.flex-video {
+		position: relative;
+		padding-top: 25px;
+		padding-bottom: 67.5%;
+		height: 0;
+		margin-bottom: 16px;
+		overflow: hidden;
+	}
+	
+	.flex-video.widescreen { padding-bottom: 57.25%; }
+	.flex-video.vimeo { padding-top: 0; }
+	
+	.flex-video iframe,
+	.flex-video object,
+	.flex-video embed {
+		position: absolute;
+		top: 0;
+		left: 0;
+		width: 100%;
+		height: 100%;
+	}
+
+
+
+/*	--------------------------------------------------
+   	Microformats
+	-------------------------------------------------- */
+	
+	/* hCard */
+	ul.vcard { display: inline-block; margin: 0 0 12px 0; border: 1px solid #ddd; padding: 10px; }
+	ul.vcard li { margin: 0; display: block; }
+	ul.vcard li.fn { font-weight: bold; font-size: 15px; font-size: 1.5rem; }
+	
+	p.vevent span.summary { font-weight: bold; }
+	p.vevent abbr { cursor: default; text-decoration: none; font-weight: bold; border: none; padding: 0 1px; }
+	
+	
+	
+	
+	
+/* 	Artfully masterminded by ZURB  
+	Make sure to include app.js / foundation.js if you are going to use inline label inputs 
+*/
+ 
+ 
+/* -----------------------------------------
+   Standard Forms
+----------------------------------------- */
+
+	form { margin: 0 0 18px; }
+	form label { display: block; font-size: 13px; line-height: 18px; cursor: pointer; margin-bottom: 9px; }
+
+	input.input-text, textarea { border-right: 1px solid #bbb; border-bottom: 1px solid #bbb; }
+	input.input-text, textarea, select { display: block; margin-bottom: 9px; }
+	label + input.input-text, label + textarea, label + select, label + div.dropdown, select + div.dropdown { margin-top: -9px; }
+
+	/* Text input and textarea font and padding */
+	input.input-text, textarea { font-size: 13px; padding: 4px 3px 2px; background: #fff; }
+	input.input-text:focus, textarea:focus { outline: none !important; }
+	input.input-text.oversize, textarea.oversize { font-size: 18px !important; padding: 4px 5px !important; }
+	input.input-text:focus, textarea:focus { background: #f9f9f9; }
+
+	/* Inlined Label Style */
+	input.placeholder, textarea.placeholder { color: #888; }
+
+	/* Text input and textarea sizes */
+	input.input-text, textarea { width: 254px; }
+	input.small, textarea.small { width: 134px; }
+	input.medium, textarea.medium { width: 254px; }
+	input.large, textarea.large { width: 434px; }
+
+	/* Fieldsets */
+	form fieldset { padding: 9px 9px 2px 9px; border: solid 1px #ddd; margin: 18px 0; }
+
+	/* Inlined Radio & Checkbox */
+	.form-field input[type=radio], div.form-field input[type=checkbox] { display: inline; width:auto; margin-bottom:0; }
+
+	/* Errors */
+	.form-field.error input, input.input-text.red { border-color: #C00000; background-color: rgba(255,0,0,0.15); }
+	.form-field.error label, label.red { color: #C00000; }
+	.form-field.error small, small.error { margin-top: -6px; display: block; margin-bottom: 9px; font-size: 11px; color: #C00000; width: 260px; }
+
+	.small + small.error { width: 140px; }
+	.medium + small.error { width: 260px; }
+	.large + small.error { width: 440px; }
+
+	/* -----------------------------------------
+	   Nicer Forms
+	----------------------------------------- */
+	form.nice div.form-field input, form.nice input.input-text, form.nice textarea { border: solid 1px #bbb; border-radius: 2px; -webkit-border-radius: 2px; -moz-border-radius: 2px; }
+	form.nice div.form-field input, form.nice input.input-text, form.nice textarea { font-size: 13px; padding: 6px 3px 4px; outline: none !important; background: url(../images/misc/input-bg.png) #fff; }
+	form.nice div.form-field input:focus, form.nice input.input-text:focus, form.nice textarea:focus { background-color: #f9f9f9; }
+
+	form.nice fieldset { border-radius: 3px; -webkit-border-radius: 3px; -moz-border-radius: 3px; }
+
+	form.nice div.form-field input[type=radio], form.nice div.form-field input[type=checkbox] { display: inline; width:auto; margin-bottom:0; }
+
+	form.nice div.form-field.error small, form.nice small.error { padding: 6px 4px; border: solid 0 #C00000; border-width: 0 1px 1px 1px; margin-top: -10px; background: #C00000; color: #fff; font-size: 12px; font-weight: bold; border-bottom-left-radius: 2px; border-bottom-right-radius: 2px; -webkit-border-bottom-left-radius: 2px; -webkit-border-bottom-right-radius: 2px; -moz-border-radius-bottomleft: 2px; -moz-border-radius-bottomright: 2px; }
+
+ 	form.nice div.form-field.error .small + small, form.nice .small + small.error { width: 132px; }
+	form.nice div.form-field.error .medium + small, form.nice .medium + small.error { width: 252px; }
+	form.nice div.form-field.error .large + small, form.nice .large + small.error { width: 432px; }
+
+	/* -----------------------------------------
+	   Custom Forms
+	----------------------------------------- */
+
+	form.custom span.custom { display: inline-block; width: 14px; height: 14px; position: relative; top: 2px; border: solid 1px #ccc; background: url(../images/misc/custom-form-sprites.png) 0 0 no-repeat; }
+	form.custom span.custom.radio { border-radius: 7px; -webkit-border-radius: 7px; -moz-border-radius: 7px; }
+	form.custom span.custom.radio.checked { background-position: 0 -14px; }
+	form.custom span.custom.checkbox.checked { background-position: 0 -28px; }
+	
+	form.custom div.custom.dropdown { position: relative; display: inline-block; width: auto; height: 28px; margin-bottom: 9px; }
+	form.custom div.custom.dropdown a.current { display: block; width: auto; line-height: 26px; padding: 0 38px 0 6px; border: solid 1px #ddd; color: #141414; }
+	form.custom div.custom.dropdown a.selector { position: absolute; width: 26px; height: 26px; display: block; background: url(../images/misc/custom-form-sprites.png) -14px 0 no-repeat; right: 0; top: 0; border: solid 1px #ddd; }
+	form.custom div.custom.dropdown:hover a.selector,
+	form.custom div.custom.dropdown.open a.selector { background-position: -14px -26px; }
+	
+	form.custom div.custom.dropdown ul { position: absolute; width: auto; display: none; margin: 0; left: 0; top: 27px; margin: 0; padding: 0; background: rgba(255,255,255,0.9); border: solid 1px #ddd; z-index: 10; }
+	form.custom div.custom.dropdown ul li { cursor: pointer; padding: 3px 38px 3px 6px; margin: 0; white-space: nowrap}
+	form.custom div.custom.dropdown ul li.selected { background: url(../images/misc/custom-form-sprites.png) right -52px no-repeat; }
+	form.custom div.custom.dropdown ul li:hover { background-color: #2a85e8; color: #fff; }
+	form.custom div.custom.dropdown ul li.selected:hover { background: url(../images/misc/custom-form-sprites.png) #2a85e8 right -78px no-repeat; }
+	form.custom div.custom.dropdown ul.show { display: block; }
+	
+	form.custom div.custom.dropdown.open ul { display: block; }
+
+	
+/* CSS for jQuery Orbit Plugin 1.2.3
+ * www.ZURB.com/playground
+ * Copyright 2010, ZURB
+ * Free to use under the MIT license.
+ * http://www.opensource.org/licenses/mit-license.php
+ 
+ 
+ 
+/* PUT IN YOUR SLIDER ID AND SIZE TO MAKE LOAD BEAUTIFULLY
+   ================================================== */
+#caseStudies { 
+	width: 1000px;
+	height: 210px;
+	background: #fff url('../images/orbit/loading.gif') no-repeat center center;
+	overflow: hidden; }
+#caseStudies>img,  
+#caseStudies>div,
+#caseStudies>a { display: none; }
+
+
+
+
+/* CONTAINER
+   ================================================== */
+
+div.orbit-wrapper {
+    width: 1px;
+    height: 1px;
+    position: relative; }
+
+div.orbit {
+    width: 1px;
+    height: 1px;
+    position: relative;
+    overflow: hidden }
+    
+div.orbit.with-bullets {
+    margin-bottom: 40px;
+}
+
+div.orbit>img {
+    position: absolute;
+    top: 0;
+    left: 0;
+    /* display: none; */ }
+
+div.orbit>a {
+    border: none;
+    position: absolute;
+    top: 0;
+    left: 0;
+    line-height: 0; 
+    display: none; }
+
+.orbit>div {
+    position: absolute;
+    top: 0;
+    left: 0;
+    width: 100%;
+    height: 100%; }
+
+/* Note: If your slider only uses content or anchors, you're going to want to put the width and height declarations on the ".orbit>div" and "div.orbit>a" tags in addition to just the .orbit-wrapper */
+
+
+/* TIMER
+   ================================================== */
+
+div.timer {
+    width: 40px;
+    height: 40px;
+    overflow: hidden;
+    position: absolute;
+    top: 10px;
+    right: 10px;
+    opacity: .6;
+    cursor: pointer;
+    z-index: 1001; }
+
+span.rotator {
+    display: block;
+    width: 40px;
+    height: 40px;
+    position: absolute;
+    top: 0;
+    left: -20px;
+    background: url(../images/orbit/rotator-black.png) no-repeat;
+    z-index: 3; }
+
+span.mask {
+    display: block;
+    width: 20px;
+    height: 40px;
+    position: absolute;
+    top: 0;
+    right: 0;
+    z-index: 2;
+    overflow: hidden; }
+
+span.rotator.move {
+    left: 0 }
+
+span.mask.move {
+    width: 40px;
+    left: 0;
+    background: url(../images/orbit/timer-black.png) repeat 0 0; }
+
+span.pause {
+    display: block;
+    width: 40px;
+    height: 40px;
+    position: absolute;
+    top: 0;
+    left: 0;
+    background: url(../images/orbit/pause-black.png) no-repeat;
+    z-index: 4;
+    opacity: 0; }
+
+span.pause.active {
+    background: url(../images/orbit/pause-black.png) no-repeat 0 -40px }
+
+div.timer:hover span.pause,
+span.pause.active {
+    opacity: 1 }
+
+
+/* CAPTIONS
+   ================================================== */
+
+.orbit-caption {
+    display: none;
+    font-family: "HelveticaNeue", "Helvetica-Neue", Helvetica, Arial, sans-serif; }
+
+.orbit-wrapper .orbit-caption {
+    background: #000;
+    background: rgba(0,0,0,.6);
+    z-index: 1000;
+    color: #fff;
+	text-align: center;
+	padding: 7px 0;
+    font-size: 13px;
+    position: absolute;
+    right: 0;
+    bottom: 0;
+    width: 100%; }
+
+
+/* DIRECTIONAL NAV
+   ================================================== */
+
+div.slider-nav {
+    display: block }
+
+div.slider-nav span {
+    width: 78px;
+    height: 100px;
+    text-indent: -9999px;
+    position: absolute;
+    z-index: 1000;
+    top: 50%;
+    margin-top: -50px;
+    cursor: pointer; }
+
+div.slider-nav span.right {
+    background: url(../images/orbit/right-arrow.png);
+    right: 0; }
+
+div.slider-nav span.left {
+    background: url(../images/orbit/left-arrow.png);
+    left: 0; }
+
+/* BULLET NAV
+   ================================================== */
+
+.orbit-bullets {
+    position: absolute;
+    z-index: 1000;
+    list-style: none;
+    bottom: -40px;
+    left: 50%;
+	margin-left: -50px;
+    padding: 0; }
+
+.orbit-bullets li {
+    float: left;
+    margin-left: 5px;
+    cursor: pointer;
+    color: #999;
+    text-indent: -9999px;
+    background: url(../images/orbit/bullets.jpg) no-repeat 4px 0;
+    width: 13px;
+    height: 12px;
+    overflow: hidden; }
+
+.orbit-bullets li.active {
+    color: #222;
+    background-position: -8px 0; }
+    
+.orbit-bullets li.has-thumb {
+    background: none;
+    width: 100px;
+    height: 75px; }
+
+.orbit-bullets li.active.has-thumb {
+    background-position: 0 0;
+    border-top: 2px solid #000; }
+    
+/* FLUID LAYOUT
+   ================================================== */
+.orbit .fluid-placeholder {
+  visibility: hidden;
+  position: static;
+  display: block;
+  width: 100%;
+}
+
+.orbit, .orbit-wrapper { width: 100% !important; }
+
+.orbit-bullets {
+    position: absolute;
+    z-index: 1000;
+    list-style: none;
+    bottom: -50px;
+    left: 50%;
+	margin-left: -50px;
+    padding: 0; }
+
+.orbit-bullets li {
+    float: left;
+    margin-left: 5px;
+    cursor: pointer;
+    color: #999;
+    text-indent: -9999px;
+    background: url(../images/orbit/bullets.jpg) no-repeat 4px 0;
+    width: 13px;
+    height: 12px;
+    overflow: hidden; }
+
+.orbit-bullets li.has-thumb {
+    background: none;
+    width: 100px;
+    height: 75px; }
+
+.orbit-bullets li.active {
+    color: #222;
+    background-position: -8px 0; }
+
+.orbit-bullets li.active.has-thumb {
+    background-position: 0 0;
+    border-top: 2px solid #000; }
+/*	--------------------------------------------------
+	Reveal Modals
+	-------------------------------------------------- */
+		
+	.reveal-modal-bg { 
+		position: fixed; 
+		height: 100%;
+		width: 100%;
+		background: #000;
+		z-index: 2000;
+		display: none;
+		top: 0;
+		left: 0; 
+		}
+	
+	.reveal-modal {
+		visibility: hidden;
+		top: 100px; 
+		left: 50%;
+		margin-left: -300px;
+		width: 520px;
+		background: #eee url(../images/misc/modal-gloss.png) no-repeat -200px -80px;
+		position: absolute;
+		z-index: 2001;
+		padding: 30px 40px 34px;
+		-moz-border-radius: 5px;
+		-webkit-border-radius: 5px;
+		border-radius: 5px;
+		-moz-box-shadow: 0 0 10px rgba(0,0,0,.4);
+		-webkit-box-shadow: 0 0 10px rgba(0,0,0,.4);
+		box-shadow: 0 0 10px rgba(0,0,0,.4);
+		}
+		
+	.reveal-modal.small 		{ width: 200px; margin-left: -140px;}
+	.reveal-modal.medium 		{ width: 400px; margin-left: -240px;}
+	.reveal-modal.large 		{ width: 600px; margin-left: -340px;}
+	.reveal-modal.xlarge 		{ width: 800px; margin-left: -440px;}
+	
+	.reveal-modal .close-reveal-modal {
+		font-size: 22px;
+		line-height: .5;
+		position: absolute;
+		top: 8px;
+		right: 11px;
+		color: #aaa;
+		text-shadow: 0 -1px 1px rbga(0,0,0,.6);
+		font-weight: bold;
+		cursor: pointer;
+		} 
+	
+	.reveal-modal .row {
+		min-width: 0;
+	}
+	
+	/* Mobile */
+		
+		@media handheld, only screen and (device-width: 768px), (device-width: 800px) {
+			.reveal-modal-bg { position: absolute; }
+			
+			.reveal-modal,
+			.reveal-modal.small,
+			.reveal-modal.medium,
+			.reveal-modal.large,
+			.reveal-modal.xlarge { width: 60%; top: 30%; left: 15%; margin-left: 0; padding: 5%; height: auto; }
+		}
+		
+		@media handheld, only screen and (max-width: 767px) {
+			.reveal-modal-bg { position: absolute; }
+			
+			.reveal-modal,
+			.reveal-modal.small,
+			.reveal-modal.medium,
+			.reveal-modal.large,
+			.reveal-modal.xlarge { width: 80%; top: 15%; left: 5%; margin-left: 0; padding: 5%; height: auto; }
+		}
+	
+	
+	/*
+			
+	NOTES
+	
+	Close button entity is &#215;
+	
+	Example markup
+	
+	<div id="myModal" class="reveal-modal">
+		<h2>Awesome. I have it.</h2>
+		<p class="lead">Your couch.  I it's mine.</p>
+		<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. In ultrices aliquet placerat. Duis pulvinar orci et nisi euismod vitae tempus lorem consectetur. Duis at magna quis turpis mattis venenatis eget id diam. </p>
+		<a class="close-reveal-modal">&#215;</a>
+	</div>
+	
+	*/
+/* --------------------------------------------------
+	:: Typography
+	-------------------------------------------------- */
+	
+	@media handheld, only screen and (max-width: 767px) {
+		h1 { font-size: 32px; font-size: 3.2rem; line-height: 1.3; }
+		h2 { font-size: 28px; font-size: 2.8rem; line-height: 1.3; }
+		h3 { font-size: 21px; font-size: 2.1rem; line-height: 1.3; }
+		h4 { font-size: 18px; font-size: 1.8rem; line-height: 1.2; }
+		h5 { font-size: 16px; font-size: 1.6rem; line-height: 1.2; }
+		h6 { font-size: 15px; font-size: 1.5rem; line-height: 1.2; }
+		body, p {  font-size: 15px; font-size: 1.5rem; line-height: 1.4; }
+	}
+
+
+/* --------------------------------------------------
+	:: Grid
+	-------------------------------------------------- */
+	
+	/* Tablet screens */
+	@media only screen and (device-width: 768px), (device-width: 800px) {
+		/* Currently unused */
+	}
+	
+	
+	/* Mobile */
+	@media only screen and (max-width: 767px) {		
+		body { -webkit-text-size-adjust: none; -ms-text-size-adjust: none; width: 100%; min-width: 0; margin-left: 0; margin-right: 0; padding-left: 0; padding-right: 0; }
+		.container { min-width: 0; margin-left: 0; margin-right: 0; }
+		.row { width: 100%; min-width: 0; margin-left: 0; margin-right: 0; }
+		.row .row .column, .row .row .columns { padding: 0; }
+		.column, .columns { width: auto !important; float: none; margin-left: 0; margin-right: 0; }
+		.column:last-child, .columns:last-child { margin-right: 0; }
+		
+		.offset-by-one, .offset-by-two, .offset-by-three, .offset-by-four, .offset-by-five, .offset-by-six, .offset-by-seven, .offset-by-eight, .offset-by-nine, .offset-by-ten, .offset-by-eleven, .centered { margin-left: 0 !important; }
+		
+		.push-two, .push-three, .push-four, .push-five, .push-six, .push-seven, .push-eight, .push-nine, .push-ten { left: auto; }
+		.pull-two, .pull-three, .pull-four, .pull-five, .pull-six, .pull-seven, .pull-eight, .pull-nine, .pull-ten { right: auto; }
+		
+		/* Mobile 4-column Grid */
+		.row .phone-one.column:first-child, .row .phone-two.column:first-child, .row .phone-three.column:first-child, .row .phone-four.column:first-child, .row .phone-one.columns:first-child, .row .phone-two.columns:first-child, .row .phone-three.columns:first-child, .row .phone-four.columns:first-child { margin-left: 0; }
+		
+		.row .phone-one.column, .row .phone-two.column, .row .phone-three.column, .row .phone-four.column,
+		.row .phone-one.columns, .row .phone-two.columns, .row .phone-three.columns, .row .phone-four.columns { margin-left: 4.4%; float: left; min-height: 1px; position: relative; padding: 0; }
+		
+		.row .phone-one.columns 	{ width: 21.68% !important; }
+		.row .phone-two.columns 	{ width: 47.8% !important; }
+		.row .phone-three.columns 	{ width: 73.9% !important; }
+		.row .phone-four.columns 	{ width: 100% !important; }
+		
+		.row .columns.push-one-phone { left: 26.08%; }
+		.row .columns.push-two-phone { left: 52.2% }
+		.row .columns.push-three-phone { left: 78.3% }
+		
+		.row .columns.pull-one-phone { right: 26.08% }
+		.row .columns.pull-two-phone { right: 52.2% }
+		.row .columns.pull-three-phone { right: 78.3%; }
+		
+		
+	}
+	
+	
+/* --------------------------------------------------
+	:: Block Grids
+	-------------------------------------------------- */	
+	
+	@media only screen and (max-width: 767px) {
+		.block-grid.mobile { margin-left: 0; }
+		.block-grid.mobile li { float: none; width: 100%; margin-left: 0; }
+	}
+	
+	
+
+/* -------------------------------------------------- 
+	:: Mobile Visibility Affordances
+---------------------------------------------------*/
+	
+	
+	.show-on-phones { display: none !important; }	
+	.show-on-tablets { display: none !important; }
+	.show-on-desktops { display: block !important; }
+	
+	.hide-on-phones { display: block !important; }	
+	.hide-on-tablets { display: block !important; }
+	.hide-on-desktops { display: none !important; }
+	
+	
+	@media only screen and (max-device-width: 800px), only screen and (device-width: 1024px) and (device-height: 600px), only screen and (width: 1280px) and (orientation: landscape), only screen and (device-width: 800px) {
+		.hide-on-phones { display: block !important; }
+		.hide-on-tablets { display: none !important; }
+		.hide-on-desktops { display: block !important; }
+		
+		.show-on-phones { display: none !important; }
+		.show-on-tablets { display: block !important; }
+		.show-on-desktops { display: none !important; }
+	}
+	
+		
+	@media only screen and (max-width: 767px) {
+		.hide-on-phones { display: none !important; }
+		.hide-on-tablets { display: block !important; }
+		.hide-on-desktops { display: block !important; }
+		
+		.show-on-phones { display: block !important; }
+		.show-on-tablets { display: none !important; }
+		.show-on-desktops { display: none !important; }
+	}
+	
+	/* only screen and (device-width: 1280px), only screen and (max-device-width: 1280px),  /*
+	/* Keeping this in as a reminder to address support for other tablet devices like the Xoom in the future */
+	
+	/* Specific overrides for elements that require something other than display: block */
+	
+	table.show-on-desktops { display: table !important; }
+	table.hide-on-phones { display: table !important; }	
+	table.hide-on-tablets { display: table !important; }
+	
+	@media only screen and (max-device-width: 800px), only screen and (device-width: 1024px) and (device-height: 600px), only screen and (width: 1280px) and (orientation: landscape), only screen and (device-width: 800px) {
+		table.hide-on-phones { display: block !important; }
+		table.hide-on-desktops { display: block !important; }
+		table.show-on-tablets { display: block !important; }
+	}
+	
+	@media only screen and (max-width: 767px) {
+		table.hide-on-tablets { display: block !important; }
+		table.hide-on-desktops { display: block !important; }
+		table.show-on-phones { display: block !important; }
+	}
+	
+	
+/* -------------------------------------------------- 
+	:: Forms
+---------------------------------------------------*/	
+
+
+	@media only screen and (max-width: 767px) {
+		div.form-field input, div.form-field input.small, div.form-field input.medium, div.form-field input.large, div.form-field input.oversize, input.input-text, input.input-text.oversize, textarea,
+		form.nice div.form-field input, form.nice div.form-field input.oversize, form.nice input.input-text, form.nice input.input-text.oversize, form.nice textarea { display: block; width: 96%; padding: 6px 2% 4px; font-size: 18px; }
+		form.nice div.form-field input, form.nice div.form-field input.oversize, form.nice input.input-text, form.nice input.input-text.oversize, form.nice textarea { -webkit-border-radius: 2px; -moz-border-radius: 2px; border-radius: 2px; }
+		form.nice div.form-field.error small, form.nice small.error { padding: 6px 2%; display: block; }
+		form.nice div.form-field.error .small + small, form.nice .small + .error { width: auto; }
+		form.nice div.form-field.error .medium + small, form.nice .medium + .error { width: auto; }
+		form.nice div.form-field.error .large + small, form.nice .large + .error { width: auto; }
+	}
+	
+	
+/* -------------------------------------------------- 
+	:: UI
+---------------------------------------------------*/	
+	
+	/* Buttons */
+	@media only screen and (max-width: 767px) {
+		.button { display: block; }
+		button.button { width: 100%; padding-left: 0; padding-right: 0; }
+	}
+	
+	/* Tabs */
+	
+	@media only screen and (max-width: 767px) {
+		dl.tabs.mobile, dl.nice.tabs.mobile { width: auto; margin: 20px -20px 40px; height: auto; }
+		dl.tabs.mobile dt, dl.tabs.mobile dd, dl.nice.tabs.mobile dt, dl.nice.tabs.mobile dd { float: none; height: auto; }
+
+		dl.tabs.mobile dd a { display: block; width: auto; height: auto; padding: 18px 20px; line-height: 1; border: solid 0 #ccc; border-width: 1px 0 0; margin: 0; color: #555; background: #eee; font-size: 15px; font-size: 1.5rem; }
+		dl.tabs.mobile dd a.active { height: auto; margin: 0; border-width: 1px 0 0; }
+	
+		.nice.tabs.mobile { border-bottom: solid 1px #ccc; height: auto; }
+		.nice.tabs.mobile dd a { padding: 18px 20px; border: none; border-left: none; border-right: none; border-top: 1px solid #ccc; background: #fff; }
+		.nice.tabs.mobile dd a.active { border: none; background: #00a6fc; color: #fff; margin: 0; position: static; top: 0; height: auto; }
+		.nice.tabs.mobile dd:first-child a.active { margin: 0; }
+		
+		dl.contained.mobile, dl.nice.contained.mobile { margin-bottom: 0; }
+		dl.contained.tabs.mobile dd a { padding: 18px 20px; }
+		dl.nice.contained.tabs.mobile dd a { padding: 18px 20px; }
+	}
+	
+	/* Nav Bar */
+
+	@media only screen and (max-width: 767px) {
+		.nav-bar { height: auto; }
+		.nav-bar>li { float: none; display: block; border-right: none; }
+		.nav-bar>li>a { text-align: left; border-top: 1px solid #ddd; border-right: none; } 
+		.nav-bar>li:first-child>a { border-top: none; }
+		.nav-bar>li.has-flyout>a:after { content: ""; width: 0; height: 0; border-left: 4px solid transparent;border-right: 4px solid transparent; border-top: 4px solid #2a85e8; display: block; }
+		.nav-bar>li:hover>a { font-weight: bold; }
+		.nav-bar>li:hover ul { position: relative; }
+		
+		.flyout { position: relative; width: auto; top: auto; margin-right: -2px; border-width: 1px 1px 0px 1px; }
+		.flyout.right { float: none; right: auto; left: -1px; }
+		.flyout.small, .flyout.large { width: auto; }
+		.flyout p:last-child { margin-bottom: 18px; }
+	}
+	
+	/* Nav Bar */
+	
+	@media only screen and (max-device-width: 800px), only screen and (device-width: 1024px) and (device-height: 600px), only screen and (width: 1280px) and (orientation: landscape), only screen and (device-width: 800px), only screen and (max-width: 767px) {
+		.video { padding-top: 0; }
+	}
+

--- /dev/null
+++ b/stylesheets/ie.css
@@ -1,1 +1,7 @@
+/* Foundation v2.1.4 http://foundation.zurb.com */
+/* This is for all IE specfific style less than IE9. We hate IE. */
 
+	div.panel { border: 1px solid #ccc; }
+	.lt-ie8 .nav-bar li.has-flyout a { padding-right: 20px; }
+	.lt-ie8 .nav-bar li.has-flyout a:after { border-top: none; }
+

--- /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/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
+