
if (typeof PEAKVOIZ == "undefined")
{
    /**
     * The PEAKVOIZ global namespace object
     * @class PEAKVOIZ
     * @static
     */
    var PEAKVOIZ = {};
}

PEAKVOIZ.namespace = function()
{
    var a=arguments, o=null, i, j, d;
    for (i=0; i<a.length; ++i)
    {
        d=a[i].split(".");
        o=PEAKVOIZ;
        // PEAKVOIZ is implied, so it is ignored if it is included
        for (j=(d[0] == "PEAKVOIZ") ? 1 : 0; j<d.length; ++j)
        {
            o[d[j]]=o[d[j]] || {};
            o=o[d[j]];
        }
    }
    return o;
};


PEAKVOIZ.__log_enabled = null;
PEAKVOIZ.log = function(msg, cat, src)
{
    if (PEAKVOIZ.__log_enabled === null)
    {
        PEAKVOIZ.__log_enabled = (
            location.host.indexOf(".test") > -1
            || document.cookie.indexOf("debug") > -1
            || location.search.indexOf("debug") > -1
        );
        
        if (!PEAKVOIZ.__log_enabled) return;
        
        PEAKVOIZ.__log_type = null;
        if (typeof YAHOO != "undefined" && YAHOO.widget && YAHOO.widget.Logger && YAHOO.widget.Logger.log)
            PEAKVOIZ.__log_type = "yui";
        else if (PEAKVOIZ.util.Browser.isGecko && typeof console != "undefined" && typeof console.log != "undefined")
            PEAKVOIZ.__log_type = "firebug";
        else if (PEAKVOIZ.util.Browser.isSafari && typeof window.console != "undefined" && typeof window.console.log != "undefined")
            PEAKVOIZ.__log_type = "webkit";
        else if (PEAKVOIZ.util.Browser.isOpera && typeof opera == "object" && typeof opera.postError != "undefined")
            PEAKVOIZ.__log_type = "opera";
        else if (typeof console != "undefined" && (typeof console.log == "function" || typeof console.log == "object"))
            PEAKVOIZ.__log_type = "native";
    }
    if (!PEAKVOIZ.__log_enabled) return;
    
    switch (PEAKVOIZ.__log_type)
    {
        // YUI logger
        case "yui":
            return YAHOO.widget.Logger.log(msg, cat, src);
            break;
        
        // Firefox Firebug
        case "firebug":
            if (cat && (typeof console[cat] != "undefined"))
                console[cat](msg);
            else
                console.log((cat ? "["+cat.toUpperCase()+"] " : "") + msg);
            break;
            
        // Safari/WebKit JS console
        case "webkit":
            window.console.log((cat ? "["+cat.toUpperCase()+"] " : "") + msg);
            break;
        
        // Opera error console
        case "opera":
            opera.postError((cat ? "["+cat.toUpperCase()+"] " : "") + msg);
            break;

        case "native":
            console.log((cat ? "["+cat.toUpperCase()+"] " : "") + msg);
    }
};

PEAKVOIZ.register = function(name, mainClass, data) {
    var mods = PEAKVOIZ.env.modules;
    if (!mods[name]) {
        mods[name] = {versions:[], builds:[]};
    }
    var m=mods[name],v=data.version,b=data.build,ls=PEAKVOIZ.env.listeners;
    m.name = name;
    m.version = v;
    m.build = b;
    m.versions.push(v);
    m.builds.push(b);
    m.mainClass = mainClass;
    // fire the module load listeners
    for (var i=0;i<ls.length;i=i+1) {
        ls[i](m);
    }
    // label the main class
    if (mainClass) {
        mainClass.VERSION = v;
        mainClass.BUILD = b;
    } else {
        PEAKVOIZ.log("mainClass is undefined for module " + name, "warn");
    }
};


PEAKVOIZ.env = PEAKVOIZ.env || {

    modules: [],

    listeners: []
};


PEAKVOIZ.env.getVersion = function(name) {
    return PEAKVOIZ.env.modules[name] || null;
};

PEAKVOIZ.namespace("util", "user");

