Array.prototype.shuffle = function() {
    var i = this.length;
    while(i){
        var j = Math.floor(Math.random()*i);
        var t = this[--i];
        this[i] = this[j];
        this[j] = t;
    }
    return this;
}

$(function() {

    var recommender = {

        //@access private
        __dt : new Date(),
        __getCookieURL : '/kyoto/recommendation/ajax/getCookie.php?',
        __setCookieURL : '/kyoto/recommendation/ajax/setCookie.php?',
        __getRecommendationURL : '/kyoto/recommendation/ajax/index.php?',
        __recommendationURL : ['/kyoto/', '/kyoto/index.html', '/kyoto/stay/', '/kyoto/stay/index.html'],
        //__recommendationURL : ['/kyoto_new/', '/kyoto_new/index.html', '/kyoto_new/recommendation.html', '/kyoto_new/stay/', '/kyoto_new/stay/index.html', '/kyoto/recommendation.html', '/kyoto/stay/', '/kyoto/stay/index.html'],

        getReferer : function() {
            if (document.referrer != '') {
                return document.referrer;
            }
            return location.href;
        },

        getRefererDomain : function() {
            var query = this.getReferer();
            if(query) {
                var domain = query.match(/^[httpsfile]+:\/{2,3}([0-9a-z\.\-:]+?):?[0-9]*?\//i)[1];
                return domain;
            }
            return false;
        },

        getQuery : function() {
            var referer = this.getReferer();
            var n = referer.indexOf('?', 0);
            if(n > -1) {
                return referer.substring(n + 1);
            }
            return false;
        },

        getQueryList : function() {
            var query = this.getQuery();
            if(query) {
                var list = new Array();
                var param = query.split('&');
                for(var i = 0; i < param.length; i++) {
                    var pos = param[i].indexOf('=');
                    if(pos > 0) {
                        var key = param[i].substring(0, pos);
                        var val = param[i].substring(pos + 1);
                        list[key] = val;
                    }
                }
                return list;
            }
            return false;
        },

        getCookie : function() {
            var text = $.ajax({
                url : this.__getCookieURL + this.__dt.getTime(),
                type : 'GET',
                dataType : 'json',
                async : false
            }).responseText;
            return text;
        },

        setCookie : function(keyword) {
            $.ajax({
                url : this.__setCookieURL+'keyword='+keyword + "&" + this.__dt.getTime(),
                type : 'GET',
                dataType : 'json',
                async : false
            });
        },

        isRecommendationURL : function(pathname) {
            for(var i = 0; i < this.__recommendationURL.length; i++) {
                if(pathname == this.__recommendationURL[i]) {
                    return true;
                }
            }
            return false;
        },

        getRecommendationURL : function(keyword, pathname) {
            $.ajax({
                url : this.__getRecommendationURL + this.__dt.getTime(),
                type : 'GET',
                dataType : 'json',
                data : {keyword : keyword, url : pathname},
                complete : function(XMLHttpRequest, textStatus) {
                    var data = eval('('+XMLHttpRequest.responseText+')');
                    if(data.status == 'success') {
                        var lp = location.pathname;
                        if (lp == '/kyoto_new/stay/' || lp == '/kyoto/stay/' || lp == '/kyoto/stay/index.html') {
                            
                            var S = XMLHttpRequest.responseText;
                            if(jQuery.browser.msie) {
                            S = S.split('"').join('&quot;');

                            }

                    		var flashvars = {
                    			jsonData: (jQuery.browser.msie) ? XMLHttpRequest.responseText.split('"').join('&quot;') : XMLHttpRequest.responseText
                    		};

                    		var params = {
                    			menu: "false",
                    			scale: "noScale",
                    			allowFullscreen: "true",
                    			allowScriptAccess: "always",
                    			bgcolor: "#000000"
                    		};
                    		var attributes = {
                    			id:"Kyotobrightonshukuhakutop"
                    		};
                            swfobject.embedSWF("/kyoto/recommendation/stay/main.swf", "altContent", "898px", "102px", "9.0.0", "expressInstall.swf", flashvars, params, attributes);
                            
                      } else {
                          var cursor_ar = new Array();
                          for (i = 0; i < data.items.length; i++) {
                              __encoded = data.items[i].url;
                              __value = decodeURIComponent(__encoded.replace(/\+/g,  " "));
                              switch(data.items[i].category) {
                                    case '1':
                                        var cat = 'stay';
                                        break;
                                    case '2':
                                        var cat = 'dish';
                                        break;
                                    default:
                                        var cat = 'none';
                                    break;
                                }

                              //top3
                              if(i < 3) {
                                  if(data.items[i].top_image) {
                                      var elm = $('<a />');
                                      elm.append('<img src="'+data.items[i].top_image+'" class="slideshow_'+i+'" width="900" height="396" />');
                                  }
                                  else {
                                     var display_image = new Array();
                                     for(var j = 0; j < data.items[i].category_image.length; j++) {
                                        display_image.push(data.items[i].category_image[j]);
                                     }

                                     display_image.shuffle();

                                     var elm = $('<a />');
                                     elm.append('<img src="'+display_image[0]+'" class="slideshow_'+i+'" width="900" height="396" />');
                                  }
                                  elm.attr('href', decodeURIComponent(data.items[i].url.replace(/\+/g, "\ ")));
                                  //add image element
                                  $('#head-area h1 .slideshow').append(elm);

                                //judge num
                                  switch(i) {
                                    case 0:
                                        var num = 'one';
                                         break;
                                    case 1:
                                         var num = 'two';
                                         break;
                                    case 2:
                                         var num = 'three';
                                         break;
                                  }

                                  cursor_ar.push('<div class="top3 png_bg"><div class="btm png_bg"><div class="'+num+' c-fix"><p class="'+cat+'"><a href="'+__value+'" class="slideshow_'+i+'">'+data.items[i].caption+'</a></p></div></div></div>');
                              }
                              else {
                                  cursor_ar.push('<li class="'+cat+' png_bg"><a href="'+__value+'" class="slideshow_'+i+' ">'+data.items[i].caption+'</a></li>');
                              }
                          }

                          $('.slideshow').cycle({
                              fx:'fade',
                              pager : '#cursor',
                              pagerEvent : 'mouseover',
                              pauseOnPagerHover : true,
                              timeout : 7000,
                              speedIn : 4000,
                              speedOut : 1000
                          });

                          var subEle = $('<ul />');

                          for(var i = 0; i < cursor_ar.length; i++) {
                              if(i < 3) {
                                  $('#recommendation #cursor > div').eq(i+1).html(cursor_ar[i]);
                              }
                              else {
                                subEle.append(cursor_ar[i]);
                                //$('#recommendation').
                              }
                          }
                          $('#recommendation .box .other').append(subEle);
                          //$('#recommendation').append(newElem);

                          /*
                          $('#recommendation ul li a').each(function(i) {
                            $(this).bind('mouseover', function() {
                                if(data.items[i].top_image) {
                                    $('#head-area h1 img').attr('src', data.items[i].top_image);
                                 }
                                 else {
                                    var display_image = new Array();
                                    for(var j = 0; j < data.items[i].category_image.length; j++) {
                                        display_image.push(data.items[i].category_image[j]);
                                    }
                                    
                                    display_image.shuffle();
                                    
                                    $('#head-area h1 img').attr('src', display_image[0]);
                                 }
                                 $('#head-area h1 img').wrap('<a href="'+decodeURIComponent(data.items[i].url.replace(/\+/g, "\ "))+'"></a>');
                            });
                          });
                          */
                      }
                    }
                    else {
                        recommender.getRecommendationURL(data.keyword, pathname);
                    }
                }
            });
        }

    };

    var refererDomain = recommender.getRefererDomain();
    var queryList = recommender.getQueryList();

    //set keyword
    if(refererDomain == 'search.yahoo.co.jp') {
        var keyword = queryList['p'];
    }
    else if (refererDomain == 'www.google.co.jp' || refererDomain == 'www.google.com') {
        var keyword = queryList['q'];
    }
    else if (refererDomain == 'www.bing.com') {
        var keyword = queryList['q'];
    }
    else {
        var keyword = queryList['test']; 
    }
    if(keyword) {
        //set Cookie
        recommender.setCookie(keyword);
    }

    if(recommender.isRecommendationURL(location.pathname)) {
        
        var data = eval('('+recommender.getCookie()+')');
        
        if(data.keyword) {
            recommender.getRecommendationURL(data.keyword, location.pathname);
        }
        else {
            recommender.getRecommendationURL('', location.pathname);
        }

    }

});

