open System
open System.IO
open System.Net
open System.Drawing

let ImageSize = 300

let fetchImage (url : Uri) = 
    let req = WebRequest.Create (url) :?> HttpWebRequest
    use stream = req.GetResponse().GetResponseStream()
    Image.FromStream(stream)

let googleChartQRCodeImage mydata = 
    let addr = String.Format("http://chart.apis.google.com/chart?chs={0}x{0}&cht=qr&chl={1}&choe=ISO-8859-1", ImageSize, mydata)
    new Uri(addr, UriKind.Absolute)

let vcard = @"BEGIN:VCARD
VERSION:3.0
N:{1};{0};
FN:{0} {1}
NICKNAME:{2}
ORG:{3}
ROLE:{4}
TITLE:{4}
PHOTO;MEDIATYPE={6}:{5}
TEL;TYPE=CELL:{7}
X-TWITTER:{8}
URL:{9}
EMAIL;TYPE=PREF,INTERNET:{10}
ADR;TYPE=HOME:;;{11};{12};;{13};{14}
LABEL;TYPE=HOME:{11}\n{13} {12}\n{14}
REV:{15}
END:VCARD
"

let googleChartUri contact = 
    String.Format(vcard, contact)
    |> Uri.EscapeDataString
    |> googleChartQRCodeImage

let sample : obj [] = [|
    "Matt"; //first name 
    "Oneofus"; //surname
    "matias"; //nickname 
    "Company & co."; //organization
    "Guru"; //title
    "http://www.wpclipart.com/signs_symbol/icons_oversized/male_user_icon.png"; //image url
    "image/png"; //picture mime-type, eg. image/gif or image/jpeg
    "+358 50 123 4567"; //cell phone
    "Thoriumi"; // twitter account
    "http://www.iki.fi/thorium/"; // url
    "nospam@mailinator.com"; //email
    "Katuroad 1 A 5"; // street address
    "Espoo"; //city
    "02100"; //postal code
    "Finland"; //country
    System.DateTime.Now.ToString("yyyyMMddThhmmssZ"); // timestamp
    |]

open System.Windows.Forms
let showImage = 
    let form = new Form()
    let pb = new PictureBox()
    pb.Image <- sample |> googleChartUri |> fetchImage
    pb.SizeMode <- PictureBoxSizeMode.AutoSize
    form.Height <- ImageSize+50
    form.Width <- ImageSize+50
    form.Controls.Add(pb)
    form.Show()