if (window['console'] === undefined) {
    window.console = {
        log: Prototype.emptyFunction
    };
};

if (CA === undefined) {
    var CA = {};
}

CA.Misc = {
    isSliding: false,
    intCurrentPicNum: 1,
    slidePic: function (intPicNum, callback) {
        new Effect.Opacity($('picShade').identify(), {
            from: 0,
            to: .85,
            duration: 0.35,
            afterFinish: function () {
                if (CA.Misc.intCurrentPicNum < intPicNum) {
                    var intX = -(603 * (intPicNum - CA.Misc.intCurrentPicNum));
                } else {
                    var intX = 603 * (CA.Misc.intCurrentPicNum - intPicNum);
                }

                new Effect.Parallel([
                new Effect.Move($('workPicsList').identify(), {
                    x: intX,
                    duration: 0.4,
                    fps: 100,
                    transition: Effect.Transitions.easeOutCubic
                }), new Effect.Move($('workDescriptionList').identify(), {
                    x: intX,
                    duration: 0.4,
                    fps: 100,
                    transition: Effect.Transitions.easeOutCubic
                })], {
                    duration: 0.4,
                    afterFinish: function () {
                        new Effect.Opacity($('picShade').identify(), {
                            from: .85,
                            to: 0,
                            duration: 0.35
                        });
                        $$('div.slideIndy').each(function (obj) {
                            obj.removeClassName('slideIndyActive');
                        });
                        CA.Misc.intCurrentPicNum = intPicNum;
                        callback();
                    }
                });
            }
        });
    },
    toggleToolTip: function (strElemId, callback, strMethod) {
        //if(!CA.Misc.isSliding){ 
        //CA.Misc.isSliding = true;
        if (strMethod == 'show') {
            $(strElemId).setStyle('top:-35px;');
            var intY = 20;
            var intFrom = 0;
            var intTo = 1;
        } else {
            $(strElemId).setStyle('top:-15px;');
            var intY = -20;
            var intFrom = 1;
            var intTo = 0;
        }

        new Effect.Parallel([
        new Effect.Move($(strElemId).identify(), {
            y: intY,
            fps: 30,
            transition: Effect.Transitions.easeOutCubic
        }), new Effect.Opacity($(strElemId).identify(), {
            from: intFrom,
            to: intTo
        })], {
            duration: 0.4,
            afterFinish: function () {
                CA.Misc.isSliding = false;
                callback();
                console.log('CA.Misc.isSliding:' + CA.Misc.isSliding);
            }
        });
        //}
    },
    toggleViewPicButton: function (strMethod) {
        if (strMethod == 'show') {
            $('picShade').setStyle('opacity:0.35;');
            var intFrom = 0;
            var intTo = .35;
        } else {
            $('picShade').setStyle('opacity:0;');
            var intFrom = .35;
            var intTo = 0;
        }

        //new Effect.Opacity($('picShade').identify(), { from: intFrom, to: intTo, duration:0.35 }) ;
    },
    isValidEmail: function (str) {
        var s = str.strip();
        var at = "@";
        var dot = ".";
        var lat = s.indexOf(at);
        var lstr = s.length;
        var ldot = s.indexOf(dot);
        if (s.indexOf(at) == -1 || (s.indexOf(at) == -1 || s.indexOf(at) == 0 || s.indexOf(at) == lstr) || (s.indexOf(dot) == -1 || s.indexOf(dot) == 0 || s.indexOf(dot) == lstr) || (s.indexOf(at, (lat + 1)) != -1) || (s.substring(lat - 1, lat) == dot || s.substring(lat + 1, lat + 2) == dot) || (s.indexOf(dot, (lat + 2)) == -1) || (s.indexOf(" ") != -1)) {
            return false;
        }
        return true;
    },
    submitSubscriptionMail: function (strSubscriberCity, strSubscriberCountry) {
        var strEmail = $('subscribeBox').value;
        var emailIsValid = CA.Misc.isValidEmail(strEmail);
        if (strEmail != '') {
            try {
                $('subscribeBox').removeClassName('invalidEmail');
            } catch(ex) {
                //
            } finally {
                if (emailIsValid) {
                  var url = 'subscribe.php?strEmail='+strEmail+'&strSubscriberCity='+strSubscriberCity+'&strSubscriberCountry='+strSubscriberCountry;
                  new Ajax.Request(url, {
                    method: 'get',
                    onCreate: function() {
                      $('subscribeSpinner').show();
                    },
                    onComplete: function(response) {
                      $('subscribeSpinner').hide();
                      var strResponse = response.responseText;
                      if(strResponse ==='alreadyExist'){ 
                        alert('Email already exist.');
                        $('subscribeBox').value = '';
                      }
                      if(strResponse==='success'){           
                        $('subscribeBox').value = '';
                        alert('Thank you for subscribing.');
                      }
                    }
                  });
                } else {
                    alert('invalid email format..');
                    $('subscribeBox').focus();
                }
            }
        } else if (strEmail == '') {
            $('subscribeBox').addClassName('invalidEmail');
            $('subscribeBox').focus();
        }
    },
    getClientText: function () {
        var url = 'client-questionnaire.zip';
        var elemIF = Builder.node('iframe', {
            id: 'qIframe'
        });
        elemIF.setAttribute('src', url);
        elemIF.style.display = 'none';
        if ($('qIframe') === null) {
            document.body.appendChild(elemIF);
        } else {
            $('qIframe').remove();
            document.body.appendChild(elemIF);
        }
    },
    openMailEditor: function () {
        window.location.href = "mailto:inquiry@madebychocaholic.com";
    },
    attachEventObservers: function () {
        $$('div.slideIndy').each(function (obj) {
            obj.observe('click', function (event) {
                var intPicNum = obj.identify().gsub('slide', '');
                CA.Misc.slidePic(intPicNum, function () {
                    $(obj.identify()).addClassName('slideIndyActive');
                });
            });
        });

        $('picShadeDummy').observe('mouseover', function (event) {
            CA.Misc.toggleViewPicButton('show');
        });

        $('picShadeDummy').observe('mouseout', function (event) {
            CA.Misc.toggleViewPicButton('hide');
        });

        $('btQuestionnaire').observe('mouseover', function (event) {
            CA.Misc.toggleToolTip('btQuestionnaireTip', function () {
                $('btQuestionnaireTip').setStyle('opacity:1;');
            },
            'show');
        });

        $('btQuestionnaire').observe('mouseout', function (event) {
            CA.Misc.toggleToolTip('btQuestionnaireTip', function () {},
            'hide');
        });

        $('btQuestionnaire').observe('click', function (event) {
            CA.Misc.getClientText();
        });

        $('btEmail').observe('click', function (event) {
            CA.Misc.openMailEditor();
        });

        $('btEmail').observe('mouseover', function (event) {
            CA.Misc.toggleToolTip('btEmailTip', function () {
                $('btEmailTip').setStyle('opacity:1;');
            },
            'show');
        });

        $('btEmail').observe('mouseout', function (event) {
            CA.Misc.toggleToolTip('btEmailTip', function () {},
            'hide');
        });


    }
};

