From 9528de870d2b5905297149b8bf80f190b60a39f7 Mon Sep 17 00:00:00 2001 From: Phyks Date: Sun, 28 Jul 2013 14:56:18 +0200 Subject: [PATCH] Initial commit --- .gitignore | 1 + Bouffe_Ulm.sql | 68 ++++++ README | 1 + TODO | 2 + connexion.php | 105 +++++++++ copains.php | 133 +++++++++++ favicon.ico | Bin 0 -> 5686 bytes include.php | 36 +++ index.php | 425 ++++++++++++++++++++++++++++++++++ message.php | 49 ++++ misc/asc.png | Bin 0 -> 151 bytes misc/background.css | 61 +++++ misc/background.js | 301 ++++++++++++++++++++++++ misc/bg.png | Bin 0 -> 41271 bytes misc/desc.png | Bin 0 -> 152 bytes misc/design.css | 141 +++++++++++ misc/jquery.min.js | 154 ++++++++++++ misc/mariobackground.png | Bin 0 -> 9846 bytes misc/mariosprite.png | Bin 0 -> 23030 bytes misc/modif.js | 25 ++ modif.php | 232 +++++++++++++++++++ modif_annonce.php | 35 +++ modif_password.php | 51 ++++ rbmt.php | 210 +++++++++++++++++ rbmt_admin.php | 488 +++++++++++++++++++++++++++++++++++++++ robots.txt | 2 + valider_paiements.php | 175 ++++++++++++++ 27 files changed, 2695 insertions(+) create mode 100644 .gitignore create mode 100644 Bouffe_Ulm.sql create mode 100644 README create mode 100644 TODO create mode 100644 connexion.php create mode 100644 copains.php create mode 100644 favicon.ico create mode 100644 include.php create mode 100644 index.php create mode 100644 message.php create mode 100644 misc/asc.png create mode 100644 misc/background.css create mode 100644 misc/background.js create mode 100644 misc/bg.png create mode 100644 misc/desc.png create mode 100644 misc/design.css create mode 100644 misc/jquery.min.js create mode 100644 misc/mariobackground.png create mode 100644 misc/mariosprite.png create mode 100644 misc/modif.js create mode 100644 modif.php create mode 100644 modif_annonce.php create mode 100644 modif_password.php create mode 100644 rbmt.php create mode 100644 rbmt_admin.php create mode 100644 robots.txt create mode 100644 valider_paiements.php diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b25c15b --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*~ diff --git a/Bouffe_Ulm.sql b/Bouffe_Ulm.sql new file mode 100644 index 0000000..4ffb057 --- /dev/null +++ b/Bouffe_Ulm.sql @@ -0,0 +1,68 @@ +-- phpMyAdmin SQL Dump +-- version 3.5.4 +-- http://www.phpmyadmin.net +-- +-- Client: localhost +-- Généré le: Sam 15 Décembre 2012 à 20:45 +-- Version du serveur: 5.5.28a-MariaDB-log +-- Version de PHP: 5.4.9 + +SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; +SET time_zone = "+00:00"; + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; + +-- +-- Base de données: `Bouffe@Ulm` +-- + +-- -------------------------------------------------------- + +-- +-- Structure de la table `copains` +-- + +CREATE TABLE IF NOT EXISTS `copains` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `nom` varchar(255) NOT NULL, + `password` char(40) NOT NULL, + `admin` tinyint(4) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ; + +-- -------------------------------------------------------- + +-- +-- Structure de la table `depenses` +-- + +CREATE TABLE IF NOT EXISTS `depenses` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `menu` text NOT NULL, + `date` int(11) NOT NULL, + `de` int(11) NOT NULL, + `copains` varchar(255) NOT NULL, + `montant` float NOT NULL, + `invites` int(11) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ; + +-- -------------------------------------------------------- + +-- +-- Structure de la table `paiements` +-- + +CREATE TABLE IF NOT EXISTS `paiements` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `de` int(11) NOT NULL, + `a` int(11) NOT NULL, + `id_depense` int(11) NOT NULL, + `date` int(11) NOT NULL, + `montant` float NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ; diff --git a/README b/README new file mode 100644 index 0000000..7a30bca --- /dev/null +++ b/README @@ -0,0 +1 @@ +- Don't forget to change $CONFIG vars in include.php to match your own domain ! diff --git a/TODO b/TODO new file mode 100644 index 0000000..1efaaff --- /dev/null +++ b/TODO @@ -0,0 +1,2 @@ +Problème avec tri dans tableau d'accueil (cf afficher toutes les dépenses) +Trier par prénom et non pas user_id lors du tri par "de" diff --git a/connexion.php b/connexion.php new file mode 100644 index 0000000..4e97bec --- /dev/null +++ b/connexion.php @@ -0,0 +1,105 @@ +prepare('SELECT nom, password, admin FROM copains WHERE id=:id'); + $req->bindValue(':id', $_COOKIE['id']); + $req->execute(); + + $donnees = $req->fetch(); + + $navigateur = (!empty($_SERVER['HTTP_USER_AGENT'])) ? $_SERVER['HTTP_USER_AGENT'] : ''; + $hash_cookie = '8531fd8c7a18b10700b9e7bf040b349009f7c711'.sha1($donnees['nom']).'9ff80fa675712e6cfa5482b96a4a5e488b68cabe'.sha1($donnees['password']).'cb9013648bed4362d3d98b553f1afc62c4381058'.sha1($navigateur).'17c0cf0afe131e12886bea1757dba73801b6c7d1'.sha1($_SERVER['REMOTE_ADDR']).'bf63c72e9a6ecad6c0d85d8eb972fceed8a14da2'; + + if($hash_cookie == $_COOKIE['connexion_auto']) + { + $_SESSION['id'] = (int) $_COOKIE['id']; + $_SESSION['nom'] = htmlspecialchars($donnees['nom']); + $_SESSION['admin'] = (int) $donnees['admin']; + + header('location: index.php'); + exit(); + } + } + + if(!empty($_SESSION['nom']) && empty($_GET['deco'])) //If we don't want to disconnect + { + header('location: index.php'); //No need to see this page + exit(); + } + + if(!empty($_POST['nom']) && !empty($_POST['password'])) //If we want to connect + { + $req = $bdd->prepare('SELECT id, password, admin FROM copains WHERE nom=:nom'); //Get the pass in bdd + $req->bindValue(':nom', $_POST['nom']); + $req->execute(); + + $donnees = $req->fetch(); + + $password = sha1($_POST['password'] . $CONFIG['salt']); + + if($donnees['password'] == $password) //Salt + { + $_SESSION['id'] = (int) $donnees['id']; + $_SESSION['nom'] = htmlspecialchars($_POST['nom']); + $_SESSION['admin'] = (int) $donnees['admin']; + + + if(!empty($_POST['auto_connect'])) + { + $navigateur = (!empty($_SERVER['HTTP_USER_AGENT'])) ? $_SERVER['HTTP_USER_AGENT'] : ''; + $hash_cookie = '8531fd8c7a18b10700b9e7bf040b349009f7c711'.sha1($_SESSION['nom']).'9ff80fa675712e6cfa5482b96a4a5e488b68cabe'.sha1($password).'cb9013648bed4362d3d98b553f1afc62c4381058'.sha1($navigateur).'17c0cf0afe131e12886bea1757dba73801b6c7d1'.sha1($_SERVER['REMOTE_ADDR']).'bf63c72e9a6ecad6c0d85d8eb972fceed8a14da2'; + + setcookie( 'id', $_SESSION['id'], time()+31536000, '/', $CONFIG['domain'], true, true); + setcookie('connexion_auto', $hash_cookie, time()+31536000, '/', $CONFIG['domain'], true, true); + } + + header('location: index.php'); + exit(); + } + else + { + header('location:message.php?id=8'); //Error message + exit(); + } + } + + if(!empty($_GET['deco'])) //If we want to disconnect + { + session_destroy(); + if(!empty($_COOKIE['id'])) + setcookie( 'id', '', time()-31536000, '/', $CONFIG['domain'], true, true); + if(!empty($_COOKIE['connexion_auto'])) + setcookie( 'connexion_auto', '', time()-31536000, '/', $CONFIG['domain'], true, true); + + header('location: connexion.php'); + exit(); + } + //Display a log form +?> + + + + + Bouffe@Ulm + + + + +

