<?php
$starttime = microtime(true);
define('CURLTIMEOUT',4);
define('HARDTIMEOUT',4);

$timedout = 0;

function LIB_product_detail($data){
	global $curlstart;

	if ($data['fid']){
		$feedid= $data['fid'];
	}
	$masterid = $data['masterid'] ? $data['masterid']: $data['productid'];
	$search = $data['search'] ?$data['search'] : $data['keyword'];
	$session_id = $data['session_id'];

	if ($feedid=="F1"){
		$url = 'http://publisher.api.shopping.com/publisher/3.0/rest/GeneralSearch?trackingId=8053472&apiKey=c09f2d7e-623a-413f-b33d-acc692ec8d96&productId=[MASTERID]';
	} elseif($feedid=="F2"){
		$url = "http://www.cheapstuff.com/include/b.php?q=[SEARCH]&start=1&pid=[MASTERID]&pass=ms321";
	} elseif($feedid=="F3"){
		$url = "http://ah.pricegrabber.com/search_xml.php?mode=mainstream_cheapstuff&pid=1733&key=828f05299b2&v=2.3&q=[SEARCH]&session_id=[SESSION_ID]&masterid=[MASTERID]";
	}
	$url = str_replace("[MASTERID]",$masterid,$url);
	$url = str_replace("[SEARCH]",$search,$url);
	$url = str_replace("[SESSION_ID]",$session_id,$url);
	$filecontent = LIB_curl_get_contents($url);
	if ($feedid=="F1"){
		$results = ShoppingDetailParser($filecontent);
	} elseif ($feedid=="F2"){

	} elseif ($feedid=="F3"){
		$results = PriceGrabberDetailParser($filecontent);
	}
	return $results;
}

function LIB_product_search($data){
	global $curlstart;
	if ($data['search']){
		$search = $data['search'];
	} elseif($data['keyword']){
		$search = $data['keyword'];
	} elseif ($data['q']){
		$search = $data['q'];
	}
	if(!isset($data['limit']) || $data['limit'] < 1) {
		$limit = '20';
	}
	if(!isset($data['start']) || $data['start'] < 1) {
		$start = '1';
	}
	$filters = '';
	if(isset($data['filters'])) {
		$filters = $data['filters'];
	}
	/*	Pricegrabber */
	$feeds['Pricegrabber'] = "http://ah.pricegrabber.com/search_xml.php?mode=mainstream_cheapstuff&pid=1733&key=828f05299b2&v=2.3&q=[SEARCH]&limit=[LIMIT]&start=[START]&session_id=[SESSION_ID][FILTERS]";
	
	/*	Become */
//	$feeds['Become'] = "http://partner.become.com/shop?partner=cheapstuff&q=[SEARCH]&news=1&type=long&start=[START]&spell=0&zip=[ZIP]&sort=best&max_price=";
//	$feeds['Become'] = "http://www.cheapstuff.com/include/b.php?q=[SEARCH]&start=1&zip=[ZIP]&pass=ms321";
	
	/*	Shopping */
	$feeds['Shopping'] = 'http://publisher.api.shopping.com/publisher/3.0/rest/GeneralSearch?trackingId=8053472&apiKey=c09f2d7e-623a-413f-b33d-acc692ec8d96&keyword=[SEARCH]&numItems=[LIMIT]';

	foreach($feeds as $fname=>$url){
		$url = str_replace("[SEARCH]",$search,$url);
		$url = str_replace("[START]",$start,$url);
		$url = str_replace("[LIMIT]",$limit,$url);
		$url = str_replace("[SESSION_ID]",$session_id,$url);
		$url = str_replace("[ZIP]",$zip,$url);
		$url = str_replace("[FILTERS]",$filters,$url);
		$feeds[$fname] = $url;
	}
	$curlstart = microtime(true);
	$r = syncRequest($feeds);
	$curlstop = microtime(true);
	
	foreach($r as $fname=>$feedcontent){
		if ($fname=="Shopping"){
			$feedid = "F1";
			$results[$feedid] = ShoppingParser($feedcontent,$feedid);
		} elseif($fname=="Become"){
			$feedid = "F2";
			$results[$feedid] = BecomeParser($feedcontent,$feedid);
		} elseif($fname=="Pricegrabber"){
			$feedid = "F3";
			$results[$feedid] = PricegrabberParser($feedcontent,$feedid);
		}
	}
	return $results;
}

