/*Timezone Chooser*/
function queryString(ji) {hu = window.location.search.substring(1);gy = hu.split("&");for (i=0;i<gy.length;i++) {ft = gy[i].split("=");if (ft[0] == ji) {return ft[1];}}}
function createCookie(name,value,days){if(days){var date = new Date();date.setTime(date.getTime()+(days*24*60*60*1000));var expires = "; expires="+date.toGMTString();}else var expires = "";document.cookie = name+"="+value+expires+"; path=/";}
function readCookie(name) {var nameEQ = name + "=";var ca = document.cookie.split(';');for(var i=0;i < ca.length;i++){var c = ca[i];while (c.charAt(0)==' ') c = c.substring(1,c.length);if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);}return null;}
function eraseCookie(name){createCookie(name,"",-1);}



function select_timezone(custom_timezone){createCookie('custom_timezone',custom_timezone,7);}

/*jQuery cache*/
function c$(selector){if(c$.cache[selector]===undefined){c$.cache[selector] = $(selector);}return c$.cache[selector];}
c$.cache = {};

function is_ipad(){return /iPad;.U/.test(navigator.userAgent);}

	
jQuery.fn.cfind = function(selector) {
	if(c$.cache[this.selector+' '+selector]===undefined){c$.cache[this.selector+' '+selector] = jQuery(this.selector).find(selector);}return c$.cache[this.selector+' '+selector];
};

jQuery.fn.clickoutside = function(callback) {
	var outside = 1, self = $(this);
	self.cb = callback;
	this.click(function() {
		outside = 0;
	});	
	$(document).click(function() { 
		outside && self.cb();
		outside = 1;
	});
	return $(this);
}

$.fn.newSelect = function(o){
	o = $.extend({
		'grouping': false,
		'classes':'',
		'styles':'',
		'type':'input'
	}, o);
	$(this).hide();
	
	var select_box_wrapper = $('<span>').insertAfter(this);
	if(o.type==='input'){
		var select_box = $('<input type="text">').addClass('select_box ' + o.classes).attr({'style':o.styles,'readonly':'readonly'}).appendTo(select_box_wrapper);
	}else{
		var select_box = $('<div>').addClass('select_box ' + o.classes).attr({'style':o.styles}).appendTo(select_box_wrapper);
	}
	var select_box_popdown = $('<div>').addClass('select_box_popdown').css({'position':'absolute','display':'none'}).insertAfter(select_box);
	var select_box_options = $('<ul>').addClass('select_box_options').attr('style','overflow-x:hidden').css({'max-height':'300px', 'overflow':'auto'}).appendTo(select_box_popdown);
	var origin = $(this);
	
	var g1 = g2 = grp_html = '';
	
	$(this).find('option').each(function(){
		if($(this).is(':selected')){
			if(o.type==='input'){
				select_box.val($(this).html());
			}else{
				select_box.html($(this).html()).attr('cid', $(this).attr('cid'));
			}
		}
		
		var val = $(this).html();
		
		if(o.grouping){
			if(g1===''){
				grp_html = '<a href="javascript:void(0);" class="grp_button active">ALL</a>'
			}
			g1 = val.substring(0, o.grouping).toUpperCase();
			if(g1 !== g2){
				$('<li>').addClass('select_group group_' + g1).html(g1).appendTo(select_box_options);
				grp_html += '<a href="javascript:void(0);" class="grp_button" title="'+g1+'">'+g1+'</a>';
			}
			
			g2 = g1;
		}
		
		var tmp = $('<li>').addClass('select_option group_' + g1).data('val', $(this).attr('value')).html($(this).html()).appendTo(select_box_options);
		if($(this).attr('cid')){
			tmp.attr('cid', $(this).attr('cid')).addClass('flagme country');
		}
		
	});
	
	if(o.grouping){
		$('<div>').addClass('select_grouping').html(grp_html + '<div class="clear">&nbsp;</div>').prependTo(select_box_popdown);
	}
	
	select_box_popdown.css({'width':'auto', 'minWidth': select_box.outerWidth() - 2});
	
	if( select_box_popdown.width() > parseInt(select_box_popdown.css('minWidth')) ){
		select_box_popdown.css('width', select_box_popdown.width() + 15);
	}else{
		
	}
	
	select_box.bind(((is_ipad())?'touchend':'click'), function(){
		if(select_box_popdown.is(':visible')){select_box_popdown.stop(true,true).slideUp('fast'); return true;}
		/*select_box_options.find('.select_option, .select_group').show();*/
		
		/*$('.select_box_popdown:visible').hide();*/
		
		select_box_options.scrollTop(0);
		
		select_box_popdown.css({
			'left': select_box.position().left,
			'top': select_box.position().top + select_box.outerHeight() + 2
		}).stop(true,true).slideDown('fast');
		return false;
	});
	
	select_box_options.delegate('li.select_option',((is_ipad())?'touchend':'click'),function(){
		origin.val($(this).data('val'));
		if(o.type==='input'){select_box.val($(this).html());}else{select_box.html($(this).html());}
		select_box_popdown.slideUp('fast');
		origin.trigger('change');
		return false;
	});
	
	select_box_popdown.delegate('a.grp_button',((is_ipad())?'touchend':'click'),function(){
		$(this).parent().find('a').removeClass('active');
		var grp = $(this).addClass('active').attr('title');
		if(grp){
			select_box_options.find('.select_option, .select_group').hide().end().find('.group_' + grp).show();
		}else{
			select_box_options.find('.select_option, .select_group').show();
		}
		select_box_options.scrollTop(0);
		return false;
	});
	
	select_box_wrapper.clickoutside(function(){
		if(select_box_popdown.is(':visible')){
			select_box_popdown.slideUp('fast');
		}
	});
}

