function execute( $par ) {
		global $wgRequest, $wgOut, $wgMemc, $wgUser;
		global $wgYTAS_User, $wgYTAS_Password, $wgYTAS_DeveloperId;
		global $wgYTAS_DefaultCategory, $wgYTAS_UseClientLogin, $wgYTAS_EnableLogging, $wgYTAS_UseNamespace, $wgYTAS_ClientId;

		

		$this->setHeaders();
		$spTitle = $this->getTitle();

		# Check permissions
		if( !$wgUser->isAllowed( 'upload' ) ) {
			if( !$wgUser->isLoggedIn() ) {
				$wgOut->showErrorPage( 'uploadnologin', 'uploadnologintext' );
			}
			else {
				$wgOut->permissionRequired( 'upload' );
			}
			return;
		}

		if ($wgRequest->getVal('status') == '200' && $wgRequest->getVal('id') != null) {
			$wgOut->addHTML(wfMsg('youtubeauthsub_success', $wgRequest->getVal('id')));
			$descTitle = null;
			$desc = wfMsg('youtubeauthsub_summary');
			//TODO: can we grab the keywords and description the user has submitted?
			if ($wgYTAS_UseNamespace) {
				$descTitle = Title::makeTitle(NS_YOUTUBE, $wgRequest->getVal('id'));
				$a = new Article($descTitle);
				if ($a->getID() == 0) {
					$title = $keywords = $description = $category = "";
					if ($wgRequest->getVal('metaid') != null) {
						$dbr = wfGetDB(DB_SLAVE);
						$row = $dbr->selectRow('ytas_meta', array('ytas_title', 'ytas_description', 'ytas_keywords', 'ytas_category'),
						array("ytas_id={$wgRequest->getVal('metaid')}"));
						if ($row) {
							$title 			= $row->ytas_title;
							$keywords 		= $row->ytas_keywords;
							$description	= $row->ytas_description;
							$category		= $row->ytas_category;
						}
					}
					$content = "{{YoutubeVideo|{$wgRequest->getVal('id')}|{$title}|{$keywords}|{$description}|{$category}}}";
					$a->doEdit( $content, wfMsg( 'youtubeauthsub_summary' ),
						EDIT_NEW | EDIT_DEFER_UPDATES | EDIT_AUTOSUMMARY );
				}
				$wgOut->addWikiText(wfMsg('youtubeauthsub_viewpage', $descTitle->getFullText()) );
			}
			if ($wgYTAS_EnableLogging) {
				# Add the log entry
				$log = new LogPage( 'upload' );
				$log->addEntry( 'upload', $descTitle, $desc );
			}
		}

		if ($wgYTAS_UseClientLogin) {

			$key = wfMemcKey('youtube', 'authsub', 'token', $wgYTAS_User);
			$token = $wgMemc->get( $key );
			// regenerate the token
			if (!$token) {
				$result = wfSpecialYouTubePost("https://www.google.com/youtube/accounts/ClientLogin?"
				, "Email={$wgYTAS_User}&Passwd={$wgYTAS_Password}&service=youtube&source=wikiHow");
				$YouTubeUser = "";
				$lines = split("\n", $result);
				foreach ($lines as $line) {
					$params = split("=", $line);
					switch ($params[0]) {
						case "Auth":
						$token = $params[1];
						break;
						case "YouTubeUser":
						$YouTubeUser = $params[1];
						break;
					}
				}
				if (!$token) {
					$wgOut->addHTML(wfMsg('youtubeauthsub_tokenerror'));
					return;
				}
				$wgMemc->set($key, $token, 3600);
			}
		}
		else {
			$token = $wgRequest->getVal('token');
			if (!$token) {
				$wgOut->addHTML(wfMsg('youtubeauthsub_authsubinstructions') .
				"
				<script type='text/javascript'>
				var gYTAS_nokeywords = '" . wfMsg('youtubeauthsub_jserror_nokeywords') . "';
				var gYTAS_notitle = '" . wfMsg('youtubeauthsub_jserror_notitle') . "';
				</script>
				<script type='text/javascript' src='/extensions/YouTubeAuthSub/youtubeauthsub.js'>
				</script>
				<form action='https://www.google.com/accounts/AuthSubRequest' method='POST' onsubmit='return checkYTASForm();' name='ytas_form'/>
				<input type='hidden' name='next' value='{$spTitle()->getFullURL()}'/>
				<input type='hidden' name='scope' value='http://gdata.youtube.com/feeds'/>
				<input type='hidden' name='session' value='0'/>
				<input type='hidden' name='secure' value='0'/>
				<input type='submit' value='" . wfMsg('youtubeauthsub_clickhere') . "'/>"
				);
				return;
			}
		}

		if ($wgRequest->wasPosted()) {
			$url = "http://uploads.gdata.youtube.com/feeds/api/users/{$wgYTAS_User}/uploads";
			$url = "http://gdata.youtube.com/action/GetUploadToken";
			$data = "<?xml version='1.0'?>
	<entry xmlns='http://www.w3.org/2005/Atom'
	  xmlns:media='http://search.yahoo.com/mrss/'
	  xmlns:yt='http://gdata.youtube.com/schemas/2007'>
	  <media:group>
	    <media:title type='plain'>" .  FeedItem::xmlEncode($wgRequest->getVal('youtube_title')) . "</media:title>
	    <media:description type='plain'>" .  FeedItem::xmlEncode($wgRequest->getVal('youtube_description')) . "</media:description>
	    <media:keywords>" .  FeedItem::xmlEncode($wgRequest->getVal('youtube_keywords')) . "</media:keywords>
		<media:category scheme='http://gdata.youtube.com/schemas/2007/categories.cat'>" .
				FeedItem::xmlEncode($wgRequest->getVal('youtube_category')) . "</media:category>
	  </media:group>
	</entry>
	";
			$headers = array (
					"GData-Version: 2",
					"X-GData-Client: key={$wgYTAS_ClientId}",
					"X-GData-Key: key={$wgYTAS_DeveloperId}",
					"Content-Type: application/atom+xml; charset=UTF-8",
					"Content-Length: " . strlen($data),
					);
			if ($wgYTAS_UseClientLogin)
				$headers[] = "Authorization: GoogleLogin auth=$token";
			else
				$headers[] = "Authorization: AuthSub token=$token";

			$results = wfSpecialYouTubePost($url, $data, $headers);

			$url = preg_replace("@.*<url>(.*)</url>.*@", "$1", $results);
			$token = preg_replace("@.*<token>(.*)</token>.*@", "$1", $results);

			if ($url == "") {
				$wgOut->addHTML("Unable to extract URL, results where <pre>{$results}</pre>");
				return;
			}
			// CAPTURE THE META INFO AND STORE IT
			$meta_id = '';
			$dbw = wfGetDB(DB_MASTER);
			$fields = array (
					'ytas_user'	=> $wgUser->getID(),
					'ytas_timestamp' => $dbw->timestamp( time() ),
					'ytas_title' => $wgRequest->getVal('youtube_title'),
					'ytas_description' =>  $wgRequest->getVal('youtube_description'),
					'ytas_keywords'	=> 	 $wgRequest->getVal('youtube_keywords'),
					'ytas_category'	=> 	 $wgRequest->getVal('youtube_category')
				);
			$dbw->insert( 'ytas_meta', $fields, __METHOD__, array( 'IGNORE' ) );
			if ( $dbw->affectedRows() ) {
				$meta_id =$dbw->insertId();
		}

			$next_url = urlencode($spTitle()->getFullURL() . "?metaid={$meta_id}");

			$wgOut->addHTML(wfMsg('youtubeauthsub_uploadhere') . "<br /><br />
					 <form action='{$url}?nexturl={$next_url}' METHOD='post' enctype='multipart/form-data' name='videoupload'>
						  <input type='file' name='file' size='50'/>
						<input type='hidden' name='token' value='{$token}'/><br />
						<input type='submit' name='submitbtn' value='" . wfMsg('youtubeauthsub_uploadbutton') . "'/>
						</form>
						<center>
						<div id='upload_image' style='display:none;'>
					" . wfMsg('youtubeauthsub_uploading') . "
									<img src='/extensions/YouTubeAuthSub/upload.gif'>
						</div>
						</center>
					");
		}
		else {
			$wgOut->addHTML( wfMsg('youtubeauthsub_info') .

				"  <script type='text/javascript'>
	                    var gYTAS_nokeywords = '" . wfMsg('youtubeauthsub_jserror_nokeywords') . "';
	                    var gYTAS_nodesc = '" . wfMsg('youtubeauthsub_jserror_nodesc') . "';
	                    var gYTAS_notitle = '" . wfMsg('youtubeauthsub_jserror_notitle') . "';
	                </script>
	                <script type='text/javascript' src='/extensions/YouTubeAuthSub/youtubeauthsub.js'>
	                </script>
					<form action='{$spTitle->getFullURL()}' method='POST' name='ytas_form' onsubmit='return checkYTASForm();'>
					<table cellpadding='10'>
				");
			if (!$wgYTAS_UseClientLogin) {
				$wgOut->addHTML("<input type='hidden' name='token' value='{$wgRequest->getVal('token')}'/>");
			}
			$wgOut->addHTML("
						<tr>
							<td>" . wfMsg('youtubeauthsub_title') . ":</td>
							<td><input type='text' name='youtube_title' size='40'/></td>
						</tr>
						<tr>
							<td valign='top'>" . wfMsg('youtubeauthsub_description') . ":</td>
							<td><textarea cols='100' rows='4' name='youtube_description'></textarea></td>
						</tr>
						<tr>
							<td>" . wfMsg('youtubeauthsub_keywords') . ":</td>
							<td><input type='text' name='youtube_keywords' size='40'/></td>
						</tr>");
			if (!$wgYTAS_DefaultCategory) {
				$cats = wfSpecialYouTubeGetCategories();
				$wgOut->addHTML("
						<tr>
							<td>" . wfMsg('youtubeauthsub_category') . ":</td>
							<td><select type='text' name='youtube_category'/>{$cats}</select></td>
						</tr>");
			}
			else {
				$wgOut->addHTML("<input type='hidden' name='youtube_category' value='{$wgYTAS_DefaultCategory}'/>");
			}
			$wgOut->addHTML("
						<tr>
							<td><input type='submit' value='" . wfMsg('youtubeauthsub_submit') . "'></td>
						</tr>
					</table>
				</form>");
		}
	}
    $summary = ereg_replace("\\[\\[.*\\]\\]", "", $summary);
    $summary = ereg_replace("\\{\\{.*\\}\\}", "", $summary);
    // split up the first setence of the summary into 3 chunks of less than $maxTextLength chars
    $t_array = array('', '', '');
    $s_index = 0;
    //if (strpos($summary, ".") !== false)
    // $summary = substr($summary, 0, strpos($summary, "."));
    $s_array = split(" ", $summary);
    for ($i = 0; $i < sizeof($t_array) && $s_index < sizeof($s_array); $i++) {
        while (strlen($t_array[$i] . " " . FeedItem::xmlEncode($s_array[$s_index])) < $maxTextLength && $s_index < sizeof($s_array)) {
            $t_array[$i] .= " " . FeedItem::xmlEncode($s_array[$s_index]);
            $s_index++;
        }
        $t_array[$i] = trim($t_array[$i]);
        /*
        if ($i == sizeof($t_array) - 1 && $s_index < sizeof($s_array) - 1 ) {
        	if (strlen($t_array[$i]) < $maxTextLength - 3)
        		$t_array[$i] .= "...";
        	else
        		$t_array[$i] = substr($t_array[$i], 0, strlen($t_array[$i]) - 3) . "...";
        } else {
        }
        */
    }
    $key = FeedItem::xmlEncode($t->getPrefixedURL());
    $query = FeedItem::xmlEncode(strtolower($t->getText()));
    $title = FeedItem::xmlEncode(wfMsg('howto', $t->getText()));
    echo "\n\t<ResultSpec id='{$key}'>\n\t<Query>{$query}</Query>\n  \t<Response>\n    \t\t<Output name='title'>{$title}</Output>\n    \t\t<Output name='more_url'>{$t->getFullURL()}</Output>\n    \t\t<Output name='text1'>{$t_array[0]}</Output>\n    \t\t<Output name='text2'>{$t_array[1]}</Output>\n    \t\t<Output name='text3'>{$t_array[2]}</Output>\n  \t</Response>\n\t</ResultSpec>\t\t\n";
}
$dbr->freeResult($res);
echo "\n</Results>";