PEAKVOIZ.util.Browser = function()
{
    // Partly from ExtJS lib
    var ua = navigator.userAgent.toLowerCase();
    var isStrict = document.compatMode == "CSS1Compat";
    var isOpera = ua.indexOf("opera") > -1;
    var isSafari = /webkit|khtml/.test(ua);
    var isIE = ua.indexOf("msie") > -1;
    var isIE7 = ua.indexOf("msie 7") > -1;
    var isGecko = !isSafari && ua.indexOf("gecko") > -1;
    var isBorderBox = isIE && !isStrict;
    var isWindows = (ua.indexOf("windows") != -1 || ua.indexOf("win32") != -1);
    var isMac = (ua.indexOf("macintosh") != -1 || ua.indexOf("mac os x") != -1);
    var isLinux = /x11|linux|freebsd|netbsd/.test(ua);
    
    return {
        isStrict: isStrict
        ,isOpera: isOpera
        ,isSafari: isSafari
        ,isIE: isIE
        ,isIE7: isIE7
        ,isGecko: isGecko
        ,isBorderBox: isBorderBox
        ,isWindows: isWindows
        ,isMac: isMac
        ,isLinux: isLinux
    };
}();

PEAKVOIZ.register("peakvoiz", PEAKVOIZ, {version: "1.0.0", build: "1"});

PEAKVOIZ.namespace("helpers");
PEAKVOIZ.namespace("navigation");
PEAKVOIZ.namespace("user");

/* Load CSS with javascript help */

PEAKVOIZ.helpers.loadCss = function (filename) {
    var fileref = document.createElement("link");
    fileref.setAttribute("rel", "stylesheet");
    fileref.setAttribute("type", "text/css");
    fileref.setAttribute("href", filename);
    if (typeof fileref != "undefined") {
        document.getElementsByTagName("head")[0].appendChild(fileref);
    }
};

/* Used to show title as a value in input field when it's 'empty' requires title attribute */
PEAKVOIZ.helpers.grayOutInputs = function() {
    $(document).ready(function(){
        
        var applyGrayOut = function($element){
            if ($element.val() != $element.attr('title') && $element.hasClass("grayOut")) {
                $element.removeClass("grayOut");
            }
        
            $element.focus(function () {
                if ($element.val() == $element.attr('title')) {
                    $element.val("");
                    $element.removeClass("grayOut");
                }
            });
            $element.blur(function () {
                if ($element.val() == "") {
                    $element.addClass("grayOut");
                    $element.val($element.attr('title'));
                }
            });            
        };
        
        
        // grayOut all inputs with grayOut class
        $("input.grayOut").each(function(){
            applyGrayOut($(this));
        });    
    });
}();


/* peakQuickFilter needs jquery.autocomplete.js to work */

