/*
    ITK3
    You didn't see this coming, did you?
*/

function itk_id(){
    var rand1 = parseInt(Math.random() * 100000) + ""
    var rand2 = parseInt(Math.random() * 100000) + ""
    return "u" + rand1 + "" + rand2
}

var itk3 = {
    version: "3.0b",
    loaded: false,
    env: "production",
	debug: false,
	poll_interval: "",
	paths: {
	    apps: "http://cache.cloudshout.com/",
	    call: "http://cloudshout.com/",
	    comm: "http://itkserver.cloudshout.com/",
	    user: "http://socialspark.com/",
	    user_cache: "http://cache.socialspark.com/",
	    adserver: "http://adserver.socialspark.com/www/delivery",
	    izearanks: "http://izearanks.com/"
	},
	user: {
	    id: itk_id(),
	    name: "Unknown",
	    icon: "gfx~avatars~unknown.png",
	    looked_up: false,
	    unknown: true,
	    referer: document.referrer + "",
	    friends_loaded_at: "",
	    friends: "",
	    pending_friends_loaded_at: "",
	    pending_friends: "",
	    connections: "",
	    blogs: "",
	    blocked: { users: [], apps: [], blogs:[] },
	    accounts: {}
	},
    site: {

        id: 65,
        title: "Read to Me, Dad",
        permalink: "readtomedad-com",
        url: "http://www.readtomedad.com",
        itk_installed: (typeof(itk_do_analytics)==='undefined' ? false : true),
        	owner_id:   "ac66aecb127c7a4148995ef400f0d74f",
			owner_name: "BenSpark",
			owner_icon: "~images~avatars~10471750~large_square_izealook.png",
		platform: "Wordpress",
        category: "",
        owner_connections: {
	twitter: 'benspark',
	pownce: 'benspark',
	flickr: 'benspark',
	digg: 'abennett96',
	youtube: 'abennett96@gmail.com',
	twitterpw: true,
	socialspark: 'BenSpark'
}
,
        theme: {
            floating: {
                skin: "default",
                background_color: "#515151",
                rounded: true,
                text_color: "#e5e5e5"
            },
            palette: {
                skin: "default",
                background_color: "#515151",
                rounded: true,
                text_color: "#e5e5e5"
            }
        }
    },
    apps: {
        core: ["jquery-1.3.min", "event_hub", "utilities", "application", "communications", "accounts", "palettes", "social", "date_format"],
        izea: ["izea_profiles", "izea_friends", "izea_messages", "izea_installer", "izea_past_visitors", "izea_im", "izea_chat", "izea_notifications"],
    	blog: ["dang_flickrshout_r2","dang_youtube_player_r4","dang_danggrowl_r1","dang_lastfmshout_r2"],
    	user: [] // this will need to be looked up once we id the user and then set
    },
    hub: {
      w: 190,
      h: 300,
      show: "list",
      colors: {
          lightest: "#f1f1f1",
          light:    "#e5e5e5",
          medium:   "#cccccc", 
          dark:     "#666666",
          darkest:  "#222222",
          border:   "#999999",
          header:   "#e8e8e8",
          font:     "#666666",
          bg:       "#fefefe"
      }  
    },
    agent: {
    	init: function () {
    		this.browser = this.searchString(this.dataBrowser) || "An unknown browser"
    		this.version = this.searchVersion(navigator.userAgent)
    			|| this.searchVersion(navigator.appVersion)
    			|| "an unknown version"
    		this.OS = this.searchString(this.dataOS) || "an unknown OS"
    	},
    	searchString: function (data) {
    		for (var i=0;i<data.length;i++)	{
    			var dataString = data[i].string
    			var dataProp = data[i].prop
    			this.versionSearchString = data[i].versionSearch || data[i].identity
    			if (dataString) {
    				if (dataString.indexOf(data[i].subString) != -1) return data[i].identity
    			}else if (dataProp)
    			return data[i].identity
    		}
    	},
    	searchVersion: function (dataString) {
    		var index = dataString.indexOf(this.versionSearchString)
    		if (index == -1) return
    		return parseFloat(dataString.substring(index+this.versionSearchString.length+1))
    	},
    	dataBrowser: [
    		{ string: navigator.userAgent, subString: "OmniWeb", versionSearch: "OmniWeb/", identity: "OmniWeb"},
    		{ string: navigator.vendor, subString: "Apple", identity: "Safari"},
    		{ prop: window.opera, identity: "Opera"},
    		{ string: navigator.vendor, subString: "iCab", identity: "iCab"},
    		{ string: navigator.vendor, subString: "KDE", identity: "Konqueror"},
    		{ string: navigator.userAgent, subString: "Firefox", identity: "Firefox"},
    		{ string: navigator.vendor, subString: "Camino", identity: "Camino"},
    		{ string: navigator.userAgent, subString: "Netscape", identity: "Netscape"},
    		{ string: navigator.userAgent, subString: "MSIE", identity: "Explorer", versionSearch: "MSIE"},
    		{ string: navigator.userAgent, subString: "Gecko", identity: "Mozilla", versionSearch: "rv"},
    		{ string: navigator.userAgent, subString: "Mozilla", identity: "Netscape", versionSearch: "Mozilla"}
    	],
    	dataOS : [
    		{ string: navigator.platform, subString: "Win", identity: "Windows"},
    		{ string: navigator.platform, subString: "Mac", identity: "Mac"},
    		{ string: navigator.platform, subString: "Linux", identity: "Linux"}
    	]
    },
    call_id: 0,
    Applications: {},
    applications: {}
}

