function paginate(slider, points) {

    //clear page box
    $(points).getElements("a").each(function(e) {
        //e.remove();
        e.dispose();
    });
    var useFirst=true;
    $(slider).getChildren().getChildren()[0].each(function(page, index) {
        if (page.id == "currentChild") {
            useFirst=false;
        }
    });
    
    $(slider).getChildren().getChildren()[0].each(function(page, index) {
            var point = new Element('a', {
                'href':'javascript: void new SimpleSlide(\''+slider+'\',\''+points+'\',{type: \'scroll\', goTo:'+(index+1)+', duration:400});',
                'class':'page'
            });
            if (page.id == "currentChild" || (index==0 && useFirst)) {
                point.addClass('active');
            } else {
                found = true;
            }
            $(points).adopt(point);
    });
}

/* function to trim string */
function trim(str) {
  return str.replace(/^\s+/,'').replace(/\s+$/,'');
}

/* function to parse get-movie-response */
function parseResponse(responseText) {
	// parse result
	responseText=trim(responseText);
	var result=responseText.split(" ");

	/*
	// normalize response
	responseText=responseText.replace(/\r\n/g,"\n");
	responseText=responseText.replace(/\n/g," ");
	
	// match body
	var bodyPattern=/<body>\s*?(.+)\s*?<\/body/gi;
	bodyPattern.exec(responseText);
	
	// trim result
	var bodyText=trim(RegExp.$1);
	
	// match parts
	var messagePattern=/(.+)\s+(.+)/gi;
	messagePattern.exec(bodyText);
	
	// create return message
	var result=[];
	result[0]=trim(RegExp.$1);
	result[1]=trim(RegExp.$2);
	
	// check for error
	switch(result[0]) {
		// result ok
		case "FILE":		break;
		case "PENDING":	break;
		// error in request
		default:
			result[0]="ERROR";
			result[1]=bodyText;
			break;
	}
	*/
	
	return(result);
}

var ajax_handler=null;
var progress_handler=null;

function closeWindow() {
    // check for ajax-handler
    if(ajax_handler!=null) {
       window.clearTimeout(ajax_handler);
    }
    // fade out message 1
    $('shaderBox').set('tween',{
        duration:'long'
    }).fade(0);
}

function openWindow(PurchaseId,VideoAssetId,ProgressBar,PageType) {
    ajax_retries=0;
    
    // check for selected device
    if(typeof(VideoAssetId) === 'undefined') {
        alert('Please selected a device to download');
        return;
	}

    // check browser
    if(window.Browser.Engine.gecko) {
        $('steps_ie').style.display="none";
        $('steps_ff').style.display="block";
    } else {
        $('steps_ie').style.display="block";
        $('steps_ff').style.display="none";
    }
    
    // set url for download
    var URL='/GetMovie.aspx';
    // set max-left
    var max_left=555;

    // parse browser capabilities
    if(!PluginList.check('Windows Media Player') && (PageType=='vod_pc')) {
        PageType="dto_pc";
    }
    
    // check type to provide
    var type="";
    switch(PageType)
    {
        case "dto_mobile":
        case "dto_pc":
            type="download";
            break;
        case "vod_pc":
            type="stream";
            break;
    }

    // reset to waiting message
    $('download_page_message_' + PageType).innerHTML=$('download_page_wait').innerHTML;
    
    // hide shader box
    $('shaderBox').innerHTML=$('download_page_' + PageType).innerHTML;
    $('shaderBox').style.opacity=0.0;
    $('shaderBox').style.filter='alpha(opacity=0)';
    $('shaderBox').style.visibility='visible';
    $('shaderBox').style.top='0px';
    $('shaderBox').style.left='0px';
    $('shaderBox').style.paddingTop='0px';
    $('shaderBox').style.height=parseInt(document.body.offsetHeight) + 'px';
    $('shaderBox').style.width=parseInt(document.body.offsetWidth) + 'px';
    $('shaderBox').set('tween',{duration:'long'}).fade('hide');

    // hide links
    $('download_page_link_href_stream').style.display='none';
    $('download_page_link_href_download').style.display='none';

    // fade in message
    $('shaderBox').set('tween',{
        duration:'long',
        onComplete:function()
        {
			    // init progress-bar
	        $('progress_bar_' + PageType).style.display='block';
			    $('progress_bar_' + PageType).style.left='204px';
			    $('progress_bar_bg_' + PageType).removeClass('complete');
			    $('progress_bar_bg_' + PageType).addClass('loading');

          // display link
          $('download_page_link_href_' + type).style.display='block';
		    
			    // init progress
			    progress_handler=window.setInterval(function() {
			        if(parseInt($('progress_bar_' + PageType).style.left)<max_left) {
			            $('progress_bar_' + PageType).style.left=parseInt($('progress_bar_' + PageType).style.left) + 1 + 'px';
			        }
			    },250);
			
					// call function for ajax
					openWindowAjax(progress_handler,URL,PageType,type,PurchaseId,VideoAssetId);
        }
    }).fade(0.9);
}