CA.UADetector = {
    init: function () {
        this.Browser = this.searchString(this.arrBrowserData) || "An unknown Browser";
        this.Version = this.searchVersion(navigator.userAgent) || this.searchVersion(navigator.appVersion) || "an unknown Version";
        this.OS = this.searchString(this.arrOSData) || "an unknown OS";
    },
    searchString: function (data) {
        for (var i = 0; i < data.length; i++) {
            var dataString = data[i].string;
            var dataProp = data[i].prop;
            this.VersionSearchString = data[i].VersionSearch || data[i].identity;
            if (dataString) {
                if (dataString.indexOf(data[i].subString) != -1) return data[i].identity;
            }
            else if (dataProp) return data[i].identity;
        }
    },
    searchVersion: function (dataString) {
        var index = dataString.indexOf(this.VersionSearchString);
        if (index == -1) return;
        return parseFloat(dataString.substring(index + this.VersionSearchString.length + 1));
    },
    arrBrowserData: [{
        string: navigator.userAgent,
        subString: "Chrome",
        identity: "Chrome"
    },
    {
        string: navigator.userAgent,
        subString: "OmniWeb",
        VersionSearch: "OmniWeb/",
        identity: "OmniWeb"
    },
    {
        string: navigator.vendor,
        subString: "Apple",
        identity: "Safari",
        VersionSearch: "Version"
    },
    {
        prop: window.opera,
        identity: "Opera"
    },
    {
        string: navigator.vendor,
        subString: "iCab",
        identity: "iCab"
    },
    {
        string: navigator.vendor,
        subString: "KDE",
        identity: "Konqueror"
    },
    {
        string: navigator.userAgent,
        subString: "Firefox",
        identity: "Firefox"
    },
    {
        string: navigator.vendor,
        subString: "Camino",
        identity: "Camino"
    },
    { // for newer Netscapes (6+)
        string: navigator.userAgent,
        subString: "Netscape",
        identity: "Netscape"
    },
    {
        string: navigator.userAgent,
        subString: "MSIE",
        identity: "IE",
        VersionSearch: "MSIE"
    },
    {
        string: navigator.userAgent,
        subString: "Gecko",
        identity: "Mozilla",
        VersionSearch: "rv"
    },
    { // for older Netscapes (4-)
        string: navigator.userAgent,
        subString: "Mozilla",
        identity: "Netscape",
        VersionSearch: "Mozilla"
    }],
    arrOSData: [{
        string: navigator.platform,
        subString: "Win",
        identity: "Win"
    },
    {
        string: navigator.platform,
        subString: "Mac",
        identity: "Mac"
    },
    {
        string: navigator.userAgent,
        subString: "iPhone",
        identity: "iPhone/iPod"
    },
    {
        string: navigator.platform,
        subString: "Linux",
        identity: "Linux"
    }]

};

