// JavaScript Document
//Lemirage.se
//Ajax library
//Author: Alessandro Coletti
//Date: 30/11/2007
/*
Det har filen innehåller alla funktioner till lemirage.se
Den behöver prototype för att kunna fungera prototype.js
*/
var LoaderString = '<div align="center"><img src="/Images/loaders/5-0.gif" width="32" height="32" /></div>'

//Den här formaterar en integer så att man slipper ha så många nollor
//Du behöver inte röra det här
function format_number(pnumber,decimals) 
{  
  if (isNaN(pnumber)) { return 0};  
  if (pnumber=='') { return 0};  
   
  var IsNegative=(parseInt(pnumber)<0); 
  if(IsNegative)pnumber=-pnumber; 

  var snum = new String(pnumber);  
  var sec = snum.split('.');  
  var whole = parseInt(sec[0]);  
  var result = '';  
  if(sec.length > 1){  
    var dec = new String(sec[1]);  
    dec = parseInt(dec)/Math.pow(10,parseInt(dec.length-decimals-1)); 
Math.round(dec); 
dec = parseInt(dec)/10; 

if(IsNegative) 
{ 
  var x = 0-dec; 
      x = Math.round(x); 
  dec = - x; 
} 
else 
{ 
      dec = Math.round(dec); 
} 


if(dec==Math.pow(10, parseInt(decimals)))
{ 
  whole+=1; 
  dec="0"; 
} 

    dec = String(whole) + "." + String(dec);  
    var dot = dec.indexOf('.');  
    if(dot == -1){  
      dec += '.';  
      dot = dec.indexOf('.');  
    } 
var l=parseInt(dot)+parseInt(decimals); 
    while(dec.length <= l) { dec += '0'; }  
    result = dec;  
  } else{  
    var dot;  
    var dec = new String(whole);  
    dec += '.';  
    dot = dec.indexOf('.');  
var l=parseInt(dot)+parseInt(decimals); 
    while(dec.length <= l) { dec += '0'; }  
    result = dec;  
  }  
  if(IsNegative)result="-"+result; 
  return result;  
}  
//************************************************

//eftersom sidan är dels baserad på AJAX måste man ha en del kod för att det ska kunna fungera som en vanlig sida, allstå för att de Bakåt, framåt och favoriter ska kunna fungera utan att avändaren märker nånting.

//Det har funktionen sparar hashen alltså "#" på adressfälten och man kallar det efter varje funktion.
function setHash(aa) {
	hashListener.setHash(aa);
}


//Det har tre funktionerna beror alla på prototype.js och är bara efekter.
function SlideDownElement(Element){
	new Effect.SlideDown(Element, { duration: 1 });
}
function FadeElement(Element){
	new Effect.Fade(Element, { duration: 1 });
}
function ShowElement(Element){
	$(Element).show();
}
//******************************************
function getPage(url){
	$("main_content").innerHTML = LoaderString;
	var myRequest = new Ajax.Request(url, {
		onSuccess: function(transport) {
			$("main_content").innerHTML = transport.responseText;
			initLightbox();
			makeHistory('getPage("'+url+'")')
		},
		onFailure: function(falla){
			alert(falla.responseText);
		}
	})

}



function toCat(CatID){//Laddar produkter som ligge under en kategori (bestämt av CatID) och visar det på main_content
	$("main_content").innerHTML = LoaderString;
	var myRequest = new Ajax.Request('/e-shop/Includes/products.asp?CatID='+CatID, {
		onSuccess: function(transport) {
			$("main_content").innerHTML = transport.responseText;
//			hashListener.setHash("toCat(" + CatID + ")");
			makeHistory('toCat(' + CatID + ')')
			dhtmlHistory.add("toCat", 78)
		},
		onFailure: function(falla){
			$("main_content").innerHTML = falla.responseText;
			//alert(falla.responseText);
		}
	})
}

	
function toProduct(ID){//Laddar produktbeskrivningen och visar det på main_content
	$("main_content").innerHTML = LoaderString;
	url = "/Actions/Actions.asp?a=10&ProductID=" + ID
	var myRequest = new Ajax.Request(url, {
		onSuccess: function(transport) {
			$("main_content").innerHTML = transport.responseText;
			initLightbox();
			makeHistory('toProduct('+ID+')');
			transport.responseText.evalScripts();
		},
		onFailure: function(falla){
			alert(falla.responseText);
		}
	})

}
	
