String.prototype.trim = function(){return this.replace(/(^\s*)|(\s*$)/g, "");};
String.prototype.startsWith = function(str){return this.substring(0,str.length)==str;};
String.prototype.endsWith = function(str){return this.lastIndexOf(str)==this.length-str.length;};
String.prototype.pad = function(l, s, t){
	return s || (s = " "), (l -= this.length) > 0 ? (s = new Array(Math.ceil(l / s.length)
		+ 1).join(s)).substr(0, t = !t ? l : t == 1 ? 0 : Math.ceil(l / 2))
		+ this + s.substr(0, l - t) : this;
}

var is_IE6 = ((true==jQuery.browser.msie) && jQuery.browser.version.indexOf("6.")==0);

function init_headerComplete(){
	hideDropDowns();
	
	jQuery("#offer_phrase marquee").marquee("phrase")
		.mouseover(function(){$(this).trigger("stop");})
		.mouseout(function(){$(this).trigger("start");})
		.mousemove(function(event){if ($(this).data("drag") == true){this.scrollLeft = $(this).data("scrollX") + ($(this).data("x") - event.clientX);}})
		.mousedown(function(event){$(this).data("drag", true).data("x", event.clientX).data("scrollX", this.scrollLeft);})
		.mouseup(function(){$(this).data("drag", false);})
		.bind("end", function(){
			var w1 = $("#offer_phrase div.phrase>div").width();
			if (PgConf.site=="TG"){
				this.scrollLeft = w1;
			}else{
				var w2 = $("#offer_phrase div.phrase").width();
				this.scrollLeft = w1 / 2 + w2 / 2;
			}
		})
	;
}
//function init_pageComplete(){
//	
//}
//if(typeof(jQuery)!="undefined")$(document).ready(init_pageComplete);

function PR_(id){
	return {
		  node: document.getElementById(id)
		, write: function(html){ alert(html); }
	};
}

var timeout	= 500, ddm_show_timer = 0, ddm_hide_timer = 0;
var closetimer = 0;
var ddmenuitem = 0;
function hideDropDowns(tab, no_delay) {
	if (ddm_show_timer){window.clearTimeout(ddm_show_timer); ddm_show_timer = 0;}
	//var exit_ddmenuitem = tab? document.getElementById('dropdown' + tab): ddmenuitem;
	//if(exit_ddmenuitem){
		//console.log("hide "+ tab +", "+ no_delay);
		var t = no_delay? 0: 500;
		if (t){ddm_hide_timer = window.setTimeout("hideDropDowns("+ tab +",true);", t); return;}
		else if (ddm_hide_timer){window.clearTimeout(ddm_hide_timer); ddm_hide_timer = 0;}
		
		if (ddmenuitem) ddmenuitem.style.visibility = 'hidden';
		
		if (no_delay){
			var nd, is_TG = PgConf.site=="TG";
			for (var i=1; i<14; i++){
				nd = document.getElementById("tab"+ i);
				if (nd) nd.style.backgroundImage = is_TG ? "url(../images/tg/bg_nav_li_a.png)" : "url(../images/go/cat_downarrow.gif)";
			}
		}
		ddmenuitem = null;
	//}
}
function showDropDown(tab,t) {
	//console.log("show "+ tab +", "+ t);
	var new_ddmenuitem = document.getElementById('dropdown' + tab);
	
	if (ddm_hide_timer && new_ddmenuitem === ddmenuitem){window.clearTimeout(ddm_hide_timer); ddm_hide_timer = 0;}
	else if (new_ddmenuitem !== ddmenuitem) hideDropDowns(null, true);
	
	if (new_ddmenuitem === ddmenuitem) return;
	
	if (t){ddm_show_timer = window.setTimeout("showDropDown('"+ tab +"');", t); return;}
	else if (ddm_show_timer){window.clearTimeout(ddm_show_timer); ddm_show_timer = 0;}
	
	ddmenuitem = new_ddmenuitem;
	
	ddmenuitem.style.visibility = 'visible';
	if (document.getElementById('newslett')) {
		var newImage = "/images/tg/bg_emailblock_off.jpg";
		document.getElementById('newslett').src = newImage;
	}
	var newImage = "url()";
	document.getElementById('tab' + tab).style.backgroundImage = newImage;
}