Bouffe@Ulm - Connexion

+
+

+ +

+

+ +

+

+ +

+

+
+ + diff --git a/copains.php b/copains.php new file mode 100644 index 0000000..7cfe697 --- /dev/null +++ b/copains.php @@ -0,0 +1,133 @@ + time() - (15*60) AND strpos($_SERVER['HTTP_REFERER'], 'http://'.$CONFIG['base_url'].'/index.php') == 0) //If we want to delete a buddy + { + $id = (int) $_GET['del']; + $bdd->query('DELETE FROM copains WHERE id='.$id); + + header('location: message.php?id=4'); + exit(); + } + + if(isset($_POST['id']) && isset($_POST['nom']) && !empty($_POST['token']) && $_POST['token'] == $_SESSION['token_buddy'] && $_SESSION['token_buddy_time'] > time() - (15*60) AND strpos($_SERVER['HTTP_REFERER'], 'http://'.$CONFIG['base_url'].'/index.php') == 0) //If we want to add or delete a buddy + { + if(!empty($_POST['id'])) + { + $req = $bdd->prepare('UPDATE copains SET nom=:nom, admin=:admin WHERE id='.(int) $_POST['id']); + if(!empty($_POST['password'])) + { + $req2 = $bdd->prepare('UPDATE copains SET password=:password WHERE id='.(int) $_POST['id']); + $req2->bindValue(':password', sha1($_POST['password'] . $CONFIG['salt'])); + $req2->execute(); + } + $message = 5; + } + else + { + $req = $bdd->prepare('INSERT INTO copains (id, nom, password, admin) VALUES ("", :nom, :password, :admin)'); + $req->bindValue(':password', sha1($_POST['password'] . $CONFIG['salt'])); + $message = 6; + } + + $req->bindValue(':nom', $_POST['nom']); + $req->bindValue(':admin', intval($_POST['admin'])); + $req->execute(); + + header('location: message.php?id='.$message); + } + + $_SESSION['token_buddy'] = sha1(uniqid(rand(), true)); //We generate a token and store it in a session variable + $_SESSION['token_buddy_time'] = time(); //We also store the time at which the token has been generated +?> + + + + + Bouffe@Ulm + + + + +

Bouffe@Ulm

+ +

Liste des copains

+

Retour à l'accueil

+ + + + + + + + + query('SELECT id, nom, admin FROM copains ORDER BY '.$_GET['tri'].' '.$_GET['sens']); + } + else + { + $req = $bdd->query('SELECT id, nom, admin FROM copains ORDER BY nom ASC'); + } + + while($donnees = $req->fetch()) + { + $id = (int) $donnees['id']; + + if($donnees['admin'] == 1) + { + $admin = 'Oui'; + } + else + { + $admin = 'Non'; + } + + echo ' + + + + + + '; + } + $req->closeCursor(); + ?> +
/\ /\Nom /\ /\Admin ? /\ /\ModifierSupprimer
'.$id.''.htmlspecialchars($donnees["nom"]).''.$admin.'ModifierSupprimer
+

Ajouter un copain

+ query('SELECT nom, admin FROM copains WHERE id='.$modif); + $donnees = $req->fetch(); + $req->closeCursor(); + ?> +

Modifier un copain

+ +
+

+

+

+ + +

+

+ + +