function addToBag(){//Lägger till en produkt till varukorgen, kolla gärna på addTobag.asp
	var myRequest = new Ajax.Request('/Actions/Actions.asp?a=1', {
		onSuccess: function(transport) {
			transport.responseText.evalScripts();
			updateMiniBag();
		},
		onFailure: function(falla){
			alert(falla.responseText)
		},
	parameters: $('Produktfrm').serialize(true)
	})	
}
	
function updateMiniBag(){//Laddar en minimal version av varukorgen och visar det på högersidan
	var myRequest = new Ajax.Request('/Actions/Actions.asp?a=2', {
		onSuccess: function(transport) {
			$("minibag").innerHTML = transport.responseText;
		},
		onFailure: function(falla){
			alert(falla.responseText)
		}
	})	
}
	
function loadBag(){//Laddar varukorgen och visar det på main_content
	$("main_content").innerHTML = LoaderString;
	var myRequest = new Ajax.Request('/Actions/Actions.asp?a=3', {
		onSuccess: function(transport) {
			$("main_content").innerHTML = transport.responseText;
			stripe();
			makeHistory('loadBag()');
		},
		onFailure: function(falla){
			$("main_content").innerHTML = falla.responseText;
			//alert(falla.responseText)
		}
	})
}
	
function updateBag(nItem,nPrice){//Uppdaterar antal
	var rech=new RegExp(/[^0-9]/g);
	$(nItem+"antal").value=$(nItem+"antal").value.replace(rech,'1');
	nQty = $F(nItem+"antal");
	var myRequest = new Ajax.Request('/Actions/Actions.asp?a=4&AN='+nQty+'&nItem='+nItem+'&nPrice='+nPrice, {
		onSuccess: function(transport) {
			$(nItem+"summa").innerHTML = transport.responseText + ":-";
			subTotal();
		},
		onFailure: function(falla){
			alert(falla.responseText)
		}
	})	
}

function updateBag_(nItem){//uppdaterar model
	var rech=new RegExp(/[^0-9]/g);
	$(nItem+"antal").value=$(nItem+"antal").value.replace(rech,'1');
	nQty = $F(nItem+"antal");
	var list = $F(nItem+"model").selectedList;
	var model = $(nItem+"model").options[$(nItem+"model").selectedIndex].value;
	var FirstB = model.search(/{/);
	var SecondB = model.search(/}/);
	var LenBx = SecondB - FirstB;
	var nPrice = model.substr(FirstB+1,LenBx-1);

	var myRequest = new Ajax.Request('/Actions/Actions.asp?a=4&AN='+nQty+'&nItem='+nItem+'&nPrice='+nPrice, {
		onSuccess: function(transport) {
			$(nItem+"summa").innerHTML = transport.responseText + ":-";
			subTotal();
		},
		onFailure: function(falla){
			alert(falla.responseText)
		}
	})	
}
	
function updatePrice(Descuento){//updaterar pris
	if(!Descuento){Descuento = 0}
	var list = $F("Modelo").selectedList;
	var model = $("Modelo").options[$("Modelo").selectedIndex].value;
	var FirstB = model.search(/{/);
	var SecondB = model.search(/}/);
	var LenBx = SecondB - FirstB;
	var nPrice = model.substr(FirstB+1,LenBx-1);
	
	if(!Descuento){
	$("Precio").innerHTML = nPrice;
		}else{
			$("Precio").innerHTML = nPrice;
			$("Descuento").innerHTML = nPrice - Descuento;
			}
	
	}	
	
function setStorlek(nItem){//uppdaterar storlek
var list = $F(nItem+"storlek").selectedList;
var nStorlek = $(nItem+"storlek").options[$(nItem+"storlek").selectedIndex].value;
var myRequest = new Ajax.Request('/Actions/Actions.asp?a=41&AN='+nStorlek+'&nItem='+nItem, {
onSuccess: function(transport) {
},
onFailure: function(falla){
alert(falla.responseText)
}
})	

}	
	
function setModel(nItem){//updaterar model
	var list = $F(nItem+"model").selectedList;
	var nModel = $(nItem+"model").options[$(nItem+"model").selectedIndex].value;
	var myRequest = new Ajax.Request('/Actions/Actions.asp?a=42&AN='+nModel+'&nItem='+nItem, {
	onSuccess: function(transport) {
		transport.responseText.evalScripts();
	},
	onFailure: function(falla){
		alert(falla.responseText)
	}
	})	
}
	
