Browse files

- Added new files

  • Loading branch information...
1 parent f5a70ee commit 731fb3fe5b43b5b9b90b037670389659b596e303 Dáithí ÓGallchobair committed Feb 27, 2009
View
14 AllFiles.php
@@ -0,0 +1,14 @@
+<?php
+
+define ('YAFYAF_ROOT', dirname(__FILE__) . DIRECTORY_SEPARATOR);
+define ('YAFYAF_CONFIG', YAFYAF_ROOT . 'Config' . DIRECTORY_SEPARATOR);
+define ('YAFYAF_CONTROLLERS', YAFYAF_ROOT . 'Controllers' . DIRECTORY_SEPARATOR);
+define ('YAFYAF_DATABASE', YAFYAF_ROOT . 'Database' . DIRECTORY_SEPARATOR);
+define ('YAFYAF_MODULES', YAFYAF_ROOT . 'Modules' . DIRECTORY_SEPARATOR);
+define ('YAFYAF_MARKUP', YAFYAF_ROOT . 'Markup' . DIRECTORY_SEPARATOR);
+
+require YAFYAF_CONFIG . 'Config.php';
+require YAFYAF_CONTROLLERS . 'MainController.php';
+require YAFYAF_MODULES . 'Module.php';
+require YAFYAF_DATABASE . 'Database.php';
+require YAFYAF_DATABASE . 'PDO.php';
View
137 Config/Config.php
@@ -0,0 +1,137 @@
+<?php
+
+class Yafyaf_Config
+{
+ const Database = 'Database';
+ const Modules = 'Modules';
+ const Templates = 'Templates';
+ const SiteConfigs = 'SiteConfigs';
+
+ //const Links = 'Links';
+ //const Friends = 'Friends';
+ //const LinksToUs = 'LinksToUs';
+
+ //const OtherSubmenu = 'OtherSubmenu';
+ //const AboutusSubmenu = 'AboutUsSubmenu';
+
+ private static $Instance;
+
+ public static function GetInstance()
+ {
+ if (!isset(self::$Instance)) {
+ self::$Instance = new stdClass();
+ self::LoadConfigs();
+ }
+
+ return self::$Instance;
+ }
+
+ private static function LoadConfigs()
+ {
+ self::SetDatabaseConfigs();
+ self::SetModulesConfigs();
+ self::SetTemplatesConfigs();
+ self::SetConfigs(self::SiteConfigs);
+ //self::SetLinksConfigs();
+ //self::SetFriendsConfigs();
+ //self::SetLinksToUsConfigs();
+
+ //self::SetSubmenus(self::OtherSubmenu);
+ //self::SetSubmenus(self::AboutusSubmenu);
+ }
+
+ private static function setSubmenus($MenuName)
+ {
+ $here = dirname(__FILE__) . DIRECTORY_SEPARATOR;
+ $OSubmenu = simplexml_load_file($here . $MenuName . '.xml');
+
+ // Modules
+ $Subs = array();
+ $i = 0;
+ $Parent = str_ireplace('SubMenu', '', $MenuName);
+
+ foreach ($OSubmenu as $Key => $SubMenu) {
+ $Subs[$i] = new stdClass();
+ $Subs[$i]->Name = (string)$SubMenu->attributes()->Name;
+ $Subs[$i]->DisplayName = (string)$SubMenu->attributes()->DisplayName;
+ $Subs[$i]->Url = (string)$SubMenu->attributes()->Url;
+ $Subs[$i]->Enabled = (string)$SubMenu->attributes()->Enabled;
+ $Subs[$i]->Parent = $Parent;
+
+ ++$i;
+ }
+
+ self::$Instance->$MenuName = $Subs;
+ self::$Instance->AllMenus->$MenuName = $Subs;
+ }
+
+ private static function SetConfigs($name)
+ {
+ $here = dirname(__FILE__) . DIRECTORY_SEPARATOR;
+ $Modules = simplexml_load_file($here . $name . '.xml');
+
+ // Modules
+ $Mods = new stdClass();
+ foreach ($Modules as $Key => $Module) {
+ $Mods->$Key = (string)$Module;
+ }
+
+ self::$Instance->$name = $Mods;
+ }
+
+ private static function SetModulesConfigs()
+ {
+ $here = dirname(__FILE__) . DIRECTORY_SEPARATOR;
+ $Modules = simplexml_load_file($here . self::Modules . '.xml');
+
+ // Modules
+ $Mods = array();
+ foreach ($Modules as $Key => $Module) {
+ $Mods[] = $Module->attributes();
+ }
+
+ self::$Instance->Modules = $Mods;
+ }
+
+ private static function SetTemplatesConfigs()
+ {
+ $here = dirname(__FILE__) . DIRECTORY_SEPARATOR;
+ $Templates = simplexml_load_file($here . self::Templates . '.xml');
+
+ // Set the template
+ foreach ($Templates as $Template) {
+ if ($Template->attributes()->Active == 'true') {
+ self::$Instance->Template = (string)$Template->attributes()->Name;
+ }
+ }
+
+ if (!isset(self::$Instance->Template)) {
+ self::$Instance->Template = $Templates->Default->attributes()->Name;
+ }
+ }
+
+ private static function SetDatabaseConfigs()
+ {
+ $here = dirname(__FILE__) . DIRECTORY_SEPARATOR;
+ $Database = simplexml_load_file($here . self::Database . '.xml.php');
+
+ // Database
+ self::$Instance->Database->Type = (string)$Database->Type;
+ self::$Instance->Database->Hostname = (string)$Database->HostName;
+ self::$Instance->Database->Username = (string)$Database->UserName;
+ self::$Instance->Database->Password = (string)$Database->PassWord;
+ }
+
+ private static function SetLinksConfigs()
+ {
+ $here = dirname(__FILE__) . DIRECTORY_SEPARATOR;
+ $Links = simplexml_load_file($here . self::Links . '.xml');
+
+ $NSLinks = array();
+ foreach ($Links as $Link) {
+ $NSLinks[(string)$Link->attributes()->Name] = (string)$Link->attributes()->URL;
+ }
+
+ self::$Instance->Links = $NSLinks;
+ }
+}
View
6 Config/Database.xml.php
@@ -0,0 +1,6 @@
+<Database>
+ <Type>PDO</Type>
+ <HostName>localhost</HostName>
+ <UserName>root</UserName>
+ <PassWord></PassWord>
+</Database>
View
3 Config/Modules.xml
@@ -0,0 +1,3 @@
+<Modules>
+ <Module Name="Home" DisplayName="Home" Enabled="True" SubMenu="False"/>
+</Modules>
View
8 Config/SiteConfigs.xml
@@ -0,0 +1,8 @@
+<SiteConfigs>
+ <Url>http://site</Url>
+ <Name>Site</Name>
+ <Title>Site Website</Title>
+ <Keywords>website, php, words</Keywords>
+ <Description>Your website</Description>
+ <Author>Name</Author>
+</SiteConfigs>
View
4 Config/Templates.xml
@@ -0,0 +1,4 @@
+<Templates>
+ <Default Name="YAFYAF" />
+ <Template Name="YAFYAF" Active="true" />
+</Templates>
View
69 Controllers/MainController.php
@@ -0,0 +1,69 @@
+<?php
+
+class MainController
+{
+ public $Action;
+ public $Module = 'Home';
+
+ public function __construct()
+ {
+ $this->SetAction();
+ $this->SetModule();
+ }
+
+ public function SetAction()
+ {
+ $this->Action = isset($_REQUEST['action']) ? $_REQUEST['action'] : 'Home';
+ }
+
+ public function SetModule()
+ {
+ $Modules = Yafyaf_Config::GetInstance()->Modules;
+
+ if (in_array($this->Action, $Modules)) {
+ $this->Module = $this->Action;
+ }
+ }
+
+ public function ProcessOutput()
+ {
+ ob_start();
+
+ $this->GetHtmlHeader();
+ $this->GetHtmlMenus($this);
+ $this->GetHtmlFooter();
+
+ $Page = ob_get_contents();
+ ob_end_clean();
+
+ return $Page;
+ }
+
+ public function GetHtmlHeader()
+ {
+ include YAFYAF_MARKUP . 'header.html.php';
+ }
+
+ public function GetHtmlFooter()
+ {
+ include YAFYAF_MARKUP . 'footer.html.php';
+ }
+
+ public function GetHtmlMenus()
+ {
+ global $yafyaf;
+ $yafyaf = $this;
+ include YAFYAF_MARKUP . 'menus.html.php';
+ }
+
+ public function GetModule()
+ {
+ $Module = $this->Module;
+
+ // Do this automatically with the Module.controller.php file.
+ require_once YAFYAF_MODULES . $Module . '/Module.controller.php';
+ $ClassName = 'Yafyaf_Module_' . $Module;
+ $Class = new $ClassName;
+ $Class->Generate();
+ }
+}
View
13 Database/Database.php
@@ -0,0 +1,13 @@
+<?php
+
+class Yafyaf_Database
+{
+ public static $DbObject;
+
+ public static function GetInstance()
+ {
+ $Type = Yafyaf_Config::GetInstance()->Database->Type;
+ $ClassName = 'Yafyaf_Database_' . $Type;
+ return new $ClassName;
+ }
+}
View
17 Database/PDO.php
@@ -0,0 +1,17 @@
+<?php
+
+class Yafyaf_Database_PDO
+{
+ public $db;
+
+ public function __construct()
+ {
+ $DbConfig = Yafyaf_Config::GetInstance()->Database;
+ $this->db = new PDO($DbConfig->Hostname, $DbConfig->Username, $DbConfig->Password);
+ }
+
+ public function GetInstance()
+ {
+ return new Yafyaf_Database_PDO();
+ }
+}
View
658 Extras/FlickrAPI.php
@@ -0,0 +1,658 @@
+<?php
+//
+// PHP5 Flickr_API
+// Should be mostly API compatible with Cal Henderson's PEAR::Flickr_API
+// but uses Curl and SimpleXML
+//
+// Rasmus Lerdorf, August 2005
+//
+
+class Flickr_API {
+ private $_cfg = array('api_key' => 'XXX',
+ 'api_secret' => 'YYY',
+ 'endpoint' => 'http://www.flickr.com/services/rest/',
+ 'auth_endpoint' => 'http://www.flickr.com/services/auth/?',
+ 'upload_endpoint' => 'http://www.flickr.com/services/upload/',
+ 'conn_timeout' => 20,
+ 'io_timeout' => 60 );
+
+ function __construct($params = array()) {
+ if(isset($params['token'])) $this->token = $params['token'];
+ foreach($params as $k => $v) {
+ $this->_cfg[$k] = $v;
+ }
+ if(!$this->_cfg['api_key'] || !$this->_cfg['api_secret']) {
+ throw new Exception("You must supply an api_key and an api_secret");
+ }
+ }
+
+ function callMethod($method, $params = array()) {
+ $this->_err_code = 0;
+ $this->_err_msg = '';
+
+ $req = curl_init();
+
+ if($method=='upload') {
+ $photo = $params['photo'];
+ unset($params['photo']);
+ } else {
+ $params['method'] = $method;
+ }
+ $params['api_key'] = $this->_cfg['api_key'];
+ $params['api_sig'] = $this->signArgs($params);
+
+ if($method=='upload') {
+ $params['photo'] = '@'.$photo;
+ curl_setopt($req, CURLOPT_URL, $this->_cfg['upload_endpoint']);
+ curl_setopt($req, CURLOPT_TIMEOUT, 0);
+# curl_setopt($req, CURLOPT_INFILESIZE, filesize($photo));
+ } else {
+ curl_setopt($req, CURLOPT_URL, $this->_cfg['endpoint']);
+ curl_setopt($req, CURLOPT_TIMEOUT, $this->_cfg['io_timeout']);
+ curl_setopt($req, CURLOPT_POST, 1);
+ }
+
+ // Sign and build request parameters
+ curl_setopt($req, CURLOPT_POSTFIELDS, $params);
+ curl_setopt($req, CURLOPT_CONNECTTIMEOUT, $this->_cfg['conn_timeout']);
+ curl_setopt($req, CURLOPT_FOLLOWLOCATION, 1);
+ curl_setopt($req, CURLOPT_HEADER, 0);
+ curl_setopt($req, CURLOPT_RETURNTRANSFER, 1);
+ $this->_http_body = curl_exec($req);
+
+ if (curl_errno($req)) {
+ throw new Exception(curl_error($req));
+ }
+
+ curl_close($req);
+ file_put_contents('/tmp/curl.log',print_r($params,true)."\n".$this->_http_body."\n\n",FILE_APPEND);
+
+ $xml = simplexml_load_string($this->_http_body);
+ $this->xml = $xml;
+
+ if((string)$xml['stat'] == 'fail') {
+ $this->_err_code = (int)$xml->err['code'];
+ $this->_err_msg = (string)$xml->err['msg'];
+ return 0;
+ }
+
+ if ((string)$xml['stat'] != 'ok') {
+ $this->_err_code = 0;
+ $this->_err_msg = "Unrecognised REST response status";
+ return 0;
+ }
+
+ return $xml;
+ }
+
+ function getErrorCode() {
+ return $this->_err_code;
+ }
+
+ function getErrorMessage() {
+ return $this->_err_msg;
+ }
+
+ function showError() {
+ echo "<br />ErrorCode: {$this->_err_code}<br />ErrorMessage: {$this->_err_msg}<br />\n";
+ }
+
+ function getAuthUrl($perms, $frob='') {
+ $args = array('api_key'=>$this->_cfg['api_key'],'perms'=>$perms);
+
+ if (strlen($frob)) { $args['frob'] = $frob; }
+
+ $args['api_sig'] = $this->signArgs($args);
+
+ $fields = '';
+ foreach($args as $k => $v) {
+ if($fields) $fields.='&';
+ $fields .= urlencode($k).'='.urlencode($v);
+ }
+
+ return $this->_cfg['auth_endpoint'].$fields;
+ }
+
+
+ function signArgs($args){
+ ksort($args);
+ $a = '';
+ foreach($args as $k => $v) {
+ $a .= $k . $v;
+ }
+ return md5($this->_cfg['api_secret'].$a);
+ }
+}
+
+class Flickr extends Flickr_API {
+ function __construct($params = array()) {
+ parent::__construct($params);
+ }
+
+ function getFrobToken($frob) {
+ $xml = $this->callMethod('flickr.auth.getToken',array('frob'=>$frob));
+ if(!$xml) { $this->showError(); return FALSE; }
+
+ $this->token = $ret['token'] = (string)$xml->auth->token;
+ $this->perms = $ret['perms'] = (string)$xml->auth->perms;
+ $uattr = $xml->auth->user->attributes();
+ foreach($xml->auth->user->attributes() as $k=>$v) {
+ // Sets token,perms,nsid,username and fullname
+ $this->$k = $ret[$k] = (string)$v;
+ }
+ return $ret;
+ }
+
+ function getPhotoURL($p, $size='s', $ext='jpg') {
+ return "http://static.flickr.com/{$p['server']}/{$p['id']}_{$p['secret']}_{$size}.{$ext}";
+ }
+
+ function authCheckToken($token) {
+ $params = array('auth_token' => $this->token);
+
+ $xml = $this->callMethod('flickr.auth.checkToken',$params);
+ if(!$xml) { return FALSE; }
+
+ foreach($xml->auth->children() as $k=>$v) {
+ $ret[(string)$k] = (string)$v;
+ foreach($v->attributes() as $kk=>$vv) {
+ $ret[(string)$kk] = (string)$vv;
+ }
+ }
+ return $ret;
+ }
+// Contacts
+
+ function contactsGetList($filter='') {
+ $params = array('auth_token'=>$this->token);
+ if($filter) $params['filter'] = $filter;
+
+ $xml = $this->callMethod('flickr.contacts.getList',$params);
+ if(!$xml) { return FALSE; }
+
+ $i = 0;
+ foreach($xml->contacts->contact as $contact) {
+ foreach($contact->attributes() as $k=>$v) {
+ $ret[$i][$k] = (string)$v;
+ }
+ $i++;
+ }
+ return $ret;
+ }
+
+ function contactsGetPublicList($id) {
+ $params = array('user_id'=>$id);
+ $xml = $this->callMethod('flickr.contacts.getPublicList',$params);
+ if(!$xml) { return FALSE; }
+
+ $i=0;
+ foreach($xml->contacts->contact as $contact) {
+ foreach($contact->attributes() as $k=>$v) {
+ $ret[$i][$k] = (string)$v;
+ }
+ $i++;
+ }
+ return $ret;
+ }
+
+// Blogs
+
+ function blogsGetList() {
+ $params = array('auth_token'=>$this->token);
+ $xml = $this->callMethod('flickr.blogs.getList',$params);
+ if(!$xml) { return FALSE; }
+
+ $i = 0;
+ foreach($xml->blogs->blog as $blog) {
+ foreach($blogs->attributes() as $k=>$v) {
+ $ret[(string)$blog['id']][$k] = (string)$v;
+ }
+ $i++;
+ }
+ return $ret;
+ }
+
+ function blogsPostPhoto($blog_id, $photo_id, $title, $description, $blog_password='') {
+ $params = array('auth_token' => $this->token,
+ 'blog_id' => $blog_id,
+ 'photo_id' => $photo_id,
+ 'title' => $title,
+ 'description' => $description);
+ if($blog_password) $params['blog_password'] = $blog_password;
+ $ret = $this->callMethod('flickr.blogs.postPhoto',$params);
+ return $ret;
+ }
+
+// Favorites
+
+ function favoritesAdd($photo_id) {
+ $params = array('auth_token' => $this->token,
+ 'photo_id' => $photo_id);
+ $ret = $this->callMethod('flickr.favorites.add',$params);
+ return $ret;
+ }
+
+ function favoritesRemove($photo_id) {
+ $params = array('auth_token' => $this->token,
+ 'photo_id' => $photo_id);
+ $ret = $this->callMethod('flickr.favorites.remove',$params);
+ return $ret;
+ }
+
+ function favoritesGetList($user_id='',$extras='',$per_page='',$page='') {
+ $params = array('auth_token' => $this->token);
+ if($user_id) $params['user_id'] = $user_id;
+ if($extras) $params['extras'] = $extras;
+ if($per_page) $params['per_page'] = $per_page;
+ if($page) $params['page'] = $page;
+ $xml = $this->callMethod('flickr.favorites.getList',$params);
+ if(!$xml) { return FALSE; }
+
+ $i = 0;
+ foreach($xml->photos->photo as $photo) {
+ foreach($photo->attributes() as $k=>$v) {
+ $ret[(string)$photo['id']][$k] = (string)$v;
+ }
+ $i++;
+ }
+ return $ret;
+ }
+
+ function favoritesGetPublicList($user_id='',$extras='',$per_page='',$page='') {
+ $params = array();
+ if($user_id) $params['user_id'] = $user_id;
+ if($extras) $params['extras'] = $extras;
+ if($per_page) $params['per_page'] = $per_page;
+ if($page) $params['page'] = $page;
+ $xml = $this->callMethod('flickr.favorites.getPublicList',$params);
+ if(!$xml) { return FALSE; }
+
+ $i = 0;
+ foreach($xml->photos->photo as $photo) {
+ foreach($photo->attributes() as $k=>$v) {
+ $ret[(string)$photo['id']][$k] = (string)$v;
+ }
+ $i++;
+ }
+ return $ret;
+ }
+
+// People
+
+ function peopleFindByUsername($username) {
+ $params = array('username'=>$username);
+ $xml = $this->callMethod('flickr.people.findByUsername',$params);
+ if(!$xml) { return FALSE; }
+
+ $attr = $xml->user->attributes();
+ return (string)$attr['nsid'];
+ }
+
+ function peopleGetInfo($nsid) {
+ $params = array('user_id'=>$nsid);
+ $xml = $this->callMethod('flickr.people.getInfo',$params);
+ if(!$xml) { return FALSE; }
+
+ foreach($xml->person->attributes() as $k=>$v) {
+ $ret[$k] = (string)$v;
+ }
+ foreach($xml->person->children() as $k=>$v) {
+ if($k=='photos') {
+ foreach($v as $kk=>$vv) {
+ $ret['photos'][$kk] = (string)$vv;
+ }
+ } else $ret[$k] = (string)$v;
+ }
+ return $ret;
+ }
+
+ function peopleGetPublicPhotos($nsid,$extras='',$per_page='',$page='') {
+ $params = array('user_id'=>$nsid);
+ if($extras) $params['extras'] = $extras;
+ if($per_page) $params['per_page'] = $per_page;
+ if($page) $params['page'] = $page;
+ $xml = $this->callMethod('flickr.people.getPublicPhotos',$params);
+ if(!$xml) { return FALSE; }
+
+ foreach($xml->photos->attributes() as $k=>$v) {
+ $ret[$k] = (string)$v;
+ }
+ $i=0;
+ foreach($xml->photos->photo as $photo) {
+ foreach($photo->attributes() as $k=>$v) {
+ $ret['photos'][(string)$photo['id']][$k] = (string)$v;
+ }
+ $i++;
+ }
+ return $ret;
+ }
+
+ function peopleFindByEmail($email, &$username='') {
+ $params = array('find_email'=>$email);
+ $xml = $this->callMethod('flickr.people.findByEmail',$params);
+ if(!$xml) { return FALSE; }
+ $attr = $xml->user->attributes();
+ if(func_num_args()>1) $username = (string)$xml->user->username;
+ return (string)$attr['nsid'];
+ }
+
+ function urlsLookupUser($url, &$username='') {
+ $params = array('url'=>$url);
+ $xml = $this->callMethod('flickr.urls.lookupUser',$params);
+ if(!$xml) { return FALSE; }
+ $attr = $xml->user->attributes();
+ if(func_num_args()>1) $username = (string)$xml->user->username;
+ return (string)$attr['id'];
+ }
+
+// Sets
+
+ // Indices of the photoset arrays are set to the individual photoset ids.
+ function photosetsGetList($nsid='') {
+ $params = array();
+ if($this->token) $params['auth_token'] = $this->token;
+ if($nsid) $params['user_id']=$nsid;
+ $xml = $this->callMethod('flickr.photosets.getList',$params);
+ if(!$xml) { return FALSE; }
+ foreach($xml->photosets->attributes() as $k=>$v) $ret[$k] = (string)$v;
+ $i=0;
+ foreach($xml->photosets->photoset as $k=>$v) {
+ foreach($v->attributes() as $kk=>$vv) $ret['photosets'][(string)$v['id']][$kk] = (string)$vv;
+ foreach($v->children() as $kk=>$vv) $ret['photosets'][(string)$v['id']][$kk] = (string)$vv;
+ $i++;
+ }
+ return $ret;
+ }
+
+ function photosetsGetInfo($photoset_id) {
+ $params = array('photoset_id' => $photoset_id);
+ $xml = $this->callMethod('flickr.photosets.getInfo',$params);
+ if(!$xml) { return FALSE; }
+ foreach($xml->photoset->attributes() as $k=>$v) $ret[$k] = (string)$v;
+ foreach($xml->photoset as $key=>$val) {
+ $ret[$key] = $val;
+ }
+ return $ret;
+ }
+
+ function photosetsCreate($title, $primary_photo_id, $description='') {
+ $params = array('auth_token' => $this->token);
+ $params['title'] = $title;
+ $params['primary_photo_id'] = $primary_photo_id;
+ if($description) $params['description'] = $description;
+
+ $xml = $this->callMethod('flickr.photosets.create',$params);
+ if(!$xml) { return FALSE; }
+
+ foreach($xml->photoset->attributes() as $k=>$v) {
+ $ret[$k] = (string)$v;
+ }
+ return $ret;
+ }
+
+ function photosetsDelete($photoset_id) {
+ $params = array('auth_token' => $this->token);
+ $params['photoset_id'] = $photoset_id;
+
+ $xml = $this->callMethod('flickr.photosets.delete',$params);
+ if(!$xml) { return FALSE; }
+ return TRUE;
+ }
+
+ function photosetsGetPhotos($photoset_id) {
+ $params = array('photoset_id' => $photoset_id);
+ $xml = $this->callMethod('flickr.photosets.getPhotos',$params);
+ if(!$xml) { return FALSE; }
+ foreach($xml->photoset->attributes() as $k=>$v) {
+ $ret[$k] = (string)$v;
+ }
+ $i=0;
+ foreach($xml->photoset->photo as $photo) {
+ foreach($photo->attributes() as $k=>$v) {
+ $ret['photos'][(string)$photo['id']][$k] = (string)$v;
+ }
+ $i++;
+ }
+ return $ret;
+ }
+
+ function photosetsAddPhoto($photoset_id, $photo_id) {
+ $params = array('auth_token' => $this->token);
+ $params['photoset_id'] = $photoset_id;
+ $params['photo_id'] = $photo_id;
+
+ $xml = $this->callMethod('flickr.photosets.addPhoto',$params);
+ if(!$xml) { return FALSE; }
+ return TRUE;
+ }
+
+ function photosetsRemovePhoto($photoset_id, $photo_id) {
+ $params = array('auth_token' => $this->token);
+ $params['photoset_id'] = $photoset_id;
+ $params['photo_id'] = $photo_id;
+
+ $xml = $this->callMethod('flickr.photosets.removePhoto',$params);
+ if(!$xml) { return FALSE; }
+ return TRUE;
+ }
+
+ function photosGetNotInSet($extras='',$perpage='',$page='') {
+ $params = array('auth_token' => $this->token);
+ if($extras) $params['extras'] = $extras;
+ if($per_page) $params['perpage'] = $per_page;
+ if($page) $params['page'] = $page;
+ $xml = $this->callMethod('flickr.photos.getNotInSet',$params);
+ if(!$xml) { return FALSE; }
+
+ foreach($xml->photos->attributes() as $k=>$v) {
+ $ret[$k] = (string)$v;
+ }
+ $i=0;
+ foreach($xml->photos->photo as $photo) {
+ foreach($photo->attributes() as $k=>$v) {
+ $ret['photos'][(string)$photo['id']][$k] = (string)$v;
+ }
+ $i++;
+ }
+ return $ret;
+ }
+
+ function photosGetRecent($extras='',$per_page='',$page='') {
+ $params = array();
+ if($extras) $params['extras'] = $extras;
+ if($per_page) $params['per_page'] = $per_page;
+ if($page) $params['page'] = $page;
+ $xml = $this->callMethod('flickr.photos.getRecent',$params);
+ if(!$xml) { return FALSE; }
+
+ foreach($xml->photos->attributes() as $k=>$v) {
+ $ret[$k] = (string)$v;
+ }
+ $i=0;
+ foreach($xml->photos->photo as $photo) {
+ foreach($photo->attributes() as $k=>$v) {
+ $ret['photos'][(string)$photo['id']][$k] = (string)$v;
+ }
+ $i++;
+ }
+ return $ret;
+ }
+
+ function photosGetInfo($photo_id, $secret='') {
+ $params = array();
+ if($this->token) $params['auth_token'] = $this->token;
+ $params['photo_id'] = $photo_id;
+ if($secret) $params['secret'] = $secret;
+
+ $xml = $this->callMethod('flickr.photos.getInfo',$params);
+ if(!$xml) { return FALSE; }
+
+ foreach($xml->photo->attributes() as $k=>$v) {
+ $ret[(string)$k] = (string)$v;
+ }
+ foreach($xml->photo->children() as $k=>$v) {
+ foreach($v->attributes() as $kk=>$vv) $ret[(string)$k][(string)$kk] = (string)$vv;
+ $id = -1;
+ foreach($v->children() as $kk=>$vv) {
+ $typed = false;
+ if(isset($vv['id'])) $id = (string)$vv['id'];
+ else if(isset($vv['type'])) { $id = (string)$vv['type']; $typed = true; }
+ else $id++;
+ foreach($vv->attributes() as $kkk=>$vvv) $ret[(string)$k][$id][(string)$kkk] = (string)$vvv;
+ if($typed) $ret[(string)$k][$id] = (string)$vv;
+ else $ret[(string)$k][$id]['text'] = (string)$vv;
+ }
+ if(!count($ret[(string)$k])) $ret[(string)$k] = (string)$v;
+ }
+ return $ret;
+ }
+
+ function upload($photo, $title='', $description='', $tags='', $perms='', $async=1, &$info=NULL) {
+ $tmpf = false;
+ $params = array('auth_token' => $this->token);
+ $url = parse_url($photo);
+ if(isset($url['scheme'])) {
+ $stream = fopen($photo,'r');
+ $tmpf = tempnam('/var/tmp','G2F');
+ file_put_contents($tmpf, $stream);
+ fclose($stream);
+ $params['photo'] = $tmpf;
+ } else $params['photo'] = $photo;
+ $info = filesize($params['photo']);
+ if($title) $params['title'] = $title;
+ if($description) $params['description'] = $description;
+ if($tags) $params['tags'] = $tags; // Space-separated string
+ if($perms) {
+ if(isset($perms['is_public'])) $params['is_public'] = $perms['is_public'];
+ if(isset($perms['is_friend'])) $params['is_friend'] = $perms['is_friend'];
+ if(isset($perms['is_family'])) $params['is_family'] = $perms['is_family'];
+ }
+ if($async) $params['async'] = $async;
+ $xml = $this->callMethod('upload',$params);
+ if($tmpf) unlink($tmpf);
+ if(!$xml) { return FALSE; }
+
+ if($async) return((string)$xml->ticketid);
+ else return((string)$xml->photoid);
+ }
+
+ function photosUploadCheckTickets($tickets) {
+ if(is_array($tickets)) {
+ foreach($tickets as $k=>$v) {
+ if($k) $params['tickets'] .= ' ';
+ $params['tickets'] .= $v;
+ }
+ } else {
+ $params['tickets'] = $tickets;
+ }
+ $xml = $this->callMethod('flickr.photos.upload.checkTickets',$params);
+ if(!$xml) { return FALSE; }
+
+ foreach($xml->uploader->ticket as $ticket) {
+ foreach($ticket->attributes() as $k=>$v) {
+ $ret[(string)$ticket['id']][$k] = (string)$v;
+ }
+ }
+ return $ret;
+ }
+
+// Notes
+
+ function photosNotesAdd($photo_id,$x,$y,$w,$h,$text) {
+ $params = array('auth_token' => $this->token);
+ $params['photo_id'] = $photo_id;
+ $params['note_x'] = $x;
+ $params['note_y'] = $y;
+ $params['note_w'] = $w;
+ $params['note_h'] = $h;
+ $params['note_text'] = $text;
+
+ $xml = $this->callMethod('flickr.photos.notes.add',$params);
+ if(!$xml) { return FALSE; }
+
+ return $xml->note['id'];
+ }
+
+ function photosNotesEdit($node_id,$x,$y,$w,$h,$text) {
+ $params = array('auth_token' => $this->token);
+ $params['note_id'] = $note_id;
+ $params['note_x'] = $x;
+ $params['note_y'] = $y;
+ $params['note_w'] = $w;
+ $params['note_h'] = $h;
+ $params['note_text'] = $text;
+
+ $xml = $this->callMethod('flickr.photos.notes.edit',$params);
+ if(!$xml) { return FALSE; }
+
+ return $xml->note['id'];
+ }
+
+ function photosNotesDelete($note_id) {
+ $params = array('auth_token' => $this->token);
+ $params['note_id'] = $node_id;
+
+ $xml = $this->callMethod('flickr.photos.notes.delete',$params);
+ if(!$xml) { return FALSE; }
+
+ return TRUE;
+ }
+
+ function photosSearch($user_id='',$tags='',$tag_mode='',$text='',$min_upload_date='',
+ $max_upload_date='',$min_taken_date='',$max_taken_date='',
+ $license='',$extras='',$per_page='',$page='',$sort='') {
+ if(is_array($user_id)) $params = $user_id;
+ else {
+ $params = array();
+ if($user_id) $params['user_id'] = $user_id;
+ if($tags) $params['tags'] = $tags;
+ if($tag_mode) $params['tag_mode'] = $tag_mode;
+ if($text) $params['text'] = $text;
+ if($min_upload_date) $params['min_upload_date'] = $min_upload_date;
+ if($max_upload_date) $params['max_upload_date'] = $max_upload_date;
+ if($min_taken_date) $params['min_taken_date'] = $min_taken_date;
+ if($max_taken_date) $params['max_taken_date'] = $max_taken_date;
+ if($license) $params['license'] = $license;
+ if($extras) $params['extras'] = $extras;
+ if($per_page) $params['per_page'] = $per_page;
+ if($page) $params['page'] = $page;
+ if($sort) $params['sort'] = $sort;
+ }
+
+ $xml = $this->callMethod('flickr.photos.search',$params);
+ if(!$xml) { return FALSE; }
+
+ foreach($xml->photos->attributes() as $k=>$v) {
+ $ret[$k] = (string)$v;
+ }
+ $i=0;
+ foreach($xml->photos->photo as $photo) {
+ foreach($photo->attributes() as $k=>$v) {
+ $ret['photos'][(string)$photo['id']][$k] = (string)$v;
+ }
+ $i++;
+ }
+ return $ret;
+ }
+
+// Reflection
+
+ function reflectionGetMethods() {
+ $params = array();
+ $xml = $this->callMethod('flickr.reflection.getMethods',$params);
+ if(!$xml) { return FALSE; }
+
+ $ret = (array)$xml->methods->method;
+ return $ret;
+ }
+
+}
+/*
+ * Local variables:
+ * tab-width: 4
+ * c-basic-offset: 4
+ * End:
+ * vim600: sw=4 ts=4 fdm=marker
+ * vim<600: sw=4 ts=4
+ */
+
View
3 Extras/TwitterCache.twit
@@ -0,0 +1,3 @@
+LastFetch###1223566919###Time###Sun Oct 05 22:43:38 +0000 2008###Text###Finalizing javascript addition and upload of new design
+LastFetch###1223566919###Time###Sat Oct 04 23:11:57 +0000 2008###Text###Working on a static design.
+LastFetch###1223566919###Time###Sat Oct 04 22:55:46 +0000 2008###Text###We are now on Twitter, follow us for more updates about our UG meetings and news!
View
110 Extras/TwitterRss.php
@@ -0,0 +1,110 @@
+<?php
+
+class Yafyaf_TwitterRss
+{
+ const URL = 'http://twitter.com/statuses/user_timeline/16592195.rss';
+ const CACHE = 'TwitterCache.twit';
+ const TWITUSER = 'user';
+ const TWITPASS = 'pass';
+
+ public $items;
+ public $content;
+ public $timeOfLastEntry;
+ public $cachedItems;
+
+ public function __construct()
+ {
+
+ if (!$this->getCache()) {
+ $items = array();
+ $twitter = new Services_Twitter(self::TWITUSER, self::TWITPASS);
+ try {
+ foreach ($twitter->statuses->user_timeline()->status as $status) {
+ $items['items'][] = $status;
+ }
+ } catch (Exception $e) {
+ $items['items'][0] = new stdClass();
+ $items['items'][0]->created_at = date('Y-m-d H:i:s');
+ $items['items'][0]->text =
+ 'Twitter limit exceeded, will be back online at some point when they allow us again :)';
+ }
+
+ $stringStatus = '';
+ foreach ($items['items'] as $key => $item) {
+ $stringStatus .= 'LastFetch###' . strtotime(date('Y-m-d H:i:s'), 0) . '###Time###' . $item->created_at . '###Text###' . $item->text . PHP_EOL;
+ }
+
+ file_put_contents(dirname(__FILE__) . DIRECTORY_SEPARATOR . self::CACHE, $stringStatus);
+ }
+
+ $this->loadCache();
+ }
+
+ public function getEntries()
+ {
+ $entries = array();
+ for ($i = 0; $i < 5; $i++) {
+ if (isset($this->items[$i])) {
+ $entries[$i]['date'] = $this->items[$i]->created_at;
+ $entries[$i]['text'] = $this->items[$i]->text;
+ }
+ }
+ return $entries;
+ }
+
+ private function loadCache()
+ {
+ /**
+ [0] => LastFetch
+ [1] => 1223230920
+ [2] => Time
+ [3] => Sat Oct 04 23:11:57 +0000 2008
+ [4] => Text
+ [5] => Working on a static design.
+ */
+ $string = file(dirname(__FILE__) . DIRECTORY_SEPARATOR . self::CACHE);
+ $i = 0;
+ foreach ($string as $line) {
+ $parts = split('###', $line);
+
+ $this->items[$i] = new stdClass();
+ $this->items[$i]->created_at = $parts[3];
+ $this->items[$i]->text = $parts[5];
+
+ ++$i;
+ }
+
+ return true;
+ }
+
+ public function getCache()
+ {
+ /**
+ [0] => LastFetch
+ [1] => 1223230920
+ [2] => Time
+ [3] => Sat Oct 04 23:11:57 +0000 2008
+ [4] => Text
+ [5] => Working on a static design.
+ */
+ $string = file(dirname(__FILE__) . DIRECTORY_SEPARATOR . self::CACHE);
+ $lastEntry = array_shift($string);
+
+ $lastEntryParts = split('###', $lastEntry);
+
+ $parts = new stdClass();
+ $parts->LastFetch = $lastEntryParts[1];
+
+ $dateFrom = $parts->LastFetch;
+ $dateTo = strtotime(date('Y-m-d H:i:s'), 0);;
+
+ $difference = $dateTo - $dateFrom;
+
+ // If difference is smaller than 10
+ if (($difference / 60) < 10) {
+ return true;
+ }
+
+ return false;
+ }
+}
View
0 Markup/Html/css/design.css
No changes.
View
0 Markup/Html/css/ie.css
No changes.
View
0 Markup/Html/css/ie7.css
No changes.
View
32 Markup/Html/js/jquery.js
@@ -0,0 +1,32 @@
+/*
+ * jQuery 1.2.6 - New Wave Javascript
+ *
+ * Copyright (c) 2008 John Resig (jquery.com)
+ * Dual licensed under the MIT (MIT-LICENSE.txt)
+ * and GPL (GPL-LICENSE.txt) licenses.
+ *
+ * $Date: 2008-05-24 14:22:17 -0400 (Sat, 24 May 2008) $
+ * $Rev: 5685 $
+ */
+(function(){var _jQuery=window.jQuery,_$=window.$;var jQuery=window.jQuery=window.$=function(selector,context){return new jQuery.fn.init(selector,context);};var quickExpr=/^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/,isSimple=/^.[^:#\[\.]*$/,undefined;jQuery.fn=jQuery.prototype={init:function(selector,context){selector=selector||document;if(selector.nodeType){this[0]=selector;this.length=1;return this;}if(typeof selector=="string"){var match=quickExpr.exec(selector);if(match&&(match[1]||!context)){if(match[1])selector=jQuery.clean([match[1]],context);else{var elem=document.getElementById(match[3]);if(elem){if(elem.id!=match[3])return jQuery().find(selector);return jQuery(elem);}selector=[];}}else
+return jQuery(context).find(selector);}else if(jQuery.isFunction(selector))return jQuery(document)[jQuery.fn.ready?"ready":"load"](selector);return this.setArray(jQuery.makeArray(selector));},jquery:"1.2.6",size:function(){return this.length;},length:0,get:function(num){return num==undefined?jQuery.makeArray(this):this[num];},pushStack:function(elems){var ret=jQuery(elems);ret.prevObject=this;return ret;},setArray:function(elems){this.length=0;Array.prototype.push.apply(this,elems);return this;},each:function(callback,args){return jQuery.each(this,callback,args);},index:function(elem){var ret=-1;return jQuery.inArray(elem&&elem.jquery?elem[0]:elem,this);},attr:function(name,value,type){var options=name;if(name.constructor==String)if(value===undefined)return this[0]&&jQuery[type||"attr"](this[0],name);else{options={};options[name]=value;}return this.each(function(i){for(name in options)jQuery.attr(type?this.style:this,name,jQuery.prop(this,options[name],type,i,name));});},css:function(key,value){if((key=='width'||key=='height')&&parseFloat(value)<0)value=undefined;return this.attr(key,value,"curCSS");},text:function(text){if(typeof text!="object"&&text!=null)return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(text));var ret="";jQuery.each(text||this,function(){jQuery.each(this.childNodes,function(){if(this.nodeType!=8)ret+=this.nodeType!=1?this.nodeValue:jQuery.fn.text([this]);});});return ret;},wrapAll:function(html){if(this[0])jQuery(html,this[0].ownerDocument).clone().insertBefore(this[0]).map(function(){var elem=this;while(elem.firstChild)elem=elem.firstChild;return elem;}).append(this);return this;},wrapInner:function(html){return this.each(function(){jQuery(this).contents().wrapAll(html);});},wrap:function(html){return this.each(function(){jQuery(this).wrapAll(html);});},append:function(){return this.domManip(arguments,true,false,function(elem){if(this.nodeType==1)this.appendChild(elem);});},prepend:function(){return this.domManip(arguments,true,true,function(elem){if(this.nodeType==1)this.insertBefore(elem,this.firstChild);});},before:function(){return this.domManip(arguments,false,false,function(elem){this.parentNode.insertBefore(elem,this);});},after:function(){return this.domManip(arguments,false,true,function(elem){this.parentNode.insertBefore(elem,this.nextSibling);});},end:function(){return this.prevObject||jQuery([]);},find:function(selector){var elems=jQuery.map(this,function(elem){return jQuery.find(selector,elem);});return this.pushStack(/[^+>] [^+>]/.test(selector)||selector.indexOf("..")>-1?jQuery.unique(elems):elems);},clone:function(events){var ret=this.map(function(){if(jQuery.browser.msie&&!jQuery.isXMLDoc(this)){var clone=this.cloneNode(true),container=document.createElement("div");container.appendChild(clone);return jQuery.clean([container.innerHTML])[0];}else
+return this.cloneNode(true);});var clone=ret.find("*").andSelf().each(function(){if(this[expando]!=undefined)this[expando]=null;});if(events===true)this.find("*").andSelf().each(function(i){if(this.nodeType==3)return;var events=jQuery.data(this,"events");for(var type in events)for(var handler in events[type])jQuery.event.add(clone[i],type,events[type][handler],events[type][handler].data);});return ret;},filter:function(selector){return this.pushStack(jQuery.isFunction(selector)&&jQuery.grep(this,function(elem,i){return selector.call(elem,i);})||jQuery.multiFilter(selector,this));},not:function(selector){if(selector.constructor==String)if(isSimple.test(selector))return this.pushStack(jQuery.multiFilter(selector,this,true));else
+selector=jQuery.multiFilter(selector,this);var isArrayLike=selector.length&&selector[selector.length-1]!==undefined&&!selector.nodeType;return this.filter(function(){return isArrayLike?jQuery.inArray(this,selector)<0:this!=selector;});},add:function(selector){return this.pushStack(jQuery.unique(jQuery.merge(this.get(),typeof selector=='string'?jQuery(selector):jQuery.makeArray(selector))));},is:function(selector){return!!selector&&jQuery.multiFilter(selector,this).length>0;},hasClass:function(selector){return this.is("."+selector);},val:function(value){if(value==undefined){if(this.length){var elem=this[0];if(jQuery.nodeName(elem,"select")){var index=elem.selectedIndex,values=[],options=elem.options,one=elem.type=="select-one";if(index<0)return null;for(var i=one?index:0,max=one?index+1:options.length;i<max;i++){var option=options[i];if(option.selected){value=jQuery.browser.msie&&!option.attributes.value.specified?option.text:option.value;if(one)return value;values.push(value);}}return values;}else
+return(this[0].value||"").replace(/\r/g,"");}return undefined;}if(value.constructor==Number)value+='';return this.each(function(){if(this.nodeType!=1)return;if(value.constructor==Array&&/radio|checkbox/.test(this.type))this.checked=(jQuery.inArray(this.value,value)>=0||jQuery.inArray(this.name,value)>=0);else if(jQuery.nodeName(this,"select")){var values=jQuery.makeArray(value);jQuery("option",this).each(function(){this.selected=(jQuery.inArray(this.value,values)>=0||jQuery.inArray(this.text,values)>=0);});if(!values.length)this.selectedIndex=-1;}else
+this.value=value;});},html:function(value){return value==undefined?(this[0]?this[0].innerHTML:null):this.empty().append(value);},replaceWith:function(value){return this.after(value).remove();},eq:function(i){return this.slice(i,i+1);},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments));},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem);}));},andSelf:function(){return this.add(this.prevObject);},data:function(key,value){var parts=key.split(".");parts[1]=parts[1]?"."+parts[1]:"";if(value===undefined){var data=this.triggerHandler("getData"+parts[1]+"!",[parts[0]]);if(data===undefined&&this.length)data=jQuery.data(this[0],key);return data===undefined&&parts[1]?this.data(parts[0]):data;}else
+return this.trigger("setData"+parts[1]+"!",[parts[0],value]).each(function(){jQuery.data(this,key,value);});},removeData:function(key){return this.each(function(){jQuery.removeData(this,key);});},domManip:function(args,table,reverse,callback){var clone=this.length>1,elems;return this.each(function(){if(!elems){elems=jQuery.clean(args,this.ownerDocument);if(reverse)elems.reverse();}var obj=this;if(table&&jQuery.nodeName(this,"table")&&jQuery.nodeName(elems[0],"tr"))obj=this.getElementsByTagName("tbody")[0]||this.appendChild(this.ownerDocument.createElement("tbody"));var scripts=jQuery([]);jQuery.each(elems,function(){var elem=clone?jQuery(this).clone(true)[0]:this;if(jQuery.nodeName(elem,"script"))scripts=scripts.add(elem);else{if(elem.nodeType==1)scripts=scripts.add(jQuery("script",elem).remove());callback.call(obj,elem);}});scripts.each(evalScript);});}};jQuery.fn.init.prototype=jQuery.fn;function evalScript(i,elem){if(elem.src)jQuery.ajax({url:elem.src,async:false,dataType:"script"});else
+jQuery.globalEval(elem.text||elem.textContent||elem.innerHTML||"");if(elem.parentNode)elem.parentNode.removeChild(elem);}function now(){return+new Date;}jQuery.extend=jQuery.fn.extend=function(){var target=arguments[0]||{},i=1,length=arguments.length,deep=false,options;if(target.constructor==Boolean){deep=target;target=arguments[1]||{};i=2;}if(typeof target!="object"&&typeof target!="function")target={};if(length==i){target=this;--i;}for(;i<length;i++)if((options=arguments[i])!=null)for(var name in options){var src=target[name],copy=options[name];if(target===copy)continue;if(deep&&copy&&typeof copy=="object"&&!copy.nodeType)target[name]=jQuery.extend(deep,src||(copy.length!=null?[]:{}),copy);else if(copy!==undefined)target[name]=copy;}return target;};var expando="jQuery"+now(),uuid=0,windowData={},exclude=/z-?index|font-?weight|opacity|zoom|line-?height/i,defaultView=document.defaultView||{};jQuery.extend({noConflict:function(deep){window.$=_$;if(deep)window.jQuery=_jQuery;return jQuery;},isFunction:function(fn){return!!fn&&typeof fn!="string"&&!fn.nodeName&&fn.constructor!=Array&&/^[\s[]?function/.test(fn+"");},isXMLDoc:function(elem){return elem.documentElement&&!elem.body||elem.tagName&&elem.ownerDocument&&!elem.ownerDocument.body;},globalEval:function(data){data=jQuery.trim(data);if(data){var head=document.getElementsByTagName("head")[0]||document.documentElement,script=document.createElement("script");script.type="text/javascript";if(jQuery.browser.msie)script.text=data;else
+script.appendChild(document.createTextNode(data));head.insertBefore(script,head.firstChild);head.removeChild(script);}},nodeName:function(elem,name){return elem.nodeName&&elem.nodeName.toUpperCase()==name.toUpperCase();},cache:{},data:function(elem,name,data){elem=elem==window?windowData:elem;var id=elem[expando];if(!id)id=elem[expando]=++uuid;if(name&&!jQuery.cache[id])jQuery.cache[id]={};if(data!==undefined)jQuery.cache[id][name]=data;return name?jQuery.cache[id][name]:id;},removeData:function(elem,name){elem=elem==window?windowData:elem;var id=elem[expando];if(name){if(jQuery.cache[id]){delete jQuery.cache[id][name];name="";for(name in jQuery.cache[id])break;if(!name)jQuery.removeData(elem);}}else{try{delete elem[expando];}catch(e){if(elem.removeAttribute)elem.removeAttribute(expando);}delete jQuery.cache[id];}},each:function(object,callback,args){var name,i=0,length=object.length;if(args){if(length==undefined){for(name in object)if(callback.apply(object[name],args)===false)break;}else
+for(;i<length;)if(callback.apply(object[i++],args)===false)break;}else{if(length==undefined){for(name in object)if(callback.call(object[name],name,object[name])===false)break;}else
+for(var value=object[0];i<length&&callback.call(value,i,value)!==false;value=object[++i]){}}return object;},prop:function(elem,value,type,i,name){if(jQuery.isFunction(value))value=value.call(elem,i);return value&&value.constructor==Number&&type=="curCSS"&&!exclude.test(name)?value+"px":value;},className:{add:function(elem,classNames){jQuery.each((classNames||"").split(/\s+/),function(i,className){if(elem.nodeType==1&&!jQuery.className.has(elem.className,className))elem.className+=(elem.className?" ":"")+className;});},remove:function(elem,classNames){if(elem.nodeType==1)elem.className=classNames!=undefined?jQuery.grep(elem.className.split(/\s+/),function(className){return!jQuery.className.has(classNames,className);}).join(" "):"";},has:function(elem,className){return jQuery.inArray(className,(elem.className||elem).toString().split(/\s+/))>-1;}},swap:function(elem,options,callback){var old={};for(var name in options){old[name]=elem.style[name];elem.style[name]=options[name];}callback.call(elem);for(var name in options)elem.style[name]=old[name];},css:function(elem,name,force){if(name=="width"||name=="height"){var val,props={position:"absolute",visibility:"hidden",display:"block"},which=name=="width"?["Left","Right"]:["Top","Bottom"];function getWH(){val=name=="width"?elem.offsetWidth:elem.offsetHeight;var padding=0,border=0;jQuery.each(which,function(){padding+=parseFloat(jQuery.curCSS(elem,"padding"+this,true))||0;border+=parseFloat(jQuery.curCSS(elem,"border"+this+"Width",true))||0;});val-=Math.round(padding+border);}if(jQuery(elem).is(":visible"))getWH();else
+jQuery.swap(elem,props,getWH);return Math.max(0,val);}return jQuery.curCSS(elem,name,force);},curCSS:function(elem,name,force){var ret,style=elem.style;function color(elem){if(!jQuery.browser.safari)return false;var ret=defaultView.getComputedStyle(elem,null);return!ret||ret.getPropertyValue("color")=="";}if(name=="opacity"&&jQuery.browser.msie){ret=jQuery.attr(style,"opacity");return ret==""?"1":ret;}if(jQuery.browser.opera&&name=="display"){var save=style.outline;style.outline="0 solid black";style.outline=save;}if(name.match(/float/i))name=styleFloat;if(!force&&style&&style[name])ret=style[name];else if(defaultView.getComputedStyle){if(name.match(/float/i))name="float";name=name.replace(/([A-Z])/g,"-$1").toLowerCase();var computedStyle=defaultView.getComputedStyle(elem,null);if(computedStyle&&!color(elem))ret=computedStyle.getPropertyValue(name);else{var swap=[],stack=[],a=elem,i=0;for(;a&&color(a);a=a.parentNode)stack.unshift(a);for(;i<stack.length;i++)if(color(stack[i])){swap[i]=stack[i].style.display;stack[i].style.display="block";}ret=name=="display"&&swap[stack.length-1]!=null?"none":(computedStyle&&computedStyle.getPropertyValue(name))||"";for(i=0;i<swap.length;i++)if(swap[i]!=null)stack[i].style.display=swap[i];}if(name=="opacity"&&ret=="")ret="1";}else if(elem.currentStyle){var camelCase=name.replace(/\-(\w)/g,function(all,letter){return letter.toUpperCase();});ret=elem.currentStyle[name]||elem.currentStyle[camelCase];if(!/^\d+(px)?$/i.test(ret)&&/^\d/.test(ret)){var left=style.left,rsLeft=elem.runtimeStyle.left;elem.runtimeStyle.left=elem.currentStyle.left;style.left=ret||0;ret=style.pixelLeft+"px";style.left=left;elem.runtimeStyle.left=rsLeft;}}return ret;},clean:function(elems,context){var ret=[];context=context||document;if(typeof context.createElement=='undefined')context=context.ownerDocument||context[0]&&context[0].ownerDocument||document;jQuery.each(elems,function(i,elem){if(!elem)return;if(elem.constructor==Number)elem+='';if(typeof elem=="string"){elem=elem.replace(/(<(\w+)[^>]*?)\/>/g,function(all,front,tag){return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?all:front+"></"+tag+">";});var tags=jQuery.trim(elem).toLowerCase(),div=context.createElement("div");var wrap=!tags.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!tags.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||tags.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!tags.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!tags.indexOf("<td")||!tags.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!tags.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||jQuery.browser.msie&&[1,"div<div>","</div>"]||[0,"",""];div.innerHTML=wrap[1]+elem+wrap[2];while(wrap[0]--)div=div.lastChild;if(jQuery.browser.msie){var tbody=!tags.indexOf("<table")&&tags.indexOf("<tbody")<0?div.firstChild&&div.firstChild.childNodes:wrap[1]=="<table>"&&tags.indexOf("<tbody")<0?div.childNodes:[];for(var j=tbody.length-1;j>=0;--j)if(jQuery.nodeName(tbody[j],"tbody")&&!tbody[j].childNodes.length)tbody[j].parentNode.removeChild(tbody[j]);if(/^\s/.test(elem))div.insertBefore(context.createTextNode(elem.match(/^\s*/)[0]),div.firstChild);}elem=jQuery.makeArray(div.childNodes);}if(elem.length===0&&(!jQuery.nodeName(elem,"form")&&!jQuery.nodeName(elem,"select")))return;if(elem[0]==undefined||jQuery.nodeName(elem,"form")||elem.options)ret.push(elem);else
+ret=jQuery.merge(ret,elem);});return ret;},attr:function(elem,name,value){if(!elem||elem.nodeType==3||elem.nodeType==8)return undefined;var notxml=!jQuery.isXMLDoc(elem),set=value!==undefined,msie=jQuery.browser.msie;name=notxml&&jQuery.props[name]||name;if(elem.tagName){var special=/href|src|style/.test(name);if(name=="selected"&&jQuery.browser.safari)elem.parentNode.selectedIndex;if(name in elem&&notxml&&!special){if(set){if(name=="type"&&jQuery.nodeName(elem,"input")&&elem.parentNode)throw"type property can't be changed";elem[name]=value;}if(jQuery.nodeName(elem,"form")&&elem.getAttributeNode(name))return elem.getAttributeNode(name).nodeValue;return elem[name];}if(msie&&notxml&&name=="style")return jQuery.attr(elem.style,"cssText",value);if(set)elem.setAttribute(name,""+value);var attr=msie&&notxml&&special?elem.getAttribute(name,2):elem.getAttribute(name);return attr===null?undefined:attr;}if(msie&&name=="opacity"){if(set){elem.zoom=1;elem.filter=(elem.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(value)+''=="NaN"?"":"alpha(opacity="+value*100+")");}return elem.filter&&elem.filter.indexOf("opacity=")>=0?(parseFloat(elem.filter.match(/opacity=([^)]*)/)[1])/100)+'':"";}name=name.replace(/-([a-z])/ig,function(all,letter){return letter.toUpperCase();});if(set)elem[name]=value;return elem[name];},trim:function(text){return(text||"").replace(/^\s+|\s+$/g,"");},makeArray:function(array){var ret=[];if(array!=null){var i=array.length;if(i==null||array.split||array.setInterval||array.call)ret[0]=array;else
+while(i)ret[--i]=array[i];}return ret;},inArray:function(elem,array){for(var i=0,length=array.length;i<length;i++)if(array[i]===elem)return i;return-1;},merge:function(first,second){var i=0,elem,pos=first.length;if(jQuery.browser.msie){while(elem=second[i++])if(elem.nodeType!=8)first[pos++]=elem;}else
+while(elem=second[i++])first[pos++]=elem;return first;},unique:function(array){var ret=[],done={};try{for(var i=0,length=array.length;i<length;i++){var id=jQuery.data(array[i]);if(!done[id]){done[id]=true;ret.push(array[i]);}}}catch(e){ret=array;}return ret;},grep:function(elems,callback,inv){var ret=[];for(var i=0,length=elems.length;i<length;i++)if(!inv!=!callback(elems[i],i))ret.push(elems[i]);return ret;},map:function(elems,callback){var ret=[];for(var i=0,length=elems.length;i<length;i++){var value=callback(elems[i],i);if(value!=null)ret[ret.length]=value;}return ret.concat.apply([],ret);}});var userAgent=navigator.userAgent.toLowerCase();jQuery.browser={version:(userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[])[1],safari:/webkit/.test(userAgent),opera:/opera/.test(userAgent),msie:/msie/.test(userAgent)&&!/opera/.test(userAgent),mozilla:/mozilla/.test(userAgent)&&!/(compatible|webkit)/.test(userAgent)};var styleFloat=jQuery.browser.msie?"styleFloat":"cssFloat";jQuery.extend({boxModel:!jQuery.browser.msie||document.compatMode=="CSS1Compat",props:{"for":"htmlFor","class":"className","float":styleFloat,cssFloat:styleFloat,styleFloat:styleFloat,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing"}});jQuery.each({parent:function(elem){return elem.parentNode;},parents:function(elem){return jQuery.dir(elem,"parentNode");},next:function(elem){return jQuery.nth(elem,2,"nextSibling");},prev:function(elem){return jQuery.nth(elem,2,"previousSibling");},nextAll:function(elem){return jQuery.dir(elem,"nextSibling");},prevAll:function(elem){return jQuery.dir(elem,"previousSibling");},siblings:function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},children:function(elem){return jQuery.sibling(elem.firstChild);},contents:function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}},function(name,fn){jQuery.fn[name]=function(selector){var ret=jQuery.map(this,fn);if(selector&&typeof selector=="string")ret=jQuery.multiFilter(selector,ret);return this.pushStack(jQuery.unique(ret));};});jQuery.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(name,original){jQuery.fn[name]=function(){var args=arguments;return this.each(function(){for(var i=0,length=args.length;i<length;i++)jQuery(args[i])[original](this);});};});jQuery.each({removeAttr:function(name){jQuery.attr(this,name,"");if(this.nodeType==1)this.removeAttribute(name);},addClass:function(classNames){jQuery.className.add(this,classNames);},removeClass:function(classNames){jQuery.className.remove(this,classNames);},toggleClass:function(classNames){jQuery.className[jQuery.className.has(this,classNames)?"remove":"add"](this,classNames);},remove:function(selector){if(!selector||jQuery.filter(selector,[this]).r.length){jQuery("*",this).add(this).each(function(){jQuery.event.remove(this);jQuery.removeData(this);});if(this.parentNode)this.parentNode.removeChild(this);}},empty:function(){jQuery(">*",this).remove();while(this.firstChild)this.removeChild(this.firstChild);}},function(name,fn){jQuery.fn[name]=function(){return this.each(fn,arguments);};});jQuery.each(["Height","Width"],function(i,name){var type=name.toLowerCase();jQuery.fn[type]=function(size){return this[0]==window?jQuery.browser.opera&&document.body["client"+name]||jQuery.browser.safari&&window["inner"+name]||document.compatMode=="CSS1Compat"&&document.documentElement["client"+name]||document.body["client"+name]:this[0]==document?Math.max(Math.max(document.body["scroll"+name],document.documentElement["scroll"+name]),Math.max(document.body["offset"+name],document.documentElement["offset"+name])):size==undefined?(this.length?jQuery.css(this[0],type):null):this.css(type,size.constructor==String?size:size+"px");};});function num(elem,prop){return elem[0]&&parseInt(jQuery.curCSS(elem[0],prop,true),10)||0;}var chars=jQuery.browser.safari&&parseInt(jQuery.browser.version)<417?"(?:[\\w*_-]|\\\\.)":"(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",quickChild=new RegExp("^>\\s*("+chars+"+)"),quickID=new RegExp("^("+chars+"+)(#)("+chars+"+)"),quickClass=new RegExp("^([#.]?)("+chars+"*)");jQuery.extend({expr:{"":function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);},"#":function(a,i,m){return a.getAttribute("id")==m[2];},":":{lt:function(a,i,m){return i<m[3]-0;},gt:function(a,i,m){return i>m[3]-0;},nth:function(a,i,m){return m[3]-0==i;},eq:function(a,i,m){return m[3]-0==i;},first:function(a,i){return i==0;},last:function(a,i,m,r){return i==r.length-1;},even:function(a,i){return i%2==0;},odd:function(a,i){return i%2;},"first-child":function(a){return a.parentNode.getElementsByTagName("*")[0]==a;},"last-child":function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;},"only-child":function(a){return!jQuery.nth(a.parentNode.lastChild,2,"previousSibling");},parent:function(a){return a.firstChild;},empty:function(a){return!a.firstChild;},contains:function(a,i,m){return(a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])>=0;},visible:function(a){return"hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden";},hidden:function(a){return"hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden";},enabled:function(a){return!a.disabled;},disabled:function(a){return a.disabled;},checked:function(a){return a.checked;},selected:function(a){return a.selected||jQuery.attr(a,"selected");},text:function(a){return"text"==a.type;},radio:function(a){return"radio"==a.type;},checkbox:function(a){return"checkbox"==a.type;},file:function(a){return"file"==a.type;},password:function(a){return"password"==a.type;},submit:function(a){return"submit"==a.type;},image:function(a){return"image"==a.type;},reset:function(a){return"reset"==a.type;},button:function(a){return"button"==a.type||jQuery.nodeName(a,"button");},input:function(a){return/input|select|textarea|button/i.test(a.nodeName);},has:function(a,i,m){return jQuery.find(m[3],a).length;},header:function(a){return/h\d/i.test(a.nodeName);},animated:function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length;}}},parse:[/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,new RegExp("^([:.#]*)("+chars+"+)")],multiFilter:function(expr,elems,not){var old,cur=[];while(expr&&expr!=old){old=expr;var f=jQuery.filter(expr,elems,not);expr=f.t.replace(/^\s*,\s*/,"");cur=not?elems=f.r:jQuery.merge(cur,f.r);}return cur;},find:function(t,context){if(typeof t!="string")return[t];if(context&&context.nodeType!=1&&context.nodeType!=9)return[];context=context||document;var ret=[context],done=[],last,nodeName;while(t&&last!=t){var r=[];last=t;t=jQuery.trim(t);var foundToken=false,re=quickChild,m=re.exec(t);if(m){nodeName=m[1].toUpperCase();for(var i=0;ret[i];i++)for(var c=ret[i].firstChild;c;c=c.nextSibling)if(c.nodeType==1&&(nodeName=="*"||c.nodeName.toUpperCase()==nodeName))r.push(c);ret=r;t=t.replace(re,"");if(t.indexOf(" ")==0)continue;foundToken=true;}else{re=/^([>+~])\s*(\w*)/i;if((m=re.exec(t))!=null){r=[];var merge={};nodeName=m[2].toUpperCase();m=m[1];for(var j=0,rl=ret.length;j<rl;j++){var n=m=="~"||m=="+"?ret[j].nextSibling:ret[j].firstChild;for(;n;n=n.nextSibling)if(n.nodeType==1){var id=jQuery.data(n);if(m=="~"&&merge[id])break;if(!nodeName||n.nodeName.toUpperCase()==nodeName){if(m=="~")merge[id]=true;r.push(n);}if(m=="+")break;}}ret=r;t=jQuery.trim(t.replace(re,""));foundToken=true;}}if(t&&!foundToken){if(!t.indexOf(",")){if(context==ret[0])ret.shift();done=jQuery.merge(done,ret);r=ret=[context];t=" "+t.substr(1,t.length);}else{var re2=quickID;var m=re2.exec(t);if(m){m=[0,m[2],m[3],m[1]];}else{re2=quickClass;m=re2.exec(t);}m[2]=m[2].replace(/\\/g,"");var elem=ret[ret.length-1];if(m[1]=="#"&&elem&&elem.getElementById&&!jQuery.isXMLDoc(elem)){var oid=elem.getElementById(m[2]);if((jQuery.browser.msie||jQuery.browser.opera)&&oid&&typeof oid.id=="string"&&oid.id!=m[2])oid=jQuery('[@id="'+m[2]+'"]',elem)[0];ret=r=oid&&(!m[3]||jQuery.nodeName(oid,m[3]))?[oid]:[];}else{for(var i=0;ret[i];i++){var tag=m[1]=="#"&&m[3]?m[3]:m[1]!=""||m[0]==""?"*":m[2];if(tag=="*"&&ret[i].nodeName.toLowerCase()=="object")tag="param";r=jQuery.merge(r,ret[i].getElementsByTagName(tag));}if(m[1]==".")r=jQuery.classFilter(r,m[2]);if(m[1]=="#"){var tmp=[];for(var i=0;r[i];i++)if(r[i].getAttribute("id")==m[2]){tmp=[r[i]];break;}r=tmp;}ret=r;}t=t.replace(re2,"");}}if(t){var val=jQuery.filter(t,r);ret=r=val.r;t=jQuery.trim(val.t);}}if(t)ret=[];if(ret&&context==ret[0])ret.shift();done=jQuery.merge(done,ret);return done;},classFilter:function(r,m,not){m=" "+m+" ";var tmp=[];for(var i=0;r[i];i++){var pass=(" "+r[i].className+" ").indexOf(m)>=0;if(!not&&pass||not&&!pass)tmp.push(r[i]);}return tmp;},filter:function(t,r,not){var last;while(t&&t!=last){last=t;var p=jQuery.parse,m;for(var i=0;p[i];i++){m=p[i].exec(t);if(m){t=t.substring(m[0].length);m[2]=m[2].replace(/\\/g,"");break;}}if(!m)break;if(m[1]==":"&&m[2]=="not")r=isSimple.test(m[3])?jQuery.filter(m[3],r,true).r:jQuery(r).not(m[3]);else if(m[1]==".")r=jQuery.classFilter(r,m[2],not);else if(m[1]=="["){var tmp=[],type=m[3];for(var i=0,rl=r.length;i<rl;i++){var a=r[i],z=a[jQuery.props[m[2]]||m[2]];if(z==null||/href|src|selected/.test(m[2]))z=jQuery.attr(a,m[2])||'';if((type==""&&!!z||type=="="&&z==m[5]||type=="!="&&z!=m[5]||type=="^="&&z&&!z.indexOf(m[5])||type=="$="&&z.substr(z.length-m[5].length)==m[5]||(type=="*="||type=="~=")&&z.indexOf(m[5])>=0)^not)tmp.push(a);}r=tmp;}else if(m[1]==":"&&m[2]=="nth-child"){var merge={},tmp=[],test=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(m[3]=="even"&&"2n"||m[3]=="odd"&&"2n+1"||!/\D/.test(m[3])&&"0n+"+m[3]||m[3]),first=(test[1]+(test[2]||1))-0,last=test[3]-0;for(var i=0,rl=r.length;i<rl;i++){var node=r[i],parentNode=node.parentNode,id=jQuery.data(parentNode);if(!merge[id]){var c=1;for(var n=parentNode.firstChild;n;n=n.nextSibling)if(n.nodeType==1)n.nodeIndex=c++;merge[id]=true;}var add=false;if(first==0){if(node.nodeIndex==last)add=true;}else if((node.nodeIndex-last)%first==0&&(node.nodeIndex-last)/first>=0)add=true;if(add^not)tmp.push(node);}r=tmp;}else{var fn=jQuery.expr[m[1]];if(typeof fn=="object")fn=fn[m[2]];if(typeof fn=="string")fn=eval("false||function(a,i){return "+fn+";}");r=jQuery.grep(r,function(elem,i){return fn(elem,i,m,r);},not);}}return{r:r,t:t};},dir:function(elem,dir){var matched=[],cur=elem[dir];while(cur&&cur!=document){if(cur.nodeType==1)matched.push(cur);cur=cur[dir];}return matched;},nth:function(cur,result,dir,elem){result=result||1;var num=0;for(;cur;cur=cur[dir])if(cur.nodeType==1&&++num==result)break;return cur;},sibling:function(n,elem){var r=[];for(;n;n=n.nextSibling){if(n.nodeType==1&&n!=elem)r.push(n);}return r;}});jQuery.event={add:function(elem,types,handler,data){if(elem.nodeType==3||elem.nodeType==8)return;if(jQuery.browser.msie&&elem.setInterval)elem=window;if(!handler.guid)handler.guid=this.guid++;if(data!=undefined){var fn=handler;handler=this.proxy(fn,function(){return fn.apply(this,arguments);});handler.data=data;}var events=jQuery.data(elem,"events")||jQuery.data(elem,"events",{}),handle=jQuery.data(elem,"handle")||jQuery.data(elem,"handle",function(){if(typeof jQuery!="undefined"&&!jQuery.event.triggered)return jQuery.event.handle.apply(arguments.callee.elem,arguments);});handle.elem=elem;jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];handler.type=parts[1];var handlers=events[type];if(!handlers){handlers=events[type]={};if(!jQuery.event.special[type]||jQuery.event.special[type].setup.call(elem)===false){if(elem.addEventListener)elem.addEventListener(type,handle,false);else if(elem.attachEvent)elem.attachEvent("on"+type,handle);}}handlers[handler.guid]=handler;jQuery.event.global[type]=true;});elem=null;},guid:1,global:{},remove:function(elem,types,handler){if(elem.nodeType==3||elem.nodeType==8)return;var events=jQuery.data(elem,"events"),ret,index;if(events){if(types==undefined||(typeof types=="string"&&types.charAt(0)=="."))for(var type in events)this.remove(elem,type+(types||""));else{if(types.type){handler=types.handler;types=types.type;}jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];if(events[type]){if(handler)delete events[type][handler.guid];else
+for(handler in events[type])if(!parts[1]||events[type][handler].type==parts[1])delete events[type][handler];for(ret in events[type])break;if(!ret){if(!jQuery.event.special[type]||jQuery.event.special[type].teardown.call(elem)===false){if(elem.removeEventListener)elem.removeEventListener(type,jQuery.data(elem,"handle"),false);else if(elem.detachEvent)elem.detachEvent("on"+type,jQuery.data(elem,"handle"));}ret=null;delete events[type];}}});}for(ret in events)break;if(!ret){var handle=jQuery.data(elem,"handle");if(handle)handle.elem=null;jQuery.removeData(elem,"events");jQuery.removeData(elem,"handle");}}},trigger:function(type,data,elem,donative,extra){data=jQuery.makeArray(data);if(type.indexOf("!")>=0){type=type.slice(0,-1);var exclusive=true;}if(!elem){if(this.global[type])jQuery("*").add([window,document]).trigger(type,data);}else{if(elem.nodeType==3||elem.nodeType==8)return undefined;var val,ret,fn=jQuery.isFunction(elem[type]||null),event=!data[0]||!data[0].preventDefault;if(event){data.unshift({type:type,target:elem,preventDefault:function(){},stopPropagation:function(){},timeStamp:now()});data[0][expando]=true;}data[0].type=type;if(exclusive)data[0].exclusive=true;var handle=jQuery.data(elem,"handle");if(handle)val=handle.apply(elem,data);if((!fn||(jQuery.nodeName(elem,'a')&&type=="click"))&&elem["on"+type]&&elem["on"+type].apply(elem,data)===false)val=false;if(event)data.shift();if(extra&&jQuery.isFunction(extra)){ret=extra.apply(elem,val==null?data:data.concat(val));if(ret!==undefined)val=ret;}if(fn&&donative!==false&&val!==false&&!(jQuery.nodeName(elem,'a')&&type=="click")){this.triggered=true;try{elem[type]();}catch(e){}}this.triggered=false;}return val;},handle:function(event){var val,ret,namespace,all,handlers;event=arguments[0]=jQuery.event.fix(event||window.event);namespace=event.type.split(".");event.type=namespace[0];namespace=namespace[1];all=!namespace&&!event.exclusive;handlers=(jQuery.data(this,"events")||{})[event.type];for(var j in handlers){var handler=handlers[j];if(all||handler.type==namespace){event.handler=handler;event.data=handler.data;ret=handler.apply(this,arguments);if(val!==false)val=ret;if(ret===false){event.preventDefault();event.stopPropagation();}}}return val;},fix:function(event){if(event[expando]==true)return event;var originalEvent=event;event={originalEvent:originalEvent};var props="altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target timeStamp toElement type view wheelDelta which".split(" ");for(var i=props.length;i;i--)event[props[i]]=originalEvent[props[i]];event[expando]=true;event.preventDefault=function(){if(originalEvent.preventDefault)originalEvent.preventDefault();originalEvent.returnValue=false;};event.stopPropagation=function(){if(originalEvent.stopPropagation)originalEvent.stopPropagation();originalEvent.cancelBubble=true;};event.timeStamp=event.timeStamp||now();if(!event.target)event.target=event.srcElement||document;if(event.target.nodeType==3)event.target=event.target.parentNode;if(!event.relatedTarget&&event.fromElement)event.relatedTarget=event.fromElement==event.target?event.toElement:event.fromElement;if(event.pageX==null&&event.clientX!=null){var doc=document.documentElement,body=document.body;event.pageX=event.clientX+(doc&&doc.scrollLeft||body&&body.scrollLeft||0)-(doc.clientLeft||0);event.pageY=event.clientY+(doc&&doc.scrollTop||body&&body.scrollTop||0)-(doc.clientTop||0);}if(!event.which&&((event.charCode||event.charCode===0)?event.charCode:event.keyCode))event.which=event.charCode||event.keyCode;if(!event.metaKey&&event.ctrlKey)event.metaKey=event.ctrlKey;if(!event.which&&event.button)event.which=(event.button&1?1:(event.button&2?3:(event.button&4?2:0)));return event;},proxy:function(fn,proxy){proxy.guid=fn.guid=fn.guid||proxy.guid||this.guid++;return proxy;},special:{ready:{setup:function(){bindReady();return;},teardown:function(){return;}},mouseenter:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseover",jQuery.event.special.mouseenter.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseover",jQuery.event.special.mouseenter.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseenter";return jQuery.event.handle.apply(this,arguments);}},mouseleave:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseout",jQuery.event.special.mouseleave.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseout",jQuery.event.special.mouseleave.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseleave";return jQuery.event.handle.apply(this,arguments);}}}};jQuery.fn.extend({bind:function(type,data,fn){return type=="unload"?this.one(type,data,fn):this.each(function(){jQuery.event.add(this,type,fn||data,fn&&data);});},one:function(type,data,fn){var one=jQuery.event.proxy(fn||data,function(event){jQuery(this).unbind(event,one);return(fn||data).apply(this,arguments);});return this.each(function(){jQuery.event.add(this,type,one,fn&&data);});},unbind:function(type,fn){return this.each(function(){jQuery.event.remove(this,type,fn);});},trigger:function(type,data,fn){return this.each(function(){jQuery.event.trigger(type,data,this,true,fn);});},triggerHandler:function(type,data,fn){return this[0]&&jQuery.event.trigger(type,data,this[0],false,fn);},toggle:function(fn){var args=arguments,i=1;while(i<args.length)jQuery.event.proxy(fn,args[i++]);return this.click(jQuery.event.proxy(fn,function(event){this.lastToggle=(this.lastToggle||0)%i;event.preventDefault();return args[this.lastToggle++].apply(this,arguments)||false;}));},hover:function(fnOver,fnOut){return this.bind('mouseenter',fnOver).bind('mouseleave',fnOut);},ready:function(fn){bindReady();if(jQuery.isReady)fn.call(document,jQuery);else
+jQuery.readyList.push(function(){return fn.call(this,jQuery);});return this;}});jQuery.extend({isReady:false,readyList:[],ready:function(){if(!jQuery.isReady){jQuery.isReady=true;if(jQuery.readyList){jQuery.each(jQuery.readyList,function(){this.call(document);});jQuery.readyList=null;}jQuery(document).triggerHandler("ready");}}});var readyBound=false;function bindReady(){if(readyBound)return;readyBound=true;if(document.addEventListener&&!jQuery.browser.opera)document.addEventListener("DOMContentLoaded",jQuery.ready,false);if(jQuery.browser.msie&&window==top)(function(){if(jQuery.isReady)return;try{document.documentElement.doScroll("left");}catch(error){setTimeout(arguments.callee,0);return;}jQuery.ready();})();if(jQuery.browser.opera)document.addEventListener("DOMContentLoaded",function(){if(jQuery.isReady)return;for(var i=0;i<document.styleSheets.length;i++)if(document.styleSheets[i].disabled){setTimeout(arguments.callee,0);return;}jQuery.ready();},false);if(jQuery.browser.safari){var numStyles;(function(){if(jQuery.isReady)return;if(document.readyState!="loaded"&&document.readyState!="complete"){setTimeout(arguments.callee,0);return;}if(numStyles===undefined)numStyles=jQuery("style, link[rel=stylesheet]").length;if(document.styleSheets.length!=numStyles){setTimeout(arguments.callee,0);return;}jQuery.ready();})();}jQuery.event.add(window,"load",jQuery.ready);}jQuery.each(("blur,focus,load,resize,scroll,unload,click,dblclick,"+"mousedown,mouseup,mousemove,mouseover,mouseout,change,select,"+"submit,keydown,keypress,keyup,error").split(","),function(i,name){jQuery.fn[name]=function(fn){return fn?this.bind(name,fn):this.trigger(name);};});var withinElement=function(event,elem){var parent=event.relatedTarget;while(parent&&parent!=elem)try{parent=parent.parentNode;}catch(error){parent=elem;}return parent==elem;};jQuery(window).bind("unload",function(){jQuery("*").add(document).unbind();});jQuery.fn.extend({_load:jQuery.fn.load,load:function(url,params,callback){if(typeof url!='string')return this._load(url);var off=url.indexOf(" ");if(off>=0){var selector=url.slice(off,url.length);url=url.slice(0,off);}callback=callback||function(){};var type="GET";if(params)if(jQuery.isFunction(params)){callback=params;params=null;}else{params=jQuery.param(params);type="POST";}var self=this;jQuery.ajax({url:url,type:type,dataType:"html",data:params,complete:function(res,status){if(status=="success"||status=="notmodified")self.html(selector?jQuery("<div/>").append(res.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(selector):res.responseText);self.each(callback,[res.responseText,status,res]);}});return this;},serialize:function(){return jQuery.param(this.serializeArray());},serializeArray:function(){return this.map(function(){return jQuery.nodeName(this,"form")?jQuery.makeArray(this.elements):this;}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password/i.test(this.type));}).map(function(i,elem){var val=jQuery(this).val();return val==null?null:val.constructor==Array?jQuery.map(val,function(val,i){return{name:elem.name,value:val};}):{name:elem.name,value:val};}).get();}});jQuery.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(i,o){jQuery.fn[o]=function(f){return this.bind(o,f);};});var jsc=now();jQuery.extend({get:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data=null;}return jQuery.ajax({type:"GET",url:url,data:data,success:callback,dataType:type});},getScript:function(url,callback){return jQuery.get(url,null,callback,"script");},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json");},post:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data={};}return jQuery.ajax({type:"POST",url:url,data:data,success:callback,dataType:type});},ajaxSetup:function(settings){jQuery.extend(jQuery.ajaxSettings,settings);},ajaxSettings:{url:location.href,global:true,type:"GET",timeout:0,contentType:"application/x-www-form-urlencoded",processData:true,async:true,data:null,username:null,password:null,accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(s){s=jQuery.extend(true,s,jQuery.extend(true,{},jQuery.ajaxSettings,s));var jsonp,jsre=/=\?(&|$)/g,status,data,type=s.type.toUpperCase();if(s.data&&s.processData&&typeof s.data!="string")s.data=jQuery.param(s.data);if(s.dataType=="jsonp"){if(type=="GET"){if(!s.url.match(jsre))s.url+=(s.url.match(/\?/)?"&":"?")+(s.jsonp||"callback")+"=?";}else if(!s.data||!s.data.match(jsre))s.data=(s.data?s.data+"&":"")+(s.jsonp||"callback")+"=?";s.dataType="json";}if(s.dataType=="json"&&(s.data&&s.data.match(jsre)||s.url.match(jsre))){jsonp="jsonp"+jsc++;if(s.data)s.data=(s.data+"").replace(jsre,"="+jsonp+"$1");s.url=s.url.replace(jsre,"="+jsonp+"$1");s.dataType="script";window[jsonp]=function(tmp){data=tmp;success();complete();window[jsonp]=undefined;try{delete window[jsonp];}catch(e){}if(head)head.removeChild(script);};}if(s.dataType=="script"&&s.cache==null)s.cache=false;if(s.cache===false&&type=="GET"){var ts=now();var ret=s.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+ts+"$2");s.url=ret+((ret==s.url)?(s.url.match(/\?/)?"&":"?")+"_="+ts:"");}if(s.data&&type=="GET"){s.url+=(s.url.match(/\?/)?"&":"?")+s.data;s.data=null;}if(s.global&&!jQuery.active++)jQuery.event.trigger("ajaxStart");var remote=/^(?:\w+:)?\/\/([^\/?#]+)/;if(s.dataType=="script"&&type=="GET"&&remote.test(s.url)&&remote.exec(s.url)[1]!=location.host){var head=document.getElementsByTagName("head")[0];var script=document.createElement("script");script.src=s.url;if(s.scriptCharset)script.charset=s.scriptCharset;if(!jsonp){var done=false;script.onload=script.onreadystatechange=function(){if(!done&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){done=true;success();complete();head.removeChild(script);}};}head.appendChild(script);return undefined;}var requestDone=false;var xhr=window.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest();if(s.username)xhr.open(type,s.url,s.async,s.username,s.password);else
+xhr.open(type,s.url,s.async);try{if(s.data)xhr.setRequestHeader("Content-Type",s.contentType);if(s.ifModified)xhr.setRequestHeader("If-Modified-Since",jQuery.lastModified[s.url]||"Thu, 01 Jan 1970 00:00:00 GMT");xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");xhr.setRequestHeader("Accept",s.dataType&&s.accepts[s.dataType]?s.accepts[s.dataType]+", */*":s.accepts._default);}catch(e){}if(s.beforeSend&&s.beforeSend(xhr,s)===false){s.global&&jQuery.active--;xhr.abort();return false;}if(s.global)jQuery.event.trigger("ajaxSend",[xhr,s]);var onreadystatechange=function(isTimeout){if(!requestDone&&xhr&&(xhr.readyState==4||isTimeout=="timeout")){requestDone=true;if(ival){clearInterval(ival);ival=null;}status=isTimeout=="timeout"&&"timeout"||!jQuery.httpSuccess(xhr)&&"error"||s.ifModified&&jQuery.httpNotModified(xhr,s.url)&&"notmodified"||"success";if(status=="success"){try{data=jQuery.httpData(xhr,s.dataType,s.dataFilter);}catch(e){status="parsererror";}}if(status=="success"){var modRes;try{modRes=xhr.getResponseHeader("Last-Modified");}catch(e){}if(s.ifModified&&modRes)jQuery.lastModified[s.url]=modRes;if(!jsonp)success();}else
+jQuery.handleError(s,xhr,status);complete();if(s.async)xhr=null;}};if(s.async){var ival=setInterval(onreadystatechange,13);if(s.timeout>0)setTimeout(function(){if(xhr){xhr.abort();if(!requestDone)onreadystatechange("timeout");}},s.timeout);}try{xhr.send(s.data);}catch(e){jQuery.handleError(s,xhr,null,e);}if(!s.async)onreadystatechange();function success(){if(s.success)s.success(data,status);if(s.global)jQuery.event.trigger("ajaxSuccess",[xhr,s]);}function complete(){if(s.complete)s.complete(xhr,status);if(s.global)jQuery.event.trigger("ajaxComplete",[xhr,s]);if(s.global&&!--jQuery.active)jQuery.event.trigger("ajaxStop");}return xhr;},handleError:function(s,xhr,status,e){if(s.error)s.error(xhr,status,e);if(s.global)jQuery.event.trigger("ajaxError",[xhr,s,e]);},active:0,httpSuccess:function(xhr){try{return!xhr.status&&location.protocol=="file:"||(xhr.status>=200&&xhr.status<300)||xhr.status==304||xhr.status==1223||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpNotModified:function(xhr,url){try{var xhrRes=xhr.getResponseHeader("Last-Modified");return xhr.status==304||xhrRes==jQuery.lastModified[url]||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpData:function(xhr,type,filter){var ct=xhr.getResponseHeader("content-type"),xml=type=="xml"||!type&&ct&&ct.indexOf("xml")>=0,data=xml?xhr.responseXML:xhr.responseText;if(xml&&data.documentElement.tagName=="parsererror")throw"parsererror";if(filter)data=filter(data,type);if(type=="script")jQuery.globalEval(data);if(type=="json")data=eval("("+data+")");return data;},param:function(a){var s=[];if(a.constructor==Array||a.jquery)jQuery.each(a,function(){s.push(encodeURIComponent(this.name)+"="+encodeURIComponent(this.value));});else
+for(var j in a)if(a[j]&&a[j].constructor==Array)jQuery.each(a[j],function(){s.push(encodeURIComponent(j)+"="+encodeURIComponent(this));});else
+s.push(encodeURIComponent(j)+"="+encodeURIComponent(jQuery.isFunction(a[j])?a[j]():a[j]));return s.join("&").replace(/%20/g,"+");}});jQuery.fn.extend({show:function(speed,callback){return speed?this.animate({height:"show",width:"show",opacity:"show"},speed,callback):this.filter(":hidden").each(function(){this.style.display=this.oldblock||"";if(jQuery.css(this,"display")=="none"){var elem=jQuery("<"+this.tagName+" />").appendTo("body");this.style.display=elem.css("display");if(this.style.display=="none")this.style.display="block";elem.remove();}}).end();},hide:function(speed,callback){return speed?this.animate({height:"hide",width:"hide",opacity:"hide"},speed,callback):this.filter(":visible").each(function(){this.oldblock=this.oldblock||jQuery.css(this,"display");this.style.display="none";}).end();},_toggle:jQuery.fn.toggle,toggle:function(fn,fn2){return jQuery.isFunction(fn)&&jQuery.isFunction(fn2)?this._toggle.apply(this,arguments):fn?this.animate({height:"toggle",width:"toggle",opacity:"toggle"},fn,fn2):this.each(function(){jQuery(this)[jQuery(this).is(":hidden")?"show":"hide"]();});},slideDown:function(speed,callback){return this.animate({height:"show"},speed,callback);},slideUp:function(speed,callback){return this.animate({height:"hide"},speed,callback);},slideToggle:function(speed,callback){return this.animate({height:"toggle"},speed,callback);},fadeIn:function(speed,callback){return this.animate({opacity:"show"},speed,callback);},fadeOut:function(speed,callback){return this.animate({opacity:"hide"},speed,callback);},fadeTo:function(speed,to,callback){return this.animate({opacity:to},speed,callback);},animate:function(prop,speed,easing,callback){var optall=jQuery.speed(speed,easing,callback);return this[optall.queue===false?"each":"queue"](function(){if(this.nodeType!=1)return false;var opt=jQuery.extend({},optall),p,hidden=jQuery(this).is(":hidden"),self=this;for(p in prop){if(prop[p]=="hide"&&hidden||prop[p]=="show"&&!hidden)return opt.complete.call(this);if(p=="height"||p=="width"){opt.display=jQuery.css(this,"display");opt.overflow=this.style.overflow;}}if(opt.overflow!=null)this.style.overflow="hidden";opt.curAnim=jQuery.extend({},prop);jQuery.each(prop,function(name,val){var e=new jQuery.fx(self,opt,name);if(/toggle|show|hide/.test(val))e[val=="toggle"?hidden?"show":"hide":val](prop);else{var parts=val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),start=e.cur(true)||0;if(parts){var end=parseFloat(parts[2]),unit=parts[3]||"px";if(unit!="px"){self.style[name]=(end||1)+unit;start=((end||1)/e.cur(true))*start;self.style[name]=start+unit;}if(parts[1])end=((parts[1]=="-="?-1:1)*end)+start;e.custom(start,end,unit);}else
+e.custom(start,val,"");}});return true;});},queue:function(type,fn){if(jQuery.isFunction(type)||(type&&type.constructor==Array)){fn=type;type="fx";}if(!type||(typeof type=="string"&&!fn))return queue(this[0],type);return this.each(function(){if(fn.constructor==Array)queue(this,type,fn);else{queue(this,type).push(fn);if(queue(this,type).length==1)fn.call(this);}});},stop:function(clearQueue,gotoEnd){var timers=jQuery.timers;if(clearQueue)this.queue([]);this.each(function(){for(var i=timers.length-1;i>=0;i--)if(timers[i].elem==this){if(gotoEnd)timers[i](true);timers.splice(i,1);}});if(!gotoEnd)this.dequeue();return this;}});var queue=function(elem,type,array){if(elem){type=type||"fx";var q=jQuery.data(elem,type+"queue");if(!q||array)q=jQuery.data(elem,type+"queue",jQuery.makeArray(array));}return q;};jQuery.fn.dequeue=function(type){type=type||"fx";return this.each(function(){var q=queue(this,type);q.shift();if(q.length)q[0].call(this);});};jQuery.extend({speed:function(speed,easing,fn){var opt=speed&&speed.constructor==Object?speed:{complete:fn||!fn&&easing||jQuery.isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&easing.constructor!=Function&&easing};opt.duration=(opt.duration&&opt.duration.constructor==Number?opt.duration:jQuery.fx.speeds[opt.duration])||jQuery.fx.speeds.def;opt.old=opt.complete;opt.complete=function(){if(opt.queue!==false)jQuery(this).dequeue();if(jQuery.isFunction(opt.old))opt.old.call(this);};return opt;},easing:{linear:function(p,n,firstNum,diff){return firstNum+diff*p;},swing:function(p,n,firstNum,diff){return((-Math.cos(p*Math.PI)/2)+0.5)*diff+firstNum;}},timers:[],timerId:null,fx:function(elem,options,prop){this.options=options;this.elem=elem;this.prop=prop;if(!options.orig)options.orig={};}});jQuery.fx.prototype={update:function(){if(this.options.step)this.options.step.call(this.elem,this.now,this);(jQuery.fx.step[this.prop]||jQuery.fx.step._default)(this);if(this.prop=="height"||this.prop=="width")this.elem.style.display="block";},cur:function(force){if(this.elem[this.prop]!=null&&this.elem.style[this.prop]==null)return this.elem[this.prop];var r=parseFloat(jQuery.css(this.elem,this.prop,force));return r&&r>-10000?r:parseFloat(jQuery.curCSS(this.elem,this.prop))||0;},custom:function(from,to,unit){this.startTime=now();this.start=from;this.end=to;this.unit=unit||this.unit||"px";this.now=this.start;this.pos=this.state=0;this.update();var self=this;function t(gotoEnd){return self.step(gotoEnd);}t.elem=this.elem;jQuery.timers.push(t);if(jQuery.timerId==null){jQuery.timerId=setInterval(function(){var timers=jQuery.timers;for(var i=0;i<timers.length;i++)if(!timers[i]())timers.splice(i--,1);if(!timers.length){clearInterval(jQuery.timerId);jQuery.timerId=null;}},13);}},show:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.show=true;this.custom(0,this.cur());if(this.prop=="width"||this.prop=="height")this.elem.style[this.prop]="1px";jQuery(this.elem).show();},hide:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0);},step:function(gotoEnd){var t=now();if(gotoEnd||t>this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var done=true;for(var i in this.options.curAnim)if(this.options.curAnim[i]!==true)done=false;if(done){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(jQuery.css(this.elem,"display")=="none")this.elem.style.display="block";}if(this.options.hide)this.elem.style.display="none";if(this.options.hide||this.options.show)for(var p in this.options.curAnim)jQuery.attr(this.elem.style,p,this.options.orig[p]);}if(done)this.options.complete.call(this.elem);return false;}else{var n=t-this.startTime;this.state=n/this.options.duration;this.pos=jQuery.easing[this.options.easing||(jQuery.easing.swing?"swing":"linear")](this.state,n,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update();}return true;}};jQuery.extend(jQuery.fx,{speeds:{slow:600,fast:200,def:400},step:{scrollLeft:function(fx){fx.elem.scrollLeft=fx.now;},scrollTop:function(fx){fx.elem.scrollTop=fx.now;},opacity:function(fx){jQuery.attr(fx.elem.style,"opacity",fx.now);},_default:function(fx){fx.elem.style[fx.prop]=fx.now+fx.unit;}}});jQuery.fn.offset=function(){var left=0,top=0,elem=this[0],results;if(elem)with(jQuery.browser){var parent=elem.parentNode,offsetChild=elem,offsetParent=elem.offsetParent,doc=elem.ownerDocument,safari2=safari&&parseInt(version)<522&&!/adobeair/i.test(userAgent),css=jQuery.curCSS,fixed=css(elem,"position")=="fixed";if(elem.getBoundingClientRect){var box=elem.getBoundingClientRect();add(box.left+Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),box.top+Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));add(-doc.documentElement.clientLeft,-doc.documentElement.clientTop);}else{add(elem.offsetLeft,elem.offsetTop);while(offsetParent){add(offsetParent.offsetLeft,offsetParent.offsetTop);if(mozilla&&!/^t(able|d|h)$/i.test(offsetParent.tagName)||safari&&!safari2)border(offsetParent);if(!fixed&&css(offsetParent,"position")=="fixed")fixed=true;offsetChild=/^body$/i.test(offsetParent.tagName)?offsetChild:offsetParent;offsetParent=offsetParent.offsetParent;}while(parent&&parent.tagName&&!/^body|html$/i.test(parent.tagName)){if(!/^inline|table.*$/i.test(css(parent,"display")))add(-parent.scrollLeft,-parent.scrollTop);if(mozilla&&css(parent,"overflow")!="visible")border(parent);parent=parent.parentNode;}if((safari2&&(fixed||css(offsetChild,"position")=="absolute"))||(mozilla&&css(offsetChild,"position")!="absolute"))add(-doc.body.offsetLeft,-doc.body.offsetTop);if(fixed)add(Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));}results={top:top,left:left};}function border(elem){add(jQuery.curCSS(elem,"borderLeftWidth",true),jQuery.curCSS(elem,"borderTopWidth",true));}function add(l,t){left+=parseInt(l,10)||0;top+=parseInt(t,10)||0;}return results;};jQuery.fn.extend({position:function(){var left=0,top=0,results;if(this[0]){var offsetParent=this.offsetParent(),offset=this.offset(),parentOffset=/^body|html$/i.test(offsetParent[0].tagName)?{top:0,left:0}:offsetParent.offset();offset.top-=num(this,'marginTop');offset.left-=num(this,'marginLeft');parentOffset.top+=num(offsetParent,'borderTopWidth');parentOffset.left+=num(offsetParent,'borderLeftWidth');results={top:offset.top-parentOffset.top,left:offset.left-parentOffset.left};}return results;},offsetParent:function(){var offsetParent=this[0].offsetParent;while(offsetParent&&(!/^body|html$/i.test(offsetParent.tagName)&&jQuery.css(offsetParent,'position')=='static'))offsetParent=offsetParent.offsetParent;return jQuery(offsetParent);}});jQuery.each(['Left','Top'],function(i,name){var method='scroll'+name;jQuery.fn[method]=function(val){if(!this[0])return;return val!=undefined?this.each(function(){this==window||this==document?window.scrollTo(!i?val:jQuery(window).scrollLeft(),i?val:jQuery(window).scrollTop()):this[method]=val;}):this[0]==window||this[0]==document?self[i?'pageYOffset':'pageXOffset']||jQuery.boxModel&&document.documentElement[method]||document.body[method]:this[0][method];};});jQuery.each(["Height","Width"],function(i,name){var tl=i?"Left":"Top",br=i?"Right":"Bottom";jQuery.fn["inner"+name]=function(){return this[name.toLowerCase()]()+num(this,"padding"+tl)+num(this,"padding"+br);};jQuery.fn["outer"+name]=function(margin){return this["inner"+name]()+num(this,"border"+tl+"Width")+num(this,"border"+br+"Width")+(margin?num(this,"margin"+tl)+num(this,"margin"+br):0);};});})();
View
13 Markup/footer.html.php
@@ -0,0 +1,13 @@
+ <div id="footer1">
+ <p class="footer">
+ <br />
+ <a href="<?php echo Yafyaf_Config::GetInstance()->SiteConfigs->Url; ?>"><?php echo Yafyaf_Config::GetInstance()->SiteConfigs->Name; ?></a>
+ </p>
+ </div>
+</div>
+
+<div id="footer_line">
+</div>
+
+</body>
+</html>
View
22 Markup/header.html.php
@@ -0,0 +1,22 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+ <html xmlns="http://www.w3.org/1999/xhtml">
+ <head profile="http://gmpg.org/xfn/11">
+ <title><?php echo Yafyaf_Config::GetInstance()->SiteConfigs->Title; ?></title>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <meta name="robots" content="index,follow" />
+ <meta name="author" content="<?php echo Yafyaf_Config::GetInstance()->SiteConfigs->Author; ?>" />
+ <meta name="keywords" content="<?php echo Yafyaf_Config::GetInstance()->SiteConfigs->Keywords; ?>" />
+ <meta name="description" content="<?php echo Yafyaf_Config::GetInstance()->SiteConfigs->Description; ?>"/>
+
+ <link rel="stylesheet" href="/Markup/Html/css/design.css" type="text/css" media="screen" />
+ <script type="text/javascript" src="/Markup/Html/js/jquery.js"></script>
+ <!--[if lte IE 7.0]>
+ <link rel="stylesheet" type="text/css" href="/Markup/Html/css/ie.css" media="screen, projection" />
+ <![endif]-->
+
+ <!--[if IE 7.0]>
+ <link rel="stylesheet" type="text/css" href="/Markup/Html/css/ie7.css" media="screen, projection" />
+ <![endif]-->
+
+ </head>
+ <body>
View
3 Markup/menus.html.php
@@ -0,0 +1,3 @@
+<?php global $yafyaf; ?>
+<div id="site">
+ <div id="contect"><?php echo $yafyaf->GetModule(); ?></div>
View
11 Modules/Home/Module.controller.php
@@ -0,0 +1,11 @@
+<?php
+
+class Yafyaf_Module_Home extends Yafyaf_Module_Abstract
+{
+ const NAME = 'Home';
+
+ public function Generate()
+ {
+ include YAFYAF_MODULES . self::NAME . '/Module.html.php';
+ }
+}
View
3 Modules/Home/Module.html.php
@@ -0,0 +1,3 @@
+<p class="contect1">
+WElcome home?
+</p>
View
0 Modules/Home/Module.logic.php
No changes.
View
11 Modules/Module.php
@@ -0,0 +1,11 @@
+<?php
+
+abstract class Yafyaf_Module_Abstract
+{
+ abstract public function Generate();
+
+ public static function GetInstance()
+ {
+ return new self;
+ }
+}
View
11 Modules/Skeleton/Module.controller.php
@@ -0,0 +1,11 @@
+<?php
+
+class Yafyaf_Module_Skeleton extends Yafyaf_Module_Abstract
+{
+ const NAME = 'Skeleton';
+
+ public function Generate()
+ {
+ include YAFYAF_MODULES . self::NAME . '/Module.html.php';
+ }
+}
View
3 Modules/Skeleton/Module.html.php
@@ -0,0 +1,3 @@
+<p class="contect1">
+
+</p>
View
0 Modules/Skeleton/Module.logic.php
No changes.
View
5 index.php
@@ -0,0 +1,5 @@
+<?php
+require_once 'AllFiles.php';
+
+$Controller = new MainController();
+echo $Controller->ProcessOutput();

0 comments on commit 731fb3f

Please sign in to comment.