function openWindowAjax(progress_handler,URL,PageType,type,PurchaseId,VideoAssetId) {
		// create timestamp
		var timestamp=new Date().getTime();
		
    // create file
    var RequestToDownload=new Request.HTML({
        url:URL,
        async:true,
        onSuccess:function(tr,elm,html,js) {
            var return_state="";
            var link="";
            
            // parse result
            var result=parseResponse(html);
            if(result.length<2) {
                return_state=result[0];
            } else {
                return_state=trim(result[0]);
                link=trim(result[1]);
                if(link.length==0) {
                    return_state="ERROR";
                }
            }
            
            switch(return_state) {
                case "FILE":
                case "ERROR":
                    // clear interval
                    window.clearInterval(progress_handler);
                    // set to full width
                    $('progress_bar_' + PageType).style.left='0px';
                    $('progress_bar_' + PageType).style.display='none';
                    $('progress_bar_bg_' + PageType).removeClass('loading');
  	                $('progress_bar_bg_' + PageType).addClass('complete');

                    // check return
                    if(return_state!="ERROR")
                    {
                    		// replace link according to type
                    		switch(type) {
                    			case "download":
                    				link=link.replace(host_msdrm,host_download);
                    				break;
                    			case "stream":
                    				link=link.replace(host_msdrm,host_stream);
                    				break;
                    		}
                        // copy link
                        $('download_page_link_href_' + type).href=link;
                        // set message
                        $('download_page_message_' + PageType).innerHTML=$('download_page_link').innerHTML;
                    }
                    else
                    {
                        // set message
                        $('download_page_message_' + PageType).innerHTML=$('download_page_link_error').innerHTML;
                    }
                    break;
                case "PENDING":
                    // check for number of retries
                    if(ajax_retries<30) {
                        ajax_retries++;
                        ajax_handler=window.setTimeout(function() {
                            openWindowAjax(progress_handler,URL,PageType,type,PurchaseId,VideoAssetId);
                        },10000);
                    } else {
                        // clear interval
                        window.clearInterval(progress_handler);
                        // set to full width
                        $('progress_bar_' + PageType).style.left='0px';
                        $('progress_bar_' + PageType).style.display='none';
                        $('progress_bar_bg_' + PageType).removeClass('loading');
	                    	$('progress_bar_bg_' + PageType).addClass('complete');

                        // set message
                        $('download_page_message_' + PageType).innerHTML=$('download_page_link_error').innerHTML;
                    }
                    break;
            }
        },                
        onFailure:function(xhr) {
            // clear interval
            window.clearInterval(progress_handler);
            
            // set to full width
            $('progress_bar_' + PageType).style.left='0px';
            $('progress_bar_' + PageType).style.display='none';
            $('progress_bar_bg_' + PageType).removeClass('loading');
	          $('progress_bar_bg_' + PageType).addClass('complete');

            // set message
            $('download_page_message_' + PageType).innerHTML=$('download_page_link_error').innerHTML;
        }                
    }).get({'PurchaseID':PurchaseId,'VideoAssetID':VideoAssetId,'TypeID':type,'cache':timestamp});
}