function subTotal(){//
	var myRequest = new Ajax.Request('/Actions/Actions.asp?a=5', {
		onSuccess: function(transport) {
			$("Totalt").innerHTML = transport.responseText+":-";
			updateMiniBag();
	},
		onFailure: function(falla){
			alert(falla.responseText)
	}
	})
}	
	
function delItem(nItem){//Tar bort en produkt från listan
	var myRequest = new Ajax.Request('/Actions/Actions.asp?a=7&nItem='+nItem, {
		onSuccess: function(transport) {
			FadeElement("tr"+nItem);
			updateMiniBag();
			subTotal();
			striper('tbody','striped','tr','odd,even');
		
		},
		onFailure: function(falla){
			alert(falla.responseText)
		}
	})
}	
	
function loadKassa(){//Laddar kassa och vissar den på main_content
	$("main_content").innerHTML = LoaderString;
	var myRequest = new Ajax.Request('/Actions/Actions.asp?a=8', {
		onSuccess: function(transport) {
			$("main_content").innerHTML = transport.responseText;
			transport.responseText.evalScripts();
			makeHistory('loadKassa()')
		},
		onFailure: function(falla){
			alert(falla.responseText)
		}
	})
}
	
function loadFirst(){//Laddar första sidan och visar den på main_content
	if(window.location.hash == ''){
		var myRequest = new Ajax.Request('/Actions/Actions.asp?a=11', {
			onSuccess: function(transport) {
				$("main_content").innerHTML = transport.responseText;
			},
			onFailure: function(falla){
				alert(falla.responseText)
			}
		})
	}
}

function loadLastProducts(){	
		var myRequest = new Ajax.Request('/Actions/Actions.asp?a=16', {
			onSuccess: function(transport) {
				$("main_content").innerHTML = transport.responseText;
				makeHistory('loadLastProducts()')
			},
			onFailure: function(falla){
				alert(falla.responseText)
			}
		})
}

function toFirst(){//Går till förstasidan
		var myRequest = new Ajax.Request('/Actions/Actions.asp?a=11', {
			onSuccess: function(transport) {
				$("main_content").innerHTML = transport.responseText;
				makeHistory('toFirst()')
			},
			onFailure: function(falla){
				alert(falla.responseText)
			}
		})
}

function doBuy(){//Skickar all information till server och gör "köpen"
	var myRequest = new Ajax.Request('/Actions/Actions.asp?a=9', {
		onSuccess: function(transport) {
			$("main_content").innerHTML = transport.responseText;
			updateMiniBag()
		},
			onFailure: function(falla){
			alert(falla.responseText)
		},
	parameters: $('frmBuy').serialize(true)
	})

}
	
	
//Du behöver inte röra det här, de här funktionerna tar handom AJAX-history
var expectedHash = "";

function makeHistory(newHash)
{
  document.location.hash = newHash;
  expectedHash = document.location.hash;
  return true;
}

function handleHistory()
{
  if ( document.location.hash != expectedHash )
  {
    expectedHash = document.location.hash;
    var newoption = expectedHash.substring(1);
    eval(newoption);
  }
  return true;
}

function pollHash() {
  handleHistory();
  window.setInterval("handleHistory()", 1000);
  return true;
}
//*********
//Den här funktionen visar en fönstret för att man ska kunna rekomendera en produkt till en vän, IDX är id till produkten
function showTip(idx){
	hideSelectBoxes();
	hideFlash();
	$("Tip_ID").value = idx;
	var arrayPageSizex = getPageSize();
	Element.setWidth('capaobscura', arrayPageSizex[0]);
	Element.setHeight('capaobscura', arrayPageSizex[1]);

	new Effect.Appear('capaobscura', { duration: overlayDuration, from: 0.0, to: 0.8 });
	new Effect.Appear('tipAfriend', { duration: overlayDuration, from: 0.0, to: 100 });
}

function hideTip(){//Du antar vad den här funktionen gör ;)
	Element.hide('tipAfriend');
	new Effect.Fade('capaobscura', { duration: overlayDuration});
	showSelectBoxes();
	showFlash();
	$("frmTip").reset();
}
	
function loadContact(){//Laddar kontaktsidan och visar det på main_content
	$("main_content").innerHTML = LoaderString;
	var myRequest = new Ajax.Request('/Actions/Actions.asp?a=12', {
		onSuccess: function(transport) {
			$("main_content").innerHTML = transport.responseText;
			makeHistory('loadContact()')
		},
		onFailure: function(falla){
			alert(falla.responseText)
		}
	})
}