PEAKVOIZ.helpers.peakQuickFilter = function() {
    var callClearTimer;
    return {
        apply: function($element, callback, clearCallback) {
            var $quickfilterInput = $element.find("input");
            var $quickfilterClear = $element.find("a.clear");
            
            if ($quickfilterClear.length > 0) {
                $quickfilterClear.click(function(ev){
                    ev.preventDefault();
                    var defaultValue = $quickfilterInput.attr("title");
                    $quickfilterInput.addClass("grayOut");
                    $quickfilterInput.val(defaultValue);
                    $quickfilterClear.fadeOut('fast');

                    if (typeof clearCallback == "function") {
                        clearCallback(ev);
                    }
                });
                
                $quickfilterInput.keyup(function(){
                    var quickfilterInputValue = $quickfilterInput.val();
                    if (quickfilterInputValue.length > 0) {
                        $quickfilterClear.fadeIn('fast');
                    } else {
                        $quickfilterClear.fadeOut('fast');

                        callClearTimer = setTimeout(function() {
                            if ($quickfilterInput.val() == "") {
                                if (typeof clearCallback == "function") {
                                    clearCallback();
                                }
                            }
                        }, 1000);
                    }
                });
            }
            
            if ($quickfilterInput.length > 0 && $element.find("option").length > 0) {
                var peakQuickList = [];
                
                $element.find("option").each(function(){
                    var country = {"cc": this.value, "name": $(this).html()};
                    peakQuickList.push(country);
                });

                $quickfilterInput.closest("form").submit(function(ev){
                    ev.preventDefault();
                });
                
                $quickfilterInput.autocomplete(peakQuickList, {
                    max: 3,
                    scroll: false,
                    matchContains: false,
                    beforeShow: function(data,max){
                        updateQuickfilterStatus(data,max,'false');
                    },
                    formatItem: function(row, i, max) {
                        return "<span class=\"flag "+ row.cc +"\"></span> " + row.name;
                    },
                    formatMatch: function(row, i, max) {
                        var aliasMatch = "";

                        if (row.aliases) {
                            for (var i = 0; i < row.aliases.length; i++) {
                                aliasMatch += row.aliases[i] + " ";
                            }
                        }

                        return row.name + " " + row.cc + " " + aliasMatch;
                    },
                    formatResult: function(row) {
                        return row.name;
                    },
                    onEmpty: function() {
                        if (typeof(jsCopy) != 'undefined' && jsCopy.noMatches) {
                            var noResults = jsCopy.noMatches;

                            if ($("li.peakQuickFilterNone", $results).length <= 0) {
                                $results.append("<li class=\"peakQuickFilterNone\">"+noResults.replace(/\%search\%/g, $quickfilterInput.val())+"</li>");
                            } else {
                                $("li.peakQuickFilterNone", $results).html(noResults.replace(/\%search\%/g, $quickfilterInput.val()));
                                $("li.peakQuickFilterNone", $results).show();
                            }

                            return false;
                        }
                    }
                });
                
                $quickfilterInput.result(function(event, data, formatted) {
                    callback(event, data, formatted, data.cc);
                });
            }
            
            var updateQuickfilterStatus = function(data, max, dosearch) {
                $results = $("div.ac_results ul");

                $("li.peakQuickFilterNone", $results).hide();

                if (data.length > max && typeof(jsCopy) != 'undefined') {
                    var more = data.length - max;
                    if (more == 1) {
                        var moreResults = jsCopy.oneMoreMatch;
                    } else {
                        var moreResults = jsCopy.moreMatches;
                    }
                    if($("li.peakQuickFilterMax", $results).length <= 0) {
                        $results.append("<li class=\"peakQuickFilterMax\">"+moreResults.replace('%more%', more)+"</li>");
                    } else {
                        $("li.peakQuickFilterMax", $results).html(moreResults.replace('%more%', more));
                        $("li.peakQuickFilterMax", $results).show();
                    }
                } else {
                    $("li.peakQuickFilterMax", $results).hide();
                }
            };
        }
    };
}();

/**
 * Apply generic Quickfilters if theres any
 */
PEAKVOIZ.helpers.applyGenericQuickfilters = function() {
    $(document).ready(function(){
        if ($("form.genericQuickfilter").length > 0) {
            $("form.genericQuickfilter").each(function(){
                var $form = $(this);
                if ($(this).find("select.peakQuickList option").length > 0 && $(this).find("div.peakQuickFilter").length > 0) {
                    PEAKVOIZ.helpers.peakQuickFilter.apply($(this).find("div.peakQuickFilter"), function(event, data, formatted, formattedValue) {
                        if (data) {
                            var formAction = $form.attr("action");
                            var fieldName = $form.find("select.peakQuickList").attr("name");
                            // redirect to form action url with select dropdown element name set as a parameter
                            window.location = formAction + "?" + fieldName + "=" + formattedValue.toLowerCase();
                        }
                    });
                }
            });
        }
    });
}();

/**
 * Apply generic Quickfilters if theres any
 */