/*
    ITK LOADER
    Loads various ITK functionality and applications
*/
var itk_loader = {
    
    test:                               "",
    head:                               document.getElementsByTagName('head').item(0),
    core_loaded:                        false,
    ready_for_app_loader_interval:      false,
    div_loaded:                         false,
    checking_user:                      false,
    user_connections_looked_up:         false,
    continue_loading:                   false,
    hub_loaded:                         false,
    finish_id_interval:                 false,
	poll_interval_seconds:              4000,
	
	
	generic_id: function(){
        var rand1 = parseInt(Math.random() * 100000) + ""
        var rand2 = parseInt(Math.random() * 100000) + ""
        return "u" + rand1 + "" + rand2
    },
    
	
	dom_loaded: function(){
	    itk_loader.change_polling(3)
	},
	
	
	change_polling: function(seconds){
	    clearInterval(itk3.poll_interval)
	    this.poll_interval_seconds  = parseInt(seconds) * 1000
	    itk3.poll_interval          = setInterval("itkc.poll()", this.poll_interval_seconds)
	},
	
	
    init: function(){
        if(itk3.agent.browser == "Explorer" && itk3.agent.version < 7){
            itk_loader.div_loaded = setInterval("itk_loader.check_for_widgets_div_loaded_unsupported()", "1000")
        }else{
            this.log.info("function itk_loader.init called.")
            if ( window.attachEvent ){ // ie
              window.attachEvent( "onbeforeunload", function() { itkc.departure() } )
              window.attachEvent( "onload", function() { itk_loader.dom_loaded() } )
            } else if(addEventListener) { // moz, saf
	            window.addEventListener( "beforeunload", function() { itkc.departure(); }, false )
	            window.addEventListener( "load", function() { itk_loader.dom_loaded() }, false )
            } else{
              window.onbeforeunload = function() { itkc.departure() }
              window.onload = function() { itk_loader.dom_loaded() }
            }
            if(itk3.env == "development" || itk3.env == "qa") this.load_debug_tools()
            for(i=0;i<itk3.apps.core.length;i++) this.install(itk3.apps.core[i], "core", "itk")
            itk_loader.core_loaded          = setInterval("itk_loader.check_for_core_loaded()", "1000")
            itk_loader.div_loaded           = setInterval("itk_loader.check_for_widgets_div_loaded()", "1000")
            itk_loader.continue_loading     = setInterval("itk_loader.check_to_continue_loading()", "1000")
        }
    },
    
    
    load_debug_tools: function(){
        this.log.info("function itk_loader.load_debug_tools called.")
        itk3.debug = true
        var a = document.createElement('script')
            a.setAttribute("src", itk3.paths.apps + "js/blackbirdjs/blackbird.js")
        	a.setAttribute("type", "text/javascript")
        this.head.appendChild(a)
        var a = document.createElement('link')
            a.setAttribute("href", itk3.paths.apps + "js/blackbirdjs/blackbird.css")
        	a.setAttribute("type", "text/css")
        	a.setAttribute("rel", "Stylesheet")
        this.head.appendChild(a)
    },
    
    
    check_for_widgets_div_loaded: function(){
        this.log.info("function itk_loader.check_for_widgets_div_loaded called.")
        if(document.getElementById("itk_widgets")){
            clearInterval(itk_loader.div_loaded)
            itk_loader.div_loaded = "loaded"
            var itk_widgets_div = document.getElementById("itk_widgets").style
                itk_widgets_div.lineHeight = "normal"
                itk_widgets_div.fontFamily = "Verdana"
        }
    },
    
    
    check_for_widgets_div_loaded_unsupported: function(){
        this.log.info("function itk_loader.check_for_widgets_div_loaded_supported called.")
        if(document.getElementById("itk_widgets")){
            clearInterval(itk_loader.div_loaded)
            var img = itk3.paths.apps + "gfx/unsupported/"
            var ul = "<span style='width:35px;height:36px;display:inline-block;'><img style='filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);' src='"+img+"ul.png' width='35' height='36' border='0' alt=''></span>"
            var ur = "<span style='width:96px;height:36px;display:inline-block;'><img style='filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);' src='"+img+"ur.png' width='96' height='36' border='0' alt=''></span>"
            var ll = "<span style='width:16px;height:19px;display:inline-block;'><img style='filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);' src='"+img+"ll.png' width='16' height='19' border='0' alt=''></span>"
            var lr = "<span style='width:16px;height:19px;display:inline-block;'><img style='filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);' src='"+img+"lr.png' width='16' height='19' border='0' alt=''></span>"
            var a = ""
                a += "<table cellpadding='0' cellspacing='0' border='0' width='100%'>"
                a += "  <tr>"
                a += "    <td width='35'>"+ul+"</td>"
                a += "    <td style='background-image:url("+img+"bg_top.png)'><img src='"+img+"blank.gif' width='1' height='1'></td>"
                a += "    <td width='96'>"+ur+"</td>"
                a += "  </tr>"
                a += "</table>"
                a += "<table cellpadding='0' cellspacing='0' border='0' width='100%'>"
                a += "  <tr>"
                a += "    <td width='16' style='background-image:url("+img+"bg_left.png)'><img src='"+img+"blank.gif' width='1' height='1'></td>"
                a += "    <td bgcolor='white' style='padding:10px;'>"
                a += "      <span style='font-size:12px;font-family:verdana;font-weight:bold;color:#666666;'>"
                a += "        Sorry, CloudShout does not currently support this browser."
                a += "      </span><br/><br/>"
                a += "      <span style='font-size:11px;font-family:verdana;color:#666666;'>"
                a += "        Current browsers supported are:"
                a += "        <ul style='text-decoration:none;border:0'>"
                a += "          <li style='list-style-type:disc;border:0'><a style='border:0' href='http://www.mozilla.com/en-US/firefox/' target='_blank'>Firefox 2+</a></li>"
                a += "          <li style='list-style-type:disc;border:0'><a style='border:0' href='http://www.microsoft.com/windows/products/winfamily/ie/default.mspx' target='_blank'>Explorer 7+</a></li>"
                a += "          <li style='list-style-type:disc;border:0'><a style='border:0' href='http://www.apple.com/safari/' target='_blank'>Safari 3.1+</a></li>"
                a += "        </ul>"
                a += "        As we improve the service, we will try to support as many browsers as possible. <a href='http://cloudshout.com' target='_blank'>Click here to find out more about CloudShout</a>.<br/>"
                a += "      </span>"
                a += "    </td>"
                a += "    <td width='16' style='background-image:url("+img+"bg_right.png)'><img src='"+img+"blank.gif' width='1' height='1'></td>"
                a += "  </tr>"
                a += "  <tr>"
                a += "    <td width='16'>"+ll+"</td>"
                a += "    <td style='background-image:url("+img+"bg_bot.png)'><img src='"+img+"blank.gif' width='1' height='1'></td>"
                a += "    <td width='16'>"+lr+"</td>"
                a += "  </tr>"
                a += "</table>"
            var itk_widgets_div = document.getElementById("itk_widgets")
                itk_widgets_div.style.padding = "5px"
                itk_widgets_div.style.margin = "0"
                itk_widgets_div.style.border = "0"
                itk_widgets_div.innerHTML = a
        }
    },
    
    
    check_for_core_loaded: function(){
        this.log.info("function itk_loader.check_for_core_loaded called.")
        if(window.itku && window.itkc && window.itka && window.itk3.Application && window.itkp && window.jQuery){
			clearInterval(itk_loader.core_loaded)
            itk_loader.core_loaded = "loaded"
        }
    },
    
    
    check_to_continue_loading: function(){
      this.log.info("function itk_loader.check_to_continue_loading called.")
      if(itk_loader.div_loaded == "loaded" && itk_loader.core_loaded == "loaded"){
        clearInterval(itk_loader.continue_loading)
        itk_loader.installed(itkp)
			  this.install("izea_activity_hub", "izea", "itk")
			  this.install("izea_user_registration", "izea", "itk")
			  itk_loader.hub_loaded = setInterval("itk_loader.check_for_hub_loaded()", "1000")
			  
			  //document.addEventListener ? document.addEventListener('mousemove', itkp.set_mouse_coords, true) : document.attachEvent('onmousemove', itkp.set_mouse_coords)
			  window.addEventListener ? window.addEventListener('resize', itkp.resize_window, true) : window.attachEvent('onresize', itkp.resize_window)
		  }
    },
    
    
    check_for_hub_loaded: function(){
        this.log.info("8")
        this.log.info("function itk_loader.check_for_hub_loaded called.")
        if(window.izea_activity_hub && izea_activity_hub.info.installed){
            clearInterval(itk_loader.hub_loaded)
            itk_loader.hub_loaded = "loaded"
            itk_loader.check_user()
        }
    },
    
    
    set_blog_owner_icon: function(path){
        itk3.site.owner_icon = path
    },
    
    
    check_user: function(){
        this.log.info("function itk_loader.check_user called.")
        if(itk_loader.checking_user || itk3.user.looked_up) return
        itk_loader.checking_user = true;
        this.log.info("about to call itka.identify.")
        itka.identify()
    },
    
    
    user_checked: function(){
        this.log.info("function itk_loader.user_checked called.")
        if(!itk3.user.unknown){
            with(izea_activity_hub){
                startup_hub("known")
                star_my_friends()
            }
        }else{
            izea_activity_hub.startup_hub("unknown")
        }
        this.start_polling()
        this.app_loader()
    },
    
    
    start_polling: function(){
        this.log.info("function itk_loader.start_polling called.")
        clearInterval(itk3.poll_interval)
        itk3.poll_interval = setInterval("itkc.poll()", this.poll_interval_seconds)
    },
    
    
    app_loader: function(){
        this.log.info("function itk_loader.app_loader called.")
        for(i=0;i<itk3.apps.izea.length;i++) if(!itku.id("itk_izea_app_" + itk3.apps.izea[i])) this.install(itk3.apps.izea[i], "izea", "itk")
            for(i=0;i<itk3.apps.blog.length;i++) if(!itku.id("itk_blog_app_" + itk3.apps.blog[i])) this.install(itk3.apps.blog[i], "blog", "apps")
        itk3.loaded = true
        izea_activity_hub.check_for_blog_apps()
    },
    
    
    install: function(file, type, location){
		if(typeof(file) != 'string') return
        var id = "itk_" + type + "_app_" + file
        var a = document.createElement('script')
            src = itk3.paths.apps + location + "/" + file + ".js"
            src += (itk3.env != "production") ? "?" + itk_loader.generic_id() : ""
            a.setAttribute("src", src)
            a.setAttribute("type", "text/javascript")
            a.setAttribute("id", id)
        if(!document.getElementById(id)) this.head.appendChild(a)
    },
    
    
    
    
    installed: function(app){
		app.info.installed = true
        if(app.info.css) itku.link_styles(app.info.id, app.info.css)
        if(parseInt(app.info.run) > 0) setTimeout(app.info.id + ".init()", app.info.run)
        if(app.info.run == "immediate") app.init()
        if(app.info.run == "after_load") itku.set_up_listeners("load", app.init )
        app_type = ["blog", "user"]
        for(i=0;i<app_type.length;i++){
            var aid     = app.info.id
            var ldiv    = itku.id(app_type[i] + "_app_record_" + aid + "_loading")
            if(ldiv){
                if(app.info.list){
                    ldiv.innerHTML = izea_activity_hub.app_record_content(app.info.id, app.info.name, (itk3.paths.apps + app.info.icon_big), app.info.desc)
                    ldiv.id = app_type[i] + "_app_record_" + aid
                }else{
                    document.removeChild(ldiv)
                }
            }
            if(app.info.btn){
                btn_div = itku.id(aid + "_launch_button")
                if(btn_div) itku.display_button(aid, app.info.icon, btn_div)
            }
        }
        if(app.info.btn && document.getElementById(app.info.id+"_button")) itku.display_button(document.getElementById(app.info.id+"_button"), app.info.btn, app.info.id + ".init()")
        this.log.info(app.info.id + " installed...")
        itk3.events.broadcast(new itk3.Event({type:"itk3.application.install_complete", id:app.info.id , data:{info:app.info}}));
    },
    
    log: {
        info: function( m ){ if(itk3.debug) log.info(m) },
        warn: function( m ){ if(itk3.debug) log.warn(m) },
        error: function( m ){ if(itk3.debug) log.error(m) }
    }
}
itk3.agent.init()
itk_loader.init()
function itk3_diggpop(obj){ dang_diggpop.api_response(obj) }
function itk_user_message(m){}