function PricegrabberParser($feedcontent,$feedid){
	$ResultFeed = new DomDocument();
	if ($feedcontent){
		$ResultFeed->loadXML($feedcontent);
	}

	############### RELATED SEARCH	###################
	if($ResultFeed->getElementsByTagName("other_categories")->item(0)){
		for($i = 0; $ResultFeed->getElementsByTagName("other_categories")->item($i); $i++)
		{
			$RelatedSearch[] = $ResultFeed->getElementsByTagName("other_categories")->item($i)->nodeValue;
		}
	}

	########### RESULTS	LISTING	 TYPE 2	###############
	if ($ResultFeed->getElementsByTagName("product")->item(0)) {

		$Product['RelatedSearch'] = $RelatedSearch;
		$Product['TotalMatches'] = $ResultFeed->getElementsByTagName("num_results")->item(0)->nodeValue;
		$ResultsListing = $ResultFeed->getElementsByTagName("product");
		for($i = 0; $ResultsListing->item($i); $i++) {
			$Product[$i]['id'] = $ResultsListing->item($i)->getElementsByTagName("masterid")->item(0)->nodeValue;
			$Product[$i]['redirect_url'] = $ResultsListing->item($i)->getElementsByTagName("url")->item(0)->nodeValue;
			$Product[$i]['title'] =  $ResultsListing->item($i)->getElementsByTagName("title")->item(0)->nodeValue;
//			$Product[$i]['title_short'] =  $ResultsListing->item($i)->getElementsByTagName("title_short")->item(0)->nodeValue;
			$Product[$i]['description'] = $ResultsListing->item($i)->getElementsByTagName("description")->item(0)->nodeValue;
			$Product[$i]['merchant'] = $ResultsListing->item($i)->getElementsByTagName("manuf")->item(0)->nodeValue;
			if ($ResultsListing->item($i)->getElementsByTagName("image_large")->item(0)) {
				$Product[$i]['image_url'] =  $ResultsListing->item($i)->getElementsByTagName("image_large")->item(0)->nodeValue;
			}
			$Product[$i]['fid'] = $feedid;

			if($ResultsListing->item($i)->getElementsByTagName("price")->item(0)->nodeValue) {
				$Product[$i]['min_price'] =  $ResultsListing->item($i)->getElementsByTagName("price")->item(0)->nodeValue;
				$sellers = $ResultsListing->item($i)->getElementsByTagName("price")->item(0)->getAttribute('sellers');
				$Product[$i]['sellers'] = $sellers;
				if($sellers) {
					$sellers_obj =  $ResultsListing->item($i)->getElementsByTagName("offer");
					if($sellers_obj->item(0)->nodeValue) {
						for ($k=0; $k<$sellers ; $k++) {
							if($sellers_obj->item($k)->getElementsByTagName("avail")->item(0)->nodeValue == 'yes') {
								$Product[$i]['Availability'] = "IN STOCK";
								break;
							}
						}
					}
				}
			}
			if ($ResultsListing->item($i)->getElementsByTagName("partnum")->item(0)->nodeValue) {
				$Product[$i]['PartNum'] =  $ResultsListing->item($i)->getElementsByTagName("partnum")->item(0)->nodeValue;
			}
		}
	}
	return array('Product'=>$Product);	
}