+
+ + + diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..bebacd5679b58697ca3c3c196374656024f05176 GIT binary patch literal 5686 zcmeHL2~ zA~5VA$Tq|549mC&Ph&B-#OR!=DmCG z_x<1h{r`JNbQ|4H20yx`y2Ku2FFwe0`8yu{G4S+d)k$^kkn~OlK2XsPAYy zx#}86+{2QjrS82>Dw~@|*>e)8bz>E^gjG?0Mkg6FD~7GVcI_G&v$WJ2Yo}_pg-&&L z(V4?;Y7eia-1$eSEI5riwpt~J61tFil3aG@u=OUnw(qqz>N(Uz?OSTe992%IA{(e_ zrJhdis-w;b8+q1Ok|)$mwebeJe*L<4J+5mL4Agy~k!%Z#spn-EwQa7U-k4^on~ih< znPgpDLfTm>vK&y8xj;W`{ne{iS(CP{HPpP-A~o``W}VyZ)V;rvsuvYemR}s{wiOcQ z{<~*@Z%Z~aUe}8bIuq@tj%`-*JZqx1uxhFb$R|Tc9+{2}*G$>Rn5|{4dJej%euakY zA*FQOKZ)#5m67`yBdLSZsc^wjvL~3|7vCiJ=zPIWo{g1M9-L0uzOmG_(L{}_bfgQ; zq72_?swy`92X}BlOuca)>ewT5x3q}N3-c*=YCM_d<&u4ADK)OslWNLg(gdk!@Y3M0 zJ#O5%K{atYI-lCXy4NizBhRKv%A68Ih0|W8tbjPyGXL>JI_`Uf%A*U1tyeU_*>18@ z?UE9*EH0!X|76mH=8|rCE^DX>R8hsEEV62=-*-LsxboH&GN?3Eqp9L~R$UG0)6`_h zsNiSs#>4g1Km74e*Z%yM>wo>*-*5cmpZ^jAmtG(Im2nB&PG?0yV=vy+ScBo)#(jJleyATRb5kSwb^s?@(Yd^7M&ocGI+}+$4Z{Z*GSsyuO%YpvO zhitswK09;=x%kK*jaH{PxzjFWpAoY5g;7=E48pZqFWSRvcrIdxF5u7*Chw2If52Bf0PUf9-IHa^3HYg# z4)T!i3t?EEC(b3ciq`Nd#z)=3ckpH2)OcZARwkMqP2SkXa?yMG4Eqg!g8#q;xd8r= z36Y$Krj-VPQ5#gq__zl4!H0HmT{x@i#{wzf|K1q4=u2s5?cpcn!nI5%YzvAR193+_ z5YDv)Zy~>~C0ZfBzu23o%h-o^3+vjlq5L_UN6kU0KVYJ_pq}Byww<-Y5?sLkgBG?q zCzuoR4SnD_#15WCe#y+uu|v;mk)N^TA7uN__j6vc7FxXVHIwjeH|+^j+sd zjc^2&upaPU{pKNjkJCNs_%RXwgZ};Lo!%Y<%nMmv0(}8F!EgEP#_@t1IKrnE*>{i+ z^l0Z6Bd_<2L4Pm4j1zd+7rj$GU&Z-gZ0SSPIrIPr=&oqv4mB}8JYrun)Q@i}eu)q5 z;d#Ud4Dh*_dy3EC0e_%Qxklf~4SE5zk9shIdldQ;`a+w#b<{af^hfL%$aD3~0_HGK z&@JB3p7Y|OKY=HF3Lfaqs7<^l@h&X!PvJh$^qhIr{TD>xKg0&_V{hkLt-jw=8 zE>L%PKSC>bLh%OX*9Dg{7mi2jg}p~QFb8od??HtJGzJ%Z`&5;hz4^g62e6S3%t3uZ z6I??F^haoh__6Ou@q-`wFTaCi4zLdK;%rPA`tGVOujKqF-(+}(8bsdF6Mzd&{Qi&{ zpl2Z-jM3mL8liWAvn5rp+~RYM#=?6+59kctGlJtq$i4GK*nO)7y#H=|cmp+bsqi#= z0loHC599zIh1SS9z5%w6-yk{67dZh5oCk1&{?G&1;2{47<#)}k;#*D_Ip@d|@`L)Y z1m<(SB6j!yH2@C4Mg2lAj1MAy@HZD4SWoP!_)Vz+)Jk1oG28_FXNUv*01nVy>!;#xC-_6@m7}Tu(crz; g9EAho#Xvp~^H|^i@3r^;@BQy8@Xmh&d}yb)0l$5#g8%>k literal 0 HcmV?d00001 diff --git a/include.php b/include.php new file mode 100644 index 0000000..240e1ad --- /dev/null +++ b/include.php @@ -0,0 +1,36 @@ +query("SET NAMES 'utf8'"); + + session_start(); + + date_default_timezone_set('Europe/Paris'); //Definition of the clock + + if($protect) //If user must be logged in + { + if(empty($_SESSION['nom'])) + { + header('location:connexion.php'); + exit(); + } + } + if($admin) //If he must be an admin + { + if(empty($_SESSION['admin'])) + { + header('location: message.php?id=7'); + exit(); + } + } + + $CONFIG['base_url'] = 'localhost/Bouffe@Ulm/'; + $CONFIG['domain'] = ''; + $CONFIG['salt'] = '62407efbf5e8508baf096e1e23f497991e12a3bd'; + } diff --git a/index.php b/index.php new file mode 100644 index 0000000..e2c09ba --- /dev/null +++ b/index.php @@ -0,0 +1,425 @@ +31, + 2=>28+date('L'), + 3=>31, + 4=>30, + 5=>31, + 6=>30, + 7=>31, + 8=>31, + 9=>30, + 10=>31, + 11=>30, + 12=>31); + $fin_mois = mktime(23, 59, 59, $num_mois, $dernier_jour[$num_mois], $annee); + $bornes = array($debut_mois, $fin_mois); + return $bornes; + } + + //Return what A must pay to B + function dettes($A, $B, $debut_mois, $fin_mois) + { + global $bdd; + //When A paid and B was here + $reqA_B = $bdd->prepare('SELECT id, date, montant, copains, invites FROM depenses WHERE date>'.$debut_mois.' AND date<'.$fin_mois.' AND de=:param1 AND (copains LIKE "%,'.(int) $B.',%" OR copains LIKE "%,'.(int)$B.'" OR copains LIKE "'.(int) $B.',%" OR copains LIKE "'.(int) $B.'")'); + $reqA_B->bindvalue(':param1',$A); + $reqA_B->execute(); + //When B paid and A was here + $reqB_A = $bdd->prepare('SELECT id, date, montant, copains, invites FROM depenses WHERE date>'.$debut_mois.' AND date<'.$fin_mois.' AND de=:param1 AND (copains LIKE "%,'.(int) $A.',%" OR copains LIKE "%,'.(int)$A.'" OR copains LIKE "'.(int) $A.',%" OR copains LIKE "'.(int) $A.'")'); + $reqB_A->bindvalue(':param1',$B); + $reqB_A->execute(); + //What A already paid to B for the current month + $reqPaiementsA_B = $bdd -> prepare('SELECT paiements.montant AS montant FROM paiements LEFT JOIN depenses ON paiements.id_depense=depenses.id WHERE depenses.date >'.$debut_mois.' AND depenses.date<'.$fin_mois.' AND paiements.de=:de AND paiements.a=:a'); + $reqPaiementsA_B->bindvalue(':de',$A); + $reqPaiementsA_B->bindvalue(':a',$B); + $reqPaiementsA_B->execute(); + //Same thing for B to A + $reqPaiementsB_A = $bdd -> prepare('SELECT paiements.montant AS montant FROM paiements LEFT JOIN depenses ON paiements.id_depense=depenses.id WHERE depenses.date >'.$debut_mois.' AND depenses.date<'.$fin_mois.' AND paiements.de=:de AND paiements.a=:a'); + $reqPaiementsB_A->bindvalue(':de',$B); + $reqPaiementsB_A->bindvalue(':a',$A); + $reqPaiementsB_A->execute(); + //$deltaAB : What A must pay to B + $deltaAB = 0; + + while($donneesA_B = $reqA_B->fetch()) + { + //We get the price of the meal, divided by the number of people who ate + //nbre de virgule + 1 + $deltaAB -= $donneesA_B['montant']/(substr_count($donneesA_B['copains'], ',') + 1 + $donneesA_B['invites']); + } + while($donneesB_A = $reqB_A->fetch()) //idem + { + $deltaAB += $donneesB_A['montant']/(substr_count($donneesB_A['copains'], ',') + 1 + $donneesB_A['invites']); + } + while($donneesPaiementsA_B = $reqPaiementsA_B->fetch()) //idem + { + $deltaAB -= $donneesPaiementsA_B['montant']; + } + while($donneesPaiementsB_A = $reqPaiementsB_A->fetch()) //idem + { + $deltaAB += $donneesPaiementsB_A['montant']; + } + return $deltaAB; + } + + if(isset($_GET['del'])) //If we want to delete an expenditure + { + if(empty($_GET['valide']) OR empty($_GET['token']) OR $_GET['token'] != $_SESSION['token_del_depense'] OR $_SESSION['token_del_depense_time'] < time() - (15*60) OR strpos($_SERVER['HTTP_REFERER'], 'http://'.$CONFIG['base_url'].'/index.php') > 0 OR strpos($_SERVER['HTTP_REFERER'], 'https://'.$CONFIG['base_url'].'/index.php') > 0) //If we didn't click the link to validate the deletion and the token is not valid (not present or older than 15 minutes) or if the referer is not ok + { + $_SESSION['token_del_depense'] = sha1(uniqid(rand(), true)); //We generate a token and store it in a session variable + $_SESSION['token_del_depense_time'] = time(); //We also store the time at which the token has been generated + $lien = 'index.php?del='.$_GET['del'] .'&valide=1&token='.$_SESSION['token_del_depense']; +?> + + + + + Bouffe@Ulm + + + + +