// get query args
function getArgs(query) { 
	var args=new Hash(); 
	if(!query) {
		var query=location.search.substring(1); 
	}
	var pairs=query.split("&"); 
	for(var i=0;i<pairs.length;i++) { 
		var pos=pairs[i].indexOf('='); 
		if(pos==-1) continue; 
		var argname=pairs[i].substring(0,pos); 
		var value=pairs[i].substring(pos+1); 
		args.set(argname,unescape(value)); 
	} 
	return args; 
} 


// #################### VOUCHER REDEEM ##################
function redeemVoucher(event) {
  // check login
  if(!document.getElementById('url_ce9fa761-5972-41ab-8419-7553a58ee0ed'))
  {
    var voucher_entry=$('redeem_voucher');
    var voucher_msg=$('redeem_voucher_message');
		
    // clear previous message
    voucher_msg.innerHTML="";
    
    // try to create voucher
    var RequestVoucher=new Request.HTML({
        url:'/RedeemVoucher.aspx',
        async:false,
        onSuccess:function(tr,elm,html,js) {
            voucher_msg.innerHTML="Voucher successfully added to your shopping basket";
        },
        onFailure:function(xhr) {
            if(xhr.status==399) {
                voucher_msg.innerHTML="Invalid number, please try again"
            }
        }                
    }).get({'voucherRef':voucher_entry.value});
	} else {
		// get length of parameter		
		var args=getArgs();
    // sign in user
		if(args.getLength()>0) {
	    window.location.href=document.getElementById('url_ce9fa761-5972-41ab-8419-7553a58ee0ed').href + "%26voucher=" + $('redeem_voucher').value;
	  } else {
	    window.location.href=document.getElementById('url_ce9fa761-5972-41ab-8419-7553a58ee0ed').href + "%3Fvoucher=" + $('redeem_voucher').value;
	  }
	}
}

function redeemVoucherCheck() {
    var voucher_entry=$('redeem_voucher');
    var voucher_activate=$('redeem_voucher_activate');

		// check for given voucher
		var args=getArgs();
		if(args.has('voucher')) {
			if(voucher_entry.value=="") {
				voucher_entry.value=args.get('voucher');
			}
		}
		
		// check length
		if(voucher_entry.value.length==14) {
			// set color
	    voucher_activate.setStyle('color','#ff0000');
		} else {
			// set color
	    voucher_activate.setStyle('color','#666666');
		}
}

// ##################### OFFER HELPER ###################
// mapping-list
var offerMap=$H();
var offerId=0;
function addOffer(id) {
  offerMap[id]=id;
}
function removeOffer(id) {
	offerMap.erase(id);
}
function toggleOffer(id) {
	if(offerMap.has(id)) {
		removeOffer(id);
	} else {
		addOffer(id);
	}
}

var flagError=false;

function handleOffer(obj) {
	if(obj.checked==true) {
		addOffer(obj.value);
	} else {
		removeOffer(obj.value);
	}
}

