﻿var Site = {
	start: function() {

        if($$('.imagecontainer').length>0){
            new iFishEye({
                container:  $$('.imagecontainer')[0],
			    targetImageClass: ".wrapper",
			    dimThumb: {width:140, height:113},
			    dimFocus: {width:182, height:147},
			    eyeRadius: 140,
			    pupilRadius: 50,
			    useAxis: 'x',
			    norm: "L1",
			    blankPath: "images/blank.gif"
            });
        }
        StarRating.start();
        Shaker.start();
        
        ExternalLinks.start();
	}
};

var ExternalLinks = {
    start: function() {
        if (!document.getElementsByTagName) return;
        var anchors = document.getElementsByTagName('a');
        for (var i=0; i<anchors.length; i++) {
            var anchor = anchors[i];
            if (anchor.getAttribute('href') && anchor.getAttribute('rel') == 'external')
               anchor.target = '_blank';
        }
    }
};

var ratingSelected = {};
var imageBlack = 0;
var imagePink = -44;
var imageGold = -89;

var StarRating = {
    start: function() 
    {    
        var starSet = $$('.ratingstars');       
        StarRating.AttachStarEvents(starSet);
    },
    
    AttachStarEvents : function(theStarSet){
        AttachStarEvents(theStarSet, false);
    },
    
    AttachStarEvents : function(theStarSet, isLightbox)
    {
        if (theStarSet.id == 'lightboxratings') alert(theStarSet.id);
  
        //Initialise the array to store whether a rating is selected
        theStarSet.each(function(starSetItem, starSetIndex){ ratingSelected[starSetIndex] = false; });
    
        theStarSet.each(function(starSetItem, starSetIndex)
        {
         
            var starOne = starSetItem.getElements('a')[0];
            
            var starTwo = starSetItem.getElements('a')[1];
            var starThree = starSetItem.getElements('a')[2];
            var starFour = starSetItem.getElements('a')[3];
            var hf = starSetItem.getElements('input')[0];
          
            if ((starOne != null) && (starTwo != null) && (starThree != null) && (starFour != null))
            {
                if(starSetItem.hasClass('isset'))
                {
                    if(starSetItem.hasClass('star1')){
                         StarRating.ChangeStarVerticalPosition(starOne, null, null, null, imageGold, starSetIndex,isLightbox); 
                    }
                    else if(starSetItem.hasClass('star2')){
                        StarRating.ChangeStarVerticalPosition(starOne, starTwo, null, null, imageGold, starSetIndex,isLightbox);                    
                    }
                    else if(starSetItem.hasClass('star3')){
                        StarRating.ChangeStarVerticalPosition(starOne, starTwo, starThree, null, imageGold, starSetIndex,isLightbox);                    
                    }
                    else if(starSetItem.hasClass('star4')){
                        StarRating.ChangeStarVerticalPosition(starOne, starTwo, starThree, starFour, imageGold, starSetIndex,isLightbox)                    
                    }
                } 
                else
                {   
                    //Create Mouse Over/Out Events
                    starOne.addEvent('mouseover', function() { StarRating.ChangeStarVerticalPosition(starOne, null, null, null, imagePink, starSetIndex,isLightbox); });
                    starOne.addEvent('mouseout', function() { StarRating.ChangeStarVerticalPosition(starOne, null, null, null, imageBlack, starSetIndex,isLightbox); });
                    starTwo.addEvent('mouseover', function() { StarRating.ChangeStarVerticalPosition(starOne, starTwo, null, null, imagePink, starSetIndex,isLightbox); });
                    starTwo.addEvent('mouseout', function() { StarRating.ChangeStarVerticalPosition(starOne, starTwo, null, null, imageBlack, starSetIndex,isLightbox); });
                    starThree.addEvent('mouseover', function() { StarRating.ChangeStarVerticalPosition(starOne, starTwo, starThree, null, imagePink, starSetIndex,isLightbox); });
                    starThree.addEvent('mouseout', function() { StarRating.ChangeStarVerticalPosition(starOne, starTwo, starThree, null, imageBlack, starSetIndex,isLightbox); });
                    starFour.addEvent('mouseover', function() { StarRating.ChangeStarVerticalPosition(starOne, starTwo, starThree, starFour, imagePink, starSetIndex,isLightbox); });
                    starFour.addEvent('mouseout', function() { StarRating.ChangeStarVerticalPosition(starOne, starTwo, starThree, starFour, imageBlack, starSetIndex,isLightbox); });
        
                    //Create Click Events
                    starOne.addEvent('click', function(){ 
                        //StarRating.ChangeStarVerticalPosition(starOne, null, null, null, imageGold, starSetIndex); 
                        ratingSelected[starSetIndex] = true;
                        StarRating.Vote(hf.value,1,starSetItem,starSetIndex);
                    });
                    starTwo.addEvent('click', function(){
                        //StarRating.ChangeStarVerticalPosition(starOne, starTwo, null, null, imageGold, starSetIndex);
                        ratingSelected[starSetIndex] = true;
                        StarRating.Vote(hf.value,2,starSetItem,starSetIndex);
                    });
                    starThree.addEvent('click', function(){ 
                        //StarRating.ChangeStarVerticalPosition(starOne, starTwo, starThree, null, imageGold, starSetIndex);
                        ratingSelected[starSetIndex] = true;
                        StarRating.Vote(hf.value,3,starSetItem,starSetIndex);
                    });
                    starFour.addEvent('click', function(){ 
                        //StarRating.ChangeStarVerticalPosition(starOne, starTwo, starThree, starFour, imageGold, starSetIndex);
                        ratingSelected[starSetIndex] = true;
                        StarRating.Vote(hf.value,4,starSetItem,starSetIndex);
                    });
                }
            }
        });
    },
    
    
    
    Vote : function(photo, stars, starSetItem,starSetIndex)
    {
            var params = Json.toString({photoId: photo, value: stars});

            var myAjax = new Ajax('http://www.quba.co.uk/LoveQuba/WebServices/RatingService.asmx/RatePhoto', {postBody: params, onComplete: 
            function(result){

                        result = Json.evaluate(result);
                        var isLightbox = false;
                        try{
                            if(starSetItem.getChildren()[0].id=='lightboxratings')
                                isLightbox = true;
                        }catch(e){}
                        if(isLightbox){
                            var id = starSetItem.getElements('input')[0].value;
                            $each($$('.ratingstars'),function(item,index){
                                if(item.getElements('input')[0].value == id){
                                    StarRating.SelectStarVerticalPosition(item,result.Rating);
                                    item.getElements('a').removeEvents('click');
                                    item.getElements('a').removeEvents('mouseover');
                                    item.getElements('a').removeEvents('mouseout');
                                    
                                    if(item.getParent().id!='lightboxstars'){
                                        var el = new Element('span');
                                        el.addClass('votes');
                                        el.innerHTML = 'Voted for '+result.NumberOfVotes+' times';
                                        el.injectAfter(item.getParent());
                                    }
                                }
                            });
                        }
                        
                        StarRating.SelectStarVerticalPosition(starSetItem,result.Rating);

                        if(starSetItem.id!='lightboxstars' && starSetItem.id!='lightboxratings'){
                            var el = new Element('span');
                            el.addClass('votes');
                            el.innerHTML = 'Voted for '+result.NumberOfVotes+' times';
                            el.injectAfter(starSetItem.getParent());
                        }

            },
            onFailure: function(result){ } });  
            myAjax.setHeader('Content-Type','application/json');
            myAjax.request(); 
            
    },
    
    ChangeStarVerticalPosition : function(starA, starB, starC, starD, imageYPos, index,isLightbox)
    {
        var isset = false
        if(isLightbox){
            if(starA!=null) isset = starA.getParent().hasClass('isset');
            else if(starB!=null) isset = starB.getParent().hasClass('isset');
            else if(starC!=null) isset = starC.getParent().hasClass('isset');
            else if(starD!=null) isset = starD.getParent().hasClass('isset');
        }
        
        if (!ratingSelected[index] && !isset)
        {
            if (starA != null) { starA.setStyle('background-position', '0 ' + imageYPos + 'px')};
            if (starB != null) { starB.setStyle('background-position', '0 ' + imageYPos + 'px')};
            if (starC != null) { starC.setStyle('background-position', '0 ' + imageYPos + 'px')};
            if (starD != null) { starD.setStyle('background-position', '0 ' + imageYPos + 'px')};
        }
    },
    
    SelectStarVerticalPosition : function(starSetItem, value)
    {
        var els = starSetItem.getElements('a');
        for(i = 0 ; i < 4 ; i++)
        {
            if (i < value) els[i].setStyle('background-position', '0 ' + imageGold + 'px');
            else els[i].setStyle('background-position', '0 ' + imageBlack + 'px'); 
        }
    }    
};

