////////////////////////////////////////////////
// Silverlight JS Castle game v 0.1
// @author Martin.Eiler
////////////////////////////////////////////////

if (!window.castle)
	window.castle = {};

castle.Page = function(){
}

castle.Page.prototype = {

    ////////////////////////
    // session vars
    ////////////////////////
    itemSelected : null, 
    itemsLength : 0,
    timer : 0,
    timerID: null,
    totalItemsCollected : 0,
    totalErros : 0,
    errorRun1 : false,
    errorRun2 : false,
    errorRun3 : false,
    succesRun1 : false,
    succesRun2 : false,
    succesRun3 : false,
    postCardFlipped : false,
    flueBen1 : false,
    flueBen2 : false,
    flueBenComp1 : false,
    flueBenComp2 : false,
    selectedPostCard : 0,
    hasEnteredCopmetition : false,
    myScope : null,
    _root : null,
    isInjected : null,
    currPark : document.body.className,
    competitionIdle : true,
    
	handleLoad: function(control, userContext, rootElement){
		this.control = control;
		_root = rootElement;
		myScope = this;
		
        // checking for park - document.body.className
        // annual passes gfx handeling
        switch (this.currPark){
            case "california":
	             this.competitionIdle = false;
		         rootElement.findName("sendFriend")['Canvas.Top'] = 150;
	        break
    	    
            case "deutschland":
	            this.competitionIdle = false;
		        rootElement.findName("sendFriend")['Canvas.Top'] = 150;
		        rootElement.findName("competition_send_txt")['Canvas.Left'] = 8;
		        rootElement.findName("competition_cancel_txt")['Canvas.Left'] = 6; 
	        break
	        
	        case "billund":
	            rootElement.findName("passHolder").Source = "/ui/park/js/game/castle/png/seasonPass_dk.png";
		        rootElement.findName("smallPassHolder").Source = "/ui/park/js/game/castle/png/seasonPass_dk.png";
	        break
	        
	        case "windsor":
	            rootElement.findName("passHolder").Source = "/ui/park/js/game/castle/png/seasonPass_uk.png";
		        rootElement.findName("smallPassHolder").Source = "/ui/park/js/game/castle/png/seasonPass_uk.png";
	        break
            
            default:
                rootElement.findName("passHolder").Source = "/ui/park/js/game/castle/png/seasonPass_dk.png";
		        rootElement.findName("smallPassHolder").Source = "/ui/park/js/game/castle/png/seasonPass_dk.png";
	            //alert("no park defined");
        };
		
		// send to a friend form
		this.formActive = false;
		this.formHost = document.getElementById("formHost");
		this.formFields = {
            'senderName' : { 'element' : document.getElementById("senderName"), 'pattern' : /[^\s]+/ },
            'senderEmail' : { 'element' :  document.getElementById("senderEmail"), 'pattern' : /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i },
            'receiverName' : { 'element' :  document.getElementById("receiverName"), 'pattern' : /[^\s]+/ },
            'receiverEmail' : { 'element' :  document.getElementById("receiverEmail"), 'pattern' : /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i }              
		};
		// postcard checking input on blur and focus
		for(var key in this.formFields){
		    this.formFields[key]['element']['onfocus'] = function(){
		        this.style.border = 'none';
		        
		        var currInput = this.name;
                var currValue = this.value;
                var languageInput = Content['postCardLabels'][currInput];
                
                if(currValue == languageInput){
                    this.value = '';
                }
		    };
		     this.formFields[key]['element']['onblur'] = function(){
		        var currInput = this.name;
                var currValue = this.value;
                var languageInput = Content['postCardLabels'][currInput];

                if(currValue == ""){
                    this.value = languageInput;
                }
		        
		    };
		}
		rootElement.findName("submit_bt").addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.preSubmit));
		rootElement.findName("cancel_bt").addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.cancelPostcard));
		
		
		// enter competition form
		this.compFormActive = false;
		this.compHost = document.getElementById("compHost");
		this.compFormFields = {
            'firstName' : { 'element' : document.getElementById("firstName"), 'pattern' : /[^\s]+/ },
            'lastName' : { 'element' :  document.getElementById("lastName"), 'pattern' : /[^\s]+/ },
            'address' : { 'element' :  document.getElementById("address"), 'pattern' : /[^\s]+/ },
            'postNumber' : { 'element' :  document.getElementById("postNumber"), 'pattern' : /[^\s]+/ },
            'city' : { 'element' :  document.getElementById("city"), 'pattern' : /[^\s]+/ }, 
            'email' : { 'element' :  document.getElementById("email"), 'pattern' : /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i }             
		};
		// Competition checking input on blur and focus
		for(var key in this.compFormFields){
		    this.compFormFields[key]['element']['onfocus'] = function(){
		        this.style.border = 'none';
		        var currInput = this.name;
                var currValue = this.value;
                var languageInput = Content['competitionLabels'][currInput];
                
                if(currValue == languageInput){
                    this.value = '';
                }
		    };
		   
		    this.compFormFields[key]['element']['onblur'] = function(){
		        var currInput = this.name;
                var currValue = this.value;
                var languageInput = Content['competitionLabels'][currInput];

                if(currValue == ""){
                    this.value = languageInput;
                }
		        
		    };   
		}
		
		////////////////////////
		// instansiate gfx load up
		// Hides light in drawing
		////////////////////////
		rootElement.findName("score").Visibility="Collapsed";
		rootElement.findName("timerIn").Begin();
        
        // doPostcard
        rootElement.findName("postCard").Visibility="Collapsed";
		rootElement.findName("doPostcard").addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.doPostcard));
		
		rootElement.findName("sendFriend").Visibility = "Collapsed";
		rootElement.findName("menuOut").Begin();
		rootElement.findName("postCardOut").Begin();
		
		// comment out enterCompetition for debugging
		rootElement.findName("enterCompetitionOut").Begin();
		
		
		// doCompetition hiding and rolling out enterCompetition before first run
		// comment out enterCompetition for debugging
	    rootElement.findName("enterCompetition").Visibility="Collapsed";
		
		rootElement.findName("competition_cancel_btn").addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.cancelParticipate));
		rootElement.findName("participate").Visibility = "Collapsed";
		rootElement.findName("doParticipate").addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.doParticipate));
		rootElement.findName("competition_send_btn").addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.sendParticipate));
		// listens for animation to end, then adds html input fields
		rootElement.findName("enterCompetitionIn").addEventListener("Completed", Silverlight.createDelegate(this, this.displayCompForms));
		rootElement.findName("postCardOut").addEventListener("Completed", Silverlight.createDelegate(this, this.hidePostcardClose));
		
		
		// flueben competition
		rootElement.findName("checkBox1").addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.doCheckBox1));
		rootElement.findName("checkBox2").addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.doCheckBox2));
		rootElement.findName("pCheckBox1").addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.pdoCheckBox1));
		rootElement.findName("pCheckBox2").addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.pdoCheckBox2));
		
		
		////////////////////////
		// hides all elements in drawing
		// oItemsLength from oItems
		// Loops and assigns listners
		////////////////////////
		this.itemsLength = rootElement.findName("oItems").Children.count;
		
		for (i = 0; i <= this.itemsLength-1; i++){
		   
		   // Opacity 0 for all items on stage
		   rootElement.findName("oItems").Children.getItem(i).Opacity = 0;	
		   
		   // Opacity 0 for all Mouose over hints
		    rootElement.findName("oHints").Children.getItem(i).Opacity = 0;		   
		  
		   // CollectBar items var for listeners
		   var addListenerTo = rootElement.findName("oCollectBar").Children.getItem(i);
		   
		   // Assigning start up possisions for Storyboards roll backs
		   var itemLeft = addListenerTo['Canvas.Left'];
		   var itemTop = addListenerTo['Canvas.Top'];
		   var nameHolder = 'itemFlyBack' + i;
		   rootElement.findName(nameHolder).Children.getItem(0).To = itemLeft;
		   rootElement.findName(nameHolder).Children.getItem(1).To = itemTop;
		   
		   // adding listeners
		   addListenerTo.addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.collectBarItemsDown));
		   addListenerTo.addEventListener("MouseLeftButtonUp", Silverlight.createDelegate(this, this.collectBarItemsUp));
		} 
		
		// postcard button listeners
		rootElement.findName("pbut0").addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.flipPostCard));
		rootElement.findName("pbut1").addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.flipPostCard));
		rootElement.findName("pbut2").addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.flipPostCard));
		rootElement.findName("pbut3").addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.flipPostCard));
		rootElement.findName("pbut4").addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.flipPostCard));
		rootElement.findName("pbut0").addEventListener("MouseEnter", Silverlight.createDelegate(this, this.pbutOver));
		rootElement.findName("pbut1").addEventListener("MouseEnter", Silverlight.createDelegate(this, this.pbutOver));
		rootElement.findName("pbut2").addEventListener("MouseEnter", Silverlight.createDelegate(this, this.pbutOver));
		rootElement.findName("pbut3").addEventListener("MouseEnter", Silverlight.createDelegate(this, this.pbutOver));
		rootElement.findName("pbut4").addEventListener("MouseEnter", Silverlight.createDelegate(this, this.pbutOver));
		rootElement.findName("pbut0").addEventListener("MouseLeave", Silverlight.createDelegate(this, this.pbutOut));
		rootElement.findName("pbut1").addEventListener("MouseLeave", Silverlight.createDelegate(this, this.pbutOut));
		rootElement.findName("pbut2").addEventListener("MouseLeave", Silverlight.createDelegate(this, this.pbutOut));
		rootElement.findName("pbut3").addEventListener("MouseLeave", Silverlight.createDelegate(this, this.pbutOut));
		rootElement.findName("pbut4").addEventListener("MouseLeave", Silverlight.createDelegate(this, this.pbutOut));
		
		// close popstcard
		rootElement.findName("postcardClose_btn").addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.cancelPostcard));
		
		// close participate
		rootElement.findName("participateClose_btn").addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.cancelParticipate));
				
		// boy
		rootElement.findName("boy").addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.boyOut));
		
		// Global mouseMove listener for all items in collectbar
		rootElement.addEventListener("MouseMove", Silverlight.createDelegate(this, this.collectBarItemsMouseMove));
		
		// Video MediaEnded listener
		rootElement.findName("video").addEventListener("MediaEnded", Silverlight.createDelegate(this, this.videoEnded));
		//this.videoEnded(rootElement, null);
		
		// audio MediaEnded listener
		rootElement.findName("audioElement").addEventListener("MediaEnded", Silverlight.createDelegate(this, this.audioEnded));
		
		// play again
		rootElement.findName("playAgain").addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.playAgain));
		rootElement.findName("playagain_txt").Text = Content["playAgain"]["playAgain"].toUpperCase();
		
		// language assignment
		this.assignText(rootElement);
		this.buildPostcardText(rootElement);
		
		// timer
		rootElement.findName("timerStory").Begin();
		rootElement.findName("timerStory").addEventListener("Completed", Silverlight.createDelegate(this, this.addSec));
		
		// terms
		rootElement.findName("terms").addEventListener("MouseLeftButtonDown", Silverlight.createDelegate(this, this.openTerms));
		rootElement.findName("termsTxt").Text = Content["terms"]["termsTxt"];
	},
	openTerms: function(sender, mouseEventArgs){
    	var link = Content["terms"]["termsLink"].toString();
        window.open(link, "popup");    
     },
     
	addSec: function(sender){
        sender.findName("timerStory").Begin();
        this.timer++;    
        var tText = this.timer.toString();
	    while(tText.length < 4){
	        tText = " " + tText;
	    }
	    sender.findName("timer_txt").Text = tText;
	    sender.findName("timer2_txt").Text = tText;    
     },
	
	////////////////////////
	// webservice calls
	////////////////////////
	CompetitionMail: function(firstName, surName, email, newslettersignup, site){
           LLP.WebServices.MailSenderService.SendCompetitionMail(firstName, surName, email,"","","",newslettersignup, site, "Castle",this.OnCompetitionMailComplete,this.OnError,this.OnTimeOut);
           //console.log(firstName, surName, email, newslettersignup, site)
     },

    TipAFriend: function(senderName, senderEmail, receiverName, receiverEmail, languageCode, postcardCode, postcardTitle, postcardnumber, newslettersignup){
           LLP.WebServices.MailSenderService.SendPostCard(senderName, senderEmail, receiverName, receiverEmail,languageCode, "Castle", postcardTitle, postcardnumber, newslettersignup, this.OnTipAFriendComplete,this.OnError,this.OnTimeOut);
     },
     
    // Webservice onComplete Listeners
    OnCompetitionMailComplete: function(){
        // enter competition only once
        this.hasEnteredCopmetition = true;
        
        // running cancelPostcard for resetting the gfx
        // hacking the scope
        //console.log(_root)
        myScope.cancelParticipate(_root, null)
         _root.findName("rotatePreloaderParticipate").Stop();
     },
    OnTipAFriendComplete: function(){
    
        // running cancelPostcard for resetting the gfx
        // hacking the scope
        myScope.cancelPostcard(_root, null);
        _root.findName("rotatePreloaderPostcard").Stop();
     },
    
	assignText: function(sender){
	    // send Postcard
	    sender.findName("patentPostcard").Text              = Content["postCardLabels"]["parentsPostcard"];
		sender.findName("newsletterPostcard").Text          = Content['postCardLabels']['newsletterPostcard'];
		sender.findName("tipSendMail_bt").Text              = Content['postCardLabels']['sendButon'].toUpperCase();
		sender.findName("tipCancel_bt").Text                = Content['postCardLabels']['cancelButton'].toUpperCase();
		
		// send Competition
		sender.findName("competition_cancel_txt").Text      = Content['competitionLabels']['cancelButton'].toUpperCase();
		sender.findName("competition_send_txt").Text        = Content['competitionLabels']['sendButon'].toUpperCase();
		sender.findName("competition_parent_txt").Text      = Content['competitionLabels']['accept'];
		sender.findName("competition_newsletter_txt").Text  = Content['competitionLabels']['newsletter'];
		sender.findName("competition_header_txt").Text      = Content['competitionLabels']['header'].toUpperCase();
		sender.findName("competition_subHeader_txt").Text   = Content['competitionLabels']['subHeader'];
		
	    // do Postcard and do competition
	    sender.findName("doParticipateHeader").Text         = Content['gameEndMenu']['participateHeader'].toUpperCase();
	    sender.findName("doParticipateSubHeader").Text      = Content['gameEndMenu']['participateSubHeader'];
	    sender.findName("doParticipateButton_txt").Text     = Content['gameEndMenu']['participateButton'].toUpperCase();
	    sender.findName("doPostcardHeader").Text            = Content['gameEndMenu']['postcardHeader'].toUpperCase();
	    sender.findName("doPostcardSubHeader").Text         = Content['gameEndMenu']['postcardSubHeader'];
	    sender.findName("dopostcardButton_txt").Text        = Content['gameEndMenu']['postcardbutton'].toUpperCase();
	    
		
	},
	
	////////////////////////
	// Item from collectBar MouseDown
	////////////////////////
	collectBarItemsDown: function(sender, mouseEventArgs){
	    this.itemSelected = sender;
	    sender["Canvas.ZIndex"] = 1000;
	},
	
	
	////////////////////////
	// Item from collectBar MouseUp
	////////////////////////
	collectBarItemsUp: function(sender, mouseEventArgs){

       var currItem = sender.name.substr(4);
       this.itemSelected = null;
       sender["Canvas.ZIndex"] = 0;  
        
        // validate if sender hits item from oItems
        var currX = sender["Canvas.Left"];
        var currY =  sender["Canvas.Top"]; 
        
        var itemNumber = parseInt(currItem);
        var colissionX = sender.findName("oItems").Children.getItem(itemNumber)["Canvas.Left"];
        var colissionY = sender.findName("oItems").Children.getItem(itemNumber)["Canvas.Top"];
        
        var isHit = this.checkColission(currX, currY, colissionX, colissionY)      
        
        // Wrong- fly back
        if(!isHit){
            var itemName = 'itemFlyBack' + sender.name.substr(4);
            var timeLine = this.control.content.findName(itemName);
            timeLine.Begin();
            
            // Turn on hint
            var item = parseInt(currItem);
            sender.findName("oHints").Children.getItem(item).Opacity = 100;	
            
            var currTimeLine = 'hintTimeline' + item;
            sender.findName(currTimeLine).Begin();
            this.totalErros++;
        }
        // success
        if(isHit){
            sender.Visibility = "Collapsed";
            var item = parseInt(currItem);
            sender.findName("oItems").Children.getItem(item).Opacity = 100;	
            this.totalItemsCollected++
        }
        //Game ended
        if(this.totalItemsCollected == this.itemsLength){
            this.startAnimation(sender, mouseEventArgs);
            //clearInterval(this.timerID)
            sender.findName("timerStory").Stop();
            //this.initPostcard(sender);
        }
        
        // Validating errors and successes
        this.checkSlur(sender);
	},
	
	
	////////////////////////
	// Item from collectBar MouseMove
	////////////////////////
	collectBarItemsMouseMove: function(sender, mouseEventArgs){
	    if(!!this.itemSelected && this.itemSelected["Canvas.ZIndex"] == 1000){
	        // Snap to center mouse
            this.itemSelected["Canvas.Left"] = mouseEventArgs.getPosition(null).x - this.itemSelected.findName("oCollectBar")["Canvas.Left"] - (this.itemSelected.width / 2);
            this.itemSelected["Canvas.Top"] = mouseEventArgs.getPosition(null).y - this.itemSelected.findName("oCollectBar")["Canvas.Top"] - (this.itemSelected.height / 2);
        } 
    },
    
    ////////////////////////
	// Checks if item is possisioned correct.
	// Margin 50 px
	////////////////////////
	checkColission: function(currX, currY, colissionX, colissionY){
	    if(currX - colissionX < 50 && currX - colissionX > -50 && currY - colissionY < 50 && currY - colissionY > -50){
	        return true;
        }
    },
    
    
    ////////////////////////
	// Checks for errors and succes.
	// Displaying anchor host and setting text from language.js
	// console.log(Content["phrases"]["good"][1]);
	////////////////////////    
    checkSlur: function(sender){
       
       // Errors init boy
	    if(this.totalErros == 1 && this.errorRun1 != true){
	        this.errorRun1 = true; 
	        sender.FindName("boy_txt").text = Content["phrases"]["bad"][0];	
	        sender.findName("BoyIn").Begin();                
	    }
	    if(this.totalErros == 2 && this.errorRun2 != true){
            sender.FindName("boy_txt").text = Content["phrases"]["bad"][1];	
	        sender.findName("BoyIn").Begin(); 
            this.errorRun2 = true;    
	    }
	    if(this.totalErros == 3 && this.errorRun3 != true){
            sender.FindName("boy_txt").text = Content["phrases"]["bad"][2];	
	        sender.findName("BoyIn").Begin(); 
            this.errorRun3 = true;    
	    }
	    
	    // success init boy
	    if(this.totalItemsCollected == 2 && this.successRun1 != true){
            sender.FindName("boy_txt").text = Content["phrases"]["good"][0];	
	        sender.findName("BoyIn").Begin(); 
            this.successRun1 = true;    
	    }
	    if(this.totalItemsCollected == 5 && this.successRun2 != true){
            sender.FindName("boy_txt").text = Content["phrases"]["good"][1];	
	        sender.findName("BoyIn").Begin(); 
            this.successRun2 = true;    
	    }
	    if(this.totalItemsCollected == 7 && this.successRun3 != true){
            sender.FindName("boy_txt").text = Content["phrases"]["good"][2];	
	        sender.findName("BoyIn").Begin(); 
            this.successRun3 = true;    
	    }
   },
   
   startAnimation: function(sender){
        sender.findName("videoCanvas").Visibility="Visible";
        sender.findName("video").play();
        sender.findName("timerOut").Begin();
   },
   
   videoEnded: function(sender, args){
        this.calcScore(sender);
        this.menuIn(sender, args);
        
        // tracking
        pageTracker._trackPageview('/tagged/slgameend/');
   },
   
   audioEnded: function(sender, args){
       // rewinding
       sender.findName("audioElement").Stop();
       // and playing again...!!!
       sender.findName("audioElement").Play();
   },
   
   playAgain: function(sender, args){
        // hacky
       window.location.reload();
   },
   
   initPostcard: function(sender, args){
        sender.findName("preloaderPostcard").Visibility="Collapsed";
        sender.findName("submit_bt").Visibility="Visible";
        sender.findName("postCard").Visibility="Visible";
        sender.findName("postCardIn").Begin();
   },
   
   buildPostcardText: function(sender){
    var i = 0;
    var xamlArray = new Array();
    var plugin = sender.getHost();
    
    for (i=0;i<=4;i++){
    
        var currentNode = "postcard" + i;
                
        xamlArray[i] = "<TextBlock Visibility='Collapsed' ";
        xamlArray[i] += "Width='221' Height='225' FontSize='11' FontWeight='Normal' TextWrapping='Wrap' Canvas.Top='60' Canvas.Left='33' Canvas.ZIndex='1'>";
       
        // Formating json for xaml 
        for(var key in Content["postcards"][currentNode]){
            
            // adding line breaks
            if(key%2){
                xamlArray[i] += Content["postcards"][currentNode][key] + "<LineBreak/><LineBreak/>";
            }
            else{
                xamlArray[i] += Content["postcards"][currentNode][key] + "<LineBreak/>";
             }   
        }
        xamlArray[i] += "</TextBlock>";
        
        // creating the TextBlock in runtime
        var createThis = xamlArray[i];
        var textObj = plugin.content.createFromXaml(createThis);
        
        // adding the textblock to the the nested canvas
        var added = sender.findName("textHolder").children.add(textObj);
    
    }// end for loop
    
   },
   flipPostCard: function(sender, args){
        
        // checks if post card allready if flipped
       if(!this.postCardFlipped){
            sender.findName("flipPostCard").Begin();
            this.postCardFlipped = true;
            sender.FindName("postcardClose_btn").Visibility="Visible";
        }
        
        // checkking flueben
         if (this.flueBen1 == false){
		    sender.findName("pFlueben1").Visibility="Collapsed";
		 }else{
		     sender.findName("pFlueben1").Visibility="Visible";
		 }
		 
		 if (this.flueBen2 == false){
		    sender.findName("pFlueben2").Visibility="Collapsed";
		 }
		 else{
		     sender.findName("pFlueben2").Visibility="Visible";
		 }
		 
		// rewrite this part
        // parses text from language.js
        // var selectedType = typeof(sender.name.substr(4));
        var parsed = parseInt(sender.name.substr(4));
        this.selectedPostCard = parsed;
        
        // toggle postcard text
        for (i=0;i<=4;i++){
            if(i!=parsed){
                sender.findName("textHolder").children.getItem(i).Visibility="Collapsed";
            }else{
                sender.findName("textHolder").children.getItem(i).Visibility="Visible";
            }
        }
 
        
        // displaying html input
        this.formHost.style.display = "block";
        this.formActive = true;
        
        // asigning text from language.js
        sender.findName("postCardHeader_txt").Text  = Content['postCardLabels']['dear'];
        document.getElementById("senderName").value = Content['postCardLabels']['senderName'];
        document.getElementById("senderEmail").value = Content['postCardLabels']['senderEmail'];
        document.getElementById("receiverName").value = Content['postCardLabels']['receiverName'];
        document.getElementById("receiverEmail").value = Content['postCardLabels']['receiverEmail'];
        
   },
   
   preSubmit : function(sender, args) {
        var errors = [];
        for(key in this['formFields']){
            var match = this['formFields'][key]['element'].value.match(this['formFields'][key]['pattern']);
            if(!match){
                errors.push(Content['errorMessages'][key]);
                this['formFields'][key]['element'].style.border = "2px dotted red";
            }
        }
        if(errors.length > 0){
            this.propagateErrors(errors);
            return;
        }
        else if(this.flueBen1 == false){
           sender.findName("postCardFluebenLabel").Visibility="Visible";
        }
        else{
            this.formSubmit(sender, args);
        }
   },
   propagateErrors : function(errors){
        var msg = Content['errorMessages']['messageHead'] + "\n";
        for(var i = 0, l = errors.length; i < l; i++){
            msg += " - " + errors[i] + "\n";
        }
        alert(msg);
   },
   
   formSubmit : function(sender, args){
        var senderName      = document.getElementById("senderName").value;
        var senderEmail     = document.getElementById("senderEmail").value;
        var receiverName    = document.getElementById("receiverName").value;
        var receiverEmail   = document.getElementById("receiverEmail").value;
        
        sender.findName("postCardFluebenLabel").Visibility="Collapsed";
       
       // calling webservice 
       var language = document.body.id;
       var submitNewsletter = this.flueBen2;
   
       this.TipAFriend(senderName,senderEmail,receiverName,receiverEmail,language,'Castle','Castle',this.selectedPostCard, submitNewsletter);
       sender.findName("preloaderPostcard").Visibility="Visible";
       sender.findName("submit_bt").Visibility="Collapsed";
       sender.findName("rotatePreloaderPostcard").Begin();
       
   },
   
   // MouseOver for Postcard selector
   pbutOver: function(sender, args){
        sender.Opacity = 0;
   },
   
   pbutOut: function(sender, args){
         sender.Opacity = 0.75;
   },
   
   boyOut: function(sender, args){
         sender.findName("boyOut").Begin();
   },
   
   calcScore: function(sender, args){
         // calc score
         var pointsTimer = (parseInt(this.timer)) *  11;
         var pointsErrors = this.totalErros * 213;
         var totalPoints = pointsTimer + pointsErrors;
         var totalScore = parseInt(7000 - totalPoints);
         
         sender.findName("score").Visibility="Visible";
         sender.findName("point_txt").Text = totalScore.toString();
         sender.findName("score_txt").Text = Content['score']['score'].toUpperCase();
         sender.findName("score2_txt").Text = Content['score']['points'].toUpperCase();
         sender.findName("scoreIn").Begin();
   },
   menuOut: function(sender, args){
         if(this.competitionIdle){
            sender.findName("menuOut").Begin();
         }else{
           sender.findName("menuOutNoComp").Begin();
         }
   },
   menuIn: function(sender, args){
         sender.findName("participate").Visibility="Visible";
         sender.findName("sendFriend").Visibility="Visible";
         sender.findName("playAgainIn").Begin();
         
         if(this.competitionIdle){
            sender.findName("menuIn").Begin();
         }else{
            sender.findName("menuIn").Begin();
            sender.findName("participate").Visibility="Collapsed";
         }
   },
   doPostcard: function(sender, args){
         this.menuOut(sender, args);
         this.initPostcard(sender, args);
   },
   doParticipate: function(sender, args){
         this.menuOut(sender, args);
         sender.findName("competition_send_btn").Visibility="Visible";
         sender.findName("preloaderParticipate").Visibility="Collapsed";
         sender.findName("enterCompetition").Visibility="Visible";
         sender.findName("enterCompetitionIn").Begin();
         
         // checkking flueben
         if (this.flueBenComp1 == false){
		    sender.findName("flueben1").Visibility="Collapsed";
		 }else{
		     sender.findName("flueben1").Visibility="Visible";
		 }
		 
		 if (this.flueBenComp2 == false){
		    sender.findName("flueben2").Visibility="Collapsed";
		 }else{
		     sender.findName("flueben2").Visibility="Visible";
		 }
   },
   displayCompForms: function(sender, args){  
        // displaying html input
        this.compHost.style.display = "block";
        this.compFormHost = true;
        
        // asigning text from language.js
        document.getElementById("firstName").value =  Content['competitionLabels']['firstName'];
        document.getElementById("lastName").value = Content['competitionLabels']['lastName'];
        //document.getElementById("address").value = Content['competitionLabels']['address'];
        //document.getElementById("postNumber").value = Content['competitionLabels']['postNumber'];
        //document.getElementById("city").value = Content['competitionLabels']['city'];
        document.getElementById("email").value = Content['competitionLabels']['email'];
   },   
   cancelParticipate: function(sender, args){
         sender.findName("participate").Visibility="Visible";
         sender.findName("sendFriend").Visibility="Visible";
         this.compHost.style.display = "none";
         this.compFormHost = false;
        
         // Park fix for competition 
         if(this.competitionIdle){
            sender.findName("menuIndelay").Begin();
         }else{
            sender.findName("menuIndelayNoComp").Begin();
         }         
         sender.findName("enterCompetitionOut").Begin();
   },
   sendParticipate: function(sender, args){
       this.preSubmitParticopate(sender, args)
   },
   
   
   preSubmitParticopate : function(sender, args) {
        var errors = [];
        for(key in this['compFormFields']){
            var match = this['compFormFields'][key]['element'].value.match(this['compFormFields'][key]['pattern']);
            if(!match){
                //errors.push(Content['errorMessages'][key]);
                this['compFormFields'][key]['element'].style.border = "2px dotted red";
            }
        }
        if(errors.length > 0){
            this.propagateErrors(errors);
            return;
        }
        // allow parents
        else if(!this.flueBenComp1){
           sender.findName("participateFluebenLabel").Visibility="Visible";
        }
        // allready entered
        else if(this.hasEnteredCopmetition){
           alert(Content['competitionLabels']['allReadyEntered'])
        }
        else{
            this.participateFormSubmit(sender, args);
            }
   },
   
   participateFormSubmit : function(sender, args){
        sender.findName("participateFluebenLabel").Visibility="Collapsed";
        
        var fornavn     = document.getElementById("firstName").value;
        var efternavn   = document.getElementById("lastName").value;
        //var adresse     = document.getElementById("address").value;
        //var postnr      = document.getElementById("postNumber").value;
        //var by          = document.getElementById("city").value;
        var email       = document.getElementById("email").value;
        var nyhedsbrev  = this.flueBenComp2;
        var site        = document.body.id;
        
        // Rewrite the webservice to exclude address postnummer and by
       var adresse,postnr,by = "undefined";
       
       this.CompetitionMail(fornavn, efternavn, email, nyhedsbrev, site);
       sender.findName("competition_send_btn").Visibility="Collapsed";
       sender.findName("preloaderParticipate").Visibility="Visible";
       sender.findName("rotatePreloaderParticipate").Begin();
       this.hasEnteredCopmetition = true;
   },
   cancelPostcard: function(sender, args){
         sender.findName("postCardOut").Begin();
         sender.findName("flipBackPostCard").Begin();
         this.postCardFlipped = false;
         
         this.formHost.style.display = "none";
         this.formActive = false;
         
         if(this.competitionIdle){
            sender.findName("menuIndelay").Begin();
         }else{
           sender.findName("menuIndelayNoComp").Begin();
         }
   },
   doCheckBox1: function(sender, args){
        // setting value
        if(this.flueBenComp1){
           this.flueBenComp1 = false;
         }
         else{
            this.flueBenComp1 = true;
         }
         
         // setting flueben gfx 
         if(this.flueBenComp1){
            sender.findName("flueben1").Visibility="Visible";
         }
         else{
            sender.findName("flueben1").Visibility="Collapsed";
         }
   },
   doCheckBox2: function(sender, args){
        // setting value
        if(this.flueBenComp2){
           this.flueBenComp2 = false;
         }
         else{
            this.flueBenComp2 = true;
         }
         
         // setting flueben gfx 
         if(this.flueBenComp2){
            sender.findName("flueben2").Visibility="Visible";
         }
         else{
            sender.findName("flueben2").Visibility="Collapsed";
         }
   },
   pdoCheckBox1: function(sender, args){
        // setting value
        if(this.flueBen1){
           this.flueBen1 = false;
         }
         else{
            this.flueBen1 = true;
         }
         
         // setting flueben gfx 
         if(this.flueBen1){
            sender.findName("pFlueben1").Visibility="Visible";
         }
         else{
            sender.findName("pFlueben1").Visibility="Collapsed";
         }
   },
   pdoCheckBox2: function(sender, args){
        // setting value
        if(this.flueBen2){
           this.flueBen2 = false;
         }
         else{
            this.flueBen2 = true;
         }
         
         // setting flueben gfx 
         if(this.flueBen2){
            sender.findName("pFlueben2").Visibility="Visible";
         }
         else{
            sender.findName("pFlueben2").Visibility="Collapsed";
         }
   },
   hidePostcardClose: function(sender, args){
        sender.findName("postcardClose_btn").Visibility="Collapsed"
   }
   
}