function showEmailBlock() {
	ddmenuitem = document.getElementById('emailblock');
	ddmenuitem.style.visibility = 'visible';
	var newImage = "/images/TG/bg_emailblock_on.jpg";
	document.getElementById('newslett').src = newImage;
}
function hideEmailBlock() {
	ddmenuitem = document.getElementById('emailblock');
	ddmenuitem.style.visibility = 'hidden';
	var newImage = "/images/TG/bg_emailblock_off.jpg";
	document.getElementById('newslett').src = newImage;
}
function showMoreViewed () {
	document.getElementById('moreViewed').style.display = 'block';
	document.getElementById('moreLink').style.display = 'none';
}
function isEmpty(fld){
	return ! (fld 
  		&& ( (typeof(fld)=="string" && fld.length) || (typeof(fld)=="object" && fld.value.length) )
	);
}
function isNotEmpty(fld){
	return ! isEmpty(fld);
}
function alltrim(str) {
	return str.replace(/^\s+|\s+$/g, '');
}
function IsNumeric(sText)
{
   var ValidChars = "0123456789";
   var IsNumber=true;
   var Char;
   for (i = 0; i < sText.length && IsNumber == true; i++) 
      { 
      Char = sText.charAt(i); 
      if (ValidChars.indexOf(Char) == -1) 
         {
         IsNumber = false;
         }
      }
   return IsNumber;   
}
function isEmail(mailvalue) {
	if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(mailvalue))
	{	return (true)
	}
	return (false)
}

var util = new function(){
	var swf_v_player;
	var swf_v_player_canvas = {backgroundColor:"#E3ECED"};
	//var swf_v_player_screen = {width:640, height:480};
	var swf_v_player_controls = {
		all: false, play: true, time: false, scrubber: true, mute: false, volume: false, fullscreen: false,
		sliderGradient: 'none', sliderColor: '#BFD4D7', progressColor: '#AEC8CC', progressGradient: 'none',
		volumeSliderGradient: 'none', volumeSliderColor: '#000000',
		backgroundGradient: 'none', backgroundColor: 'transparent',
		borderRadius: 20,
		height: 25,
		opacity: 1
	};
	var swf_v_player_plugins = {
		//controlbar: null
		controls: swf_v_player_controls
	};
	
	this.do_video_init = function(obj){
		if (typeof(obj)=="object" && !swf_v_player.initPlay) setTimeout("util.do_video_init(0)", 300);
		else {//alert(clip.initPlay);
			//var clip = swf_v_player.getClip(0);
			if (!swf_v_player.initPlay) swf_v_player.pause();
			swf_v_player["initPlay"] = true;
			//clip.update({autoPlay:false, initPlay:true});
		}
	};
	
	this.add_flash_video = function(node_id, url, initPlay){
		if(!this.flash_video_ok())return false;
		switch (PgConf.site){
			case "TG":swf_v_player_canvas.backgroundColor = "#E3ECED"; break;
			case "GO":swf_v_player_canvas.backgroundColor = "#F8EFDC"; break;
			case "KM":swf_v_player_canvas.backgroundColor = "#E6E6E6"; break;
		}
		swf_v_player = flowplayer(node_id, "/flash/flowplayer-3.1.2.swf", {
			clip: {autoPlay: true, scaling: "fit", onStart: this.do_video_init},
			canvas: swf_v_player_canvas, plugins: swf_v_player_plugins
		});
		swf_v_player["initPlay"] = initPlay? true: false;
		swf_v_player.play({url: url});
		return true;
	};
	
	this.set_flash_video = function(node_id, url, initPlay){
		if(!this.flash_video_ok())return false;
		swf_v_player.stop();
		swf_v_player["initPlay"] = initPlay? true: false;
		swf_v_player.play({url: url});
		return true;
	};
	
	this.show_flash_video = function(node_id){	//use to avoid display toggle glitches in firefox
		document.getElementById(node_id).style.display="block";
		document.getElementById(node_id).style.height="auto";
		if(swf_v_player){swf_v_player.show(); swf_v_player.resume();}
	};
	
	this.hide_flash_video = function(node_id){	//use to avoid display toggle glitches in firefox
		if(swf_v_player){swf_v_player.pause(); swf_v_player.hide();}
		document.getElementById(node_id).style.height="0px";
	};
	
	this.flash_video_ok = function(){
		if (typeof(flowplayer)=="undefined"){alert("A flash video player is not installed!");return false;}else return true;
	};
	
	this.PopupWndw = function(url, WndwName, WndwHandle, w, h,
	 Menubar, Resizable, Scrollbars, Status, Toolbar, bSilent)
	{	var cur_url; try{cur_url=WndwHandle.document.location;}catch(e){}
		if(WndwHandle!=null && typeof(WndwHandle)=="object" && !WndwHandle.closed && cur_url==url){
			WndwHandle.focus();
		}else{
			var Width=(w)? w: 620, Height=(h)? h: 400;
			var screenPosX = window.screen.availWidth / 2 - Width / 2;
			var screenPosY = window.screen.availHeight / 2 - Height / 2 -30;
			Menubar=(!Menubar)? "no": "yes";
			Resizable=(!Resizable)? "no": "yes";
			Scrollbars=(Scrollbars==null||Scrollbars)? "yes": "no";
			Status=(Status==null||Status)? "yes": "no";
			Toolbar=(!Toolbar)? "no": "yes";
			
			WndwHandle = window.open(url, (WndwName? WndwName: "Wndw"), 
			 "dependent=yes,hotkeys=no,width=" + Width + ",height=" + Height + ",left=" + screenPosX + ",top=" + screenPosY 
			 + ",menubar="+Menubar+",resizable="+Resizable+",scrollbars="+Scrollbars+",status="+Status+",toolbar="+Toolbar);
			if(WndwHandle){try{WndwHandle.focus();}catch(e){WndwHandle=null;}}
			if(!WndwHandle&&!bSilent) alert("Popup window could not be launched or was blocked! \nPlease allow popup windows for this site.");
		}
		return WndwHandle;
	};
//end util
};

