function SPHost(hostId, brandName, placeHolder, startPageUrl) {
    var STANDALONE_WINDOW_FEATURES = 'width=634,height=499,resizable=yes,scrollbars=no,toolbar=no,location=no,directories=no,status=no,menubar=no';

    var CURRENT_POSITION_QS = 'currentPosition';
    var POPPED_QS = 'popped';
    var HOST_ID_QS = 'hostId';
    
    this.hostId;
    this.brandName;
    this.placeHolder;
    this.startPageUrl;
    
    
    var proxyUrl = "/SVOD/COMMON/STATICPAGES/SYNDICATEDPLAYERHOST/syndicatedPlayerProxy.html";
    var customisationParams = {successUrl: encodeURIComponent(window.location)};
    var _proxyIframe, host, container;
    

    SPHost.prototype.createSyndicatedPlayer = function() {
    	
        function setInnerText(element, value) {
            if(document.all)
               element.innerText = value;
            else
                element.textContent = value;
        };

    	/*  build the header and its children  */
    	
        var header = document.createElement( "div" );
        header.className = 'syndicatedPlayerHeader';

        var header_h3 = document.createElement( "h3" );
        header.appendChild( header_h3 );

        var header_a = document.createElement( "a" );
        setInnerText( header_a, this.brandName + " on Sky Player" );
        header_h3.appendChild( header_a );

        /*  build the player container  */
        container = document.createElement( "div" );
        container.className = 'syndicatedPlayerContainer';

        var divTop = document.createElement( "div" ); divTop.className = "top";
        container.appendChild( divTop );
        var divLeft = document.createElement( "div" ); divLeft.className = "left";
        container.appendChild(  divLeft );

        container.appendChild(this._buildProxyIframe(this.startPageUrl));
        //var divBottom = document.createElement( "div" ); divBottom.className = "bottom";
        //container.appendChild( divBottom );

        /*  add it to the page  */
        this.placeHolder.appendChild( header );
        this.placeHolder.appendChild( container );
        
        var divRight = document.createElement( "div" ); divRight.className = "right";
        container.appendChild( divRight );
    };
    
    this.setSuccessUrl = function (val) {
    	customisationParams.successUrl = encodeURIComponent(val);
    };
    
    this.setSignInTitle = function (val) {
    	customisationParams.signInTitle = encodeURIComponent(val);
    };
    
    this.setSignInLinkText = function (val) {
    	customisationParams.signInLinkText = encodeURIComponent(val);
    };
    
    this.setSignUpTitle = function (val) {
    	customisationParams.signUpTitle = encodeURIComponent(val);
    };
    
    this.setSignUpLinkText = function (val) {
    	customisationParams.signUpLinkText = encodeURIComponent(val);
    };
            
    this._buildPlayUrl = function(baseUrl) {
        var qschar = baseUrl.indexOf("?")>=0 ? "&" : "?";
        return baseUrl += qschar + HOST_ID_QS + "=" + this.hostId;
    };
    
    this._buildPlayDetachedUrl = function(baseUrl) {
        
        return this._buildPlayUrl(baseUrl) 
            + "&" + CURRENT_POSITION_QS + '=0' 
            + '&' + POPPED_QS + '=true';
    };
    
    this._buildProxyIframe = function(baseUrl, detached) {
    	if(baseUrl) {
    		host = this.getDomainFromUrl(baseUrl);
    	}

    	if(_proxyIframe === undefined) {
    		_proxyIframe = document.createElement( "iframe" );
            _proxyIframe.setAttribute( "scrolling", 'no' );
            _proxyIframe.setAttribute( "frameborder", '0' );
            _proxyIframe.setAttribute( "width", '100%' );
            _proxyIframe.setAttribute( "height", '100%' );
            _proxyIframe.setAttribute( "class", 'middle' );
        	_proxyIframe.id = 'syndicatedPlayerProxy';
    	}
    	var src;
    	if(host) {
    		src = host + proxyUrl + this.buildQueryString(baseUrl, detached);

    		if(detached === true) {
    			var detachedProxy = _proxyIframe.cloneNode(false);
    			detachedProxy.src = src;
    			return detachedProxy;
    		}
    		_proxyIframe.src = src;
    		return _proxyIframe;
    	}
    	
    	return _proxyIframe;
    };
    
    this.buildQueryString = function (baseUrl, detached) {
    	var qs = [], qStr = "";
    	
    	for (param in customisationParams) {
    		qs[param] = customisationParams[param];
    	}
    	

		if(detached === true) {
			qs["playUrl"] = encodeURIComponent(this._buildPlayDetachedUrl(baseUrl));
		} else {
			qs["playUrl"] = encodeURIComponent(this._buildPlayUrl(baseUrl));
		}
		
		for (var key in qs) {
			qStr += qs[key] !== "null" ? key + "=" + qs[key] + "&" : "";
		}

    	return qStr !== "" ? "?" + qStr.substring(0, qStr.length-1) : "";
    };
    
    this.getDomainFromUrl = function(url) {
    	var regex = /(http|https)?(:\/\/)?([\w-.:]+)($\/)?/;
    	var match = regex.exec(url);
    	return match ? (match[1] + "://" + match[3]) : false;
    };
    
    this.getDomain = function() {
    	// modified from the domain detection regex found at - will not handle any tld containing more than three characters ie .museum:
    	// http://natelyman.com/index.php?option=com_content&view=article&id=51:regular-expression-to-extract-domain-name-and-tld-from-any-url&catid=34:php&Itemid=64
    	var regex = /^(?:[a-zA-Z]{3,5}\:\/\/)?(?:[a-zA-Z\-0-9]+\.)*?([a-zA-Z\-0-9]+(?:\.[a-zA-Z]{2,3}){1,2})(?:\/|$)/;
    	var tmp_host = host + "/";
    	var match = regex.exec(tmp_host);
    	return match[1];
    };
    
    SPHost.prototype.play = function (baseUrl) {
    	this._buildProxyIframe(baseUrl);
        return false;
    };
    
    SPHost.prototype.playDetached = function (baseUrl) {
    	var proxy = this._buildProxyIframe(baseUrl, true);
        var uniqueWindowName = 'syndicatePlayer'+ Math.floor(Math.random() * 1000000);
		var detachedWindow = window.open( proxy.src, uniqueWindowName, STANDALONE_WINDOW_FEATURES);
		detachedWindow.document.body.style.width = "100%";
		detachedWindow.document.body.style.height = "100%";
		detachedWindow.document.body.style.margin = "0px";
		detachedWindow.document.body.style.padding = "0px";

        return false;
    };   
}