function loadConditions(){//Samma här fast med köpvillkoren
	$("main_content").innerHTML = LoaderString;
	var myRequest = new Ajax.Request('/Actions/Actions.asp?a=14', {
		onSuccess: function(transport) {
			$("main_content").innerHTML = transport.responseText;
			makeHistory('loadConditions()')
		},
		onFailure: function(falla){
			alert(falla.responseText)
		}
	})
}

function loadPInfo(){//Laddar Produktinfo
	$("main_content").innerHTML = LoaderString;
	var myRequest = new Ajax.Request('/Actions/Actions.asp?a=999', {
		onSuccess: function(transport) {
			$("main_content").innerHTML = transport.responseText;
			makeHistory('loadPInfo()')
		},
		onFailure: function(falla){
			alert(falla.responseText)
		}
	})
}


function loadVPipor(){//Laddar Info om Vattenpipor
	$("main_content").innerHTML = LoaderString;
	var myRequest = new Ajax.Request('/Actions/Actions.asp?a=888', {
		onSuccess: function(transport) {
			$("main_content").innerHTML = transport.responseText;
			makeHistory('loadVPipor()')
		},
		onFailure: function(falla){
			alert(falla.responseText)
		}
	})
}

function showContactForm(){//Visar en fönster med en förmulär för att man ska kunna kontakta Husse
	hideSelectBoxes();
	hideFlash();
	var arrayPageSizex = getPageSize();
	Element.setWidth('capaobscura', arrayPageSizex[0]);
	Element.setHeight('capaobscura', arrayPageSizex[1]);
	new Effect.Appear('capaobscura', { duration: overlayDuration, from: 0.0, to: 0.8 });
	new Effect.Appear('Kontakt', { duration: overlayDuration, from: 0.0, to: 100 });
}
	
function hideContactForm(){//Yup!
	Element.hide('Kontakt');
	new Effect.Fade('capaobscura', { duration: overlayDuration});
	showSelectBoxes();
	showFlash();
	$("frmContact").reset();
}
	
	
function sendMail(){//Skickar mailen!
	var myRequest = new Ajax.Request('/Actions/Actions.asp?a=13', {
		onSuccess: function(transport) {
			hideContactForm();
		},
		onFailure: function(falla){
			alert(falla.responseText)
		},
	parameters: $('frmContact').serialize(true)
	})	
 
 }
 
 
function sendTip(){//Skickar rekomendationen till en vän
	$("loader3").toggle();
	$('e-post1', 'namn', 'e-post2', 'Meddelande').each(function(s){$(s).readonly='readonly'});
	var myRequest = new Ajax.Request('/Actions/Actions.asp?a=15', {
		onSuccess: function(transport) {
			hideTip();
			$('e-post1', 'namn', 'e-post2', 'Meddelande').each(function(s){$(s).readonly=''});
		},
		onFailure: function(falla){
			alert(falla.responseText);
			$('e-post1', 'namn', 'e-post2', 'Meddelande').each(function(s){$(s).readonly=''});
		},
	parameters: $('frmTip').serialize(true)
	})	
 
 }
 
function totalo(bY){
 	if(bY){
		subtotalvalue = $F("subtotal");
		$("avgift").innerHTML='50';
		$("totalsumma").innerHTML=format_number(parseInt(subtotalvalue)+50,2);
	}else{	
		$("avgift").innerHTML='0';
		$("totalsumma").innerHTML=format_number(subtotalvalue,2)
	}
}



//**** De här funktionerna behöver du inte röra heller. Jag har inte programerat dem. Den första är en funktion från Dreamweaver 8 som
//och den andra är fun funktioner för att validera formulärer

	<!--