Validation de la suppression du repas

+

Confirmer la suppression ou Retour

+ + + +query('DELETE FROM depenses WHERE id='.$id); + $bdd->query('DELETE FROM paiements WHERE id_depense='.$id); + + header('location: message.php?id=1'); + exit(); + } + + //This get all the friends' name (we need it next) + $req2 = $bdd->query('SELECT id, nom FROM copains ORDER BY nom ASC'); + while($copain = $req2->fetch()) + { + $copains[$copain['id']] = $copain['nom']; //And put it in an array + } + + $req_jeu = $bdd->prepare('SELECT COUNT(*) AS nbre_jeu FROM depenses WHERE de=:de'); + $req_jeu->bindValue(':de', $_SESSION['id']); + $req_jeu->execute(); + + $donnees_jeu = $req_jeu->fetch(); //To define wether we display the game or not + + //SESSION token for the update of what people must pay to us (modif.php) + $_SESSION['token_validate_single'] = sha1(uniqid(rand(), true)); //We generate a token and store it in a session variable + $_SESSION['token_validate_single_time'] = time(); //We also store the time at which the token has been generated +?> + + + + + Bouffe@Ulm + + + = 1 || $_SESSION['admin'] == 1) + { + ?> + + + + + + +

Bouffe@Ulm

+ +

+
+                     xxxxx
+                  xXXXXXXXXXx
+                 XXXXXXXXXXXXX
+                xXXXXXXXX  XXXx
+                XXXXXXXXX 0XXXX\\\\\\
+               xXXXXXXXXXxxXXXX\\\\\\\
+               XXXXXXXXXXXXXXXX////// \
+               XXXXXXXXXXXXXXXXX
+               XXXXX|\XXX/|XXXXX
+               XXXXX| \-/ |XXXXX
+              xXXXXX| [ ] |XXXXXx
+            xXXXX   | /-\ |   XXXXx
+         xXXXXX     |/   \|     XXXXXx
+       xXXXXXX                   XXXXXXx
+      xXXXXXXX                   XXXXXXXx
+     xXXXXXXXX                   XXXXXXXXx
+    xXXXXXXXXX                   XXXXXXXXXx
+   xXXXXXXXXXX                   XXXXXXXXXXx
+  xXXXXXXXXXXX                   XXXXXXXXXXXx
+ xXXXXXXXX XXX                   XXX XXXXXXXXx
+ XXXXXXXX  XXX                   XXX  XXXXXXXX
+xXXXXXXX   XXX                   XXX   XXXXXXXx
+XXXXXX     XXX                   XXX     XXXXXX
+XXXX       XXX                   XXX       XXXX
+ XX        XXX                   XXX        XX
+           XXX                   XXX
+           XXX                   XXX
+           XXX                   XXX
+           XXX                   XXX
+           XXXx                 xXXX
+           XXXXXXXXXXXXXXXXXXXXXXXXX
+           XXXXXXX           XXXXXXX
+       ____XXXXXX             XXXXXX____
+      /________/               \________\
'; + exit(); + } + else + { + $_SESSION['aClique_time'] = time(); + } + } + ?> + +

+ Ajouter une dépense | Modifier le mot de passe | Consulter les remboursements | + + Gérer les remboursements | + Modifier les copains | + Modifier l'annonce d'accueil | + + Déconnexion +

+ +

Qui doit quoi ?

+

Lire "ligne" doit "case"€ à "colonne". Les liens permettent de confirmer le paiement des dettes.