function addBasket(id) {
  // check login
  if(!document.getElementById('url_ce9fa761-5972-41ab-8419-7553a58ee0ed'))
  {
    // save to global scope
    offerId=id;

    // hide shader box
    $('shaderMessage').innerHTML='Please wait...<br/>This item will be added to your shopping basket';
    $('shaderBox').style.opacity=0.0;
    $('shaderBox').style.filter='alpha(opacity=0)';
    $('shaderBox').style.visibility='visible';
    $('shaderBox').style.top='0px';
    $('shaderBox').style.left='0px';
    $('shaderBox').style.height=parseInt(document.body.offsetHeight) + 'px';
    $('shaderBox').style.width=parseInt(document.body.offsetWidth) + 'px';
    $('shaderBox').set('tween',{duration:'long'}).fade('hide');

    $('shaderBox').set('tween',{
        duration:'long',
        onComplete:function()
        {
            // add item to basket (syncronous)
            var RequestToBasket=new Request.HTML({
                url:'/EditCart.aspx',
                async:false,
                onSuccess:function(tr,elm,html,js) {
                    window.location.href='ShoppingCart.aspx';
                    /*
                    $('shaderMessage').innerHTML='Your product has been added to your shopping basket';
                    $('shaderBox').set('tween',{
                        duration:'long',
                        onComplete:function() {
                            $('shaderMessage').innerHTML='Please wait...';
                            $('shaderBox').style.visibility='hidden';
                            $('shaderBox').style.top='0px';
                            $('shaderBox').style.left='0px';
                            $('shaderBox').style.width='1px';
                            $('shaderBox').style.height='1px';
                            window.location.href='ShoppingCart.aspx';
                        }
                    }).fade(0);
                    */
                },
                onFailure:function(xhr) {
                    if(xhr.status==399) {
                        // set global error-flag (prevent from adding mobile-version to the basket
                        flagError=true;
                        switch(xhr.getResponseHeader("Location")) {
                            case "Error.aspx?type=DuplicateError":
                                $('shaderMessage').innerHTML='This product has been already added to your shopping basket';
                                break;
                            case "Error.aspx?type=GeolocationError":
                                $('shaderMessage').innerHTML='You are not allow to purchase this movie because of territorial restrictions';
                                break;
                            case "Error.aspx?type=GeneralError":
                                $('shaderMessage').innerHTML='An error occoured during your request. Please try again later.';
                                break;
                        }

                        $('shaderBox').set('tween',{
                            duration:'long',
                            onComplete:function() {
                                $('shaderMessage').innerHTML='Please wait...';
                                $('shaderBox').style.visibility='hidden';
                                $('shaderBox').style.top='0px';
                                $('shaderBox').style.left='0px';
                                $('shaderBox').style.width='1px';
                                $('shaderBox').style.height='1px';
                            }
                        }).fade(0);
                    }
                }                
            }).get({'catalog':'A','action':'add','offerId':offerId});
        }
    }).fade(0.8);
  } else {
    // sign in user
    window.location.href=document.getElementById('url_ce9fa761-5972-41ab-8419-7553a58ee0ed').href;
  }
}

function delBasket(id) {
    // save to global scope
    offerId=id;

    // hide shader box
    $('shaderMessage').innerHTML='Please wait while this item is removed from your basket.';
    $('shaderBox').style.opacity=0.0;
    $('shaderBox').style.filter='alpha(opacity=0)';
    $('shaderBox').style.visibility='visible';
    $('shaderBox').style.top='0px';
    $('shaderBox').style.left='0px';
    $('shaderBox').style.height=parseInt(document.body.offsetHeight) + 'px';
    $('shaderBox').style.width=parseInt(document.body.offsetWidth) + 'px';
    $('shaderBox').set('tween',{duration:'long'}).fade('hide');
    
    $('shaderBox').set('tween',{
        duration:'long',
        onComplete:function()
        {
            // remove item from basket (syncronous)
            var RequestToBasket=new Request.HTML(
            {
                url:'/EditCart.aspx',
                async:false,
                onSuccess:function(tr,elm,html,js)
                {
                    window.location.href='ShoppingCart.aspx';
                    /*
                    $('shaderMessage').innerHTML='Your product has been removed from your shopping basket';
                    $('shaderBox').set('tween',{
                        duration:'long',
                        onComplete:function()
                        {
                            $('shaderMessage').innerHTML='Please wait...';
                            $('shaderBox').style.visibility='hidden';
                            $('shaderBox').style.top='0px';
                            $('shaderBox').style.left='0px';
                            $('shaderBox').style.width='1px';
                            $('shaderBox').style.height='1px';
                            window.location.href='ShoppingCart.aspx';
                        }
                    }).fade(0);
                    */
                },
                onFailure:function(xhr) {
                    if(xhr.status==399) {
                        switch(xhr.getResponseHeader("Location")) {
                            case "Error.aspx?type=GeneralError":
                                $('shaderMessage').innerHTML='An error occoured during your request. Please try again later.';
                                break;
                        }

                        $('shaderBox').set('tween',{
                            duration:'long',
                            onComplete:function() {
                                $('shaderMessage').innerHTML='Please wait...';
                                $('shaderBox').style.visibility='hidden';
                                $('shaderBox').style.top='0px';
                                $('shaderBox').style.left='0px';
                                $('shaderBox').style.width='1px';
                                $('shaderBox').style.height='1px';
                                window.location.href='ShoppingCart.aspx';
                            }
                        }).fade(0);
                    }
                }
            }).get({'catalog':'A','action':'remove','offerId':offerId});
        }
    }).fade(0.8);
}
// ##################### OFFER HELPER ###################