function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function YY_checkform() { //v4.71
//copyright (c)1998,2002 Yaromat.com
  var a=YY_checkform.arguments,oo=true,v='',s='',err=false,r,o,at,o1,t,i,j,ma,rx,cd,cm,cy,dte,at;
  for (i=1; i<a.length;i=i+4){
    if (a[i+1].charAt(0)=='#'){r=true; a[i+1]=a[i+1].substring(1);}else{r=false}
    o=MM_findObj(a[i].replace(/\[\d+\]/ig,""));
    o1=MM_findObj(a[i+1].replace(/\[\d+\]/ig,""));
    v=o.value;t=a[i+2];
    if (o.type=='text'||o.type=='password'||o.type=='hidden'){
      if (r&&v.length==0){err=true}
      if (v.length>0)
      if (t==1){ //fromto
        ma=a[i+1].split('_');if(isNaN(v)||v<ma[0]/1||v > ma[1]/1){err=true}
      } else if (t==2){
        rx=new RegExp("^[\\w\.=-]+@[\\w\\.-]+\\.[a-zA-Z]{2,4}$");if(!rx.test(v))err=true;
      } else if (t==3){ // date
        ma=a[i+1].split("#");at=v.match(ma[0]);
        if(at){
          cd=(at[ma[1]])?at[ma[1]]:1;cm=at[ma[2]]-1;cy=at[ma[3]];
          dte=new Date(cy,cm,cd);
          if(dte.getFullYear()!=cy||dte.getDate()!=cd||dte.getMonth()!=cm){err=true};
        }else{err=true}
      } else if (t==4){ // time
        ma=a[i+1].split("#");at=v.match(ma[0]);if(!at){err=true}
      } else if (t==5){ // check this 2
            if(o1.length)o1=o1[a[i+1].replace(/(.*\[)|(\].*)/ig,"")];
            if(!o1.checked){err=true}
      } else if (t==6){ // the same
            if(v!=MM_findObj(a[i+1]).value){err=true}
      }
    } else
    if (!o.type&&o.length>0&&o[0].type=='radio'){
          at = a[i].match(/(.*)\[(\d+)\].*/i);
          o2=(o.length>1)?o[at[2]]:o;
      if (t==1&&o2&&o2.checked&&o1&&o1.value.length/1==0){err=true}
      if (t==2){
        oo=false;
        for(j=0;j<o.length;j++){oo=oo||o[j].checked}
        if(!oo){s+='* '+a[i+3]+'\n'}
      }
    } else if (o.type=='checkbox'){
      if((t==1&&o.checked==false)||(t==2&&o.checked&&o1&&o1.value.length/1==0)){err=true}
    } else if (o.type=='select-one'||o.type=='select-multiple'){
      if(t==1&&o.selectedIndex/1==0){err=true}
    }else if (o.type=='textarea'){
      if(v.length<a[i+1]){err=true}
    }
    if (err){s+='* '+a[i+3]+'\n'; err=false}
  }
  if (s!=''){alert('The required information is incomplete or contains errors:\t\t\t\t\t\n\n'+s)}
  document.MM_returnValue = (s=='');
}

// Splintered striper 1.3
// reworking of Zebra Tables and similar methods which works not only for tables and even/odd rows,
// but as a general DOM means of assigning any number of classes to children of a parent element.
// Patrick H. Lauke aka redux / www.splintered.co.uk
// Distributed under the Creative Commons Attribution-ShareAlike license - http://creativecommons.org/licenses/by-sa/2.0/


/*
 * Summary:      Core experiment function that applies any number of classes to all child elements
 *               contained in all occurences of a parent element (either with or without a specific class)
 * Parameters:   parentElementTag - parent tag name
 *               parentElementClass - class assigned to the parent; if null, all parentElementTag elements will be affected
 *               childElementTag -  tag name of the child elements to apply the styles to
 *               styleClasses - comma separated list of any number of style classes (using 2 classes gives the classic "zebra" effect)
 * Return:       none
 */
function striper(parentElementTag, parentElementClass, childElementTag, styleClasses)
{
	var i=0,currentParent,currentChild;
	// capability and sanity check
	if ((document.getElementsByTagName)&&(parentElementTag)&&(childElementTag)&&(styleClasses)) {
		// turn the comma separate list of classes into an array
		var styles = styleClasses.split(',');
		// get an array of all parent tags
		var parentItems = document.getElementsByTagName(parentElementTag);
		// loop through all parent elements
		while (currentParent = parentItems[i++]) {
			// if parentElementClass was null, or if the current parent's class matches the specified class
			if ((parentElementClass == null)||(currentParent.className == parentElementClass)) {
				var j=0,k=0;
				// get all child elements in the current parent element
				var childItems = currentParent.getElementsByTagName(childElementTag);
				// loop through all child elements
				while (currentChild = childItems[j++]) {
					// based on the current element and the number of styles in the array, work out which class to apply
					k = (j+(styles.length-1)) % styles.length;
					// add the class to the child element - if any other classes were already present, they're kept intact
					currentChild.className = currentChild.className+" "+styles[k];
				}
			}
		}
	}
}

