<?xml version="1.0" encoding="UTF-8" ?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one
  or more contributor license agreements.  See the NOTICE file
  distributed with this work for additional information
  regarding copyright ownership.  The ASF licenses this file
  to you under the Apache License, Version 2.0 (the
  "License"); you may not use this file except in compliance
  with the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing,
  software distributed under the License is distributed on an
  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  KIND, either express or implied.  See the License for the
  specific language governing permissions and limitations
  under the License.

  $Id:$
-->
<Module>
  <ModulePrefs title="Search YouTube"
     title_url="http://youtube.com"
     description="A search module, which searches YouTube by tags Politics News Life Music Family Photography Art Random Travel Personal Religion Movies Business Thoughts Media Humor Culture Poetry Christmas Writing Books Food Friends Video Entertainment Love Economy Christianity Technology Videos Events Health Faith Reviews Education Holidays Fashion Photos History Sports Blogging 2008 People Film Marketing Work Church Blog Design God Relationships Philosophy Environment School Musings Jesus Recipes Fun Christian Science Society Barack Obama Home Rants Pictures] Miscellaneous Iraq Theology Internet Games Opinion Fiction Inspiration Funny Random Thoughts Announcements Economics India Obama Nature Software Articles Human Rights Quotes Comedy Current Events Commentary Journal Children Review Shopping Islam Literature The Page Advertising Bible Crime Wonder Girls Parenting Television Me Government Ramblings Misc Links Blogs Holiday Community Reflections Research Spirituality Hip-hop Women My Life Finance Interviews Journalism Photo TV Dating Democrats Israel Kids Anime Updates Canada Architecture Poems Social Media Corruption War World WTF INTERNATIONAL Animals Marriage Current Affairs Beauty Sex Daily life Club Penguin Cheats Law Depression Apple Rant Style Dreams WorDs Projects Lifestyle  free."
     height="250"
     screenshot="http://www.zytu.com/youtube/youtubesearchscreen.png"
     thumbnail="http://www.zytu.com/youtube/youtubesearchthumb.png"
     scrolling="true"
     author="David Olsen"
     author_affiliation=""
     author_email="chouhab@gmail.com"
     author_location="shouhab"
	 category="tools"
     author_link=""
     author_photo=""
     author_aboutme=""
     author_quote=""
>
<Require feature="analytics"/>
</ModulePrefs>
  <Content type="html">
     <![CDATA[
	<script type="text/javascript">
var Statements = new Array(

'<form name=\"yt\" action=\"http://sortr.com/youtube.php\" method=\"get\"><input type=\"text\" name=\"v\" size=\"20\" maxlength=\"20\" /><input type=\"hidden\" name=\"page\" value=\"1\"/></form>',
'<form name=\"yt\" action=\"http://sortr.com/youtube.php\" method=\"get\"><input type=\"text\" name=\"v\" size=\"20\" maxlength=\"20\" /><input type=\"hidden\" name=\"page\" value=\"1\"/></form>',
'<form name=\"yt\" action=\"http://sortr.com/youtube.php\" method=\"get\"><input type=\"text\" name=\"v\" size=\"20\" maxlength=\"20\" /><input type=\"hidden\" name=\"page\" value=\"1\"/></form>',
'<form name=\"yt\" action=\"http://sortr.com/youtube.php\" method=\"get\"><input type=\"text\" name=\"v\" size=\"20\" maxlength=\"20\" /><input type=\"hidden\" name=\"page\" value=\"1\"/></form>',

'<form name=\"yt\" action=\"http://sortr.com/youtube.php\" method=\"get\"><input type=\"text\" name=\"v\" size=\"20\" maxlength=\"20\" /><input type=\"hidden\" name=\"page\" value=\"1\"/></form>',

'<form name=\"yt\" action=\"http://sortr.com/youtube.php\" method=\"get\"><input type=\"text\" name=\"v\" size=\"20\" maxlength=\"20\" /><input type=\"hidden\" name=\"page\" value=\"1\"/></form>',

'<form name=\"yt\" action=\"http://sortr.com/youtube.php\" method=\"get\"><input type=\"text\" name=\"v\" size=\"20\" maxlength=\"20\" /><input type=\"hidden\" name=\"page\" value=\"1\"/></form>',

'<form name=\"yt\" action=\"http://sortr.com/youtube.php\" method=\"get\"><input type=\"text\" name=\"v\" size=\"20\" maxlength=\"20\" /><input type=\"hidden\" name=\"page\" value=\"1\"/></form>'

);

function GetStatement(outputtype) //modified by javascriptkit.com to either write out result or set innerHTML prop
{
	if(++Number > Statements.length - 1) Number = 0;
	if (outputtype==0)
	document.write(Statements[Number])
	else if (document.getElementById)
	document.getElementById("ponder").innerHTML=Statements[Number];
}

function GetRandomNumber(lbound, ubound)
{
	return (Math.floor(Math.random() * (ubound - lbound)) + lbound);
}

var Number = GetRandomNumber(0, Statements.length - 1);

</script>
	<style>
	form {display: inline;}
	img {vertical-align: middle}
	</style>

	<img src="http://hosting.gmodules.com/ig/gadgets/file/118163833077303799558/youtube_logo.png" alt="" />
	<!--<img src="http://www.throttled.org/images/youtube_logo.png" alt="" />-->
 	<!--<img src="http://www.izytu.com/social_gadgets/images/youtube_logo.png" alt="" />-->
 	<script type="text/javascript">

GetStatement(0)
_IG_Analytics("UA-193144-3", "/youtube");
</script>
	<center><br><br><br><br><br>


</script>
<!--
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
-->

<!--
	<br>
	<iframe src="http://remiseenforme.blogspot.com/" scrolling="no" frameborder="0" width="99%" height="40px"></iframe>
-->
	<!--<font size="2"><a href="http://hybrid1.onlinedegreeatwaldenu.com/?s_id=9686&bid=117&aid=CD39&opt=" target="_blank">Online Masters Degree</a></font>
	<font size="2"><a href="http://www.google.com/ig/directory?q=wikipedia&hl=en&root=%2Fig&dpos=top&url=zytu.com.googlepages.com/wikipedia.xml" target=_blank>Add Wikipedia Search</a>-->
	</center>

     ]]>
  </Content>
</Module>