function newSearch() {
	var form = document.forms["frmSearch"];
	if (form.keyword.value.toLowerCase().trim().startsWith("enter an item")){
		alert("Please enter a keyword or item number before continuing.");
		return false;
	}
}

//<!-- Google Analytics Custom Segmentation Function -->
function setGACustomVar(key,value){
	try {
	_gaq.push(['_setCustomVar',
		1,                   // This custom var is set to slot #1.  Required parameter.
		key,     // The name acts as a kind of category for the user activity.  Required parameter.
		value,               // This value of the custom variable.  Required parameter.
		2                    // Sets the scope to session-level.  Optional parameter.
	]);
	_gaq.push(['_trackEvent', key, value]);
	return true;
	} catch(err) {}
}
//<!-- End of Google Analytics Custom Segmentation Function -->


//=== BEGIN http://remysharp.com/tag/marquee
(function ($) {
    $.fn.marquee = function (klass) {
        var newMarquee = [],
            last = this.length;

        // works out the left or right hand reset position, based on scroll
        // behavior, current direction and new direction
        function getReset(newDir, marqueeRedux, marqueeState) {
            var behavior = marqueeState.behavior, width = marqueeState.width, dir = marqueeState.dir;
            var r = 0;
            if (behavior == "alternate") {
                r = newDir == 1 ? marqueeRedux[marqueeState.widthAxis] - (width*2) : width;
            } else if (behavior == "slide") {
                if (newDir == -1) {
                    r = dir == -1 ? marqueeRedux[marqueeState.widthAxis] : width;
                } else {
                    r = dir == -1 ? marqueeRedux[marqueeState.widthAxis] - (width*2) : 0;
                }
            } else {
                r = newDir == -1 ? marqueeRedux[marqueeState.widthAxis] : 0;
            }
            return r;
        }

        // single "thread" animation
        function animateMarquee() {
            var i = newMarquee.length,
                marqueeRedux = null,
                $marqueeRedux = null,
                marqueeState = {},
                newMarqueeList = [],
                hitedge = false;
                
            while (i--) {
                marqueeRedux = newMarquee[i];
                $marqueeRedux = $(marqueeRedux);
                marqueeState = $marqueeRedux.data("marqueeState");
                
                if ($marqueeRedux.data("paused") !== true) {
                    // TODO read scrollamount, dir, behavior, loops and last from data
                    marqueeRedux[marqueeState.axis] += (marqueeState.scrollamount * marqueeState.dir);

                    // only true if it"s hit the end
                    hitedge = marqueeState.dir == -1 ? marqueeRedux[marqueeState.axis] <= getReset(marqueeState.dir * -1, marqueeRedux, marqueeState) : marqueeRedux[marqueeState.axis] >= getReset(marqueeState.dir * -1, marqueeRedux, marqueeState);
                    
                    if ((marqueeState.behavior == "scroll" && marqueeState.last == marqueeRedux[marqueeState.axis]) || (marqueeState.behavior == "alternate" && hitedge && marqueeState.last != -1) || (marqueeState.behavior == "slide" && hitedge && marqueeState.last != -1)) {                        
                        if (marqueeState.behavior == "alternate") {
                            marqueeState.dir *= -1; // flip
                        }
                        marqueeState.last = -1;

                        $marqueeRedux.trigger("stop");

                        marqueeState.loops--;
                        if (marqueeState.loops === 0) {
                            if (marqueeState.behavior != "slide") {
                                marqueeRedux[marqueeState.axis] = getReset(marqueeState.dir, marqueeRedux, marqueeState);
                            } else {
                                // corrects the position
                                marqueeRedux[marqueeState.axis] = getReset(marqueeState.dir * -1, marqueeRedux, marqueeState);
                            }

                            $marqueeRedux.trigger("end");
                        } else {
                            // keep this marquee going
                            newMarqueeList.push(marqueeRedux);
                            $marqueeRedux.trigger("start");
                            marqueeRedux[marqueeState.axis] = getReset(marqueeState.dir, marqueeRedux, marqueeState);
                        }
                    } else {
                        newMarqueeList.push(marqueeRedux);
                    }
                    marqueeState.last = marqueeRedux[marqueeState.axis];

                    // store updated state only if we ran an animation
                    $marqueeRedux.data("marqueeState", marqueeState);
                } else {
                    // even though it"s paused, keep it in the list
                    newMarqueeList.push(marqueeRedux);                    
                }
            }

            newMarquee = newMarqueeList;
            
            if (newMarquee.length) {
                setTimeout(animateMarquee, 25);
            }            
        }
        
        // TODO consider whether using .html() in the wrapping process could lead to loosing predefined events...
        this.each(function (i) {
            var $marquee = $(this),
                width = $marquee.attr("width") || $marquee.width(),
                height = $marquee.attr("height") || $marquee.height(),
                $marqueeRedux = $marquee.after("<div " + (klass ? "class=\"" + klass + "\" " : "") + "style=\"display: block-inline; width: " + width + "px; height: " + height + "px; overflow: hidden;\"><div style=\"float: left; white-space: nowrap;\">" + $marquee.html() + "</div></div>").next(),
                marqueeRedux = $marqueeRedux.get(0),
                hitedge = 0,
                direction = ($marquee.attr("direction") || "left").toLowerCase(),
                marqueeState = {
                    dir : /down|right/.test(direction) ? -1 : 1,
                    axis : /left|right/.test(direction) ? "scrollLeft" : "scrollTop",
                    widthAxis : /left|right/.test(direction) ? "scrollWidth" : "scrollHeight",
                    last : -1,
                    loops : $marquee.attr("loop") || -1,
                    scrollamount : $marquee.attr("scrollamount") || this.scrollAmount || 2,
                    behavior : ($marquee.attr("behavior") || "scroll").toLowerCase(),
                    width : /left|right/.test(direction) ? width : height
                };
            
            // corrects a bug in Firefox - the default loops for slide is -1
            if ($marquee.attr("loop") == -1 && marqueeState.behavior == "slide") {
                marqueeState.loops = 1;
            }

            $marquee.remove();
            
            // add padding
            if (/left|right/.test(direction)) {
                $marqueeRedux.find("> div").css("padding", "0 "+ width +"px");
            } else {
                $marqueeRedux.find("> div").css("padding", height +"px 0");
            }
            
            // events
            $marqueeRedux.bind("stop", function () {
                $marqueeRedux.data("paused", true);
            }).bind("pause", function () {
                $marqueeRedux.data("paused", true);
            }).bind("start", function () {
                $marqueeRedux.data("paused", false);
            }).bind("unpause", function () {
                $marqueeRedux.data("paused", false);
            }).data("marqueeState", marqueeState); // finally: store the state
            
            // todo - rerender event allowing us to do an ajax hit and redraw the marquee

            newMarquee.push(marqueeRedux);

            marqueeRedux[marqueeState.axis] = getReset(marqueeState.dir, marqueeRedux, marqueeState);
            $marqueeRedux.trigger("start");
            
            // on the very last marquee, trigger the animation
            if (i+1 == last) {
                animateMarquee();
            }
        });            

        return $(newMarquee);
    };
}(jQuery));
//=== END http://remysharp.com/tag/marquee
