function strpos(haystack, needle, offset){
    var i = (haystack+'').indexOf(needle, (offset ? offset : 0));
    return i === -1 ? false : i;
}
function trim(stringToTrim) {
	return stringToTrim.replace(/^\s+|\s+$/g,"");
}
function getMV(text) {
	var un=getContent(text,'flashvars.un = "','";',16,0);
	var k1=getContent(text,'flashvars.k1 = "','";',16,0);
	var k2=getContent(text,'flashvars.k2 = "','";',16,0);
	var s=getContent(text,'flashvars.s = "','";',15,0);
	return '&mv='+un+','+k1+','+k2+','+s;
}
function getDM(text) {
	var url1=urldecode(getContent(text,'sdURL%22%3A%22','%22',14,0));
	var url2=urldecode(getContent(text,'hqURL%22%3A%22','%22',14,0));
	url1=url1.replace(/\\/g, "");
	url2=url2.replace(/\\/g, "");
	if ( url1.length>300 ) { url1=''; }
	if ( url2.length>300 ) { url2=''; }
	return '&dm='+url1+','+url2;
}
function getYTold(text) {
	var url1='';
	var url2='';
	var title='';
	var fmt=urldecode(getContent(text,'url_encoded_fmt_stream_map=','keywords',27,0));
	title=getContent(text,'<meta name="title" content="','"',28,0);
	if ( title.length>150 || title.length<20 || title.indexOf('<')!=-1 ) { title='ClipNabber-video'; }
	var array=explode(',',fmt);
	for ( var v in array ) {
		var subarray=explode('itag=',array[v]);
		if ( subarray[1]==34 || subarray[1]==5 || subarray[1]==35) {
			subarray[0] = urldecode(getContent(subarray[0], "url=", "&quality", 4, 0));
			url1=subarray[0]+'&title='+title;
		}
		if ( subarray[1]==18 ) {
			subarray[0] = urldecode(getContent(subarray[0], "url=", "&quality", 4, 0));
			url2=subarray[0]+'&title='+title;
		}
	}
	var yt='&yt='+urlencode(url1)+','+urlencode(url2);
	if (yt.length>100) { return yt; } else { return ''; }
}
function getYT(text) {
	var vidid=getContent(text,'video_id" value="','"',17,0);
	var token=getContent(text,'&t=','&',3,0);
	var url1='http://www.youtube.com/get_video?video_id='+vidid+'&t='+token+'&el=detailpage&fmt=34'+'&asv=';
	var url2='http://www.youtube.com/get_video?video_id='+vidid+'&t='+token+'&el=detailpage&fmt=18'+'&asv=';
	var yt='&yt='+urlencode(url1)+','+urlencode(url2);
	if (yt.length>100) { return yt; } else { return ''; }
}
function getContent(string,str1,str2,n1,n2) {
	var r1 = strpos(string,str1)+n1;
	var r2 = strpos(string,str2,r1)+n2;
	var info = string.substr(r1,r2-r1);
	return info;	
}
function urldecode(str) {
    return decodeURIComponent(str.replace(/\+/g, '%20'));
}
function urlencode (str) {
    str = (str+'').toString();
    return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+');
}
function explode (delimiter, string, limit) {
    var emptyArray = { 0: '' };   
    // third argument is not required
    if ( arguments.length < 2 ||
        typeof arguments[0] == 'undefined' ||
        typeof arguments[1] == 'undefined' ) {
        return null;
    }
    if ( delimiter === '' ||
        delimiter === false ||
        delimiter === null ) {
        return false;
    }
    if ( typeof delimiter == 'function' ||
        typeof delimiter == 'object' ||
        typeof string == 'function' ||
        typeof string == 'object' ) {
        return emptyArray;
    }
    if ( delimiter === true ) {
        delimiter = '1';
    } 
    if (!limit) {
        return string.toString().split(delimiter.toString());
    } else {
        var splitted = string.toString().split(delimiter.toString());
        var partA = splitted.splice(0, limit - 1);
        var partB = splitted.join(delimiter.toString());
        partA.push(partB);
        return partA;
    }
}

//youtube greasemonkey functions required because of delay
function addDownloadBox(dl) {
var styles = [
	'#cnBox {position: fixed; right: 5px; bottom: 5px; z-index: 1000;opacity: 0.95;}',
	'#cnBox a {font-size:11px;font-family:Verdana;font-weight:bold;color:#489dd3 !important;text-align:center;outline:none;background-color: #4d4d4d;border:1px solid #B6D9EE;padding:4px;display:block;text-decoration:none;}',
	'#cnBox a:hover {background-color:#5C5C5C;color:#489dd3 !important;text-decoration:none;}',
	'#cnBox img, #cnBox a:hover img {background:none;margin:0px;padding:0px;border:none;vertical-align:middle}'
	];
	GM_addStyle(styles.join("\r\n"));
	var downloadBox = document.createElement('div');
	document.body.appendChild(downloadBox);
	downloadBox.id = 'cnBox';
	downloadBox.innerHTML = '<a href="' + dl + '" title="Download with ClipNabber" onClick="wopen(this.href); return false;"><img src="http://clipnabber.com/favicon.ico" /> Nab It!</a>';
}
  function GM_addStyle(/* String */ styles) {
    var oStyle = document.createElement("style");
    oStyle.setAttribute("type", "text\/css");
    oStyle.appendChild(document.createTextNode(styles));
    document.getElementsByTagName("head")[0].appendChild(oStyle);
  } 