$.doWidgetTabs = function(tabs, name){
	var tabs_html = $('<div>').addClass('widget_tabs_container').html('<div class="widget_tabs"></div>');
	var tabs_content = $('<div>').addClass('widget_tabs_content_container');
	
	var tab_done = false;
	$.each(tabs, function(index,value){
		if($('#' + value).length){
			var tab_title = $('#' + value).hide().find('.handle').hide().text();
			if(!tab_done){
				tab_done = tabs_html.clone();
				tabs_content_done = tabs_content.clone();
				if(name){
					$('<div>').addClass('set_name').html(name).insertBefore('#'+value);
				}
				$('#' + value).before(tab_done);
				tabs_content_done.insertAfter(tab_done);
			}
			$('#' + value).appendTo(tabs_content_done);
			
			$('<div class="widget_tabs_tab"><div><div>' + tab_title + '</div></div></div>').data('content', value).appendTo(tab_done.find('div.widget_tabs'))
			.bind(((is_ipad())?'touchend':'click'), function(){
				var me = $(this).data().content;
				var prev = $(this).parent().find('.widget_tabs_tab.active');
				if(prev.length){
					if(prev.data().content == me){return false;}
					prev.removeClass('active');
					$('#' + prev.data().content).hide();
				}
				$('#' + $(this).addClass('active').data().content).show();
				return false;
			});
		}
	});
	if(tab_done){
		$('<div class="clear">&nbsp;</div>').appendTo(tab_done.find('div.widget_tabs'));
		tab_done.find('.widget_tabs_tab:first').trigger(((is_ipad())?'touchend':'click'));
	}	
}

$.fn.doFlags = function(){
	$(this).find('.flagme.country').each(function(){
		if( $(this).css('textAlign') === 'right' ){
			$(this).html($(this).html() + '&nbsp;<img class="blank flag_small_all f' + $(this).attr('cid') + '" alt="" />').removeClass('flagme').find('img').doBlank();
		}else{
			$(this).html('<img class="blank flag_small_all f' + $(this).attr('cid') + '" alt="" />&nbsp;' + $(this).html()).removeClass('flagme').find('img').doBlank();
		}
	});
	return this;
}

var supportTest = {'imgdata': true}
if($.browser.msie && parseFloat($.browser.version) < 8){supportTest.imgdata = false;}

$.fn.doBlank = function(){
	$(this).attr('src', ((supportTest)?'data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==':'/img/default/blank.png')).removeClass('blank');
	return this;
}

