/* Init */
if (typeof(Popup) == 'undefined') {
    Popup = {};
}
var userAgent = navigator.userAgent.toLowerCase();
var isMSIE = false;//(userAgent.indexOf("msie")!= -1);
var isSafari = (userAgent.indexOf("safari")!= -1);
////////////////////////////////////////////////////////////////////////////
// PLAYER
////////////////////////////////////////////////////////////////////////////

var httpStr = 'https';
var clientInfo;
//document.write("<object classid='clsid:A9FC132B-096D-460B-B7D5-1DB0FAE0C062' height='0' width='0' id='predeliverObj'></object>");
if (isMSIE) {
//	document.write("<object id=player type='application/x-oleobject' classid='clsid:22D6F312-B0F6-11D0-94AB-0080C74C7E95' codebase='"+httpStr+"://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=5,1,52,701' style='display:none'></object>");
//    clientInfo = document.getElementById("predeliverObj").GetSystemInfo();
} else {
//	document.write('<div id="embedPlayerDiv" style="height:0;"></div>');
}
// DOM borrowed from Mochikit DOM
function __escapeHTML(s){
	return s.replace(/&/g, "&amp;")
		.replace(/"/g, "&quot;")
		.replace(/</g, "&lt;")
		.replace(/>/g, "&gt;")
		.replace(/'/g, "&#146;");
};



//Player = function() {
function Player(){
	this.curVolProcent = 4;
	this.trackSite = "/samples/";
	this.currentPlayingSample;
};


Player.prototype.stop = function(){
	if(isMSIE) {
		document.getElementById('player').Stop();
	} else {
		document.getElementById('embedPlayerDiv').innerHTML = '';
	}    
}
Player.prototype = {
    
    "stop": function (data) {
		if(isMSIE) {
			document.getElementById('player').Stop();
		} else {
			document.getElementById('embedPlayerDiv').innerHTML = '';
		}
	},

	"playTrack": function (trackFile) {
		document.getElementById('player').FileName = this.trackSite + trackFile;
/*		if (isMSIE) {

		} else {
			document.getElementById('embedPlayerDiv').innerHTML = "<embed id='embedPlayer' src='" + this.trackSite + trackFile+"' type='application/x-mplayer2' pluginspage='"+httpStr+"://www.microsoft.com/isapi/redir.dll?prd=windows&sbp=mediaplayer&ar=Media&sba=Plugin&' width=0 height=0></embed>";
		}*/
	},

	"playCurrentTrack": function () {
		this.playTrack(this.currentPlayingSample);
	},

	"playTrackInPlayer": function (trackFile, artist, title) {
		this.currentPlayingSample = trackFile;
		this.playTrack(trackFile);
        document.getElementById("playerName").innerHTML = format.name(title, playerNameLength);	
		document.getElementById("playerArtist").innerHTML = format.name(artist, playerArtistLength);
	},
	
	"openPopupPlayer": function(sampleURL){
	   var url = window.location + "";
	   var portalURL;
	   var urlFragments = url.split("/");
	   for(var i=urlFragments.length; i>0;i--){
	       if(urlFragments[i-1] != "" && typeof urlFragments[i-1] !="undefined" && urlFragments[i-1] != "index.html"){ 
	           portalURL = urlFragments[i-1];
                break;
	       }
	   }
	   var new_window = window.open("../player.html?" + portalURL + "&" + sampleURL, null ,"width=400,height=300,scrollbars=0");
	   new_window.focus();
	}

	
};

var player = new Player();
Popup.player = player;


////////////////////////////////////////////////////////////////////////////
// ContentManager
////////////////////////////////////////////////////////////////////////////

var trackPresentation;
var albumPresentation;
var childPresentation;
var videoPresentation;
var moviePresentation;
var listPresentations;
var focusedMoviePresentation;
var focusedTrackPresentation;
var focusedAlbumPresentation;
var focusedVideoPresentation;
var focusedChildPresentation;
var allProducts = new Array();

ContentManager = function() {
    this.DA_ALL_URL = serverName + portalName + "/products.json";
    this.DA_LISTS_URL = serverName + portalName + "/lists.json";
    this.contentContainer = null;
}

ContentManager.prototype = {

	"initialize": function () {
	    var formatter = new Format();
        if(document.getElementById("focused_movie")) {
            focusedMoviePresentation = formatter.presentation(document.getElementById("focused_movie").innerHTML);
            document.getElementById("focused_movie").innerHTML = "";
        }
        if(document.getElementById("focused_track")) {
            focusedTrackPresentation = formatter.presentation(document.getElementById("focused_track").innerHTML);
            document.getElementById("focused_track").innerHTML = "";
        }
        if(document.getElementById("focused_album")) {
	        focusedChildPresentation = formatter.presentation(document.getElementById("focused_children").innerHTML);
	        document.getElementById("focused_children").innerHTML = "theChildrenOfFocus";
             focusedAlbumPresentation = formatter.presentation(document.getElementById("focused_album").innerHTML);
           document.getElementById("focused_album").innerHTML = "";
        }
        if(document.getElementById("focused_video")) {
            focusedVideoPresentation = formatter.presentation(document.getElementById("focused_video").innerHTML);
            document.getElementById("focused_video").innerHTML = "";
        }	    
	    if(document.getElementById("lists") != null){
	       listPresentations = new Array();
	       for(var i=0; i<productLists.length; i++){
	           listPresentations[productLists[i]] = new Array();
	           if(document.getElementById(productLists[i] + "_tracks") != null){
	               listPresentations[productLists[i]]["track"] = formatter.presentation(document.getElementById(productLists[i] + "_tracks").innerHTML);
	               document.getElementById(productLists[i] + "_tracks").innerHTML = "";
	           }
	           if(document.getElementById(productLists[i] + "_children") != null){
	               listPresentations[productLists[i]]["child"] = formatter.presentation(document.getElementById(productLists[i] + "_children").innerHTML);
	               document.getElementById(productLists[i] + "_children").innerHTML = "theChildrenOfTheListAlbum";
	           }
	           if(document.getElementById(productLists[i] + "_albums") != null){
	               listPresentations[productLists[i]]["album"] = formatter.presentation(document.getElementById(productLists[i] + "_albums").innerHTML);
	               document.getElementById(productLists[i] + "_albums").innerHTML = "";
	           }
	           if(document.getElementById(productLists[i] + "_movies") != null){
	               listPresentations[productLists[i]]["movie"] = formatter.presentation(document.getElementById(productLists[i] + "_movies").innerHTML);
	               document.getElementById(productLists[i] + "_movies").innerHTML = "";
	           }
	           if(document.getElementById(productLists[i] + "_videos") != null){
	               listPresentations[productLists[i]]["video"] = formatter.presentation(document.getElementById(productLists[i] + "_videos").innerHTML);
	               document.getElementById(productLists[i] + "_videos").innerHTML = "";
	           }
	       }
	       document.getElementById("lists").style.display = 'none';
	       this.fetchLists();
	    } else {
	       if(document.getElementById("children") != null){
	           childPresentation = formatter.presentation(document.getElementById("children").innerHTML);
	           document.getElementById("children").innerHTML = "theChildrenOfTheAlbum";
	       }
	       if(document.getElementById("albums") != null){
	           albumPresentation = formatter.presentation(document.getElementById("albums").innerHTML);
	           document.getElementById("albums").innerHTML = "";
	       }
	       if(document.getElementById("tracks") != null) {
	           trackPresentation = formatter.presentation(document.getElementById("tracks").innerHTML);
	           document.getElementById("tracks").innerHTML = "";
	       }
	       if(document.getElementById("videos") != null) {
	           videoPresentation = formatter.presentation(document.getElementById("videos").innerHTML);
	           document.getElementById("videos").innerHTML = "";
	       }
	       if(document.getElementById("movies") != null) {
	           moviePresentation = formatter.presentation(document.getElementById("movies").innerHTML);
	           document.getElementById("movies").innerHTML = "";
	       }
	       this.fetchAllProducts();
	   }
	   
	},
	        
    "fetchLists": function () {
		var xhr = new XHR({'method' : 'get',
			'onSuccess' : contentManager.insertListsHTML,
			'onFailure' : contentManager.contentFailed});
		xhr.send(contentManager.DA_LISTS_URL);		
    },
        
    "fetchAllProducts": function () {
		var xhr = new XHR({'method' : 'get',
			'onSuccess' : contentManager.insertAllProductsHTML,
			'onFailure' : contentManager.contentFailed});
		xhr.send(contentManager.DA_ALL_URL);
    },
	
    "contentFailed": function (err) {
	   alert(err);
    },

	"insertAllProductsHTML": function (data) {
	    allProducts = data;
	    var formatter = new Format();
		var finalPresentation = "";
		if(allProducts.length > 0) {
			var singlePresentation;
			for(var i=0;i<allProducts.length;i++){
				if(allProducts[i].entityType == "Track") {
					finalPresentation = finalPresentation + formatter.product(trackPresentation, allProducts[i], "track");
				} else if(allProducts[i].entityType == "MusicCollection") {
				    finalPresentation = finalPresentation + formatter.product(albumPresentation, allProducts[i], "album");
					var childPresentations = "";
					for(var j=0;j<allProducts[i].collectedProducts.length;j++){
					   childPresentations = childPresentations + formatter.product(childPresentation, allProducts[i].collectedProducts[j], "child");
					}
					if(allProducts[i].collectedProducts.length > 0){
					   finalPresentation = finalPresentation.replace("theChildrenOfTheAlbum", childPresentations)
					} else {
					   finalPresentation = finalPresentation.replace("theChildrenOfTheAlbum", "")
					}
				}
			}	
		}
        document.getElementById("products").innerHTML = finalPresentation;
        document.getElementById("products").style.display = 'block';
        document.getElementById("productsLoader").style.display = 'none';
        contentManager.openState();
	},

	"insertListsHTML": function (data) {
		var lists = Json.evaluate(data);
	   for(var k=0; k<lists.length; k++){
	       for(var j=0; j<lists[k].products.length; j++){
	           allProducts[allProducts.length] = lists[k].products[j];
	       }
	   }
	   var formatter = new Format();
	   for(var i=0; i<productLists.length; i++){
	       var list;
	       for(var k=0; k<lists.length; k++){
	       	   if(lists[k].name == productLists[i]){
	               list = lists[k];
	               break;
	           }
	       }

	       if(list != null){
	           var finalPresentation = "";
	           for(var j=0;j<list.products.length;j++){
	               if(list.products[j].entityType == "Track") {
	                   finalPresentation = finalPresentation + formatter.product(listPresentations[productLists[i]]["track"],list.products[j], "track");
	               } else if(list.products[j].entityType == "MusicCollection") {
	                   finalPresentation = finalPresentation + formatter.product(listPresentations[productLists[i]]["album"],list.products[j], "album");
	                   var childPresentations = "";
	                   for(var v=0;v<list.products[j].collectedProducts.length;v++){
	                       childPresentations = childPresentations + formatter.product(listPresentations[productLists[i]]["child"],list.products[j].collectedProducts[v], "child");
	                   }
	                   if(list.products[j].collectedProducts.length > 0){
	                       finalPresentation = finalPresentation.replace("theChildrenOfTheListAlbum", childPresentations)
	                   } else {
	                       finalPresentation = finalPresentation.replace("theChildrenOfTheListAlbum", "")
	                   }
	               } else if(list.products[j].entityType == "Movie") {
	                   finalPresentation = finalPresentation + formatter.product(listPresentations[productLists[i]]["movie"],list.products[j], "movie");
	               } else if(list.products[j].entityType == "MusicVideo") {
	                   finalPresentation = finalPresentation + formatter.product(listPresentations[productLists[i]]["video"],list.products[j], "video");
	               }
	           }
	       }
	       document.getElementById(productLists[i]).innerHTML = finalPresentation;
	   }
	   document.getElementById("lists").style.display = 'block';
	   document.getElementById("productsLoader").style.display = 'none';
	   contentManager.openState();
	},
	
	"openState": function(){
		var query = testUser.length > 0 && testToken.length > 0 ? "action=redownload&user=" + testUser + "&token=" + testToken: window.location.search;
		 if(query.length > 0){
            var actionIndex = query.indexOf("action=");
            if(actionIndex != -1){
                var action = query.substring(actionIndex+7, query.indexOf("&") != -1 ? query.indexOf("&") : query.length);
                if(action == "redownload"){
                    contentManager.forceSecureConnection();
                    var userIndex = query.indexOf("user=");
                    var tokenIndex = query.indexOf("token=");
                    if(userIndex != -1 && tokenIndex != -1){
                        var user = query.substring(userIndex+5, query.length);
                        var token = query.substring(tokenIndex+6, query.length);
                        if(user.indexOf("&") != -1){
                            user = user.substring(0,user.indexOf("&"));
                        } 
                        if(token.indexOf("&") != -1){
                            token = token.substring(0,token.indexOf("&"));
                        }
                        redownload.showAssetChooser(user, token);
                    }
                } else if(action == "payment") {
                    contentManager.forceSecureConnection();
                    cashier.showPayment();
                }
            }
        }	
	},
	
	"focusProduct": function(id){
	   for(var i=0; i<allProducts.length; i++){
	       if(allProducts[i].id == id){
	           document.getElementById("disableShopLayer").style.visibility = 'visible';
	           document.getElementById("disableShopLayer").style.height = (document.documentElement.scrollHeight > document.body.scrollHeight ? document.documentElement.scrollHeight : document.body.scrollHeight) + "px";
	           document.getElementById("disableShopLayer").style.width = document.body.scrollWidth + "px";
	           var entityType = allProducts[i].entityType;
	           if(entityType == "MusicCollection"){
	               var formatter = new Format();
	               var finalPresentation = formatter.product(focusedAlbumPresentation, allProducts[i], "album");
	               var childPresentations = "";
	               for(var j=0;j<allProducts[i].collectedProducts.length;j++){
	                   childPresentations = childPresentations + formatter.product(focusedChildPresentation, allProducts[i].collectedProducts[j], "child");
	               }
	               if(allProducts[i].collectedProducts.length > 0){
	                   finalPresentation = finalPresentation.replace("theChildrenOfFocus", childPresentations)
					} else {
					   finalPresentation = finalPresentation.replace("theChildrenOfFocus", "")
					}
	               document.getElementById("focused_album").innerHTML = finalPresentation;
	               document.getElementById("focused_album").style.display = "block";
	               document.getElementById("focused_album").style.top = 100 + (document.documentElement.scrollTop > document.body.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px";
	           } else if(entityType == "Track"){
	               var formatter = new Format();
	               document.getElementById("focused_track").innerHTML = formatter.product(focusedTrackPresentation,allProducts[i], "track");
	               document.getElementById("focused_track").style.display = "block";
	               document.getElementById("focused_track").style.top = 100 + (document.documentElement.scrollTop > document.body.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px";
	           } else if(entityType == "Movie"){
	               var formatter = new Format();
	               document.getElementById("focused_movie").innerHTML = formatter.product(focusedMoviePresentation,allProducts[i], "movie");
	               document.getElementById("focused_movie").style.display = "block";
	               document.getElementById("focused_movie").style.top = 100 + (document.documentElement.scrollTop > document.body.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px";
	           }
	           break;
	       }
	   }
	},
	
	"unFocusProduct": function(){
        if(document.getElementById("focused_movie")) {
            document.getElementById("focused_movie").style.display = "none";
        }
        if(document.getElementById("focused_track")) {
            document.getElementById("focused_track").style.display = "none";
        }
        if(document.getElementById("focused_album")) {
            document.getElementById("focused_album").style.display = "none";
        }	    
        document.getElementById("disableShopLayer").style.height = "0px";
        document.getElementById("disableShopLayer").style.visibility = 'hidden';
  	},	
	
	"forceSecureConnection": function(){
	   var url = window.location + "";
	   if(development == false && url.indexOf("https") != 0){
	       window.location = "https" + url.substring(4,url.length);
	   }
    }	
}

var contentManager = new ContentManager();

////////////////////////////////////////////////////////////////////////////
// Cart.js
////////////////////////////////////////////////////////////////////////////

var cartStatusPresentation = "";
var itemPresentation = "";
var items = [];

Cart = function() {
    this.DA_ADD_URL = serverName + portalName + "/cart.json?newItem=";
    this.DA_REMOVE_URL = serverName + portalName + "/cart.json";
    this.DA_STATUS_URL = serverName + portalName + "/cart.json";
    this.contentContainer = null;
	this.contentContainerSizes = new Array(cartContentWidth,0,cartContentWidth,cartContentMinHeight); // [startWidth, startHeight, endWidth, endHeight]
	this.animationSteps = 10;
	this.animationRate = 50;
	this.disabledActions = true;
}

Cart.prototype = {
    
    "initialize": function (){
	    itemPresentation = document.getElementById("cartItems").innerHTML;
	    cartStatusPresentation = document.getElementById("cartStatus").innerHTML;
        this.contentContainer = document.getElementById("cartContent");
	    this.status();
    },
    
	"numberOfItems": function () {
		return this.items.length; 
    },
        
	"disableCartActions": function(){
		this.disabledActions = true;
	},

    "totalAmount": function () {
        var amount = Number(0);
		for(var i=0; i<items.length; i++){
			amount = amount + Number(items[i].price);
		}
		return amount;    
    },

    "updateRecieved": function (data) {
        var formatter = new Format();
        items = Json.evaluate(data);
        var newCartStatus = cartStatusPresentation;
        var cartActions;
        var amount = Number(0);
 		for(var i=0; i<items.length; i++){
 			amount = amount + Number(items[i].price);
		}
        newCartStatus = newCartStatus.replace("cart.totalAmount", formatter.price(amount));
        newCartStatus = newCartStatus.replace("cart.itemsCount",  items.length);
        if(items.length == 0 ){
            newCartStatus = newCartStatus.replace("cart.itemLabel",  strItems);
            cartActions =  "<img src=\"" + imgShowCartDisabled + "\" alt=\"\" /><img src=\"" + imgCheckoutDisabled + "\" alt=\"\" />";
            document.getElementById("cartContent").style.visibility = 'hidden'
        } else if(items.length == 1){
            newCartStatus = newCartStatus.replace("cart.itemLabel", strItem);
            cartActions =  "<a href=\"javascript:cart.toggleContentShowing()\"><img src=\"" + imgShowCart + "\" alt=\"\" /></a><a href=\"javascript:cart.buyContent()\"><img src=\"" + imgCheckout + "\" alt=\"\" /></a>";
        } else {
            newCartStatus = newCartStatus.replace("cart.itemLabel",  strItems);
            cartActions =  "<a href=\"javascript:cart.toggleContentShowing()\"><img src=\"" + imgShowCart + "\" alt=\"\" /></a><a href=\"javascript:cart.buyContent()\"><img src=\"" + imgCheckout + "\" /></a>";
        }
        document.getElementById("cartActions").innerHTML = cartActions;
        document.getElementById("cartStatus").innerHTML = newCartStatus;
        document.getElementById("cart").style.display = 'block';        
        var finalPresentation = "";
        if(items.length > 0) {
            var singlePresentation;
            for(var i=0;i<items.length;i++){
                finalPresentation = finalPresentation + formatter.cartItem(itemPresentation, items[i]);
            }
        }
        document.getElementById("cartItems").innerHTML = finalPresentation;
    },
    
    "contentHTML": function (){
        var formatter = new Format();
		var finalPresentation = "";
		if(items.length > 0) {
			var singlePresentation;
			for(var i=0;i<items.length;i++){
        		finalPresentation = finalPresentation + formatter.cartItem(itemPresentation, items[i]);
        	}	
		}
        document.getElementById("cartItems").innerHTML = finalPresentation;
    },

    "updateFailed": function (err) {
		alert(strConnectionFailed + err);		
    },

    "status": function () {
		var xhr = new XHR({'method' : 'get',
			'onSuccess' : this.updateRecieved,
			'onFailure' : this.updateFailed
		});
		xhr.send(cart.DA_STATUS_URL + '?random=' + Math.random()*3);
    },
        
    "add": function (e, node, id) {
        var x = 0;
        if (e.pageX) x = e.pageX;
        else if (e.clientX) x = e.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
        var y = 0;
        if (e.pageY) y = e.pageY;
        else if (e.clientY) y = e.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
        var element = document.getElementById("notification");
		element.style.left = x + 10 + "px";
		element.style.top = y - 12 + "px";
		element.style.display = "block";
		setTimeout("cart.hideNotification()", 2000);
      document.getElementById("cartContent").style.visibility = 'hidden';
		var xhr = new XHR({
			'onSuccess' : this.updateRecieved,
			'onFailure' : this.updateFailed
		}).send(serverName + portalName +"/cart.json", 'newItem=' + id);
    },
    
    "hideNotification": function (){
	   var element = document.getElementById("notification");
	   element.style.display = "none";
    },
	
    "remove": function (id) {
		new XHR({
			'onSuccess' : this.updateRecieved,
			'onFailure' : this.updateFailed			
		}).send(this.DA_REMOVE_URL, 'droppedItem=' + id);
    },
	
	"toggleContentShowing": function () {
        var contentContainer = document.getElementById("cartContent");
		if(	contentContainer.style.visibility == 'visible' ){
			document.getElementById("cartItems").innerHTML = "";
			cart.animateShowingCart(1,this.contentContainerSizes[2],Number(contentContainer.style.height.substring(0,contentContainer.style.height.length - 2)),this.contentContainerSizes[0],this.contentContainerSizes[1]);
		} else {
            contentContainer.style.visibility = 'visible';
			document.getElementById("cartItems").innerHTML = "";
			contentContainer.style.visibility = 'visible';
			cart.animateShowingCart(1,this.contentContainerSizes[0],this.contentContainerSizes[1],this.contentContainerSizes[2],this.contentContainerSizes[3] +             
(items.length*cartContentItemHeight));
		}
	},
	
	"animateShowingCart": function (step, startWidth, startHeight, endWidth, endHeight) {
		if(cart.animationSteps > step) {
			var contentContainer = document.getElementById("cartContent");
			contentContainer.style.width = Math.round((((Number(endWidth) - startWidth) / Number(cart.animationSteps)) * Number(step)) + Number(startWidth)) + "px";
			contentContainer.style.height = Math.round((((Number(endHeight) - startHeight) / Number(cart.animationSteps)) * Number(step)) + Number(startHeight)) + "px";
			step = step + 1;
			setTimeout( "cart.animateShowingCart(" + step + "," + startWidth + "," + startHeight + "," + endWidth + "," + endHeight + ")", cart.animationRate);
        } else {
			var contentContainer = document.getElementById("cartContent");
			contentContainer.style.width  = endWidth + "px";
            contentContainer.style.height  = endHeight + "px";
			if(	endHeight > 0) {
				cart.contentHTML();
			} else {
				contentContainer.style.visibility = 'hidden';
			}
		}
	},
	
	"buyContent": function(){
	   var url = window.location + "";
	   if(development){
	   	   cashier.showPayment();
	   } else {
	       window.location = (url.indexOf("https") == -1 ? "https" + url.substring(4,url.length) : url ) + "?action=payment";
	   }
    }
}

var cart = new Cart();

////////////////////////////////////////////////////////////////////////////
// Cashier
////////////////////////////////////////////////////////////////////////////
var fees = [];
var paymentMethods = new Array();
var totalCredit = 0;
var basePrice = 0;
var _invoiceHTML = "_";
var encodedAssetPresentation;
var receiptPresentation;
var lineItemPresentation;
var usedGiftCertificatePresentation;

//Cashier = function(){
function Cashier(){
    this.PAYMENTMETHODS_URL = serverName + portalName + "/paymentMethods.json";
    this.ADD_PAYMENTMETHOD_URL = serverName + portalName + "/paymentCertificates.json";
    this.INVOICE_URL = serverName + portalName + "/invoice.json?user=";
    this.ASSET_URL = serverName + portalName + "/assets.json";
    this.ZIP_URL = serverName + portalName + "/zipper.json"
}

Cashier.prototype = {

    "initialize": function(){
        var formatter = new Format();
        this.encodedAssetPresentation = formatter.presentation(document.getElementById("encodedAssets").innerHTML);
		encodedAssetPresentation = this.encodedAssetPresentation;
        lineItemPresentation = formatter.presentation(document.getElementById("lineItems").innerHTML);
        document.getElementById("lineItems").innerHTML = "lineItemsOfTheReceipt";
        if(document.getElementById("giftCertificatesIsUsed") != null){
            usedGiftCertificatePresentation = formatter.presentation(document.getElementById("usedGiftcertificates").innerHTML);
            document.getElementById("usedGiftcertificates").innerHTML = "usedGiftcertificatesOfTheReceipt";
        }
        receiptPresentation = formatter.presentation(document.getElementById("receiptWrapper").innerHTML);        
    },    
    
    "showPayment": function(){
        this.errorClear();
		cashier.getPaymentMethods();
        document.getElementById("disableShopLayer").style.visibility = 'visible';
        document.getElementById("disableShopLayer").style.height = (document.documentElement.scrollHeight > document.body.scrollHeight ? document.documentElement.scrollHeight : document.body.scrollHeight) + "px";
        document.getElementById("disableShopLayer").style.width = document.body.scrollWidth + "px";        
        document.getElementById("checkoutWrapper").style.visibility = 'visible';
        document.getElementById("payment").style.display = "block";
        document.getElementById("download").style.display = "none";
        document.getElementById("assetChooser").style.display = "none";
        if(cart.totalAmount() == 0){
            setTimeout("cashier.showPayment()", 500);
        } else {
            basePrice = cart.totalAmount();        
            document.getElementById("invoiceCartTotal").innerHTML = format.price(basePrice);
            this.setFeeUserInfo(0);
        }
	},
    
    "changePaymentForm" : function(code){
        this.errorClear();
        document.getElementById("CreditCardPayment").style.display = "";
        document.getElementById("NetBankingPayment").style.display = "";
        document.getElementById("CertificatePayment").style.display = "";
        if(code == -1){
            document.getElementById("paymentSwitcher").selectedIndex = 0;
            this.setFeeUserInfo(0);
        } else {        
            for(var i=0;i<paymentMethods.length;i++){
                if(code == paymentMethods[i][0]){
                    document.getElementById(paymentMethods[i][1]).style.display = "block";
                }
            }
            this.setFeeUserInfo(code);
        }
    },
    
	"getPaymentMethods": function () {
		cashier.loading(true);
		new XHR({'method' : 'get',
			'onSuccess' : this.paymentMethodsReceived,
			'onFailure' : this.paymentMethodsReceivingFailed
		}).send(this.PAYMENTMETHODS_URL);
    },
    
	"paymentMethodsReceived": function(data){
		methods = Json.evaluate(data);
        cashier.errorClear();
        var _creditcards = new Array();
        var _webPayments = new Array();
        var _netbanks = new Array();
        var _certificates = new Array();
        var possibleCreditcards = new Array("DK","V-DK", "VISA", "VISA(SE)", "MC", "JCB", "ELEC", "DIN(DK)", "MTRO(DK)", "MC(DK)", "MC(SE)", "AMEX");
        var possibleNetbanks = new Array("SOLO","DNB","BG");
        var possiblePaymentServices = new Array("ew");
        var possibleCertificates = new Array("PFGC");

        fees = new Array(methods.length);
        for(var i=0;i<methods.length;i++){
            fees[i] = new Array(5);
            fees[i]['minimum'] = methods[i].feeMinimum;
            fees[i]['percent'] = methods[i].feePercent;
            fees[i]['fee'] = methods[i].fee;
            fees[i]['code'] = methods[i].code;
            for(var j=0; j<possibleCreditcards.length; j++){
                if(possibleCreditcards[j] == methods[i].code){
                    paymentMethods[paymentMethods.length] = new Array(methods[i].code, "CreditCardPayment");
                    _creditcards[_creditcards.length] = methods[i];
                }
            }
            for(var k=0; k<possibleNetbanks.length; k++){
                if(possibleNetbanks[k] == methods[i].code){
                    paymentMethods[paymentMethods.length] = new Array(methods[i].code, "NetBankingPayment");
                    _netbanks[_netbanks.length] = methods[i];
                }
            }
            for(var v=0; v<possiblePaymentServices.length; v++){
                if(possiblePaymentServices[v] == methods[i].code){
                    paymentMethods[paymentMethods.length] = new Array(methods[i].code, "NetBankingPayment");
                    _webPayments[_webPayments.length] = methods[i];
                }
            }
            for(var v=0; v<possibleCertificates.length; v++){
                if(possibleCertificates[v] == methods[i].code){
                    paymentMethods[paymentMethods.length] = new Array(methods[i].code, "CertificatePayment");
                    _certificates[_certificates.length] = methods[i];
               }
            }
        }        
        var select = document.getElementById("paymentSwitcher");
        var formatter = new Format();
        var optionIndex = 2;
        select.options[0] = new Option(strChoosePayment, -1);        
        select.options[1] = new Option("", -1);
        
        if(_certificates.length > 0) {
            var certififactRowInInvoice = document.getElementById("invoiceCertificateRow");
            if(certififactRowInInvoice != null){
                certififactRowInInvoice.style.display = "block";
            }
            select.options[optionIndex] = new Option("----- " + strGiftCertificates + " -----", -1);
            optionIndex++;
            for(var w=0; w<_certificates.length; w++){
                select.options[optionIndex] = new Option(strGiftCertificate + " (+ " + formatter.price(cashier.calculateFee(_certificates[w].code)) + " " + strCurrency + ")", _certificates[w].code);
                optionIndex++;
            }
            select.options[optionIndex] = new Option("", -1);
            optionIndex++;            
        } else {
            document.getElementById("invoiceCertificateRow").style.display = "none";
        }
        
        if(_creditcards.length > 0) {
            select.options[optionIndex] = new Option("----- " + strCreditcards + " -----", -1);
            optionIndex++;
            for(var q=0; q<_creditcards.length; q++){
                select.options[optionIndex] = new Option(_creditcards[q].name + " (+ " + formatter.price(cashier.calculateFee(_creditcards[q].code)) + " " + strCurrency + ")", _creditcards[q].code);
                optionIndex++;
            }
            
            select.options[optionIndex] = new Option("", -1);
            optionIndex++;            
        }
        if(_netbanks.length > 0) {
            select.options[optionIndex] = new Option("----- " + strNetbanks + " -----", -1);
            optionIndex++;
            for(var p=0; p<_netbanks.length; p++){
                select.options[optionIndex] = new Option(_netbanks[p].name + " (+ " + formatter.price(cashier.calculateFee(_netbanks[p].code)) + " " + strCurrency + ")", _netbanks[p].code);
                optionIndex++;
            }
            select.options[optionIndex] = new Option("", -1);
            optionIndex++;            
        }
        if(_webPayments.length > 0) {
            select.options[optionIndex] = new Option("----- " + strWebpayments + " -----", -1);
            optionIndex++;
            for(var m=0; m<_webPayments.length; m++){
                select.options[optionIndex] = new Option(_webPayments[m].name + " (+ " + formatter.price(cashier.calculateFee(_webPayments[m].code)) + " " + strCurrency + ")", _webPayments[m].code);
                optionIndex++;
            }
        }
        cashier.loading(false);
    },
    
    "paymentMethodsReceivingFailed": function(err){
        cashier.loading(false);
        cashier.errorOccured(strConnectionFailed);
    },
            
    "setFeeUserInfo": function (code){
        var element = document.getElementById("invoiceFee");
        var total = document.getElementById("invoiceTotal");
        var newFee = Number(0);
        if(code != 0) {
            newFee = this.calculateFee(code);
            element.innerHTML = format.price(newFee);
            total.innerHTML = format.price(this.calculateTotal(newFee));
        } else {
            element.innerHTML = format.price(newFee);
            total.innerHTML = format.price(this.calculateTotal(newFee));
        }
        if(totalCredit > 0) {
            document.getElementById("giftCertificateLabel").innerHTML = strGiftCertificates + " (" + strCurrency + " " + format.price(totalCredit) + ")";
            if(this.calculateTotal(newFee) == 0){
                document.getElementById("certificateDrawn").innerHTML = "-" + format.price(this.calculateTotalBuy(newFee));
            } else {
                document.getElementById("certificateDrawn").innerHTML = "-" + format.price(totalCredit);
            }
        }
        
    },
    
    "calculateFee": function (code){
        for(var i=0; i<fees.length; i++){
            feeObject = fees[i];
            if(feeObject['code'] == code){
                percent = new Number(feeObject['percent']);
                minimumFee = new Number(feeObject['minimum']);
                aFee =  new Number (feeObject['fee']);	
                rfee = Math.round(new Number(basePrice) * (percent/100) + aFee);
                if(minimumFee > rfee){
                    rfee = minimumFee;
                }
                return rfee;
            }
        }
    },
    
    "calculateTotal": function (newFee){
        var price = newFee + basePrice;
        return price - totalCredit < 0 ? 0 : price - totalCredit;
    },
    
    "calculateTotalBuy": function (newFee){
        return newFee + basePrice;
    },

    "addCertificate": function(){
        if(cashier.isLoading() == false) {
            this.errorClear();
            var certificateCode = document.getElementById("certificateCode").value;
            if(certificateCode == ""){
                this.errorOccured(strMissingCertificateCode);
            } else {
                var param = "paymentMethod=PFGC&cardNumber=" + certificateCode;
                this.addPaymentMethod(param);
            }
        }
    },
                
    "acceptPayment": function(){
        if(cashier.isLoading() == false){
            this.errorClear();
            var paymentMethod = document.getElementById("paymentSwitcher").options[document.getElementById("paymentSwitcher").selectedIndex].value;
            var cardNumber = document.getElementById("cardNumber").value;
            var cvc = document.getElementById("cvc").value;
            var expireMonth = document.getElementById("expireMonth").value;
            var expireYear = document.getElementById("expireYear").value;
            if(totalCredit != -1 && totalCredit < cart.totalAmount()){
                if(paymentMethod == -1){
                    this.errorOccured(strMissingPaymentMethod);
                } else if(cardNumber == ""){
                    this.errorOccured(strMissingCardNumber);
                } else if(cvc == ""){
                    this.errorOccured(strMissingCVC);
                } else if(expireMonth == ""){
                    this.errorOccured(strMissingExpireMonth);
                } else if(expireYear == ""){
                    this.errorOccured(strMissingExpireYear);
                } else {    
                    var param = "paymentMethod=" + paymentMethod + "&cardNumber=" + cardNumber + "&expireMonth=" + expireMonth + "&expireYear=" + expireYear + "&cvc=" + cvc;
                    this.addPaymentMethod(param);
                }
            } else {
                this.getInvoice();
            }
        }
    },
                           
	"errorClear": function(){
	   document.getElementById("paymentError").style.display = "none";
	},
	
	"errorOccured": function(err) {
	   document.getElementById("paymentError").innerHTML = err;
	   document.getElementById("paymentError").style.display = "block";
	   cashier.loading(false);
	},
	
	"openInvoiceWindow": function(){
	   var str = "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\"><html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"><title>PopUpShop</title><link rel=\"stylesheet\" href=\"screen.css\"></head><body><div id=\"receiptWrapper\">" + _invoiceHTML + "</div></body></html>";
	   var new_window = window.open(null,"PopUpShop","width=500,height=500,scrollbars=1");
	   new_window.document.write(str);
	   new_window.document.close();
	   new_window.focus();
	},
	
	"openTermsWindow": function(){
	   var url = window.location + "";
	   var portalURL;
	   var urlFragments = url.split("/");
	   for(var i=urlFragments.length; i>0;i--){
	       if(urlFragments[i-1] != "" && typeof urlFragments[i-1] !="undefined" && urlFragments[i-1].indexOf("index.html") == -1){ 
	           portalURL = urlFragments[i-1];
                break;
	       }
	   }
	   var new_window = window.open("../terms." + language + ".html?" + portalURL, null ,"width=500,height=500,scrollbars=1");
	   new_window.focus();
	},
	
	"openHelpWindow": function(){
	   var url = window.location + "";
	   var portalURL;
	   var urlFragments = url.split("/");
	   for(var i=urlFragments.length; i>0;i--){
	       if(urlFragments[i-1] != "" && typeof urlFragments[i-1] !="undefined" && urlFragments[i-1].indexOf("index.html") == -1){ 
	           portalURL = urlFragments[i-1];
                break;
	       }
	   }
	   var new_window = window.open("../help." + language + ".html?" + portalURL, null,"width=500,height=500,scrollbars=1");
	   new_window.focus();
	},
    
    "close": function(){
        this.errorClear();
        //cart.status();
        document.getElementById("disableShopLayer").style.height = "0px";
        document.getElementById("disableShopLayer").style.visibility = 'hidden';
        document.getElementById("checkoutWrapper").style.visibility = 'hidden';
        document.getElementById("payment").style.display = "none";
        document.getElementById("download").style.display = "none";
        document.getElementById("assetChooser").style.display = "none";
        var url = window.location + "";
        url = url.substring(url.indexOf("://"), url.length);
        window.location = "http" + (url.indexOf("?") != -1 ? url.substring(0,url.indexOf("?")) : url );
        //window.location = (url.indexOf("https") != -1 ? "http" + url.substring(5,url.length) : url ) + "?action=payment";
    },
    
    "loading": function(value){
        if(value == true) {
            document.getElementById("loading").style.display = "block";
            document.getElementById("close").style.display = "none";
        } else {
            document.getElementById("loading").style.display = "none";
            document.getElementById("close").style.display = "block";        
        }
    },
    
    "isLoading": function() {
        if(document.getElementById("loading").style.display == "block") {
            return true;
        } else {
            return false;
        }    
    }
        
}

Cashier.prototype.addPaymentMethod = function (param){
	var self = this;
   self.loading(true);
	new XHR({
		'onSuccess' : function(data){
			data = Json.evaluate(data);
        self.errorClear();
        totalCredit = 0;
        var stopLoading = true;
        for(var i=0;i<data.length;i++){
            if(data[i].credit == -1){
					self.getInvoice();
					stopLoading = false;
             }else{
					totalCredit = totalCredit + data[i].credit;
					cashier.setFeeUserInfo("PFGC");
					document.getElementById("loading").style.display = "";
					if(document.getElementById("invoiceTotal").innerHTML == "0.00"){
						document.getElementById("certificateCode").disabled = true;
						document.getElementById("paymentSwitcher").disabled = true;
					} else {
						document.getElementById("certificateCode").disabled = false;
						document.getElementById("paymentSwitcher").disabled = false;                
					}
				}
			}
        	if(stopLoading == true){
				self.setLoading(false);
			}
    	},
		'onFailure' : function(er){
			self.errorOccured(strPaymentVerificationFailed);
			self.setLoading(false);
		}    	
	}).send(this.ADD_PAYMENTMETHOD_URL, param);	
},


Cashier.prototype.getAssets = function(criteria){
	this.setLoading(true);
   var self = this;
	new XHR({'method' : 'get',
		'onSuccess' : function(encodedAssets){
			encodedAssets = Json.evaluate(encodedAssets);
			if(encodedAssets.status == "running") {
				self.getAssets(criteria);
			}else{
				self.errorClear();
				self.setLoading(false);
				document.getElementById("loading").style.display = "none";
				document.getElementById("payment").style.display = "none";
				document.getElementById("assetChooser").style.display = "none";
				var _formatter = new Format();
				var finalPresentation = "";
				if(encodedAssets.length > 0) {
					for(var i=0;i<encodedAssets.length;i++){
						finalPresentation = finalPresentation + _formatter.encodedAsset(self.encodedAssetPresentation, encodedAssets[i]);
					}
				}
				document.getElementById("encodedAssets").innerHTML = finalPresentation;  
				document.getElementById("receipt").style.display = "block";
				document.getElementById("download").style.display = "block";
				document.getElementById("disableShopLayer").style.height = document.body.scrollHeight + "px"
				document.getElementById("disableShopLayer").style.width = document.body.scrollWidth + "px";        
			}
		},
		'onFailure' : function(){
          self.errorOccured("Error: "+strDibsOrEncodingError);
          alert("Something went wrong, please try again later.");
      }		
	}).send(cashier.ASSET_URL + "?criteria=" + criteria);
},

Cashier.prototype.getInvoice = function(){
    var email = document.getElementById("login").value;
    var email2 = document.getElementById("repeatedLogin").value;
    var terms = document.getElementById("isTermsAccepted").checked ? "yes" : "no";
    if( email == null || email == "" || email != email2 ){
        cashier.errorOccured(strEmailsDontMatch);
    } else if(terms != "yes"){
        cashier.errorOccured(strTermsNotAccepted);
    } else {
        cashier.setLoading(true);
        this._callInvoice(email, language);
    }
}
Cashier.prototype._callInvoice = function(email, language){
	var self = this;
	new XHR({'method' : 'get',
		'onSuccess' : function(data){
			data = Json.evaluate(data);
          if(data.status == "running"){
              self._callInvoice(email, language);
          }else{
              self.errorClear();
              var formatter = new Format();
              var finalPresentation = receiptPresentation;
              finalPresentation = finalPresentation.replace("order.orderIdentifier", data.orderIdentifier);
              finalPresentation = finalPresentation.replace("order.transactionIdentifier", data.transactionIdentifier);
              finalPresentation = finalPresentation.replace("order.email", data.user);
              finalPresentation = finalPresentation.replace("order.date", data.date);
              finalPresentation = finalPresentation.replace("order.totalFee", formatter.price(data.totalFee));
              finalPresentation = finalPresentation.replace("order.totalAmount", formatter.price(data.totalAmount));
              finalPresentation = finalPresentation.replace("order.totalPaid", formatter.price(data.totalPaid));
              finalPresentation = finalPresentation.replace("order.giftCertificateAmount", formatter.price(data.giftCertificateAmount));  
              finalPresentation = finalPresentation.replace("order.currency", data.currency);
              finalPresentation = finalPresentation.replace("order.currency", data.currency);
              finalPresentation = finalPresentation.replace("order.currency", data.currency);
              finalPresentation = finalPresentation.replace("order.currency", data.currency);
              finalPresentation = finalPresentation.replace("order.currency", data.currency);
              if(data.giftCertificateAmount == 0 || data.giftCertificateAmount == "0"){
                  var startIndex = finalPresentation.indexOf("subTotalRow") - 8;
                  var endIndex = finalPresentation.indexOf("totalRow") - 8;
                  finalPresentation = finalPresentation.substring(0,startIndex) + finalPresentation.substring(endIndex,finalPresentation.length);
              }
              var lineItemsPresentations = "";
              for(var j=0;j<data.lineItems.length;j++){
                  lineItemsPresentations = lineItemsPresentations + formatter.lineItem(lineItemPresentation,data.lineItems[j]);
              } 
              finalPresentation = finalPresentation.replace("lineItemsOfTheReceipt", lineItemsPresentations);
		        if(document.getElementById("giftCertificatesIsUsed") != null){
		            if(data.giftCertificatesUsed.length > 0){
                      var usedGiftcertifiactesPresentations = "";
                      for(var j=0;j<data.giftCertificatesUsed.length;j++){
                          usedGiftcertifiactesPresentations = usedGiftcertifiactesPresentations + formatter.usedGiftCertificate(usedGiftCertificatePresentation,data.giftCertificatesUsed[j]);
		                }
		                finalPresentation = finalPresentation.replace("usedGiftcertificatesOfTheReceipt", usedGiftcertifiactesPresentations);
		            } else {
		                finalPresentation = finalPresentation.replace(formatter.presentation(document.getElementById("giftCertificatesIsUsed").innerHTML), ""); 
		            }
		        }
              _invoiceHTML = finalPresentation;
	            self.getAssets("recent");
          }
      },
		'onFailure' : function(error){
			self.errorOccured("Error: "+strDibsOrEncodingError);
		}
	}).send(cashier.INVOICE_URL + email + "&language=" + language);
}
Cashier.prototype.setLoading = function(value){
    if(value == true) {
        document.getElementById("loading").style.display = "block";
        document.getElementById("close").style.display = "none";
    } else {
        document.getElementById("loading").style.display = "none";
        document.getElementById("close").style.display = "block";        
    }
}

Cashier.prototype.orderZip = function(){
   document.getElementById("zipButton").innerHTML = "<img src=\"" + imgZip_waiting + "\" alt=\"\" />";
   var self = this;
   self.setLoading(true);
	new XHR({
		'onSuccess' : function (data){
			zipper = Json.evaluate(data);
	      if(zipper.status == "running"){        
				var f = function(){self.orderZip();}
				f.delay(2, self);
	      }else{
				self.errorClear();
				document.getElementById('zipButton').innerHTML = '<a href="' + zipper.url + '"><img src="' + imgZip_download + '" alt="" /></a>';
				self.setLoading(false);
	       }
	   },    
		'onFailure' : function (err){
			alert("Sorry zipping failed"+err);
			self.setLoading(false);
			document.getElementById("zipButton").innerHTML = "<img src=\"" + imgZip_failed + "\" alt=\"\" />";
		}	
	}).send(this.ZIP_URL, '');
}
   
var cashier = new Cashier();
Popup.cashier = cashier;
/////////////////////////////////////////////////////////////////
// REDOWNLOAD
/////////////////////////////////////////////////////////////////

var choosenAssets = [];
var redownload_user;
var redownload_token;
var assetPresentation;// get rid of this

Redownload = function(){
    this.ORDER_INVITE_URL = serverName + portalName + "/invitation.json";
    this.ALL_ASSETS_URL = serverName + portalName + "/assets.json";
    this.ENCODE_ASSETS_URL = serverName + portalName + "/assets.json";
    this.LOG_IND_URL = serverName + portalName + "/user.json";
}

Redownload.prototype = {

    "initialize": function(){
        this.assetPresentation = document.getElementById("assets").innerHTML;// todo maybe not needed
        assetPresentation = document.getElementById("assets").innerHTML;// todo maybe not needed			
    },

	"showOrderingForm": function() {
	   if(document.getElementById("orderRedownload").style.visibility != 'visible') {
	       document.getElementById("orderRedownload").style.visibility = 'visible';
	   } else {
	       document.getElementById("orderRedownload").style.visibility = 'hidden';	   
	       document.getElementById("orderRedownloadConfirm").style.display = "none";
	       document.getElementById("orderRedownloadError").style.display = "none";
	   }
	},
	
	"closeOrderingForm": function(){
	   if(document.getElementById("orderRedownload").style.visibility != 'visible') {
	       document.getElementById("orderRedownload").style.visibility = 'visible';
	   } else {
	       document.getElementById("orderRedownload").style.visibility = 'hidden';	   
	       document.getElementById("orderRedownloadConfirm").style.display = "none";
	       document.getElementById("orderRedownloadError").style.display = "none";
	   }
	},
	
	"order": function() {
	   var email = document.getElementById("redownloadEmail").value;
	   if(email == "" || email == strOrderRedownloadValue) {
	       document.getElementById("orderRedownloadError").innerHTML = strMissingEmail;	   
	       document.getElementById("orderRedownloadError").style.display = "block";	   
	   } else {
	       document.getElementById("orderRedownloadError").innerHTML = "";	   
	       document.getElementById("orderRedownloadError").style.display = "none";
		   var url = window.location.href;
			new XHR({'method' : 'get',
				'onSuccess' : redownload.invitationSent,
				'onFailure' : redownload.invitationFailed
			}).send(redownload.ORDER_INVITE_URL + "?user=" + email + "&shopPath=" + url + "&language=" + language);
			// TODO should be post
	   }
	},
	
	"invitationSent": function(){
        document.getElementById("orderRedownloadConfirm").style.display = "block";
        document.getElementById("orderRedownloadError").style.display = "none";	   	
        document.getElementById("orderRedownloadConfirm").innerHTML = strInvitationSent;	   
	},
	
    "invitationFailed": function(err){
        document.getElementById("orderRedownloadError").style.display = "block";	   	
        document.getElementById("orderRedownloadConfirm").style.display = "none";
        document.getElementById("orderRedownloadError").innerHTML = strInvitationNotSent;	   
	},
	
    "showAssetChooser": function(user, token){
        if(user != null && token != null){
            document.getElementById("disableShopLayer").style.visibility = 'visible';         
            document.getElementById("disableShopLayer").style.height = (document.documentElement.scrollHeight > document.body.scrollHeight ? document.documentElement.scrollHeight : document.body.scrollHeight) + "px";
            document.getElementById("disableShopLayer").style.width = document.body.scrollWidth + "px";        
            document.getElementById("checkoutWrapper").style.visibility = 'visible';
            document.getElementById("payment").style.display = "none";
            document.getElementById("download").style.display = "none";
            document.getElementById("assetChooser").style.display = "none";
            cashier.loading(true);
				new XHR({'method' : 'get',
					'onSuccess' : this.loggedIn,
					'onFailure' : this.logindFailed
				}).send(this.LOG_IND_URL + "?user=" + user + "&token=" + token);
        }
	},
	
	"loggedIn": function (user) {
		var self = this;
		new XHR({'method' : 'get',
			'onSuccess' : function(data){
				var assets = Json.evaluate(data);
     			cashier.loading(false);
     			cashier.errorClear();
     			var _formatter = new Format();
     			var finalPresentation = "";
     			if(assets.length > 0) {
         		for(var i=0;i<assets.length;i++){						
             		finalPresentation = finalPresentation + _formatter.asset(assetPresentation, assets[i]);
         		}
     			}
     			document.getElementById("assets").innerHTML = finalPresentation;
     			document.getElementById("assetChooser").style.display = "block";  	
     			document.getElementById("loading").style.display = "";  	
     			document.getElementById("disableShopLayer").style.height = document.body.scrollHeight + "px"
     			document.getElementById("disableShopLayer").style.width = document.body.scrollWidth + "px";        
			},				
			'onFailure' : redownload.logindFailed
		}).send(redownload.ALL_ASSETS_URL + "?criteria=any");
	},
	
	"logindFailed": function (err) {
	   cashier.loading(false);
        cashier.errorOccured(strLogindFailed);
	},
	
	"assetsRecieved": function (assets){
		assets = Json.evaluate(assets);
        cashier.loading(false);
        cashier.errorClear();
        var _formatter = new Format();
        var finalPresentation = "";
        if(assets.length > 0) {
            var singlePresentation;
            for(var i=0;i<assets.length;i++){
                /*
                if(typeof encodedAssets[i].license != 'undefined'){        
                    document.getElementById("predeliverObj").storeLicense("'" + encodedAssets[i].license + "'");
                }
                */
					alert("Recieved");
                finalPresentation = finalPresentation + _formatter.asset(assetPresentation, assets[i]);
            }
        }
        document.getElementById("assets").innerHTML = finalPresentation;
        document.getElementById("assetChooser").style.display = "block";  	
        document.getElementById("loading").style.display = "";  	
        document.getElementById("disableShopLayer").style.height = document.body.scrollHeight + "px"
        document.getElementById("disableShopLayer").style.width = document.body.scrollWidth + "px";        
	},
	
	"assetsFailed": function (err) {
	   cashier.errorOccured(strConnection);
	},
	
	"chooseAsset": function(node, assetID) {
	   var found = false;
	   for(var i=0; i<choosenAssets.length; i++){
	       if(choosenAssets[i] == assetID) {
	           for(var k=i; k<choosenAssets.length-1; k++){
	               choosenAssets[k] = choosenAssets[k++];	           
	           }
	           found = true;
	           choosenAssets[choosenAssets.length-1] = null;
	           node.innerHTML = "<img src=\"" + imgSelectAsset + "\" alt=\"\" />";
	           break;
	       }
	   }
	   if(!found){
	       choosenAssets[choosenAssets.length] = assetID;
	       node.innerHTML = "<img src=\"" + imgDeselectAsset + "\" alt=\"\" />";
	   }
	},
	
	"encode": function(){
	   if(cashier.isLoading() == false) {
            var param = "?";
            for(var i=0; i<choosenAssets.length; i++){
                param = param + "criteria=" + choosenAssets[i] + "&";
            }
            cashier.loading(true);
				new XHR({'method' : 'get',
					'onSuccess' : function(data){
						var encodedAssets = Json.evaluate(data);
			        	if(encodedAssets.status == "running") {
			            	setTimeout("redownload.checkingForEncodingStatus()",3000);
			        	} else {
							cashier.errorClear();
			            cashier.loading(false);
			            document.getElementById("loading").style.display = "none";
			            document.getElementById("payment").style.display = "none";
			            document.getElementById("assetChooser").style.display = "none";
			            var _formatter = new Format();
			            var finalPresentation = "";
			            if(encodedAssets.length > 0) {
			                for(var i=0;i<encodedAssets.length;i++){
									var locEncodedAssetPresentation = encodedAssetPresentation;
									finalPresentation = finalPresentation + _formatter.encodedAsset(locEncodedAssetPresentation, encodedAssets[i]);
			        	   	}
			            }	
			            document.getElementById("encodedAssets").innerHTML = finalPresentation;  
			            document.getElementById("download").style.display = "block";
			            document.getElementById("receipt").style.display = "none";
			            document.getElementById("disableShopLayer").style.height = document.body.scrollHeight + "px"
			            document.getElementById("disableShopLayer").style.width = document.body.scrollWidth + "px";
			            window.document.body.scrollTop = 0;
					    window.document.documentElement.scrollTop = 0;
					}
			    },					
					'onFailure' : cashier.assetsFailed
				}).send(redownload.ENCODE_ASSETS_URL + param.substring(0,param.length - 1));
            window.document.body.scrollTop = 0;
		    window.document.documentElement.scrollTop = 0;
        }
	}
}

Redownload.prototype.checkingForEncodingStatus = function(){
	cashier.loading(true);// ??
	var self = this;
	new Json.Remote(cashier.ASSET_URL + "?criteria=checking", {'method' : 'get',
		'onComplete' : function(encodedAssets){
			if(encodedAssets.status == "running") {
				var f = function(){self.checkingForEncodingStatus();}
				f.delay(2, self);
			}else{
//				cashier.errorClear();
				cashier.loading(false);
				document.getElementById("loading").style.display = "none";
				document.getElementById("payment").style.display = "none";
				document.getElementById("assetChooser").style.display = "none";
				var _formatter = new Format();
				var finalPresentation = "";
				if(encodedAssets.length > 0) {
					for(var i=0;i<encodedAssets.length;i++){
						finalPresentation = finalPresentation + _formatter.encodedAsset(encodedAssetPresentation, encodedAssets[i]);
        	   	}
				}	
				document.getElementById("encodedAssets").innerHTML = finalPresentation;  
				document.getElementById("download").style.display = "block";
				document.getElementById("receipt").style.display = "none";
				document.getElementById("disableShopLayer").style.height = document.body.scrollHeight + "px"
				document.getElementById("disableShopLayer").style.width = document.body.scrollWidth + "px";
				window.document.body.scrollTop = 0;
				window.document.documentElement.scrollTop = 0;
			}
		},
		'onFailure' :	function (err) {
			alert("Sorry an error occured!" +err)
//	   	cashier.errorOccured(strConnection);
		}
	}).send();//cashier.ASSET_URL + "?criteria=checking");
}

var redownload = new Redownload();

/////////////////////////////////////////////////////////////////
// UTILITY
/////////////////////////////////////////////////////////////////

CardUtility = function(){
    this.formChain = new Array();
}

function switchField(e) {
    cardUtility.switchField(e);
}

CardUtility.prototype = {
    
        "initialize": function() {
            this.formChain[0] = new Array(document.getElementById("cardNumber1"), 4, null, document.getElementById("cardNumber2"), "");
            this.formChain[1] = new Array(document.getElementById("cardNumber2"), 4, document.getElementById("cardNumber1"), document.getElementById("cardNumber3"), "");
            this.formChain[2] = new Array(document.getElementById("cardNumber3"), 4, document.getElementById("cardNumber2"), document.getElementById("cardNumber4"), "");
            this.formChain[3] = new Array(document.getElementById("cardNumber4"), 4, document.getElementById("cardNumber3"), document.getElementById("expireMonth"), "");
            this.formChain[4] = new Array(document.getElementById("expireMonth"), 2, document.getElementById("cardNumber4"), document.getElementById("expireYear"), "");
            this.formChain[5] = new Array(document.getElementById("expireYear"), 2, document.getElementById("expireMonth"), document.getElementById("cvc"), "");
            this.formChain[6] = new Array(document.getElementById("cvc"), 4, document.getElementById("expireYear"), null, "");
         	document.getElementById("cardNumber1").onkeyup = switchField;
            document.getElementById("cardNumber2").onkeyup = switchField;
            document.getElementById("cardNumber3").onkeyup = switchField;
            document.getElementById("cardNumber4").onkeyup = switchField;
            document.getElementById("expireMonth").onkeyup = switchField;
            document.getElementById("expireYear").onkeyup = switchField;
            document.getElementById("cvc").onkeyup = switchField;
        },
        
        "setCardNumber": function (fullNumber) {
            if(fullNumber != "") {
				if(fullNumber.length > 4) {
					document.getElementById("cardNumber1").value = fullNumber.substring(0,4);
					if(fullNumber.length > 8) {
						document.getElementById("cardNumber2").value = fullNumber.substring(4,8);
						if(fullNumber.length > 12) {
							document.getElementById("cardNumber3").value = fullNumber.substring(8,12);
							if(fullNumber.length > 12) {
								document.getElementById("cardNumber4").value = fullNumber.substring(12,fullNumber.length);
							}
						} else {
							document.getElementById("cardNumber3").value = fullNumber.substring(8,fullNumber.length);
						}
					} else {
						document.getElementById("cardNumber2").value = fullNumber.substring(4,fullNumber.length);
					}
				} else {
					document.getElementById("cardNumber1").value = fullNumber;
				}
			}
        },

        "switchField": function(e){
            var evtobj=window.event? event : e
            var unicode=evtobj.charCode? evtobj.charCode : evtobj.keyCode
            var element=e? evtobj.currentTarget: evtobj.srcElement; 
            var actualkey=String.fromCharCode(unicode)
            if(element) {
                if(this.maxCharReached(element)) {
                    var nextElement = this.nextFormElement(element);
				    if(nextElement != -1)
				        nextElement.focus();
				}
				else if((this.lastKnownValue(element) == "" || this.lastKnownValue(element) == element.value) && unicode == '8'){
				    var prevElement = this.previousFormElement(element);
				    if(prevElement != -1) {
				        prevElement.focus();
                        prevElement.value = prevElement.value.substring(0,prevElement.value.length-1);
                    }
                }
            }
            for(var k=0; k<this.formChain.length; k++){
                this.formChain[k][4] = this.formChain[k][0].value;
                document.getElementById("cardNumber").value = this.formChain[0][0].value + this.formChain[1][0].value + this.formChain[2][0].value + this.formChain[3][0].value;
            }
        },
			
		"maxCharReached" : function(formElement) {
            for(var i=0; i<this.formChain.length; i++){
                if(formElement.id == this.formChain[i][0].id) {
                    if(formElement.value.length >= this.formChain[i][1]){
                        return true;
                    }
				}
            }
            return false;
        },
        
        "lastKnownValue" : function (formElement){
            for(var i=0; i<this.formChain.length; i++){
                if(formElement.id == this.formChain[i][0].id) {
						return this.formChain[i][4];
				}
            }
            return null;
        },

        "nextFormElement" : function (formElement){
            for(var i=0; i<this.formChain.length; i++){
                if(formElement.id == this.formChain[i][0].id) {
                    var nextElement = this.formChain[i][3];
                    if(nextElement != null){
                        return nextElement;
				    }
				}
            }
            return -1;
        },

        "previousFormElement": function (formElement){
            for(var i=0; i<this.formChain.length; i++){
                if(formElement.id == this.formChain[i][0].id) {
                    var prevElement = this.formChain[i][2];
                    if(prevElement != null){
                        return prevElement;
                    }
				}
            }
            return -1;
        }
}

var cardUtility = new CardUtility();

////////////////////////////////////////////////////////////////////////////
// Formatters
////////////////////////////////////////////////////////////////////////////

Format = function(){

}

Format.prototype = {
    
    "artists": function(artists) {
	   if(artists != null){
	       var str = "";
	       for(var i=0;i<artists.length;i++){
	           if(i == 0) {
	               str = artists[i].name;
	           } else {
	               str = str + ", " + artists[i].name
	           }
	       }
	       return str;
	   }
	},
	
	"cover": function(product, size, clickable){
	   var src = "";
	   var height = 10;
	   var width = 10;
	   if(size == "small"){
	       height = product.entity == "Movie" ? smallMovieCoverHeight : smallCoverHeight;
	       width  = product.entity == "Movie" ? smallMovieCoverWidth : smallCoverWidth;
	       src = product.smallCover;
	   } else if(size == "medium"){
	       height = product.entity == "Movie" ? mediumMovieCoverHeight : mediumCoverHeight;
	       width  = product.entity == "Movie" ? mediumMovieCoverWidth : mediumCoverWidth;	   
	       src = product.mediumCover;
	   } else if(size == "large"){
	       height = product.entity == "Movie" ? largeMovieCoverHeight : largeCoverHeight;
	       width  = product.entity == "Movie" ? largeMovieCoverWidth : largeCoverWidth;	   	   
	       src = product.largeCover;
	   }
	   var image = "<img src=\"/images/" + src + "\" height=\"" + height + "\" width=\"" + width + "\" alt=\"\" />";
	   if(clickable == true){
            image = "<a href=\"javascript:contentManager.focusProduct('" + product.id + "')\">" + image + "</a>";
        }
        return image;
	},
	
    "price": function (value){
	   str = new String(value);
	   while(3 > str.length){
	        str = '0'+str;
	   }
	   n = str.length;
	   return str.substring(0, n-2)+'.'+str.substring(n-2, n);
    },
    
    "duration": function (product) {
        if(!isNaN(product.duration)){
            if(product.entityType == "Track" || product.entityType == "Video" || product.entityType == "Movie"){
                var duration;
                var min = Math.floor(product.duration/60);
                var sec = product.duration%60;
                if(sec == 0) {
                    return min + ":00";
                }
                else if(sec < 10) {
                    return min+":0" + sec;
                }
                return min+":"+sec;
            } else {
                return product.duration + " " + strTracks;
            }
        }
        return "";
    },
    
    "productContexts": function (product, wrapperTag, size) {
	   if(product != null){
	       var str = "";
	       var img = imgBuyLarge;
	       if(size == "small"){
	           img = imgBuySmall;     
	       }
	       for(var i=0;i<product.productContexts.length;i++){
	           if(product.entityType == "Movie"){
	               str = str + "<" + wrapperTag + " class=\"screenratio\">" + product.productContexts[i].screenRatio + "</div>";
	           }
	           str = str + "<" + wrapperTag + " class=\"variation\">" + product.productContexts[i].variation + "</div>";
	           str = str + "<" + wrapperTag + " class=\"currency\">" + product.productContexts[i].currency + "</div>";
	           str = str + "<" + wrapperTag + " class=\"price\">" + this.price(product.productContexts[i].price) + "</div>";
	           str = str + "<" + wrapperTag + " class=\"buyButton\"><a href=\"javascript:void(0)\" onclick=\"cart.add(event, this, '" + product.productContexts[i].id + "')\"><img src=\"" + img + "\" alt=\"\" /></a></div>";
            }
	       return str;
	   }    
    },
    
    "remove": function (product) {
        return "<a href=\"javascript:cart.remove('" + product.id + "')\"><img src=\"" + imgRemove + "\" alt=\"\" /></a>";
    },
    
    "sample": function (product) {
        var str = "";
        if(product.entityType == "Track"){
            var artists = this.artists(product.displayArtists);
            var url = product.sample;
            var name = product.name;
            while(name.indexOf("'") != -1){
                name = name.replace(/'/, "");
            }
            while(artists.indexOf("'") != -1){
                artists = artists.replace(/'/, "");
            }
            var str = "<a href=\"javascript:player.playTrackInPlayer('" + url + "','" + __escapeHTML(name) + "','" + __escapeHTML(artists) + "')\"><img src=\"" + imgSample + "\" alt=\"\" /></a>";
        } else if(product.entityType == "MusicVideo") {
            var str = "<a href=\"javascript:player.openPopupPlayer('" + product.sample + "')\"><img src=\"" + imgMovieSample + "\" alt=\"\" /></a>";
        } else if(product.entityType == "MusicCollection") {
            var str = "<img src=\"" + imgAlbum + "\" alt=\"\" />";        
        } else if(product.entityType == "Movie"){
            var str = "<object id=\"videoLayer\" name=\"Player\" align=\"left\" type=\"video/x-ms-wmv\" CLASSID=\"CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6\" standby=\"Loading Microsoft Windows Media Player components...\"><PARAM NAME=\"URL\" VALUE=\"" + player.trackSite + product.sample + "\"><PARAM NAME=\"animationatStart\" VALUE=\"1\"><PARAM NAME=\"autoStart\" VALUE=\"1\"><PARAM NAME=\"showControls\" VALUE=\"1\"><EMBED SRC=\"" + player.trackSite + product.sample + "\"  hspace=\"0\" AutoStart=\"1\" type=\"video/x-ms-wmv\" pluginspage = \"http://www.microsoft.com/Windows/MediaPlayer/\" name=\"Player\" url=\"" + player.trackSite + product.sample + "\" animationatstart=\"1\" transparentatstart=\"1\" showcontrols=\"1\"></EMBED></object>";
        }
        //alert(player.trackSite + product.sample);
        return str;
    },
    
    "name": function(str, maxlength){
        if(str.length > maxlength){
            str = str.substring(0,maxlength - 3) + "...";
        }
        return str;
    },
    
    "validateStr": function (value){
        if(typeof value != 'undefined'){
            return value;
        }
        return "";
    },
    
    "cartItem": function (container, product) {
        container = container.replace( "item.name", this.name(product.name, cartItemNameLength));
        container = container.replace( "item.artist", this.name(this.artists(product.displayArtists), cartItemArtistLength));
        container = container.replace( "item.releaseYear", this.validateStr(product.releaseYear));
        container = container.replace( "item.sample", this.sample(product));
        container = container.replace( "item.label", this.validateStr(product.label));
        container = container.replace( "item.duration", this.duration(product));
        container = container.replace( "item.smallCover", this.cover(product.smallCover, smallCoverHeight, smallCoverWidth));
        container = container.replace( "item.mediumCover", this.cover(product.mediumCover, mediumCoverHeight, mediumCoverWidth));
        container = container.replace( "item.remove", this.remove(product));
        container = container.replace( "item.currency", this.validateStr(product.currency));
        container = container.replace( "item.variation", this.validateStr(product.variation));
        container = container.replace( "item.price", this.validateStr(this.price(product.price)));
        return container;		
    },
    
    "product": function(container, product, entity) {
        container = container.replace( entity + ".name", this.name(product.name, productNameLength));
        container = container.replace( entity + ".fullName", product.name);
        container = container.replace( entity + ".artist", this.name(this.artists(product.displayArtists), productArtistLength));
        container = container.replace( entity + ".fullArtist", this.name(this.artists(product.displayArtists), 1000));
        container = container.replace( entity + ".releaseYear", this.validateStr(product.releaseYear));
        container = container.replace( entity + ".sample", this.validateStr(this.sample(product)));
        container = container.replace( entity + ".label", this.validateStr(product.label));
        container = container.replace( entity + ".duration", this.duration(this.validateStr(product.duration)));
        container = container.replace( entity + ".originalTitle", this.validateStr(product.originalTitle));
        container = container.replace( entity + ".language", this.validateStr(product.language));
        container = container.replace( entity + ".subtitles", this.validateStr(product.subtitles));
        container = container.replace( entity + ".advisory", this.validateStr(product.advisory));
        container = container.replace( entity + ".about", this.validateStr(product.about));
        container = container.replace( entity + ".remove", this.remove(product));
        container = container.replace( entity + ".smallCover", this.cover(product, "small", false));
        container = container.replace( entity + ".mediumCover", this.cover(product, "medium", false));
        container = container.replace( entity + ".smallClickCover", this.cover(product, "small", true));
        container = container.replace( entity + ".mediumClickCover", this.cover(product, "medium", true));
        if(container.indexOf(".largeCover") > -1 || container.indexOf(".largeClickCover") > -1){
            container = container.replace( entity + ".largeClickCover", this.cover(product, "large", true));
            container = container.replace( entity + ".largeCover", this.cover(product, "large", false));
        }
        if(product.productContexts != '' && product.bundling == "NO" && product.productContexts != 'undefined'){
            container = container.replace( entity + ".currency",  product.productContexts[0].currency);
            container = container.replace( entity + ".variation", product.productContexts[0].variation);
            container = container.replace( entity + ".screenRatio", this.validateStr(product.productContexts[0].screenRatio));
            container = container.replace( entity + ".price", this.price(product.productContexts[0].price));
            if(entity == "album"){
                container = container.replace( entity + ".productContexts", this.productContexts(product, "div", "large"));
            } else {
                container = container.replace( entity + ".productContexts", this.productContexts(product, "div", "small"));
            }
        } else {
            container = container.replace( entity + ".productContexts", "");
        }
        if(container.indexOf(".infoLink") != -1){
            container = container.replace( entity + ".infoLink", "<a href=\"javascript:contentManager.focusProduct('" + product.id + "')\"><img src='" + imgInfo + "' alt=\"\" /></a>");
        }
        return container;		
    },
    
    "encodedAsset": function(container, asset){
		var downloadStr = '<a href="' + serverName + portalName + '/mediafile.json?asset=' + asset.id + '"><img src="' + imgDownload + '" alt="" /></a>';
		container = container.replace( "encodedAsset.name", this.name(asset.name, assetNameLength));
		container = container.replace( "encodedAsset.artist", this.name(this.artists(asset.artists), assetArtistLength));
		container = container.replace( "encodedAsset.numDownloadsRemaining", asset.numRedownloads);
		container = container.replace( "encodedAsset.downloadButton", downloadStr);
		return container;
    },

    "asset": function(container, asset){
        container = container.replace( "asset.name", this.name(asset.name, assetNameLength));
        container = container.replace( "asset.artist", this.name(this.artists(asset.artists), assetArtistLength));
        container = container.replace( "asset.numDownloadsRemaining", asset.numRedownloads);
        container = container.replace( "asset.id", asset.id);
        return container;
    },
    
    "usedGiftCertificate": function(container, certificate){
        container = container.replace( "giftcertificate.code", certificate.code);
        container = container.replace( "giftcertificate.currency", certificate.currency);
        container = container.replace( "giftcertificate.amount", certificate.amount);
        return container;        
    },
            
    "lineItem": function(container, lineItem){
        container = container.replace( "lineItem.name", this.name(lineItem.name, lineItemNameLength));
        container = container.replace( "lineItem.artist", this.name(this.artists(lineItem.artists), lineItemArtistLength));
        container = container.replace( "lineItem.currency", lineItem.currency);
        container = container.replace( "lineItem.variation", lineItem.variation);
        container = container.replace( "lineItem.price", this.price(lineItem.price));
        return container;    
    },
    
    "presentation": function (html) {
        if(html != null) {
            html = html.replace(/([a-z])\s*(=)\s*("|')/gi, '$1$2$3');
            if (parts = html.match(/(<\/?[a-z][a-z0-9]*| [a-z]+=)/gi)) {
                for (var i = 0; i < parts.length; i++) {
                    var part = parts[i];
                    html = html.replace(new RegExp(part, 'g'), part.toLowerCase());
                }
            }
        }
        return html;
    }
}

format = new Format();

/* -- GLOBAL -- */

window.onresize = resize;
function resize() {
    if(document.getElementById("disableShopLayer").style.visibility == "visible"){
        document.getElementById("disableShopLayer").style.height = (document.documentElement.scrollHeight > document.body.scrollHeight ?document.documentElement.scrollHeight : document.body.scrollHeight) + "px";
        document.getElementById("disableShopLayer").style.width = document.body.scrollWidth + "px";                
    }
}
/* -- Initialization  --*/
window.addEvent('load', function(){	
	cart.initialize(); 
});
window.addEvent('load', function(){
	contentManager.initialize();
});
window.addEvent('load', function(){
	cardUtility.initialize();
});
window.addEvent('load', function(){
	cashier.initialize();
});
window.addEvent('load', function(){
	redownload.initialize();
});
window.addEvent('load', function(){
	var agent = navigator.userAgent.toLowerCase();
	var playerId;
	var urlPrefix = 'http://www.shop2download.com/samples/';
	if(agent.indexOf('windows') > -1){
		var html = null;
		if(window.ie){
			html = 
			'<object height="0" width="0" id="wmplayer1" classid="clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6">\
				<param name="AutoStart" value="false" />\
				<param name="AudioStream" value="true" />\
			</object>';			
			playerId = 'wmplayer1';			
		}else{
			html = 
			'<object type="application/x-ms-wmp" height="0" width="0" id="wmplayer2">\
				<param name="AutoStart" value="false" />\
				<param name="AudioStream" value="true" />\
			</object>';
			playerId = 'wmplayer2';			
		}
		var holder = new Element('div', {'id' : 'psplayerdiv'});		
		var body = $E('body');
		holder.injectInside(body);
		holder.innerHTML = html;
		player.play = function(partialUrl){
			var fullUrl = urlPrefix + partialUrl;
			var player = document.getElementById(playerId);
			player.URL = fullUrl;
			player.controls.play();
		}
		player.stop = function(){
			var player = document.getElementById(playerId);
			player.controls.stop();
		}
		player.playTrack = function(url){
			url = urlPrefix+url
			var wmPlayer = document.getElementById(playerId);
			wmPlayer.URL = url;
			wmPlayer.controls.play();
		};
	}else if(agent.indexOf('macintosh') > -1){
		var holder = new Element('div', {'id' : 'psplayerdiv'}).injectInside($E('body'));
		var t = QT_GenerateOBJECTText(
			'http://dev.phonofile.dk/samples/20/34/0000000006362034_WMA9_128kbps_44kHz_stereo_CBR_sample.wma',
		 	'0', '0', '', 
			'EnableJavaScript', 'true', 'obj#id', 'psplayer', 'emb#NAME', 'psplayer', 'AutoPlay', 'false');
		holder.innerHTML = t;
		player.play = function(partialUrl){
			if(partialUrl != null){
				var fullUrl = 'http://www.shop2download.com/samples/' + partialUrl;
			}
			if($defined(document.psplayer.SetURL)){
				document.psplayer.SetURL(fullUrl);
				document.psplayer.Play();
			}
		};
		player.playTrack = player.play;
		player.stop = function(){
			document.psplayer.Stop();
		};
	}else{
		player.play = function(){
			alert('Sorry no player supported for this platfor/browser');
		}
	}
});