PEAKVOIZ.helpers.HomepageRateWidget = function() {

    var getPackagePrices = function(cc, fnCallback) {
        if (PEAKVOIZ.ratePriceApi) {
            showLoading();

            if ($(".peakRatesArea .peakRatesIntro").is(":visible")) {
                $(".peakRatesArea .peakRatesIntro").hide("slideup");
                $(".peakRatesArea .peakCountryRateDetails").show("fade");
            }


            $.ajax({
                url: PEAKVOIZ.ratePriceApi.replace("%val", cc)
                , type: "get"
                , success: function(data) {
                    if (data) {

                                var mobile_rate = 0;
                                var other_rate =0;
                                var other_desc =null;
                                var landline_rate = 0;
                                var sms_rate = 0;
                                
                     var data = JSON.parse(data);

                        endLoading(function() {
                            
                            var minIndex = -1;
                            var minPrice = 999999;
                            if (!data.success) {
								
                                if ($(".peakRatesArea .payMonthly .peakPaymentNotFound").length && $(".peakRatesArea").hasClass("showNotFoundMessage")) {
                                    $(".peakRatesArea .payMonthly .paymentDetails:visible").hide("fade", function() {
                                        $(".peakRatesArea .payMonthly .peakPaymentNotFound:hidden").show("fade");
                                    });
                                } else {
                                    $(".peakRatesArea .payMonthly:visible").hide("fade");
                                }
                                

                            } else {

                                mobile_rate = data.mobile_rate;
                                other_rate = data.other_rate;
                                other_desc =data.other_desc;
                                landline_rate = data.rate;
                                sms_rate  = data.sms_rate;
                                var other_row_header ="";
                                var other_row_data ="";
                                var other_desc_row_data = "";
                                var total_num_col = 3;


                                if(other_rate != 0)
                                {
                                    total_num_col = 4;
                                    other_row_header = "<td align='center' width='"+(100/total_num_col)+"%' valign='middle'><h2>Other*</h2></td>";
                                    other_row_data = "<td align='center' width='"+(100/total_num_col)+"%' valign='middle'><h3 class='othernoVat'>US$"+other_rate+"<br /><span class='minute'>per&nbsp;minute</span></h3></td>";
                                    other_desc_row_data = "<tr ><td colspan='4' class='fillrates_header_td'><div class='othDesc'><br>* "+other_desc+"</div></td></tr>";
                                }

                                /*
                                 *Data
                                 */
                                
                                $(".fillrates_header").html("<table width='100%'><tr><td colspan='4'>&nbsp;</td></tr></table>");
                                var table_header = "<table  width='100%'><tr>\n\
                                <td align='center' width='"+(100/total_num_col)+"%' valign='middle'><h2>Mobile</h2></td>\n\
                                <td align='center' width='"+(100/total_num_col)+"%' valign='middle'><h2>Fixed</h2></td>\n\
                                "+other_row_header+"\n\
                                <td align='center' width='"+(100/total_num_col)+"%' valign='middle' class='hello'><h2>SMS</h2></td>\n\
                                </tr></table>";
                                $(".fillrates_header").html(table_header);
     
                                
                                $(".fillrates_data").html("<table  width='100%'><tr><td colspan='4'>Loading....</td></tr></table>");
                                var table = "<table width='100%'><tr>\n\
                                <td align='center' width='"+(100/total_num_col)+"%' valign='middle'><h3 class='mobilenoVat'>US$"+mobile_rate+"<br /><span class='minute'>per&nbsp;minute</span></h3></td>\n\
                                <td align='center' width='"+(100/total_num_col)+"%' valign='middle'><h3 class='landlinenoVat'>US$"+landline_rate+"<br /><span class='minute'>per&nbsp;minute</span></h3></td>\n\
                                "+other_row_data+"\n\
                                <td class='fillrates_header_td' align='center' width='"+(100/total_num_col)+"%' valign='middle'><h3 class='smsnoVat'>US$"+sms_rate+"<br /><span class='minute'>per&nbsp;SMS</span></h3></td>\n\
                                </tr>"+other_desc_row_data+"</table>";
                                $(".fillrates_data").html(table);


                                /*
                                 * Effects
                                 */
                                $(".fillrates_header").hide();
                                $(".fillrates_data").hide();


                                $(".fillrates_header").fadeOut("slow");
                                $(".fillrates_data").fadeOut("slow");
                                
                                $(".fillrates_header").fadeIn("slow");
                                $(".fillrates_data").fadeIn("slow");
                                

                            }

                            fnCallback();

                        });

                    } else {
                        endLoading(function() {
                            if ($(".peakRatesArea .payMonthly .peakPaymentNotFound").length) {
                                $(".peakRatesArea .payMonthly .paymentDetails:visible").hide("fade", function() {
                                    $(".peakRatesArea .payMonthly .peakPaymentNotFound:hidden").show("fade");
                                });
                            } else {
                                $(".peakRatesArea .payMonthly:visible").hide("fade");
                            }

                            fnCallback();

                        });
                        
                    }

                }
                , error: function(data) {
                    $(".peakRatesArea .payMonthly:visible").fadeOut("fast");
                }
            });
        }
    };

    var sleepTime = 1100,
        running = false,
        timer = null,
        timeoutCallback = null;

    var showLoading = function() {
        var loadingOverlay = $(".peakRatesArea .peakCountryRateDetails .loadingOverlay");

        if (!$(".peakRatesArea .peakCountryRateDetails .loadingOverlay").length) {
            loadingOverlay = $("<div class=\"loadingOverlay\"></div>").css({"opacity": 0});
            $(".peakRatesArea .peakCountryRateDetails").append(loadingOverlay);
            loadingOverlay.fadeOut(0);
        }

        if (running) {
            clearTimeout(timer);
            timer = setTimeout(function() {
                timer = null;
                running = false;
                if (typeof timeoutCallback == "function") {
                    timeoutCallback();
                    timeoutCallback = null;
                }
            }, sleepTime);

        } else {
            running = true;
            timer = setTimeout(function() {
                timer = null;
                running = false;
                if (typeof timeoutCallback == "function") {
                    timeoutCallback();
                    timeoutCallback = null;
                }
            }, sleepTime);

        }

        $(".peakRatesArea .peakCountryRateDetails .loadingOverlay").fadeTo(300, 0.9);
    };

    var endLoading = function(fnCallback) {
        if (running) {
            timeoutCallback = fnCallback;

        } else {
            fnCallback();
            timeoutCallback = null;

        }
    };

    $(document).ready(function(){
        if ($("#peakHomeRateSelector").length > 0 && PEAKVOIZ.callRates) {
            $("#peakHomeRateSelector").each(function(){
                if (PEAKVOIZ.callRates.globalRate) {
                    $(".peakRatesArea .peakRatesIntro .globalRate").text(PEAKVOIZ.callRates.globalRate.rate);
                }

                if ($(this).parents(".peakRatesArea").hasClass("pageRates")) {
                    $(this).parents(".peakRatesArea").find("p.learnMore .buttonSimpleMedium").removeClass("buttonSimpleMedium");
                }

                

                if ($(this).find("select.peakQuickList option").length) {
                    PEAKVOIZ.helpers.peakQuickFilter.apply($(this), function(event, data, formatted, formattedValue) {
                        if (data) {
                            getPackagePrices(data.cc, function() {
                                var rates = PEAKVOIZ.callRates[data.cc];
                                $(".peakRatesArea .peakPeakEasy .noVat .price").text(rates.rate);
                                $(".peakRatesArea .peakPeakEasy .vat .price").text(rates.rateVat);

                                $(".peakRatesArea .peakCountryRateDetails .loadingOverlay").fadeOut(300);
                            });
                        }
                    }, function() {
                        if ($(".peakRatesArea .peakRatesIntro").length && $(".peakRatesArea .peakRatesIntro").not(":visible")) {
                            $(".peakRatesArea .peakRatesIntro").show("slidedown");
                            $(".peakRatesArea .peakCountryRateDetails").hide("fade");
                           
                        }
                    });
                }
            });
        }
    });
}();


PEAKVOIZ.helpers.ExplorerToggle = function() {
	$(document).ready(function() {
		BR = $.browser;
		if (BR.msie && BR.version < 7) {
			$("a.link",".toggle").bind("mouseover",function() {
				$(this).find('img.state').show();
			});
			$("a.link",".toggle").bind("mouseout",function() {
				$(this).find('img.state').hide();
			});
		}
	});
}();