+ + + + '.$copain.''; + echo ''; + } + ?> + + $copainA) + { + if($_SESSION['nom'] == $copainA) + $copainA = ''.$copainA.''; + echo ''; + foreach($copains as $keyB=>$copainB) + { + $deltaAB = dettes($keyA,$keyB, $debut_mois, $fin_mois); + if(round($deltaAB,2) <= 0) echo ''; + else + { + echo ''; + $lien_valider_tous[$keyB] = 1; + } + } + echo ''; + } + echo ''; + + foreach($copains as $key=>$copain) + { + if(($_SESSION['nom'] == $copain OR $_SESSION['admin'] == 1) && !empty($lien_valider_tous[$key])) + echo ''; + else + echo ''; + } + echo ''; + ?> +
Doit\À'.$copain.'
'.$copainA.'-' . round($deltaAB, 2) . '€
ValidationConfirmer paiements
+ + Dépenses détaillées du mois actuel'; + else echo '

Dépenses détaillées

'; + + //Then we display all the expenditures + ?> + + + + + + + + + + + + query('SELECT id, menu, date, de, copains, montant, invites FROM depenses WHERE date>'.$debut_mois.' AND date<'.$fin_mois.' ORDER BY '.$_GET['tri'].' '.$_GET['sens'].', date DESC'); + } + else + { + $req = $bdd->query('SELECT id, menu, date, de, copains, montant, invites FROM depenses WHERE date>'.$debut_mois.' AND date<'.$fin_mois.' ORDER BY date DESC'); + } + + while($donnees = $req->fetch()) + { + //Date (AM/PM) + $AM_PM = array('AM'=>'le midi', 'PM'=>'le soir'); + $date = date('j/m', $donnees['date']).' '.$AM_PM[date('A', $donnees['date'])]; + + $id = (int) $donnees['id']; + + $copains_in_array_id = explode(',', $donnees['copains']); //List of friends who ate (array) + $copains_in = ''; + $nombre_participants = count($copains_in_array_id); + + $req_paiements = $bdd->query('SELECT de, montant FROM paiements WHERE id_depense='.$id); //List of who paid yet + + $paiements = array(); + $montants = array(); + while($paiement = $req_paiements->fetch()) + { + // We use an array to store the list of friends who paid and so to + // avoir a useless 2D array search + $paiements[$paiement['de']] = $paiement['de']; + // If we already defined $montant[] + if (isset($montants[$paiement['de']])) + $montants[$paiement['de']] += $paiement['montant']; + else + $montants[$paiement['de']] = $paiement['montant']; + } + + // Friend number 0 is none + $copains[0] = "Tout seul"; + + $copains_in_array_name = array(); + + //Prepare an array with buddy names to sort it + foreach($copains_in_array_id as $key=>$id_copain) { + $copains_in_array_name[$key] = $copains[(int) $id_copain]; + } + asort($copains_in_array_name); + + $i = 0; + // What to write in the friends cell + foreach($copains_in_array_name as $key=>$copain) + { + $copains_in .= $copain; + $id_copain = $copains_in_array_id[$key]; + + $keys = array_keys($paiements, $id_copain); + + if($id_copain != $donnees['de']) + { + $montant_du = (float) $donnees['montant']/(substr_count($donnees['copains'], ',') + 1 + $donnees['invites']); + if(!empty($keys)) + { + if(round($montants[$keys[0]],2) == round($montant_du,2)) + $copains_in .= ' (payé)'; + else + $copains_in .= ' (reste '.round($montant_du - $montants[$keys[0]],2).'€)'; + } + else + $copains_in .= ' (reste '.round($montant_du,2).'€)'; + } + + if($i != $nombre_participants-1) + $copains_in .= '
'; + + $i++; + } + + $invites = ''; + if($donnees['invites'] == 1) + $invites = '
'. (int) $donnees['invites'].' invité'; + if($donnees['invites'] > 1) + $invites = '
'. (int) $donnees['invites'].' invités'; + + //Only the admin and the one who paid the meal can edit it + if((int) $donnees['de'] == $_SESSION['id'] || $_SESSION['admin'] == 1) { + $modif_link = 'Modifier'; + $suppr_link = 'Supprimer'; + } + else + { + $modif_link = ''; + $suppr_link = ''; + } + + echo ' + + + + + + + + '; + } + $req->closeCursor(); + ?> +
Date /\ /\Payé par /\ /\Copains /\ /\Montant /\ /\Menu /\ /\ModifierSupprimer
'.$date.''.$copains[(int) $donnees["de"]].''.$copains_in.$invites.''.(float) $donnees['montant'].'€'.nl2br(htmlspecialchars($donnees["menu"])).''.$modif_link.''.$suppr_link.'
+

+ N\'afficher que les dépenses du dernier mois.'; + } + else + { + echo 'Afficher toutes les dépenses'; + } + ?> +

+ = 1 || $_SESSION['admin'] == 1 || $_SESSION['nom'] == 'Alexandre') //Bonus : display a "My little Poney" game + { + ?> +
+
+
+
+
+
+ + + diff --git a/message.php b/message.php new file mode 100644 index 0000000..cafa964 --- /dev/null +++ b/message.php @@ -0,0 +1,49 @@ +array("message"=>"Dépense supprimée avec succès.", "url"=>"index.php"), + 2=>array("message"=>"Dépense modifiée avec succès.", "url"=>"index.php"), + 3=>array("message"=>"Dépense ajoutée avec succès.", "url"=>"index.php"), + 4=>array("message"=>"Copain supprimé avec succès.", "url"=>"copains.php"), + 5=>array("message"=>"Copain modifié avec succès.", "url"=>"copains.php"), + 6=>array("message"=>"Copain ajouté avec succès.", "url"=>"copains.php"), + 7=>array("message"=>"Page à accès restreint, se connecter en administrateur.", "url"=>"index.php"), + 8=>array("message"=>"Erreur à la connexion. Vérifiez vos identifiants.", "url"=>"connexion.php"), + 9=>array("message"=>"Vous n'avez pas le droit d'exécuter cette action.", "url"=>"index.php"), + 10=>array("message"=>"Paiement validé.", "url"=>"index.php"), + 11=>array("message"=>"Paiements validés.", "url"=>"index.php"), + 12=>array("message"=>"Erreur lors de la modification du mot de passe.", "url"=>"modif_password.php"), + 13=>array("message"=>"Mot de passe modifié avec succès.", "url"=>"index.php"), + 14=>array("message"=>"Remboursement ajouté avec succès.", "url"=>"rbmt_admin.php"), + 15=>array("message"=>"Remboursement supprimé avec succès.", "url"=>"rbmt_admin.php"), + 16=>array("message"=>"Erreur lors de la suppression du remboursement.", "url"=>"rbmt_admin.php") + ); +?> + + + + + Bouffe@Ulm + + + '; + ?> + + +

