<?
require "inc/content.inc.php";
?>
                    	<p class="coomparetext">Compare Prices</p>
                        <p class="findtext">Find the cheapest place online to buy books, DVDs, CDs and computer/console  <br />gamesyou tell us what you want and we tell you the cheapest place to buy it!</p>
                        <p class="bluetext"><span class="browntext">Enter your search</span> in the box at the top of this page, e.g. 'Harry Potter' or 'Madonna'. From the menu by the search box, select the category - e.g. 'DVD'. <span class="browntext">Then click 'Search'!</span><br /><br />

All the titles matching your search will be returned - <span class="browntext">click on the one you want</span> and we will then compare the price of it at all the main shops, <span class="browntext">including postage</span>.<br /><br />

<b class="browntext">Click the shop you want to buy from</b> - a new window will take you to that site where you can buy from them. Remember, we don't sell anything - we try to find the <span class="browntext">best place</span> for you to buy!</p>
						<p class="brownheader">Books, DVDs, CDs &amp; Games!</p>
                        <p class="context">You can search for cheap books, DVDs, CDs and games using the search box at the top of the page. Alternatively, you can view the <b>current bestsellers</b> or browse through the various categories  to find ideas. Visit a section by clicking the orange tabs  at the top of the page.</p>
                        <p class="brownheader">How much can I save?</p>
                        <p class="context">Prices at different shops can vary enormously, especially when you take postage into account. Shops such as Amazon, Play, Waterstones, etc can offer big savings on RRPs of products, but you can often save money by comparing their prices.<br /><br />Try a couple of price comparisons yourself to see how much prices can differ, and how it's not always the same shop that's cheapest. Click one or two of the items show on the right to quickly try out our price comparison!</p>
                    </div>
                    <div class="tagcloudarea">
                    	<div class="cloudhaedin">popular searches</div>
                        <div class="cloudtext_area">
                        
<?
	$maxCount = 0;
	$minCount = 0;
	$result = mysql_query("SELECT * FROM `searches` ORDER BY `s_count` DESC LIMIT 0, 25");
	while($row = mysql_fetch_array($result)) {
		if($row[2] > $maxCount || $maxCount == 0) $maxCount = $row[2];
		if($row[2] < $minCount || $minCount == 0) $minCount = $row[2];
		
		$searches[] = array($row[1], $row[2], $row[3]);
	}
	
	$smallest = 15;
	$biggest  = 35;
	
	if(is_array($searches))
	shuffle($searches);
	$maxCount -= $minCount;
	
	if(is_array($searches))
	foreach($searches as $s) {
		list($name,$count,$cat) = $s;
		
		$count -= $minCount;
		$perc   = ($count / $maxCount);
		
		$size   = ($biggest - $smallest) * $perc;
		$size  += $smallest;
		
		?><span style=" font-size:<?=$size?>px; line-height:<?=$size?>px;"><a style="color: #555555; text-decoration: none;" href="search.php?search=<?=urlencode($name)?>&cat=<?=$cat?>"><?=$name?></a></span>, <?
	}
?>
                        
                        </div>