$.fn.doBlanks = function(){
	$(this).find('img.blank').each(function(){
		$(this).attr('src', ((supportTest)?'data:image/gif;base64,R0lGODlhAQABAID/AMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==':'/img/default/blank.png')).removeClass('blank');
	});
	return this;
}

$.fn.collapsable = function(){
	return $(this).each(function(){
		var handle = $(this).find('.handle');
		var content = $(this).find('.content');
		
		var h = handle.css({'position':'relative', 'cursor':'pointer'}).outerHeight();
		handle.append($('<img src="/img/default/blank.png">').addClass('blank sprite15 arrow_down collapse_arrow').css({'position':'absolute', 'right':h/2-(15/2), 'top': h/2-(15/2)}))
		.addClass('handle_active')
		.css('paddingRight', 20 + (h/2-(15/2)));
		
	});
}


$(function(){
	$(document.body).delegate('.handle_active', 'click', function(){
		var content = $(this).parent().find('.content');
		if( content.is(':visible') ){
			$(this).addClass('collapsed');
			if(is_ipad()){content.hide();}else{content.slideUp('fast');}
			
			$(this).find('img.collapse_arrow').removeClass('arrow_down').addClass('arrow_right');
		}else{
			$(this).removeClass('collapsed');
			if(is_ipad()){content.show();}else{content.slideDown('fast');}
			$(this).find('img.collapse_arrow').removeClass('arrow_right').addClass('arrow_down');
		}
		return false;
	});
});


jQuery.fn.of_wrap = function(){};

/*
jQuery.fn.of_wrap = function(){
	$(this.find('.of_wrapper')).css('width','10px').each(function(){
		$(this).css('width', $(this).parent().width());
	});
	
	$(this)
	.delegate('.of_wrapper', 'mouseover', function(){
		var scrollMax = $(this).get(0).scrollWidth;
		if(scrollMax <= $(this).width()){return true;}
		var obj = this;
		var duration = scrollMax*20;
		$(obj).stop(true,true).animate({'scrollLeft': scrollMax}, duration, 'linear');
	})
	.delegate('.of_wrapper', 'mouseout', function(){
		$(this).stop(true,true).scrollLeft(0);
	});
}
*/

/*doTimeout*/
(function($){
  var cache = {},
    
    doTimeout = 'doTimeout',
    
    aps = Array.prototype.slice;
  
  $[doTimeout] = function() {
    return p_doTimeout.apply( window, [ 0 ].concat( aps.call( arguments ) ) );
  };
  
  $.fn[doTimeout] = function() {
    var args = aps.call( arguments ),
      result = p_doTimeout.apply( this, [ doTimeout + args[0] ].concat( args ) );
    
    return typeof args[0] === 'number' || typeof args[1] === 'number'
      ? this
      : result;
  };
  
  function p_doTimeout( jquery_data_key ) {
    var that = this,
      elem,
      data = {},
      
      args = arguments,
      slice_args = 4,
      
      id        = args[1],
      delay     = args[2],
      callback  = args[3];
    
    if ( typeof id !== 'string' ) {
      slice_args--;
      
      id        = jquery_data_key = 0;
      delay     = args[1];
      callback  = args[2];
    }
    
    if ( jquery_data_key ) {
      
      elem = that.eq(0);
      elem.data( jquery_data_key, data = elem.data( jquery_data_key ) || {} );
      
    } else if ( id ) {
      data = cache[ id ] || ( cache[ id ] = {} );
    }
    
    data.id && clearTimeout( data.id );
    delete data.id;
    
    function cleanup() {
      if ( jquery_data_key ) {
        elem.removeData( jquery_data_key );
      } else if ( id ) {
        delete cache[ id ];
      }
    };
    
    function actually_setTimeout() {
      data.id = setTimeout( function(){ data.fn(); }, delay );
    };
    
    if ( callback ) {
      data.fn = function( no_polling_loop ) {
        callback.apply( that, aps.call( args, slice_args ) ) && !no_polling_loop
          
          ? actually_setTimeout()
          
          : cleanup();
      };
      
      actually_setTimeout();
      
    } else if ( data.fn ) {
      delay === undefined ? cleanup() : data.fn( delay === false );
      return true;
      
    } else {
      cleanup();
    }
    
  };
  
})(jQuery);