CA.InlineLabel = Class.create({
	initialize : function(){
	  // Select all textboxes and assign them to an array
	  var textboxes = $$('form.mobileme input.input-text');
	  // Iterate through all textboxes in the form
	  textboxes.each(function(input, index){
	    var label = input.previous();
	    // TimedObserver to check for autocomplete	
	    if (index == 0){
	      new Form.Observer(input.up('form'), 0.1, function(form, value) {
	        textboxes.each(function(inputX){
	          if (!inputX.value.empty()) {
	            inputX.previous().addClassName('hastext');
	          }
	        });
	      });
	    }
	    // Fade the label back when a field gains focus		
	    input.onfocus = function(){
	      if (input.value.empty()){
	        label.addClassName('focus');            
	      }
	    };
	    // Check if a field is empty when the user switches out
	    input.onblur = function(){
	      if (input.value.empty()){
	        label.removeClassName('focus').removeClassName('hastext');          
	      }
	    };
	    // Fade the label back if a field has text		
	    if (!input.value.empty()) {
	      label.addClassName('hastext');
	    }else{
		label.removeClassName('hastext');
		}
		
		
	    // Fade the label back when the user starts to type		
	    input.onkeypress = function(){
	      label.addClassName('hastext');
	    };
	  });
	}
});

CA.Observers = {
    contentLoaded: function () {
        // do anything when DOM is loaded
        CA.UADetector.init();
        new CA.InlineLabel('#formRequest');
        var strSubscriberCity = '',
        strSubscriberCountry = '';
        geofill.find({
            callback: function (o) {
                strSubscriberCity = o.city;
                strSubscriberCountry = o.country;
                console.log(strSubscriberCity);
                console.log(strSubscriberCountry);
            }
        });

        try {
            var parent = document.getElementsByTagName("html")[0];
            var strBrowser = CA.UADetector.Browser.toLowerCase();
            var strOS = CA.UADetector.OS.toLowerCase();
            var strVersion = CA.UADetector.Version;
            if ((strBrowser == 'firefox') && (strVersion == '3.5')) {
                strVersion = '35';
                parent.className = strBrowser + strVersion + ' ' + strOS;
            } else {
                parent.className = strBrowser + strVersion + ' ' + strOS;
            }
        } catch(ex) {
            console.log(ex);
        }
        $('subscribeSpinner').hide();
        $('btQuestionnaireTip').setStyle('opacity:0;');
        $('btEmailTip').setStyle('opacity:0;');
        $('picShade').setStyle('opacity:0;');
        CA.Misc.attachEventObservers();
        $('subscribeButton').observe('click', function (event) {
            CA.Misc.submitSubscriptionMail(strSubscriberCity, strSubscriberCountry);
        });
    }
};

document.observe('dom:loaded', CA.Observers.contentLoaded.bind(CA.Observers));