function BecomeParser($feedcontent, $feedid){
	$ResultFeed = new DomDocument();
	if ($feedcontent){
		$ResultFeed->loadXML($feedcontent);
	}
	
	if ($ResultFeed->getElementsByTagName("meta")->item(0)->getElementsByTagName("num_results")->item(0)){
		$noOfResults = $ResultFeed->getElementsByTagName("meta")->item(0)->getElementsByTagName("num_results")->item(0)->nodeValue;
	}
	$Product['TotalMatches'] = $noOfResults;
	####### PARSING XML ####
	if( $noOfResults > 0 )
	{
		for($i = 0; $ResultFeed->getElementsByTagName("result")->item($i) && $i < $noOfResults; $i++)
		{
			$Product[$i]['id']		    			= $ResultFeed->getElementsByTagName("result")->item($i)->getElementsByTagName("bskuid")->item(0)->nodeValue;
			$Product[$i]['title']               	= $ResultFeed->getElementsByTagName("result")->item($i)->getElementsByTagName("title")->item(0)->nodeValue;
			$Product[$i]['description']         	= $ResultFeed->getElementsByTagName("result")->item($i)->getElementsByTagName("description")->item(0)->nodeValue;
			$Product[$i]['min_price']            	= $ResultFeed->getElementsByTagName("result")->item($i)->getElementsByTagName("min_price")->item(0)->nodeValue;
			$Product[$i]['max_price']	            = $ResultFeed->getElementsByTagName("result")->item($i)->getElementsByTagName("max_price")->item(0)->nodeValue;
			$Product[$i]['redirect_url']		 	= $ResultFeed->getElementsByTagName("result")->item($i)->getElementsByTagName("url")->item(0)->nodeValue;
			$Product[$i]['merchant']                = $ResultFeed->getElementsByTagName("result")->item($i)->getElementsByTagName("name")->item(0)->nodeValue;
			$Product[$i]['research'] 		 		= $ResultFeed->getElementsByTagName("result")->item($i)->getElementsByTagName("research")->item(0)->nodeValue;
			$Product[$i]['num_stores']              = $ResultFeed->getElementsByTagName("result")->item($i)->getElementsByTagName("num_stores")->item(0)->nodeValue;
			$Product[$i]['image_url']               = $ResultFeed->getElementsByTagName("result")->item($i)->getElementsByTagName("image_url")->item(0)->nodeValue;
			$Product[$i]['fid'] = $feedid;
		}
	}
	return array('Product'=>$Product);
	
}