/*PHPDate*/
(function($) {
  var aDays = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];
  var aMonths = ["January","February","March","April","May","June","July","August","September","October","November","December"];

  // main function
  $.PHPDate = function(sString, dtDate) {
    var sElement = "";
    var sOutput = "";

    // we can cheat with "r"...
    sString = sString.replace(/r/g, "D, j M Y H;i:s O");

    // loop through string
    for (var i = 0; i < sString.length; i++) {
      sElement = sString.charAt(i);
      switch (sElement) {
        case "a": sElement = AMPM(dtDate.getHours()); break;
        case "c":
          sElement = (dtDate.getFullYear() + "-" +
                      AddLeadingZero(dtDate.getMonth()) + "-" +
                      AddLeadingZero(dtDate.getDate()) + "T" +
                      AddLeadingZero(dtDate.getHours()) + ":" +
                      AddLeadingZero(dtDate.getMinutes()) + ":" +
                      AddLeadingZero(dtDate.getSeconds()));
          var sTemp = dtDate.toString().split(" ")[5];
          if (sTemp.indexOf("-") > -1) {
            sElement += sTemp.substr(sTemp.indexOf("-"));
          } else if (sTemp.indexOf("+") > -1) {
            sElement += sTemp.substr(sTemp.indexOf("+"));
          } else {
            sElement += "+0000";
          }
          break;
        case "d": sElement = AddLeadingZero(dtDate.getDate()); break;
        case "g": sElement = TwelveHourClock(dtDate.getHours()); break;
        case "h": sElement = AddLeadingZero(TwelveHourClock(dtDate.getHours())); break;
        case "i": sElement = AddLeadingZero(dtDate.getMinutes()); break;
        case "j": sElement = dtDate.getDate(); break;
        case "l": sElement = aDays[dtDate.getDay()]; break;
        case "m": sElement = AddLeadingZero(dtDate.getMonth() + 1); break;
        case "n": sElement = dtDate.getMonth() + 1; break;
        case "o": (new Date(FirstMonday(dtDate.getFullYear())) > dtDate) ? sElement = (dtDate.getFullYear() - 1) : sElement = dtDate.getFullYear(); break;
        case "s": sElement = AddLeadingZero(dtDate.getSeconds()); break;
        case "t":
          var dtTemp = new Date(dtDate.valueOf());
          dtTemp.setMonth(dtTemp.getMonth() + 1)
          dtTemp.setDate(0);
          sElement = dtTemp.getDate();
          break;
        case "u": sElement = dtDate.getMilliseconds(); break;
        case "w": sElement = dtDate.getDay(); break;
        case "y": sElement = dtDate.getFullYear().toString().substr(2, 2); break;
        case "z":
          var dtFirst = new Date(dtDate.getFullYear(), 0, 1, 0, 0, 0, 0);
          var dtLast = new Date(dtDate.getFullYear(), dtDate.getMonth(), dtDate.getDate(), 0, 0, 0, 0);
          sElement = Math.round((dtLast.valueOf() - dtFirst.valueOf()) / 1000 / 60 / 60/ 24);
          break;
        case "A": sElement = AMPM(dtDate.getHours()).toUpperCase(); break;
        case "B":
          sElement = Math.floor(((dtDate.getHours() * 60 * 60 * 1000) +
          (dtDate.getMinutes() * 60 * 1000) +
          (dtDate.getSeconds() * 1000) +
          (dtDate.getMilliseconds())) / 86400);
          break;
        case "D": sElement = aDays[dtDate.getDay()].substr(0, 3); break;
        case "F": sElement = aMonths[dtDate.getMonth()]; break;
        case "G": sElement = dtDate.getHours(); break;
        case "H": sElement = AddLeadingZero(dtDate.getHours()); break;
        case "I":
          var dtTempFirst = new Date(dtDate.getFullYear(), 0, 1);
          var dtTempLast = new Date(dtDate.getFullYear(), dtDate.getMonth(), dtDate.getDate());
          var iDaysDiff = (dtTempLast.valueOf() - dtTempFirst.valueOf()) / 1000 / 60 / 60 / 24;
          (iDaysDiff == Math.round(iDaysDiff)) ? sElement = 0 : sElement = 1;
          break;
        case "L": ((new Date(dtDate.getFullYear(), 2, 0)).getDate() == 29) ? sElement = 1 : sElement = 0; break;
        case "M": sElement = aMonths[dtDate.getMonth()].substr(0, 3); break;
        case "N": (dtDate.getDay() == 0) ? sElement = 7 : sElement = dtDate.getDay(); break;
        case "O":
          var sTemp = dtDate.toString().split(" ")[5];
          if (sTemp.indexOf("-") > -1) {
            sElement = sTemp.substr(sTemp.indexOf("-"));
          } else if (sTemp.indexOf("+") > -1) {
            sElement = sTemp.substr(sTemp.indexOf("+"));
          } else {
            sElement = "+0000";
          }
          break;
        case "P":
          var sTemp = dtDate.toString().split(" ")[5];
          if (sTemp.indexOf("-") > -1) {
            var aTemp = sTemp.substr(sTemp.indexOf("-") + 1).split("");
            sElement = ("-" + aTemp[0] + aTemp[1] + ":" + aTemp[2] + aTemp[3]);
          } else if (sTemp.indexOf("+") > -1) {
            var aTemp = sTemp.substr(sTemp.indexOf("+") + 1).split("");
            sElement = ("+" + aTemp[0] + aTemp[1] + ":" + aTemp[2] + aTemp[3]);
          } else {
            sElement = "+00:00";
          }
          break;
        case "S": sElement = DateSuffix(dtDate.getDate()); break;
        case "T":
          sElement = dtDate.toString().split(" ")[5];
          if (sElement.indexOf("+") > -1) {
            sElement = sElement.substr(0, sElement.indexOf("+"));
          } else if (sElement.indexOf("-") > -1) {
            sElement = sElement.substr(0, sElement.indexOf("-"));
          }
          break;
        case "U": sElement = Math.floor(dtDate.getTime() / 1000); break;
        case "W":
          var dtTempFirst = new Date(FirstMonday(dtDate.getFullYear()));
          var dtTempLast = new Date(dtDate.getFullYear(), dtDate.getMonth(), dtDate.getDate());
          sElement = Math.ceil(Math.round((dtTempLast.valueOf() - dtTempFirst.valueOf()) / 1000 / 60 / 60/ 24) / 7);
          break;
        case "Y": sElement = dtDate.getFullYear(); break;
        case "Z":
          (dtDate.getTimezoneOffset() < 0) ? sElement = Math.abs(dtDate.getTimezoneOffset() * 60) : sElement = (0 - (dtDate.getTimezoneOffset() * 60));
          break;
      }
      sOutput += sElement.toString();
      }
    return sOutput;
  }

  // add leading zero
  function AddLeadingZero(iValue) {
    if (iValue < 10) {
      iValue = ("0" + iValue);
    }
    return iValue;
  }

  // Ante meridiem and Post meridiem
  function AMPM(iHours) {
    if (iHours > 11) {
      return "pm";
    } else {
      return "am";
    }
  }

  // date suffix
  function DateSuffix(iDay) {
    var sSuffix = "th";
    switch (parseInt(iDay)) {
      case 1:
      case 21:
      case 31:
        sSuffix = "st";
        break;
      case 2:
      case 22:
        sSuffix = "nd";
        break;
      case 3:
      case 23:
        sSuffix = "rd";
    }
    return sSuffix;
  }

  // find the first Monday in a given year (for ISO 8601 dates)
  function FirstMonday(iYear) {
    var dtTemp = new Date(iYear, 0, 1);
    while (dtTemp.getDay() != 1) {
      dtTemp.setDate(dtTemp.getDate() + 1);
    }
    return dtTemp.valueOf();
  }

  // 12-Hour clock
  function TwelveHourClock(iHours) {
    if (iHours == 0) {
      iHours = 24;
    } else if (iHours > 12) {
      iHours -= 12;
    }
    return iHours;
  }
})(jQuery);