var currentlyShaking = {}

var Shaker = {
    start: function()
    {
        var shakerControls = $$('.shaker');
        
        shakerControls.each(function(item, index)
        {
            currentlyShaking[index] = false;
            var linkShaker = new Fx.Styles(item, {duration: 100, wait: false});
            
            item.addEvent('mouseover', function()
            {
                if (!currentlyShaking[index])
                {
                    var initialMargin = parseInt(item.getStyle('margin-top').substring(0, item.getStyle('margin-top').length - 2));
                    var increments = new Array(9, 6, 3); 
                    currentlyShaking[index] = true;
                    
                    linkShaker.start({'margin-top': (initialMargin - increments[0])}).chain(function(){
                        linkShaker.start({'margin-top': (initialMargin + increments[0])}).chain(function(){
                            linkShaker.start({'margin-top': (initialMargin - increments[1])}).chain(function(){
                                linkShaker.start({'margin-top': (initialMargin + increments[1])}).chain(function(){
                                    linkShaker.start({'margin-top': (initialMargin - increments[2])}).chain(function(){
                                        linkShaker.start({'margin-top': initialMargin})
                                        currentlyShaking[index] = false;
                                    });
                                });
                           });
                        });
                    }); 
                }    
            });
        });
    }
};


window.addEvent('domready', Site.start);