function ShoppingDetailParser($filedata){
	$ResultFeed = new DomDocument();
	$ResultFeed->loadXML($filedata);
	$Product = array();

	if ($ResultFeed->getElementsByTagName("product")->item(0)) {

		$Listing = $ResultFeed->getElementsByTagName("product");

		if ($Listing->item(0)->getElementsByTagName("name")) {
			$Product['product_id'] = $ResultFeed->getElementsByTagName("product")->item(0)->getAttribute('id');
			$Product['Title'] = $Listing->item(0)->getElementsByTagName("name")->item(0)->nodeValue;
			$Product['short_description'] = $Listing->item(0)->getElementsByTagName("shortDescription")->item(0)->nodeValue;
			$Product['Description'] = $Listing->item(0)->getElementsByTagName("fullDescription")->item(0)->nodeValue;
			$Product['min_price'] = $ResultFeed->getElementsByTagName("minPrice")->item(0)->nodeValue;
			$Product['max_price'] = $ResultFeed->getElementsByTagName("maxPrice")->item(0)->nodeValue;
			$Product['product_offers_url'] = $ResultFeed->getElementsByTagName("productOffersURL")->item(0)->nodeValue;
			$Product['product_specs_url'] = $ResultFeed->getElementsByTagName("productSpecsURL")->item(0)->nodeValue;
			$Product['offer_url'] = $ResultFeed->getElementsByTagName("offerURL")->item(0)->nodeValue;

			$Product['Price'] = $Product['min_price'];

			//Review Info
			$Product['review_count'] = $ResultFeed->getElementsByTagName("rating")->item(0)->getElementsByTagName("reviewCount")->item(0)->nodeValue;
			if($Product['review_count']) {
				$Product['rating'] = $ResultFeed->getElementsByTagName("rating")->item(0)->getElementsByTagName("rating")->item(0)->nodeValue;
				$Product['rating_image'] = $ResultFeed->getElementsByTagName("rating")->item(0)->getElementsByTagName("ratingImage")->item(0)->getElementsByTagName("sourceURL")->item(0)->nodeValue;
			}
			
			if ($ResultFeed->getElementsByTagName("Logo")->item(0)){
				$Product['logo'] = $ResultFeed->getElementsByTagName("Logo")->item(0)->getElementsByTagName("Logo")->item(0)->nodeValue;
			}

			//Images
			$Images = $Listing->item(0)->getElementsByTagName("images");
			if($Images->item(0)) {
				$Product['images'][] = $Images->item(0)->getElementsByTagName("image")->item(0)->nodeValue;
				$Product['images'][] = $Images->item(0)->getElementsByTagName("image")->item(1)->nodeValue;
				$Product['images'][] = $Images->item(0)->getElementsByTagName("image")->item(2)->nodeValue;
				$Product['images'][] = $Images->item(0)->getElementsByTagName("image")->item(3)->nodeValue;
				$Product['images'][] = $Images->item(0)->getElementsByTagName("image")->item(4)->nodeValue;
			}
			if ($Product['images'][0]){
				$Product['Image'] = $Product['images'][0];
			}

			//Parsing Offers Information
			$Offers = $Listing->item(0)->getElementsByTagName("offers");
			if ($Offers->item(0)->getElementsByTagName("offer")->item(0)) {

				$count = $Offers->item(0)->getAttribute('returnedOfferCount');
				$Offer = $ResultFeed->getElementsByTagName("offer");

				for($i=0; $i<$count; $i++) {

					if ($Offer->item($i)->getElementsByTagName("name")) {

						$Product['offers'][$i]['id'] = $Offer->item(0)->getAttribute('id');
						$Product['offers'][$i]['name'] = $Offer->item($i)->getElementsByTagName("name")->item(0)->nodeValue;
						$Product['offers'][$i]['description'] = $Offer->item($i)->getElementsByTagName("Description")->item(0)->nodeValue;
						$Product['offers'][$i]['manufacturer'] = $Offer->item($i)->getElementsByTagName("manufacturer")->item(0)->nodeValue;
						$Product['offers'][$i]['stock_status'] = $Offer->item($i)->getElementsByTagName("stockStatus")->item(0)->nodeValue;
						$Product['offers'][$i]['base_price'] = $Offer->item($i)->getElementsByTagName("basePrice")->item(0)->nodeValue;
						$Product['offers'][$i]['currency'] = $Offer->item($i)->getElementsByTagName("basePrice")->item(0)->getAttribute('currency');
						$Product['offers'][$i]['shipping_cost'] = $Offer->item($i)->getElementsByTagName("shippingCost")->item(0)->nodeValue;
						if ($Offer->item($i)->getElementsByTagName("shippingCost")->item(0)){
							$Product['offers'][$i]['shipping_currency'] = $Offer->item($i)->getElementsByTagName("shippingCost")->item(0)->getAttribute('currency');
						}
						$Product['offers'][$i]['offer_url'] = $Offer->item($i)->getElementsByTagName("offerURL")->item(0)->nodeValue;
						$Product['offers'][$i]['sku'] = $Offer->item($i)->getElementsByTagName("sku")->item(0)->nodeValue;

						//Offer Image List
						$ImageList = $Offer->item($i)->getElementsByTagName("imageList");
						if($ImageList->item(0)) {
							for($j=0; $j<10 && $ImageList->item(0)->getElementsByTagName("image")->item($j); $j++){
								$Product['offers'][$i]['images'][] = $ImageList->item(0)->getElementsByTagName("image")->item($j)->getElementsByTagName("sourceURL")->item(0)->nodeValue;
							}
						}
						
						//Store Info
						$Store = $Offer->item($i)->getElementsByTagName("store");
						if($Store->item(0)) {
							
							$Product['offers'][$i]['store']['name'] = $Store->item(0)->getElementsByTagName("name")->item(0)->nodeValue;
							$Product['offers'][$i]['store']['phone'] = $Store->item(0)->getElementsByTagName("phoneNumber")->item(0)->nodeValue;
							$Product['offers'][$i]['store']['logo'] = $Store->item(0)->getElementsByTagName("logo")->item(0)->getElementsByTagName("sourceURL")->item(0)->nodeValue;
							$Product['offers'][$i]['store']['country_flag'] = $Store->item(0)->getElementsByTagName("countryFlag")->item(0)->getElementsByTagName("sourceURL")->item(0)->nodeValue;
							$Product['offers'][$i]['store']['country_code'] = $Store->item(0)->getElementsByTagName("countryFlag")->item(0)->getElementsByTagName("countryCode")->item(0)->nodeValue;
						}
					}
				}
			}
		}
	}
	return $Product;
}