Bouffe@Ulm

+ '.$message[$id]['message'].' Redirection automatique dans 1 seconde. Ne pas attendre

'; + ?> + + + diff --git a/misc/asc.png b/misc/asc.png new file mode 100644 index 0000000000000000000000000000000000000000..e5d5c363102b4d7014fcc73e426fc7688652c1c1 GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRZ!2~2je||6rQjEnx?oJHr&dIz4a#+$GeH|GX zHuiJ>Nn{1`ISV`@iy0XB4ude`@%$AjKtUZ(7sn8Z@Z=x;(gq6Nh6W3Y9u_%payWE2 rL= idleTime) { + if (onGround) + vel[1] = velMin[1]; + lastActionTime = now; + } +} + +function initMario() { + $background.scrollLeft(0); + setSprite(spriteStates.JUMPRIGHT); + setInterval(doMarioStuff, 1000/15); + lastActionTime = new Date().getTime(); + setInterval(checkIdle, 1000); +} + +function setSprite(idx) { + $mario.scrollLeft(idx*40); +} + +var spriteStates = { + JUMPLEFT : 0, + RUNLEFT1 : 1, + RUNLEFT2 : 2, + RUNLEFT3 : 3, + STANDLEFT : 5, + STANDRIGHT : 6, + RUNRIGHT1 : 7, + RUNRIGHT2 : 8, + RUNRIGHT3 : 9, + JUMPRIGHT : 11 +} + + +function doMarioStuff() { + var velIncX = 0.05; + if (marioDir) { + marioFaceDir = marioDir; + vel[0] += velIncX * marioDir; + } else { + vel[0] *= 0.8; + if (Math.abs(vel[0]) < 0.05) vel[0] = 0; + } + + vel[1] += 0.08; + if (vel[0] > velMax[0]) vel[0] = velMax[0]; + if (vel[0] < velMin[0]) vel[0] = velMin[0]; + if (vel[1] > velMax[1]) vel[1] = velMax[1]; + if (vel[1] < velMin[1]) vel[1] = velMin[1]; + + var newPos = [ + pos[0] + vel[0], + pos[1] + vel[1] + ]; + + if (onGround) { + if (vel[0] == 0) { + walkCycle = 0; + setSprite(marioFaceDir < 0 ? spriteStates.STANDLEFT : spriteStates.STANDRIGHT); + } else { + walkCycle += 0.5; + if (walkCycle >= 3) walkCycle = 0; + setSprite( + (vel[0] < 0 ? spriteStates.RUNLEFT1 : spriteStates.RUNRIGHT1) + + (walkCycle>>0) + ); + } + } else { + walkCycle = 0; + setSprite(marioFaceDir < 0 ? spriteStates.JUMPLEFT : spriteStates.JUMPRIGHT); + } + + pos = collide(pos, newPos); + + if (pos[0] != newPos[0]) vel[0] = 0; + if (pos[1] != newPos[1]) vel[1] = 0; + + if (pos[1] > 13) pos[1] = 13 - $(window).height()/16; + + if (pos[0] > $(window).width()/16 - 16 + scrollPos/16) + initScroll(1); + else if (pos[0] < 16 + scrollPos/16) + initScroll(-1); + + $mario + .css("left", pos[0]*16) + .css("bottom", 13*16 - pos[1]*16) + ; +} + +function initScroll(dir) { + scrollSpeed = dir; + if (scrolling) return; + scrolling = true; + scroll(); +} + +function scroll() { + $background.scrollLeft(scrollPos + 32 * scrollSpeed); + scrollSpeed *= 0.92; + + scrollPos = $background.scrollLeft(); + if (Math.abs(scrollSpeed) > 0.1) + setTimeout(scroll, 1000 / 15); + else + scrolling = false; + +} + + + +function collide(pos1, pos2) { + var oldX = pos1[0]; + var oldY = pos1[1]; + var newX = pos2[0]; + var newY = pos2[1]; + + var collision, xAdjust = 0; + + var space = 1/40; + + onGround = false; + + if (oldY != newY) { // moving vertically + if (newY > oldY) { // moving down + // lower left collision + collision = isBlocking(newX + space, newY + 1); + if (collision && !isBlocking(newX + space, newY)) { + newY -= collision[1]; + onGround = true; + } + + // lower right collision + collision = isBlocking(newX + 1-space, newY + 1); + if (collision && !isBlocking(newX + 1-space, newY)) { + newY -= collision[1]; + onGround = true; + } + // moving up + } else { + + // upper left collision + collision = isBlocking(newX + space, newY); + if (collision && !isBlocking(newX + space, newY + 1)) { + newY += (1 - collision[1]); + } + + // upper right collision + collision = isBlocking(newX + 1 - space, newY); + if (collision && !isBlocking(newX + 1 - space, newY + 1)) { + newY += (1 - collision[1]); + xAdjust = 1; + } + } + + } + // moving horizontally + if (oldX != newX) { + + // moving right + if (newX > oldX) { + + // lower right collision + collision = isBlocking(newX + 1, newY + 1-space); + if (collision) { + newX -= collision[0]; + } + + // upper right collision + collision = isBlocking(newX + 1, newY); + if (collision) { + newX -= collision[0]; + } + + // moving left + } else { + + // lower left collision + collision = isBlocking(newX, newY + 1-space); + if (collision) { + newX += (1 - collision[0]); + } + + // upper left collision + collision = isBlocking(newX, newY); + if (collision) { + newX += (1 - collision[0]); + } + } + } + + return [newX,newY,xAdjust]; +} + + +// check if a tile is blocking +function isBlocking(x, y) { + var tx = x>>0; + var ty = y>>0; + + if (collisionMap[ty] && collisionMap[ty][tx]) { + return [x - tx, y - ty]; + } + if (collisionMap[ty] && typeof collisionMap[ty][tx] == "undefined") + return [x - tx, y - ty]; +} + + +$(document).keydown(function(e) { + var now = new Date().getTime(); + switch (e.which) { + case 68: // d + lastActionTime = now; + marioDir = 1; + break; + case 81: // q + lastActionTime = now; + marioDir = -1; + break; + case 90: // z + lastActionTime = now; + if (onGround) + vel[1] = velMin[1]; + break; + } + //console.log(e.which) +}); + +$(document).keyup(function(e) { + var now = new Date().getTime(); + switch (e.which) { + case 68: // d + lastActionTime = now; + if (marioDir == 1) + marioDir = 0; + break; + case 81: // q + lastActionTime = now; + if (marioDir == -1) + marioDir = 0; + break; + + } + //console.log(e.which) +}); + +$(window).bind("resize", function() { + $background.scrollLeft(scrollPos); +}); + + + +initMario(); + +}); + + + diff --git a/misc/bg.png b/misc/bg.png new file mode 100644 index 0000000000000000000000000000000000000000..0eb526a89eaab72c4b53f27177a5cd119e5972f1 GIT binary patch literal 41271 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 tA1tNBWGWmfb_5uDJ%d0 literal 0 HcmV?d00001 diff --git a/misc/design.css b/misc/design.css new file mode 100644 index 0000000..ed08f10 --- /dev/null +++ b/misc/design.css @@ -0,0 +1,141 @@ +/* --- STYLES DE BASE --- */ + +/* Page */ +html { + font-size: 100%; /* Évite un bug d'IE 6-7. (1) */ +} +body { + margin: 0; + padding: 1em; /* Remettre à zéro si nécessaire. */ + font-family: Arial, Helvetica, "Liberation Sans", FreeSans, sans-serif; + font-size: .8em; + line-height: 1.4; /* À adapter au design. (4) */ + color: black; + background-color: grey; + background-image: url('bg.png'); +} + +pre +{ + font-size: 10px; + font-style: normal; + line-height: 11px; + font-weight: normal; + font-family: "Courier New", Courier, mono; + text-align: left; + margin-left: 40%; +} + +/* Titres */ +h1, h2, h3, h4, h5, h6 { + margin: 1em 0 .5em 0; /* Rapproche le titre du texte.*/ + line-height: 1.2; + font-weight: bold; /* Valeur par défaut.*/ + font-style: normal; +} +h1 { + font-size: 1.75em; +} +h2 { + font-size: 1.5em; +} +h3 { + font-size: 1.25em; +} +h4 { + font-size: 1em; +} + +/* Listes */ +ul, ol { + margin: .75em 0 .75em 32px; + padding: 0; +} + +/* Paragraphes */ +p { + margin: .75em 0; /* Marges plus faibles que par défaut.*/ +} +address { + margin: .75em 0; + font-style: normal; +} + +/* Liens */ +a { + text-decoration: underline; +} +a:link { +color : #0000cd; +} +a:visited { +color : #4b0082; +} +a:hover, a:focus, a:active { +color : #dc143c; +} +a img { + border: none; +} + +/* Divers éléments de type en-ligne*/ +em { + font-style: italic; +} +strong { + font-weight: bold; +} + +/* Formulaires */ +form, fieldset { + margin: 0; + padding: 0; +} +form +{ + border: none; +} + +/* Mise en forme simple pour les tableaux */ +table { + margin: 0; + border: 1px solid gray; /* Pas de bordure = "none". */ + border-collapse: collapse; /* Valeur par défaut: "separate". */ + border-spacing: 0; + margin: auto; +} +table td, table th { + padding: 4px; /* Pas de retrait autour du texte = "0". */ + border: 1px solid #ccc; /* Pas de bordure = "none". */ + vertical-align: top; /* Valeur par défaut: "middle" */ + text-align: left; +} + +body +{ + text-align: center; +} + +label /* On affiche les labels sous forme de blocs et mise en page = formulaires alignés */ +{ + display: block; +} + +th +{ + background-color: rgba(255,10,255,0.2); +} +td +{ + background-color: rgba(255,200,255,0.1); +} +.inline +{ + display: inline; +} + +.centre +{ + text-align:center; +} + diff --git a/misc/jquery.min.js b/misc/jquery.min.js new file mode 100644 index 0000000..7c24308 --- /dev/null +++ b/misc/jquery.min.js @@ -0,0 +1,154 @@ +/*! + * jQuery JavaScript Library v1.4.2 + * http://jquery.com/ + * + * Copyright 2010, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2010, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Sat Feb 13 22:33:48 2010 -0500 + */ +(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/, +Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&& +(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this, +a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b=== +"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(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(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this, +function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b
a"; +var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected, +parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent= +false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n= +s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true, +applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando]; +else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this, +a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b=== +w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i, +cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected= +c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); +a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g, +function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split("."); +k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a), +C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B=0){a.type= +e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&& +f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive; +if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data", +e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a, +"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a, +d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, +e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift(); +t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D|| +g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, +CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m, +g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, +text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, +setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return hl[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h= +h[3];l=0;for(m=h.length;l=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== +"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g, +h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&& +q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML=""; +if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="

";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}(); +(function(){var g=s.createElement("div");g.innerHTML="
";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}: +function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var j=d;j0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j= +{},i;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a=== +"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", +d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? +a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType=== +1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/"},F={option:[1,""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div
","
"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= +c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, +wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, +prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, +this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); +return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja, +""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]); +return this}else{e=0;for(var j=d.length;e0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["", +""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]===""&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e= +c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]? +c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja= +function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= +Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a, +"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f= +a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b= +a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=//gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!== +"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("
").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this}, +serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), +function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href, +global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&& +e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)? +"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache=== +false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B= +false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since", +c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E|| +d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x); +g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status=== +1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b=== +"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional; +if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration=== +"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]|| +c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start; +this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now= +this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem, +e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b
"; +a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b); +c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a, +d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top- +f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset": +"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in +e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window); diff --git a/misc/mariobackground.png b/misc/mariobackground.png new file mode 100644 index 0000000000000000000000000000000000000000..e1dda10f1d691c15fab3a2f4ee41306948d8c2db GIT binary patch literal 9846 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 wE@q#OrhTB7>pzE;9fRKJ@c=HsyKM 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 1) + { + invites_label.innerHTML = 'invités'; + } + if(invites_input.value <= 1) + { + invites_label.innerHTML = 'invité'; + } + }; +} + +if(document.getElementById && document.createTextNode) +{ + window.onload = function() + { + invites(); + }; +} diff --git a/modif.php b/modif.php new file mode 100644 index 0000000..fa34e96 --- /dev/null +++ b/modif.php @@ -0,0 +1,232 @@ + time() - (15*60) AND strpos($_SERVER['HTTP_REFERER'], 'http://'.$CONFIG['base_url'].'/index.php') == 0) + { + //Check wether we are the person who receive the money or the admin + if($_SESSION['id'] == $_GET['a'] || $_SESSION['admin'] == 1) + { + //And check that we didn't validate it before + $req_count = $bdd->prepare('SELECT COUNT(*) AS nbre_paiements FROM paiements WHERE de=:de AND a=:a AND id_depense=:id_depense'); + $req_count->bindValue(':de', $_GET['de']); + $req_count->bindValue(':a', $_GET['a']); + $req_count->bindValue(':id_depense', $_GET['id_depense']); + $req_count->execute(); + + $count = $req_count->fetch(); + + if($count['nbre_paiements'] == 0) //If everything is ok -> validation + { + $req = $bdd->prepare('INSERT INTO paiements(id, de, a, id_depense, date, montant) VALUES("", :de, :a, :id_depense, :date, :montant)'); + $req->bindValue(':de', $_GET['de']); + $req->bindValue(':a', $_GET['a']); + $req->bindValue(':id_depense', $_GET['id_depense']); + $req->bindValue(':date', time()); + + $req_montant = $bdd->prepare('SELECT montant, copains, invites FROM depenses WHERE id=:id_depense'); + $req_montant->bindValue(':id_depense', $_GET['id_depense']); + $req_montant->execute(); + $donnees_montant = $req_montant->fetch(); + $montant = $donnees_montant['montant']/(substr_count($donnees_montant['copains'], ',') + 1 + $donnees_montant['invites']); + + $req->bindValue(':montant', $montant); + $req->execute(); + } + else //If entry already exist -> we update it because the cost of the meal may have been changed + { + $req_montant = $bdd->prepare('SELECT montant, copains, invites FROM depenses WHERE id=:id_depense'); + $req_montant->bindValue(':id_depense', $_GET['id_depense']); + $req_montant->execute(); + $donnees_montant = $req_montant->fetch(); + $montant = $donnees_montant['montant']/(substr_count($donnees_montant['copains'], ',') + 1 + $donnees_montant['invites']); + + $req = $bdd->prepare('UPDATE paiements SET montant=:montant, date=:date WHERE de=:de AND a=:a AND id_depense=:id_depense'); + $req->bindValue(':de', $_GET['de']); + $req->bindValue(':a', $_GET['a']); + $req->bindValue(':id_depense', $_GET['id_depense']); + $req->bindValue(':date', time()); + + $req->bindValue(':montant', $montant); + $req->execute(); + } + + header('location: message.php?id=10'); + exit(); + } + else + { + header('location: message.php?id=9'); + exit(); + } + } + + //If we want to add a new meal (or edit it) + if(isset($_POST['menu']) && isset($_POST['jour']) && isset($_POST['mois']) && isset($_POST['annee']) && isset($_POST['AM_PM']) && isset($_POST['montant']) && isset($_POST['invites']) && !empty($_POST['token']) && $_POST['token'] == $_SESSION['token_modif'] && $_SESSION['token_modif_time'] > time() - (15*60) AND strpos($_SERVER['HTTP_REFERER'], 'http://'.$CONFIG['base_url'].'/index.php') == 0) + { + if(!empty($_POST['id'])) + { + $req = $bdd->query('SELECT de FROM depenses WHERE id='.(int) $_POST['id']); + $donnees = $req->fetch(); + + if($donnees['de'] != $_SESSION['id'] && $_SESSION['admin'] != 1) + { + header('location: message.php?id=9'); + exit(); + } + + $req = $bdd->prepare('UPDATE depenses SET menu=:menu, date=:date, montant=:montant, copains=:copains, invites=:invites WHERE id='.(int) $_POST['id']); + $message = 2; + } + else + { + $req = $bdd->prepare('INSERT INTO depenses (id, menu, date, de, copains, montant, invites) VALUES ("", :menu, :date, '.$_SESSION['id'].', :copains, :montant, :invites)'); + $message = 3; + } + + //Here, we treat $_POST['copain_...'] + $copains_req = $bdd->query('SELECT id FROM copains ORDER BY id ASC'); + $i = 0; + $copains_insert = ''; + + while($copain_base = $copains_req->fetch()) + { + if(!empty($_POST['copain_'.$copain_base['id']])) + { + if($i != 0) + { + $copains_insert .= ','; + } + $copains_insert .= $copain_base['id']; + $i = 1; + } + } + + $req->bindValue(':menu', $_POST['menu']); + $req->bindValue(':date', mktime($_POST['AM_PM'], 0, 0, $_POST['mois'], $_POST['jour'], $_POST['annee'])); + $req->bindValue(':copains', $copains_insert); + $req->bindValue(':montant', (float) strtr($_POST['montant'], ',', '.')); + $req->bindValue(':invites', (int) $_POST['invites']); + $req->execute(); + header('location: message.php?id='.$message); + exit(); + } + else //Else, we just display the form + { + if(isset($_GET['id'])) //And get the data to prefill if we edit a meal + { + $modif = (int) $_GET['id']; + $req = $bdd->query('SELECT menu, de, date, copains, montant, invites FROM depenses WHERE id='.$modif); + + $donnees = $req->fetch(); + + if($donnees['de'] != $_SESSION['id'] && $_SESSION['admin'] != 1) + { + header('location: message.php?id=9'); + exit(); + } + + $copains_modif = explode(',', $donnees['copains']); + } + $_SESSION['token_modif'] = sha1(uniqid(rand(), true)); //We generate a token and store it in a session variable + $_SESSION['token_modif_time'] = time(); //We also store the time at which the token has been generated +?> + + + + + Bouffe@Ulm + + + + + +

Bouffe@Ulm

+ Modifier une dépense'; else echo '

Ajouter une dépense

'; + ?> +
+

+

+ + + + +

+

/>€

+

Copains :
+ query('SELECT id, nom FROM copains ORDER BY nom ASC'); + while($donnees2 = $req2->fetch()) + { + if((isset($copains_modif) && in_array($donnees2['id'], $copains_modif)) || ($_SESSION['id'] == $donnees2['id'])) + { + echo "
"; + } + else + { + echo "
"; + } + } + ?> + "/> + +

+

+ ou retour à l'accueil + +

+
+ + + diff --git a/modif_annonce.php b/modif_annonce.php new file mode 100644 index 0000000..fff1a8e --- /dev/null +++ b/modif_annonce.php @@ -0,0 +1,35 @@ + + + + + + Bouffe@Ulm + + + + +

Bouffe@Ulm

+
+

+ +

+