function PriceGrabberDetailParser($filedata)
{
	$Feed = new DomDocument();
	$Feed->loadXML($filedata);
	########### RESULTS	LISTING	###############
	if ($Feed->getElementsByTagName("product")->item(0))
	{
		$Data['Title'] = $Feed->getElementsByTagName("title")->item(0)->nodeValue;
		$Data['TitleShort'] =  $Feed->getElementsByTagName("title_short")->item(0)->nodeValue;
		$Data['Image'] = $Feed->getElementsByTagName("image_large")->item(0)->nodeValue;
		$Data['Description'] = $Feed->getElementsByTagName("description")->item(0)->nodeValue;
		$Data['Stores'] = $Feed->getElementsByTagName("num_results")->item(0)->nodeValue;
		$Data['Price'] = $Feed->getElementsByTagName("price")->item(0)->nodeValue;
		$Data['Manufacturer'] = $Feed->getElementsByTagName("manuf")->item(0)->nodeValue;

		$offer_listings = $Feed->getElementsByTagName("offer");
		for($i = 0; $offer_listings->item($i); $i++)
		{
			$Data['offers'][$i]['name'] = $offer_listings->item($i)->getElementsByTagName("retailer")->item(0)->nodeValue;
			$Data['offers'][$i]['base_price'] = $offer_listings->item($i)->getElementsByTagName("price")->item(0)->nodeValue;
			$Data['offers'][$i]['stock_status']   = $offer_listings->item($i)->getElementsByTagName("avail")->item(0)->nodeValue;
			$Data['offers'][$i]['Logo'] = $offer_listings->item($i)->getElementsByTagName("retailer_logo")->item(0)->nodeValue;
			$Data['offers'][$i]['Rating'] = $offer_listings->item($i)->getElementsByTagName("pur_rating")->item(0)->nodeValue;
			$Data['offers'][$i]['offer_url'] = $offer_listings->item($i)->getElementsByTagName("url")->item(0)->nodeValue;
			$Data['offers'][$i]['store']['logo'] = $Data['offers'][$i]['Logo'];
			if(stristr($_SERVER['HTTP_HOST'],"cheapstuff.com") || 1){
				$Data['offers'][$i]['offer_url'] = "http://click.cheapstuff.com/gcap.php?url=".urlencode($Data['offers'][$i]['offer_url']);
			}
		}
		if ($Data['offers'][0]['offer_url']){
			$Data['offer_url'] = $Data['offers'][0]['offer_url'];
		}
		if(stristr($_SERVER['HTTP_HOST'],"cheapstuff.com")){
			$Data['offer_url'] = "http://click.cheapstuff.com/gcap.php?url=".urlencode($Data['offer_url']);
		}
	}
	if (!$Data['Image']){
		$Data['Image'] = $Data['offers'][0]['Logo'] ?  $Data['offers'][0]['Logo']: "";
	}
	return $Data;
}


function ShoppingParser($feedcontent, $feedid){
	$ResultFeed = new DomDocument();
	$ResultFeed->loadXML($feedcontent);

	$Product = array();
	if ($ResultFeed->getElementsByTagName("product")->item(0)) {
		$count = $ResultFeed->getElementsByTagName("categories")->item(0)->getElementsByTagName("items")->item(0)->getAttribute('returnedItemCount');
		$Listing = $ResultFeed->getElementsByTagName("product");

		$Product['TotalMatches'] = $count;
		
		$i=0;
		foreach($ResultFeed->getElementsByTagName("product") as $prod){
			if($prod->getAttribute('id')){
				$Product[$i]['id'] = $prod->getAttribute('id');
			}
			
			if($Product[$i]['id']){
				$Product[$i]['title'] = $prod->getElementsByTagName('name')->item(0)->firstChild->nodeValue;
				$Product[$i]['description'] = $prod->getElementsByTagName('shortDescription')->item(0)->firstChild->nodeValue;
				$Product[$i]['min_price'] = $prod->getElementsByTagName('minPrice')->item(0)->firstChild->nodeValue;
				$Product[$i]['max_price'] = $prod->getElementsByTagName('maxPrice')->item(0)->firstChild->nodeValue;
				$Product[$i]['image_url'] = $prod->getElementsByTagName('sourceURL')->item(0)->firstChild->nodeValue;
			}
			
			if($prod->getElementsByTagName('rating')->item(0)){
				$Product[$i]['review_count'] = $prod->getElementsByTagName('rating')->item(0)->getElementsByTagName('reviewCount')->item(0)->nodeValue;
				if($Product[$i]['review_count']){
					$Product[$i]['rating'] = $prod->getElementsByTagName('rating')->item(0)->getElementsByTagName('rating')->item(0)->nodeValue;
					$Product[$i]['rating_image'] = $prod->getElementsByTagName('rating')->item(0)->getElementsByTagName('ratingImage')->item(0)->getElementsByTagName('sourceURL')->item(0)->nodeValue;
				}
			}
			
			$Product[$i]['redirect_url'] = '';
			$Product[$i]['fid'] = $feedid;
			$i++;
			
		}
		
		/*for($i=0; $i<$count; $i++) {
			if ($ResultFeed->getElementsByTagName("name")) {
				if ($ResultFeed->getElementsByTagName("product")->item($i)){
					$Product[$i]['id'] = $ResultFeed->getElementsByTagName("product")->item($i)->getAttribute('id');
				} 
				if($Product[$i]['id']){
					$Product[$i]['title'] = $ResultFeed->getElementsByTagName("name")->item($i)->nodeValue;
					$Product[$i]['description'] = $ResultFeed->getElementsByTagName("name")->item($i)->getElementsByTagName("shortDescription")->item(0)->nodeValue;

					$Product[$i]['min_price'] = $ResultFeed->getElementsByTagName("minPrice")->item($i)->nodeValue;
					$Product[$i]['max_price'] = $ResultFeed->getElementsByTagName("maxPrice")->item($i)->nodeValue;

					//Review Info
					if ($ResultFeed->getElementsByTagName("rating")->item($i)){
						$Product[$i]['review_count'] = $ResultFeed->getElementsByTagName("rating")->item($i)->getElementsByTagName("reviewCount")->item(0)->nodeValue;
						if($Product[$i]['review_count']) {
							$Product[$i]['rating'] = $ResultFeed->getElementsByTagName("rating")->item($i)->getElementsByTagName("rating")->item(0)->nodeValue;
							$Product[$i]['rating_image'] = $ResultFeed->getElementsByTagName("rating")->item($i)->getElementsByTagName("ratingImage")->item(0)->getElementsByTagName("sourceURL")->item(0)->nodeValue;
						}
					}
					if($ResultFeed->getElementsByTagName("product")->item($i)) {
						$Product[$i]['image_url'] = $ResultFeed->getElementsByTagName("product")->item($i)->getElementsByTagName("image")->item(0)->nodeValue;
					} elseif ($ResultFeed->getElementsByTagName("offer")->item($i)){
						$Product[$i]['image_url'] = $ResultFeed->getElementsByTagName("offer")->item($i)->getElementsByTagName("image")->item(0)->nodeValue;
					}
					$Product[$i]['redirect_url'] = "";
					$Product[$i]['fid'] = $feedid;
				}
			}
		}*/
	}
	return array('Product'=>$Product);
}


function LIB_curl_get_contents($CurlData)
{ 
	##### FETCH INPUT #####
	if (is_array($CurlData))
		$URL = $CurlData['url'];
	else
		$URL = $CurlData;	
	
	if ($CurlData['timeout'])
		$Timeout = $CurlData['timeout'];
	else
		$Timeout = 2;
			
	###### INIT ############ 
	$ch = curl_init($URL);
	###### CURL & OPTION #####
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
	curl_setopt($ch, CURLOPT_TIMEOUT, $Timeout); 
	curl_setopt($ch, CURLOPT_USERPWD, $CurlData['login']);
	curl_setopt($ch, CURLOPT_USERAGENT, $CurlData['ua']);
	if($CurlData['Authorization'])
		curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: '.$CurlData['Authorization'])); 
	curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);
	$data = curl_exec($ch);
	curl_close($ch);
	return $data;
}

function syncRequest($data) {
	global $curlstart, $timedout;
	$curly = array();
	$result = array();
	$curl_options = array(
						CURLOPT_HEADER => false,
						CURLOPT_SSL_VERIFYPEER => false,
						CURLOPT_SSL_VERIFYHOST => false,
						CURLOPT_RETURNTRANSFER => true,
						CURLOPT_TIMEOUT => CURLTIMEOUT,
						CURLOPT_CONNECTTIMEOUT => 2,
						CURLOPT_FORBID_REUSE => true,
						CURLOPT_FRESH_CONNECT => true
					);
	$mh = curl_multi_init();
	foreach ($data as $id => $url) {
		$curly[$id] = curl_init($url);
		curl_setopt_array($curly[$id], $curl_options);
		curl_multi_add_handle($mh, $curly[$id]);
	}
	$running = null;
	do {
		if((microtime(true) - $curlstart) > HARDTIMEOUT) {
			$timedout++;
			break;
		}
		curl_multi_exec($mh, $running);
	} while($running > 0);
	foreach($curly as $id => $c) {
		$result[$id] = curl_multi_getcontent($c);
		curl_multi_remove_handle($mh, $c);
	}
	curl_multi_close($mh);
	return $result;
}

//$feeds = array("Yahoo" => 'http://www.yahoo.com', "Google"=>'http://www.google.com');

//$curlstart = microtime(true);
//$r = syncRequest($feeds);
////$r = asyncRequest($feeds);
//$curlstop = microtime(true);


?>